int _uam_db_get_device_services_count(const char *device_id, int tech_type,
const char *address, int *count);
GSList *_uam_db_get_service_devices_info();
+GSList *_uam_db_get_service_devices_payloads_info();
/* delete operations */
int _uam_device_service_db_clear(void);
void __print_payload(const uam_ble_payload_s *payload)
{
ret_if(NULL == payload);
+ int user_data_len = UAM_BLE_PAYLOAD_DEVICE_UID_MAX_LEN - 1 - payload->device_uid_len;
UAM_DBG("Payload primary key: [%d], secondary_key: [%d], device_icon: [%d] " \
"device uid len: [%d]",
payload->primary_key, payload->secondary_key, payload->device_icon,
payload->device_uid_len);
for (int i = 0; i < payload->device_uid_len; i++)
UAM_DBG("Device uid [0x%2.2X]", payload->device_uid[i]);
+ for (int i = 0; i < user_data_len; i++)
+ UAM_DBG("User data [0x%2.2X]", payload->user_data[i]);
}
void __print_db_payload(const uam_db_payload_info_t *payload)
{
ret_if(NULL == payload);
+ int user_data_len = UAM_BLE_PAYLOAD_DEVICE_UID_MAX_LEN - 1 - payload->device_uid_len;
UAM_DBG("Payload primary key: [%d], secondary_key: [%d], device_icon: [%d] " \
"device uid len: [%d]",
payload->primary_key, payload->secondary_key, payload->device_icon,
payload->device_uid_len);
for (int i = 0; i < payload->device_uid_len; i++)
UAM_DBG("Device uid [0x%2.2X]", payload->device_uid[i]);
+ for (int i = 0; i < user_data_len; i++)
+ UAM_DBG("User data [0x%2.2X]", payload->user_data[i]);
}
static gint __compare_payload(gconstpointer data, gconstpointer user_data)
}
/* Fetch svc dev list */
+
db_svc_dev_list = _uam_db_get_service_devices_info();
if (!db_svc_dev_list) {
UAM_INFO_C("No service devices in database");
&(db_svc->payload_info));
}
}
+ g_slist_free_full(db_svc_dev_list, g_free);
+
+ db_svc_dev_list = _uam_db_get_service_devices_payloads_info();
+ if (!db_svc_dev_list) {
+ UAM_INFO_C("No service devices in database");
+ } else {
+ for (l = db_svc_dev_list; NULL != l; l = g_slist_next(l)) {
+ db_svc_dev_info_t *db_svc = l->data;
+
+ _uam_core_update_svc_dev_info(db_svc->device_id, db_svc->type,
+ db_svc->svc, db_svc->discriminant, db_svc->last_seen,
+ &(db_svc->payload_info));
+ }
+ }
/* Fetch device list */
db_devices = _uam_device_db_get_all_devices();
if (!db_info)
continue;
__uam_copy_db_payload_info(&((*payload_list)[*count]), db_info);
+ __print_db_payload(db_info);
*count += 1;
}
#define SELECT_DEVICE_SERVICES_COUNT "SELECT count(*) " \
"FROM device_services where device_number = ?"
-#define SELECT_DEVICE_SERVICES \
+#define SELECT_DEVICE_SERVICES_PAYLOADS \
"SELECT D.device_id, D.tech_type, S.service_name, X.discriminant, X.last_seen, " \
"P.primary_key, P.secondary_key, P.device_uid_len, P.device_uid, P.device_icon " \
"FROM device_services as X JOIN services as S USING(service_number) JOIN devices as D " \
"USING(device_number) JOIN payloads as P USING(payload_number)"
+#define SELECT_DEVICE_SERVICES \
+ "SELECT D.device_id, D.tech_type, S.service_name, X.discriminant, X.last_seen " \
+ "FROM device_services as X JOIN services as S USING(service_number) JOIN devices as D " \
+ "USING(device_number)"
+
#define INSERT_DEVICE_SERVICE "insert into device_services " \
"(device_number, service_number, discriminant, last_seen) values (?, ?, ?, ?)"
static sqlite3_stmt *select_service;
static sqlite3_stmt *select_device_services_count;
static sqlite3_stmt *select_device_services;
+static sqlite3_stmt *select_device_services_payloads;
/* INSERT statements */
static sqlite3_stmt *insert_device_service;
FINALIZE(select_service);
FINALIZE(select_device_services_count);
FINALIZE(select_device_services);
+ FINALIZE(select_device_services_payloads);
FUNC_EXIT;
}
SELECT_DEVICE_SERVICES_COUNT, __uam_device_service_finalize_select);
PREPARE_QUERY(rc, db, select_device_services,
SELECT_DEVICE_SERVICES, __uam_device_service_finalize_select);
+ PREPARE_QUERY(rc, db, select_device_services_payloads,
+ SELECT_DEVICE_SERVICES_PAYLOADS, __uam_device_service_finalize_select);
initialized = 1;
FUNC_EXIT;
return error_code;
}
-GSList *_uam_db_get_service_devices_info()
+GSList *_uam_db_get_service_devices_payloads_info()
{
FUNC_ENTRY;
- sqlite3_stmt *stmt = select_device_services;
+ sqlite3_stmt *stmt = select_device_services_payloads;
GSList *svc_dev_list = NULL;
db_svc_dev_info_t *info = NULL;
int sql_ret = SQLITE_OK;
return svc_dev_list;
}
+
+GSList *_uam_db_get_service_devices_info()
+{
+ FUNC_ENTRY;
+ sqlite3_stmt *stmt = select_device_services;
+ GSList *svc_dev_list = NULL;
+ db_svc_dev_info_t *info = NULL;
+ int sql_ret = SQLITE_OK;
+
+ do {
+ sql_ret = sqlite3_step(stmt);
+
+ switch (sql_ret) {
+ case SQLITE_DONE:
+ break;
+ case SQLITE_ROW:
+ UAM_DBG("Device services info found");
+ info = g_new0(db_svc_dev_info_t, 1);
+ g_strlcpy(info->device_id, (char *)sqlite3_column_text(stmt, 0),
+ UAM_DEVICE_ID_MAX_STRING_LEN);
+ info->type = sqlite3_column_int(stmt, 1);
+ g_strlcpy(info->svc, (char *)sqlite3_column_text(stmt, 2),
+ UAM_SERVICE_MAX_STRING_LEN);
+ info->discriminant = sqlite3_column_int(stmt, 3);
+ info->last_seen = sqlite3_column_int64(stmt, 4);
+
+ UAM_INFO("device id:%s-%d-%s-%d-%llu ",
+ info->device_id,
+ info->type,
+ info->svc,
+ info->discriminant,
+ info->last_seen);
+
+ svc_dev_list = g_slist_append(svc_dev_list, info);
+ break;
+ case SQLITE_ERROR:
+ default:
+ UAM_ERR("Failed to enumerate device info [%d:%s]",
+ sql_ret, sqlite3_errmsg(database_handle));
+ }
+ } while (sql_ret == SQLITE_ROW);
+
+ sqlite3_reset(stmt);
+ FUNC_EXIT;
+ return svc_dev_list;
+}
+
static int __uam_db_update_dev_svc_payload(int device_number,
int service_number, int payload_number)
{
#define UPDATE_PAYLOAD "UPDATE payloads " \
"SET primary_key = ?, secondary_key = ?, device_uid_len = ?, " \
- "device_uid = ?, device_icon = ? user_data = ? WHERE device_number = ?"
+ "device_uid = ?, device_icon = ?, user_data = ? WHERE device_number = ?"
/* DELETE statements */
static sqlite3_stmt *delete_all_payloads;
error_code, handle_error);
DB_ACTION(sqlite3_bind_text(stmt, 2, &(payload->secondary_key), 1, SQLITE_TRANSIENT),
error_code, handle_error);
- DB_ACTION(sqlite3_bind_text(stmt, 3, payload->device_uid, UAM_BLE_PAYLOAD_DEVICE_UID_MAX_LEN + 1, SQLITE_TRANSIENT),
+ DB_ACTION(sqlite3_bind_text(stmt, 3, payload->device_uid, payload->device_uid_len, SQLITE_TRANSIENT),
error_code, handle_error);
do {
error_code, handle_error);
DB_ACTION(sqlite3_bind_text(stmt, 2, &(payload->secondary_key), 1, SQLITE_TRANSIENT),
error_code, handle_error);
- DB_ACTION(sqlite3_bind_text(stmt, 3, payload->device_uid, UAM_BLE_PAYLOAD_DEVICE_UID_MAX_LEN + 1, SQLITE_TRANSIENT),
+ DB_ACTION(sqlite3_bind_text(stmt, 3, payload->device_uid, payload->device_uid_len, SQLITE_TRANSIENT),
error_code, handle_error);
do {
user_data_len = UAM_BLE_PAYLOAD_DEVICE_UID_MAX_LEN - 1 - info->payload_info.device_uid_len;
memset(info->payload_info.user_data, 0, user_data_len);
- buf = (char *)sqlite3_column_text(stmt, 3);
+ buf = (char *)sqlite3_column_text(stmt, 7);
if (buf)
memcpy(info->payload_info.user_data, buf,
user_data_len);
UAM_INFO("primary key: %d secondary key: %d",
info->payload_info.primary_key,
info->payload_info.secondary_key);
+ for (int i = 0; i < info->payload_info.device_uid_len; i++)
+ UAM_DBG("payload device uid [0x%2.2X]", info->payload_info.device_uid[i]);
+ for (int i = 0; i < user_data_len; i++)
+ UAM_DBG("payload user data [0x%2.2X]", info->payload_info.user_data[i]);
payload_list = g_slist_append(payload_list, info);
break;
goto handle_error;
}
- UAM_DBG("Device-payload info inserted [%d] primary_key: [%d] " \
+ UAM_DBG("Device-payload info updated [%d] primary_key: [%d] " \
"secondary_key: [%d] device_icon: [%d]", device_number,
payload->primary_key, payload->secondary_key,
payload->device_icon);
+ for (int i = 0; i < user_data_len; i++)
+ UAM_DBG("payload user data [0x%2.2X]", payload->user_data[i]);
handle_error:
sqlite3_reset(stmt);