FUNC_EXIT;
}
+static void __print_svc_dev(gpointer data, gpointer user_data)
+{
+ FUNC_ENTRY;
+ uam_svc_dev_info_t *svc_dev = data;
+
+ ret_if(NULL == svc_dev);
+
+ UAM_DBG("DevId: %s, Svc: %s, payload primary key: %d",
+ svc_dev->device_id, svc_dev->service,
+ svc_dev->payload->primary_key);
+
+ FUNC_EXIT;
+}
+
static void __add_service_to_dev_tech_mapping(
uam_db_tech_info_t *tech, uam_db_service_info_t *service)
{
}
}
+static GSList *_uam_core_find_svc_dev_list(uam_device_info_s *dev_info)
+{
+ FUNC_ENTRY;
+ uam_svc_dev_info_t *svc_dev = NULL;
+ GSList *l;
+ GSList *svc_dev_list = NULL;
+
+ retv_if(NULL == dev_info, NULL);
+
+ /*
+ * Iterate over the svc_devs and find each service device information
+ */
+ for (l = svc_devs; NULL != l; l = g_slist_next(l)) {
+ svc_dev = l->data;
+
+ if (!svc_dev || !svc_dev->device_id || !svc_dev->service)
+ continue;
+
+ if ((0 == g_strcmp0(svc_dev->device_id, dev_info->device_id)) &&
+ (svc_dev->tech_type == dev_info->type)) {
+ svc_dev_list = g_slist_append(svc_dev_list, svc_dev);
+ UAM_DBG("Service found for device in list");
+ }
+ }
+
+ FUNC_EXIT;
+ return svc_dev_list;
+}
+
static void __uam_core_add_dev_to_list(
uam_db_user_info_t *user, const uam_device_info_s *dev_info,
- int presence_state, unsigned long long last_seen, GSList *svc_list)
+ int presence_state, unsigned long long last_seen, GSList *svc_list,
+ GSList *svc_dev_list)
{
FUNC_ENTRY;
uam_db_tech_info_t *tech;
service->dev_techs = g_slist_prepend(service->dev_techs, tech);
}
+ tech->svc_dev_list = svc_dev_list;
+ g_slist_foreach(tech->svc_dev_list, __print_svc_dev, NULL);
/* Add tech info to tech list */
device->tech_list = g_slist_append(device->tech_list, tech);
}
static int _uam_core_update_svc_dev_info(const char *device_id, uam_tech_type_e tech_type,
- const char *svc_name, gboolean discriminant, unsigned long long last_seen)
+ const char *svc_name, gboolean discriminant, unsigned long long last_seen,
+ uam_ble_payload_s *payload_info)
{
FUNC_ENTRY;
uam_svc_dev_info_t *svc = NULL;
svc->device_id = g_strdup(device_id);
svc->tech_type = tech_type;
svc->service = g_strdup(svc_name);
+ svc->payload = g_new0(uam_db_payload_info_t, 1);
+ __uam_copy_uam_payload_info(svc->payload, payload_info);
svc_devs = g_slist_append(svc_devs, svc);
}
svc->discriminant = discriminant;
svc->last_seen = last_seen;
+ __uam_copy_uam_payload_info(svc->payload, payload_info);
- UAM_DBG("Service [%s] device [%s] tech_type [%d] discriminant [%d] last_seen[%llu]",
- svc->service, svc->device_id, svc->tech_type, svc->discriminant, svc->last_seen);
+ UAM_DBG("Service [%s] device [%s] tech_type [%d] discriminant [%d] " \
+ "last_seen [%llu] payload primary key [%d]",
+ svc->service, svc->device_id, svc->tech_type, svc->discriminant,
+ svc->last_seen, svc->payload->primary_key);
FUNC_EXIT;
return UAM_ERROR_NONE;
__uam_db_end_transaction(0);
return ret;
}
- ret = _uam_core_update_svc_dev_info(device->device_id,
- tech->tech_type, service->name, device->discriminant, 0);
+ ret = _uam_core_update_svc_dev_info(device->device_id, tech->tech_type,
+ service->name, device->discriminant, 0, NULL);
if (UAM_ERROR_NONE != ret) {
UAM_WARN("Device service addition to service device mapping failed");
__uam_db_end_transaction(0);
return ret;
}
ret = _uam_core_update_svc_dev_info(device_id, tech_type, service->name,
- tech_info->discriminant, 0);
+ tech_info->discriminant, 0, NULL);
if (UAM_ERROR_NONE != ret) {
UAM_WARN("Device service addition to svc dev mapping failed");
return ret;
}
}
+ /* Fetch payload list */
+ db_payload_list = _uam_db_get_all_payloads();
+ if (!db_payload_list) {
+ UAM_INFO_C("No device payload in database");
+ } else {
+ for (l = db_payload_list; NULL != l; l = g_slist_next(l)) {
+ db_payload_info_t *db_payload = l->data;
+ uam_db_payload_info_t *payload = g_new0(uam_db_payload_info_t, 1);
+ GSList *l1 = NULL;
+
+ if (!db_payload)
+ continue;
+
+// l1 = g_slist_find_custom(payloads,
+// db_payload->payload_name, __compare_payload_name);
+ if (!l1) {
+ payload = g_new0(uam_db_payload_info_t, 1);
+ __uam_copy_uam_payload_info(payload, &(db_payload->payload_info));
+ payloads = g_slist_append(payloads, payload);
+ }
+ }
+ }
+
+ /* 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");
+ } 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_devices) {
db_device_info_t *db_info = l->data;
uam_db_user_info_t *user;
GSList *svc_list = NULL;
+ GSList *svc_dev_list = NULL;
GSList *l1;
if (!db_info)
db_info->dev_info.mac);
svc_list = __convert_db_svc_list_to_uam_svc_list(l1);
+
+ svc_dev_list = _uam_core_find_svc_dev_list(&(db_info->dev_info));
__uam_core_add_dev_to_list(user, &(db_info->dev_info),
- db_info->presence_state, db_info->last_seen, svc_list);
+ db_info->presence_state, db_info->last_seen,
+ svc_list, svc_dev_list);
}
}
}
}
- /* 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");
- } 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);
- }
- }
-
- /* Fetch payload list */
- db_payload_list = _uam_db_get_all_payloads();
- if (!db_payload_list) {
- UAM_INFO_C("No device payload in database");
- } else {
- for (l = db_payload_list; NULL != l; l = g_slist_next(l)) {
- db_payload_info_t *db_payload = l->data;
- uam_db_payload_info_t *payload = g_new0(uam_db_payload_info_t, 1);
- GSList *l1 = NULL;
-
- if (!db_payload)
- continue;
-
-// l1 = g_slist_find_custom(payloads,
-// db_payload->payload_name, __compare_payload_name);
- if (!l1) {
- payload = g_new0(uam_db_payload_info_t, 1);
- __uam_copy_uam_payload_info(payload, &(db_payload->payload_info));
- payloads = g_slist_append(payloads, payload);
- }
- }
- }
-
g_slist_free_full(db_devices, g_free);
g_slist_free_full(db_users, g_free);
g_slist_free_full(db_svc_list, g_free);
g_free(svc_dev->device_id);
g_free(svc_dev->service);
+ g_free(svc_dev->payload);
g_free(svc_dev);
}
g_slist_free(svc_devs);
GSList *l;
int ret = UAM_ERROR_NONE;
GSList *svc_list = NULL;
+ GSList *svc_dev_list = NULL;
uam_db_user_info_t *user = NULL;
+ uam_svc_dev_info_t *svc_dev = NULL;
UAM_INFO("[%d]", user_id);
svc_list = g_slist_append(svc_list, service);
}
- __uam_core_add_dev_to_list(user, dev_info,
- UAM_PRESENCE_STATE_PRESENT, dev_info->last_seen, svc_list);
+ /** updates for svc dev*/
+ ret = _uam_core_update_svc_dev_info(dev_info->device_id, dev_info->type,
+ UAM_SERVICE_DEFAULT, dev_info->discriminant, 0, NULL);
+ if (UAM_ERROR_NONE != ret) {
+ UAM_WARN("Device service mappiing update failed");
+ __send_device_event(ret, UAM_EVENT_DEVICE_ADDED, dev_info);
+ return ret;
+ }
+
+ svc_dev = _uam_core_find_svc_dev_info(dev_info->device_id,
+ dev_info->type, UAM_SERVICE_DEFAULT);
+ svc_dev_list = g_slist_append(svc_dev_list, svc_dev);
+ __uam_core_add_dev_to_list(user, dev_info, UAM_PRESENCE_STATE_PRESENT,
+ dev_info->last_seen, svc_list, svc_dev_list);
+ /** Start database transaction */
retv_if(UAM_ERROR_NONE != __uam_db_begin_transaction(), UAM_ERROR_DB_FAILED);
/* Add device to database */
return ret;
}
__uam_db_end_transaction(1);
-
- ret = _uam_core_update_svc_dev_info(dev_info->device_id, dev_info->type,
- UAM_SERVICE_DEFAULT, dev_info->discriminant, 0);
- if (UAM_ERROR_NONE != ret) {
- UAM_WARN("Device service mappiing update failed");
- __send_device_event(ret, UAM_EVENT_DEVICE_ADDED, dev_info);
- return ret;
- }
+ /** End database transaction */
/* Send device added event to application */
__send_device_event(ret, UAM_EVENT_DEVICE_ADDED, dev_info);
"FROM device_services where device_number = ?"
#define SELECT_DEVICE_SERVICES \
- "SELECT D.device_id, D.tech_type, S.service_name, P.discriminant, P.last_seen " \
- "FROM device_services as P JOIN services as S USING(service_number) JOIN devices as D " \
- "USING(device_number)"
+ "SELECT D.device_id, D.tech_type, S.service_name, X.discriminant, X.last_seen, " \
+ "P.primary_key, P.secondary_key, 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 INSERT_DEVICE_SERVICE "insert into device_services " \
"(device_number, service_number, discriminant, last_seen) values (?, ?, ?, ?)"
GSList *svc_dev_list = NULL;
db_svc_dev_info_t *info = NULL;
int sql_ret = SQLITE_OK;
+ char *buf = NULL;
do {
sql_ret = sqlite3_step(stmt);
UAM_SERVICE_MAX_STRING_LEN);
info->discriminant = sqlite3_column_int(stmt, 3);
info->last_seen = sqlite3_column_int64(stmt, 4);
-
- UAM_INFO("%s-%d-%s-%d-%llu",
+ buf = (char *)sqlite3_column_text(stmt, 5);
+ info->payload_info.primary_key = buf ? *buf : 13;
+ buf = (char *)sqlite3_column_text(stmt, 6);
+ info->payload_info.secondary_key = buf ? *buf : 1;
+ buf = (char *)sqlite3_column_text(stmt, 7);
+ if (buf)
+ memcpy(info->payload_info.device_uid, buf,
+ UAM_BLE_PAYLOAD_DEVICE_UID_LEN);
+ buf = (char *)sqlite3_column_text(stmt, 8);
+ info->payload_info.device_icon = buf ? *buf : 1;
+
+ UAM_INFO("device id:%s-%d-%s-%d-%llu " \
+ "primary key: %d secondary key: %d",
info->device_id,
info->type,
info->svc,
info->discriminant,
- info->last_seen);
+ info->last_seen,
+ info->payload_info.primary_key,
+ info->payload_info.secondary_key);
svc_dev_list = g_slist_append(svc_dev_list, info);
break;