#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.
} 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
*/
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;
FUNC_EXIT;
return ret;
-}
\ No newline at end of file
+}
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)
);
} 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;
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 {
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;
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);
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);
}
}
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;
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);
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;
}
"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) " \
"); "
#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 = ?"
#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 = ?"
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);
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) {
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);
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,
info->dev_info.operating_system,
info->user_id,
info->dev_info.discriminant,
- info->dev_info.payload);
+ info->dev_info.payload.service_id);
}
handle_error:
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,
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;
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) {
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;
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 */