Support 128 bit uuid's service data in the scan result 69/227869/1 submit/tizen/20200323.004911
authorDoHyun Pyun <dh79.pyun@samsung.com>
Tue, 17 Mar 2020 03:09:15 +0000 (12:09 +0900)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Tue, 17 Mar 2020 03:09:15 +0000 (12:09 +0900)
Change-Id: Iedc0944be35ab9033bc491204446f2fa90ee2889
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
include/bluetooth_private.h
src/bluetooth-adapter.c

index e66477d12226b1f914417f6f49e3e7b12b513c96..fc5a8f2e50394961b436dfdec7a3684d405a669c 100644 (file)
@@ -191,6 +191,7 @@ typedef enum {
        BT_ADAPTER_LE_ADVERTISING_DATA_128_BIT_SERVICE_SOLICITATION_UUIDS = 0x15, /**< List of 128-bit Service Solicitation UUIDs*/
        BT_ADAPTER_LE_ADVERTISING_DATA_SERVICE_DATA = 0x16, /**< Service data */
        BT_ADAPTER_LE_ADVERTISING_DATA_APPEARANCE = 0x19, /**< Appearance*/
+       BT_ADAPTER_LE_ADVERTISING_DATA_128_BIT_SERVICE_DATA = 0x21, /**< 128-bit Service UUID's data */
        BT_ADAPTER_LE_ADVERTISING_DATA_TRANSPORT_DISCOVERY = 0x26, /**< Transport Discovery*/
        BT_ADAPTER_LE_ADVERTISING_DATA_MANUFACTURER_SPECIFIC_DATA = 0xff, /**< Manufacturer data */
 } bt_adapter_le_advertising_data_type_e;
index d8e08a48d8ce879d4e05a57b5edcd7fa0e3da8d1..bce274cb686e70466dbf84d78d3444509b37dbf0 100644 (file)
@@ -3271,7 +3271,8 @@ int bt_adapter_le_get_scan_result_service_data_list(const bt_adapter_le_device_s
        field_len = 0;
        while (remain_len > 0) {
                field_len = remain_data[0];
-               if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_SERVICE_DATA)
+               if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_SERVICE_DATA ||
+                        remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_128_BIT_SERVICE_DATA)
                        data_count++;
 
                remain_len = remain_len - field_len - 1;
@@ -3289,8 +3290,9 @@ int bt_adapter_le_get_scan_result_service_data_list(const bt_adapter_le_device_s
        field_len = 0;
        while (remain_len > 0) {
                field_len = remain_data[0];
+
                if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_SERVICE_DATA) {
-                       (*data_list)[data_index].service_uuid = g_malloc0(sizeof(char) *4 + 1);
+                       (*data_list)[data_index].service_uuid = g_malloc0(sizeof(char) * 4 + 1);
                        snprintf((*data_list)[data_index].service_uuid, 5,
                                "%2.2X%2.2X", remain_data[3], remain_data[2]);
 
@@ -3298,6 +3300,24 @@ int bt_adapter_le_get_scan_result_service_data_list(const bt_adapter_le_device_s
                                                        &remain_data[4], field_len - 3);
                        (*data_list)[data_index].service_data_len = field_len - 3;
 
+                       data_index++;
+               } else if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_128_BIT_SERVICE_DATA) {
+                       (*data_list)[data_index].service_uuid = g_malloc0(sizeof(char) * 36 + 1);
+                       snprintf((*data_list)[data_index].service_uuid, 37,
+                               "%2.2X%2.2X%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X",
+                                               remain_data[17], remain_data[16],
+                                               remain_data[15], remain_data[14],
+                                               remain_data[13], remain_data[12],
+                                               remain_data[11], remain_data[10],
+                                               remain_data[9], remain_data[8],
+                                               remain_data[7], remain_data[6],
+                                               remain_data[5], remain_data[4],
+                                               remain_data[3], remain_data[2]);
+
+                       (*data_list)[data_index].service_data = g_memdup(
+                                                       &remain_data[18], field_len - 17);
+                       (*data_list)[data_index].service_data_len = field_len - 17;
+
                        data_index++;
                }