Modify BLE payload structure 14/212214/1
authorAbhay agarwal <ay.agarwal@samsung.com>
Tue, 13 Aug 2019 06:44:43 +0000 (12:14 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 19 Aug 2019 04:36:02 +0000 (13:36 +0900)
Change-Id: I58c9403bf3e7247f8ba1a456808838d0956683fb
Signed-off-by: Abhay agarwal <ay.agarwal@samsung.com>
include/ua-api.h
ua-api/src/ua-api.c
ua-daemon/data/ua_db.sql
ua-daemon/include/ua-manager-core.h
ua-daemon/src/pm/ua-pm-util.c
ua-daemon/src/ua-manager-core.c
ua-daemon/src/ua-manager-db.c
ua-daemon/src/ua-manager-device-db.c
ua-daemon/src/ua-manager-request-handler.c
ua-plugins/include/ua-plugin.h

index 83c97e6..67e25c0 100644 (file)
@@ -56,10 +56,16 @@ typedef enum {
 #define UAM_DEVICE_ID_MAX_STRING_LEN 50
 
 /**
- * @brief Device's BLE payload length.
+ * @brief Device's BLE payload duid length.
  * @since_tizen 5.5
  */
-#define UAM_BLE_PAYLOAD_STRING_LEN 31
+#define UAM_BLE_PAYLOAD_DUID_LEN 17
+
+/**
+ * @brief Max. BT MAC address length.
+ * @since_tizen 5.5
+ */
+#define UAM_BT_MAC_ADDRESS_STRING_LEN 18
 
 /**
  * @brief Max. IP address length.
@@ -438,6 +444,18 @@ typedef enum {
 } uam_tech_type_e;
 
 /**
+ * @brief BLE Payload info structure.
+ * @since_tizen 5.5
+ */
+typedef struct {
+       char service_id; /** Service Id */
+       char device_icon; /** Device icon */
+       char purpose; /** Purpose */
+       char duid[UAM_BLE_PAYLOAD_DUID_LEN + 1]; /** DUID */
+       char bt_mac[UAM_BT_MAC_ADDRESS_STRING_LEN]; /** BT MAC Address */
+} uam_ble_payload_s;
+
+/**
  * @brief Device info structure.
  * @since_tizen 5.5
  */
@@ -447,7 +465,7 @@ typedef struct {
        char mac[UAM_MAC_ADDRESS_STRING_LEN]; /**< Device's MAC ADDRESS */
        char ipv4_addr[UAM_IP_ADDRESS_MAX_STRING_LEN];/**< Device's IPv4 address optional */
        char device_id[UAM_DEVICE_ID_MAX_STRING_LEN]; /**< Device's uniquie ID */
-       char payload[UAM_BLE_PAYLOAD_STRING_LEN + 1]; /**< Payload to scan ble devices*/
+       uam_ble_payload_s payload; /**< BLE Payload to parse ble devices*/
        gboolean discriminant; /**< Determines whether to judge PRESENCE/ABSENCE */
        long last_seen; /**< Latest timestamp when device was discoverd */
 } uam_device_info_s;
index d070ebe..044c8fe 100644 (file)
@@ -1286,4 +1286,4 @@ UAM_EXPORT_API int _uam_request_update_device(uam_device_info_s *device)
 
        FUNC_EXIT;
        return ret;
-}
\ No newline at end of file
+}
index 751fd43..a92a227 100644 (file)
@@ -20,7 +20,9 @@ CREATE TABLE IF NOT EXISTS devices (
   presence_state INTEGER,
   os_type INTEGER,
   discriminant INTETER,
-  payload TEXT,
+  service_id TEXT,
+  purpose TEXT,
+  duid TEXT,
   FOREIGN KEY(user_id) REFERENCES userdata(user_id),
   PRIMARY KEY(device_id, tech_type, address)
 );
index c0b6705..f4e7ca2 100644 (file)
@@ -58,6 +58,14 @@ typedef struct {
 } uam_db_address_info_t;
 
 typedef struct {
+       char service_id; /** Service Id */
+       char device_icon; /** Device icon */
+       char purpose; /** Purpose */
+       char *duid; /** DUID */
+       char *bt_mac; /** BT MAC Address */
+} uam_db_ble_payload_t;
+
+typedef struct {
        uam_tech_type_e tech_type;
        GSList *addresses;
        int presence_state;
@@ -65,7 +73,7 @@ typedef struct {
        gboolean discriminant;
        struct uam_db_device_info *device;
        GSList *svc_list;
-       char *payload;
+       uam_db_ble_payload_t *payload;
 } uam_db_tech_info_t;
 
 typedef struct uam_db_device_info {
index e4a1a57..87aa89e 100644 (file)
@@ -246,7 +246,14 @@ uas_device_info_t *_pm_util_uam_dev_info_to_uas_dev_info(const uam_device_info_s
                UAM_WARN("device->num_addr = %d", device->num_addr);
 
        device->device_id = g_strdup(dev->device_id);
-       device->payload = g_memdup(dev->payload, UAM_BLE_PAYLOAD_STRING_LEN);
+
+       device->payload = g_new0(uas_ble_payload_t, 1);
+       device->payload->service_id = dev->payload.service_id;
+       device->payload->purpose = dev->payload.purpose;
+       device->payload->device_icon = dev->payload.device_icon;
+       device->payload->duid = g_memdup(&(dev->payload.duid), UAM_BLE_PAYLOAD_DUID_LEN);
+       device->payload->bt_mac = g_memdup(&(dev->payload.bt_mac), UAM_BLE_PAYLOAD_DUID_LEN);
+
        device->addr_list = g_new0(uas_address_info_t, device->num_addr);
        if (mac) {
                device->addr_list[i].type = type;
@@ -275,11 +282,23 @@ uam_device_info_s *_pm_util_uas_dev_info_to_uam_dev_info(const uas_device_info_t
 
        device->operating_system = dev->os;
        device->discriminant = dev->discriminant;
-
        g_strlcpy(device->device_id, dev->device_id, UAM_DEVICE_ID_MAX_STRING_LEN);
-       memset(device->payload, 0, UAM_BLE_PAYLOAD_STRING_LEN + 1);
-       if (dev->payload)
-               memcpy(device->payload, dev->payload, UAM_BLE_PAYLOAD_STRING_LEN);
+
+       memset(device->payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
+       memset(device->payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
+       if (dev->payload) {
+               if (dev->payload->service_id)
+                       device->payload.service_id = dev->payload->service_id;
+               if (dev->payload->device_icon)
+                       device->payload.device_icon = dev->payload->device_icon;
+               if (dev->payload->purpose)
+                       device->payload.purpose = dev->payload->purpose;
+               if (dev->payload->duid)
+                       memcpy(device->payload.duid, dev->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
+               if (dev->payload->bt_mac)
+                       g_strlcpy(device->payload.bt_mac,
+                       dev->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
+       }
 
        for (i = 0; i < dev->num_addr; i++) {
                UAM_DBG("Address[%d]: %s", i, dev->addr_list[i].address);
index 8f2a826..88de07a 100644 (file)
@@ -456,17 +456,30 @@ static void __get_uam_db_dev_list_to_uam_dev_list(
                        g_strlcpy((*device_list)[indx].device_id, db_info->device_id,
                                        UAM_DEVICE_ID_MAX_STRING_LEN);
 
-                       (*device_list)[indx].payload[UAM_BLE_PAYLOAD_STRING_LEN] = 0;
-                       if (tech->payload)
-                               memcpy((*device_list)[indx].payload, tech->payload,
-                                       UAM_BLE_PAYLOAD_STRING_LEN);
+                       memset((*device_list)[indx].payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
+                       memset((*device_list)[indx].payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
+                       if (tech->payload) {
+                               if (tech->payload->service_id)
+                                       (*device_list)[indx].payload.service_id = tech->payload->service_id;
+                               if (tech->payload->device_icon)
+                                       (*device_list)[indx].payload.device_icon = tech->payload->device_icon;
+                               if (tech->payload->purpose)
+                                       (*device_list)[indx].payload.purpose = tech->payload->purpose;
+                               if (tech->payload->duid)
+                                       memcpy((*device_list)[indx].payload.duid,
+                                       tech->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
+                               if (tech->payload->bt_mac)
+                                       g_strlcpy((*device_list)[indx].payload.bt_mac,
+                                       tech->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
+                       }
+
                        (*device_list)[indx].discriminant = tech->discriminant;
                        (*device_list)[indx].last_seen = tech->timestamp;
                        (*device_list)[indx++].type = tech->tech_type;
-                       UAM_INFO("%s-%d-%s-%s-%ld-%d-%d-%s", (*device_list)[indx-1].device_id,
+                       UAM_INFO("%s-%d-%s-%s-%ld-%d-%d-0x%2.2X", (*device_list)[indx-1].device_id,
                                (*device_list)[indx-1].type, (*device_list)[indx-1].mac, (*device_list)[indx-1].ipv4_addr,
                                (*device_list)[indx-1].last_seen, (*device_list)[indx-1].operating_system,
-                               (*device_list)[indx-1].discriminant, (*device_list)[indx-1].payload);
+                               (*device_list)[indx-1].discriminant, (*device_list)[indx-1].payload.service_id);
                }
        }
 
@@ -511,10 +524,22 @@ static int __copy_tech_info_to_device_info(uam_db_tech_info_t *tech, uam_device_
                        UAM_DEVICE_ID_MAX_STRING_LEN);
        device->type = tech->tech_type;
        device->discriminant = tech->discriminant;
-       memset(device->payload, 0, UAM_BLE_PAYLOAD_STRING_LEN + 1);
-       if (tech->payload)
-               memcpy(device->payload, tech->payload,
-                       UAM_BLE_PAYLOAD_STRING_LEN);
+       memset(device->payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
+       memset(device->payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN + 1);
+       if (tech->payload) {
+               if (tech->payload->service_id)
+                       device->payload.service_id = tech->payload->service_id;
+               if (tech->payload->device_icon)
+                       device->payload.device_icon = tech->payload->device_icon;
+               if (tech->payload->purpose)
+                       device->payload.purpose = tech->payload->purpose;
+               if (tech->payload->duid)
+                       memcpy(device->payload.duid,
+                       tech->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
+               if (tech->payload->bt_mac)
+                       memcpy(device->payload.bt_mac,
+                       tech->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
+       }
 
        FUNC_EXIT;
        return UAM_ERROR_NONE;
@@ -655,7 +680,13 @@ static void __uam_core_add_dev_to_list(
        tech->timestamp = timestamp;
        tech->device = device;
        tech->discriminant = dev_info->discriminant;
-       tech->payload =  g_memdup(dev_info->payload, UAM_BLE_PAYLOAD_STRING_LEN);
+
+       tech->payload = g_new0(uam_db_ble_payload_t, 1);
+       tech->payload->service_id = dev_info->payload.service_id;
+       tech->payload->purpose = dev_info->payload.purpose;
+       tech->payload->device_icon = dev_info->payload.device_icon;
+       tech->payload->duid = g_memdup(&(dev_info->payload.duid), UAM_BLE_PAYLOAD_DUID_LEN);
+       tech->payload->bt_mac = g_memdup(&(dev_info->payload.bt_mac), UAM_BLE_PAYLOAD_DUID_LEN);
 
        tech->svc_list = svc_list;
        g_slist_foreach(tech->svc_list, __print_service, tech);
@@ -3110,11 +3141,23 @@ static void __get_service_dev_list(
                                UAM_DEVICE_ID_MAX_STRING_LEN);
                (*device_list)[indx].last_seen = tech->timestamp;
                (*device_list)[indx].discriminant = tech->discriminant;
-               memset((*device_list)[indx].payload, 0,
-                               UAM_BLE_PAYLOAD_STRING_LEN);
-               if (tech->payload)
-                       memcpy((*device_list)[indx].payload, tech->payload,
-                               UAM_BLE_PAYLOAD_STRING_LEN);
+               memset((*device_list)[indx].payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
+               memset((*device_list)[indx].payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
+               if (tech->payload) {
+                       if (tech->payload->service_id)
+                               (*device_list)[indx].payload.service_id = tech->payload->service_id;
+                       if (tech->payload->device_icon)
+                               (*device_list)[indx].payload.device_icon = tech->payload->device_icon;
+                       if (tech->payload->purpose)
+                               (*device_list)[indx].payload.purpose = tech->payload->purpose;
+                       if (tech->payload->duid)
+                               memcpy((*device_list)[indx].payload.duid,
+                               tech->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
+                       if (tech->payload->bt_mac)
+                               g_strlcpy((*device_list)[indx].payload.bt_mac,
+                               tech->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
+                       }
+
                (*device_list)[indx++].type = tech->tech_type;
        }
 
index b9e50d7..ef45259 100644 (file)
@@ -47,7 +47,9 @@
        "presence_state INTEGER, " \
        "os_type INTEGER, " \
        "discriminant INTETER, " \
-       "payload TEXT, " \
+       "service_id TEXT, " \
+       "purpose TEXT, " \
+       "duid TEXT, " \
        "FOREIGN KEY(user_id) REFERENCES userdata(user_id), " \
        "PRIMARY KEY(device_id, tech_type, address) " \
        "); "
index 30c519d..311ff5e 100644 (file)
 
 #define SELECT_ALL_DEVICES "SELECT device_id, tech_type, address, " \
        "ip_address, timestamp, presence_state, os_type, " \
-       "user_id, discriminant, payload FROM devices"
+       "user_id, discriminant, service_id, purpose, duid FROM devices"
 
 #define SELECT_DEVICE "SELECT device_id, tech_type, address, " \
        "ip_address, timestamp, presence_state, os_type, " \
-       "user_id, discriminant, payload FROM devices WHERE device_id = ? AND tech_type = ? " \
-       "AND address = ?"
+       "user_id, discriminant, service_id, purpose, duid FROM devices " \
+       "WHERE device_id = ? AND tech_type = ? AND address = ?"
 
 #define SELECT_DEVICE_NUMBER "SELECT device_number FROM devices " \
        "WHERE device_id = ? AND tech_type = ? AND address = ?"
@@ -40,8 +40,9 @@
 
 #define INSERT_DEVICE "insert into devices " \
        "(device_id, tech_type, address, ip_address, timestamp, " \
-       "presence_state, os_type, user_id, discriminant, payload, device_number)" \
-       "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
+       "presence_state, os_type, user_id, discriminant, service_id, " \
+       "purpose, duid, device_number)" \
+       "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
 
 #define UPDATE_TIMESTAMP "UPDATE devices " \
        "SET timestamp = ? WHERE device_id = ? AND tech_type = ? AND address = ?"
@@ -463,10 +464,10 @@ int _ua_device_db_insert_device_info(int user_id,
 
        retv_if(NULL == dev_info, UAM_ERROR_INVALID_PARAMETER);
 
-       UAM_INFO("%s-%d-%s-%s-%ld-%d-%d-%d-%d-%s", dev_info->device_id,
+       UAM_INFO("%s-%d-%s-%s-%ld-%d-%d-%d-%d-0x%2.2X", dev_info->device_id,
                        dev_info->type, dev_info->mac, dev_info->ipv4_addr,
                        timestamp, presence_state, dev_info->operating_system, dev_info->discriminant,
-                       user_id, dev_info->payload);
+                       user_id, dev_info->payload.service_id);
 
        DB_ACTION(sqlite3_bind_text(stmt, 1, dev_info->device_id, -1, SQLITE_TRANSIENT),
                error_code, handle_error);
@@ -486,9 +487,13 @@ int _ua_device_db_insert_device_info(int user_id,
                error_code, handle_error);
        DB_ACTION(sqlite3_bind_int(stmt, 9, dev_info->discriminant),
                error_code, handle_error);
-       DB_ACTION(sqlite3_bind_text(stmt, 10, dev_info->payload, -1, SQLITE_TRANSIENT),
+       DB_ACTION(sqlite3_bind_text(stmt, 10, &(dev_info->payload.service_id), -1, SQLITE_TRANSIENT),
+               error_code, handle_error);
+       DB_ACTION(sqlite3_bind_text(stmt, 11, &(dev_info->payload.purpose), -1, SQLITE_TRANSIENT),
+               error_code, handle_error);
+       DB_ACTION(sqlite3_bind_text(stmt, 12, dev_info->payload.duid, -1, SQLITE_TRANSIENT),
                error_code, handle_error);
-       DB_ACTION(sqlite3_bind_int(stmt, 11, max_device_number + 1),
+       DB_ACTION(sqlite3_bind_int(stmt, 13, max_device_number + 1),
                error_code, handle_error);
 
        if (sqlite3_step(stmt) != SQLITE_DONE) {
@@ -560,7 +565,7 @@ int _ua_device_db_get_device(char *device_id, int tech_type, char *address,
                                sqlite3_errmsg(__ua_device_db_get_database()));
                error_code = UAM_ERROR_DB_FAILED;
        } else {
-               UAM_DBG("User info found");
+               UAM_DBG("Device info found");
                info = g_new0(db_device_info_t, 1);
                g_strlcpy(info->dev_info.device_id, (char *)sqlite3_column_text(stmt, 0),
                        UAM_DEVICE_ID_MAX_STRING_LEN);
@@ -574,12 +579,14 @@ int _ua_device_db_get_device(char *device_id, int tech_type, char *address,
                info->dev_info.operating_system = sqlite3_column_int(stmt, 6);
                info->user_id = sqlite3_column_int(stmt, 7);
                info->dev_info.discriminant = sqlite3_column_int(stmt, 8);
-               memset(info->dev_info.payload, 0, UAM_BLE_PAYLOAD_STRING_LEN + 1);
-               if ((char*)sqlite3_column_text(stmt, 9))
-                       memcpy(info->dev_info.payload, (char *)sqlite3_column_text(stmt, 9),
-                               UAM_BLE_PAYLOAD_STRING_LEN);
-
-               UAM_INFO("%s-%d-%s-%s-%ld-%d-%d-%d-%d-%s",
+               memset(info->dev_info.payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
+               info->dev_info.payload.service_id = *(char *)sqlite3_column_text(stmt, 9);
+               info->dev_info.payload.purpose = *(char *)sqlite3_column_text(stmt, 10);
+               if ((char*)sqlite3_column_text(stmt, 11))
+                       memcpy(info->dev_info.payload.duid, (char *)sqlite3_column_text(stmt, 11),
+                               UAM_BLE_PAYLOAD_DUID_LEN);
+
+               UAM_INFO("%s-%d-%s-%s-%ld-%d-%d-%d-%d-0x%2.2X",
                        info->dev_info.device_id,
                        info->dev_info.type,
                        info->dev_info.mac,
@@ -589,7 +596,7 @@ int _ua_device_db_get_device(char *device_id, int tech_type, char *address,
                        info->dev_info.operating_system,
                        info->user_id,
                        info->dev_info.discriminant,
-                       info->dev_info.payload);
+                       info->dev_info.payload.service_id);
        }
 
 handle_error:
@@ -670,12 +677,14 @@ GSList *_ua_device_db_get_all_devices(void)
                        info->dev_info.operating_system = sqlite3_column_int(stmt, 6);
                        info->user_id = sqlite3_column_int(stmt, 7);
                        info->dev_info.discriminant = sqlite3_column_int(stmt, 8);
-                       memset(info->dev_info.payload, 0, UAM_BLE_PAYLOAD_STRING_LEN + 1);
-                       if ((char*)sqlite3_column_text(stmt, 9))
-                               memcpy(info->dev_info.payload, (char *)sqlite3_column_text(stmt, 9),
-                                       UAM_BLE_PAYLOAD_STRING_LEN);
-
-                       UAM_INFO("%s-%d-%s-%s-%ld-%d-%d-%d-%d-%s",
+                       memset(info->dev_info.payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
+                       info->dev_info.payload.service_id = *(char *)sqlite3_column_text(stmt, 9);
+                       info->dev_info.payload.purpose = *(char *)sqlite3_column_text(stmt, 10);
+                       if ((char*)sqlite3_column_text(stmt, 11))
+                               memcpy(info->dev_info.payload.duid, (char *)sqlite3_column_text(stmt, 11),
+                                       UAM_BLE_PAYLOAD_DUID_LEN);
+
+                       UAM_INFO("%s-%d-%s-%s-%ld-%d-%d-%d-%d-0x%2.2X",
                                info->dev_info.device_id,
                                info->dev_info.type,
                                info->dev_info.mac,
@@ -685,7 +694,7 @@ GSList *_ua_device_db_get_all_devices(void)
                                info->dev_info.operating_system,
                                info->user_id,
                                info->dev_info.discriminant,
-                               info->dev_info.payload);
+                               info->dev_info.payload.service_id);
 
                        device_list = g_slist_append(device_list, info);
                        break;
index f627726..c611d31 100644 (file)
@@ -702,11 +702,15 @@ static int __uam_manager_async_request_handler(
                account = (char *)g_variant_get_data(in_param1);
                __uam_manager_copy_params(in_param2,
                                &dev_info, sizeof(uam_device_info_s));
-               UAM_DBG("Account: [%s], Type: %d, MAC: [%s] IP: [%s], ID: [%s], Discriminant: [%s], Payload: [%s]",
+               UAM_DBG("Account: [%s], Type: %d, MAC: [%s] IP: [%s], ID: [%s], Discriminant: [%s]," \
+                       " Payload ServiceId: [0x%2.2X], Purpose: [0x%2.2X], DUID: [%s]," \
+                       " Device Icon: [0x%2.2X], BT MAC Address: [%s]",
                                account, dev_info.type, dev_info.mac,
                                dev_info.ipv4_addr, dev_info.device_id,
                                dev_info.discriminant ? "true" : "false",
-                               dev_info.payload);
+                               dev_info.payload.service_id, dev_info.payload.purpose,
+                               dev_info.payload.duid, dev_info.payload.device_icon,
+                               dev_info.payload.bt_mac);
 
                result = _uam_core_add_device(account, &dev_info);
                if (UAM_ERROR_NONE == result) {
index 619a5a6..5a6e02a 100644 (file)
@@ -99,6 +99,15 @@ typedef struct {
        char *address;
 } uas_address_info_t;
 
+/* Device ble payload information structure */
+typedef struct {
+       char service_id; /** Service Id */
+       char device_icon; /** Device icon */
+       char purpose; /** Purpose */
+       char *duid; /** DUID */
+       char *bt_mac; /** BT MAC Address */
+} uas_ble_payload_t;
+
 /* Device information structure */
 typedef struct {
        int user_id;
@@ -108,7 +117,7 @@ typedef struct {
        int num_addr;
        uas_address_info_t *addr_list;
        int discriminant; /**< Determines whether to judge PRESENCE/ABSENCE */
-       char *payload;
+       uas_ble_payload_t *payload;
 } uas_device_info_t;
 
 /* Active scan event types */