Add EIR manufacturer data handling logic 28/290928/1 accepted/tizen/7.0/unified/20230410.160648
authorWootak Jung <wootak.jung@samsung.com>
Wed, 5 Apr 2023 05:04:14 +0000 (14:04 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Wed, 5 Apr 2023 05:39:29 +0000 (14:39 +0900)
Change-Id: Ie320eeb1663f6384c20daf4c4336abdfe13e4609
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
bt-oal/bluez_hal/src/bt-hal-event-receiver.c
bt-oal/common/oal-common.c
bt-oal/include/oal-manager.h [changed mode: 0755->0644]
bt-oal/oal-device-mgr.c [changed mode: 0755->0644]
bt-service/services/bt-service-common.c
bt-service/services/device/bt-service-core-device.c

index c30a075..83ed885 100644 (file)
@@ -743,9 +743,30 @@ static gboolean __bt_hal_parse_device_properties(GVariant *item)
                        }
 
                } else if (strcasecmp(key, "LegacyManufacturerDataLen") == 0) {
-                       /* TODO: To be handled later*/
+                       uint16_t data_len = g_variant_get_uint16(val);
+                       DBG("LegacyManufacturerDataLen [%d]", data_len);
                } else if (strcasecmp(key, "LegacyManufacturerData") == 0) {
-                       /* TODO: To be handled later*/
+                       GVariantIter *char_value_iter;
+                       GByteArray *manufacturer_data = NULL;
+                       guint8 char_value;
+                       DBG("LegacyManufacturerData");
+
+                       manufacturer_data = g_byte_array_new();
+                       g_variant_get(val, "ay", &char_value_iter);
+                       while (g_variant_iter_loop(char_value_iter, "y", &char_value))
+                               g_byte_array_append(manufacturer_data, &char_value, 1);
+
+                       g_variant_iter_free(char_value_iter);
+
+                       if (manufacturer_data) {
+                               if (manufacturer_data->len > 0) {
+                                       size += __bt_insert_hal_properties(
+                                                       buf + size, HAL_PROP_DEVICE_MANUFACTURER_DATA,
+                                                       manufacturer_data->len, manufacturer_data->data);
+                                       ev->num_props++;
+                               }
+                       }
+                       g_byte_array_free(manufacturer_data, FALSE);
                } else {
                        DBG("Unhandled Property:[%s]", key);
                }
index a82ad84..520a7db 100644 (file)
@@ -131,7 +131,14 @@ void parse_device_properties(int num_properties, bt_property_t *properties,
                        dev_info->type = dev_type - 1;//OAL enum starts with 0 and Bluedroid with 1
                        break;
                }
-               case BT_PROPERTY_REMOTE_DEVICE_MANUFACTURER_DATA:
+               case BT_PROPERTY_REMOTE_DEVICE_MANUFACTURER_DATA: {
+                       uint8_t *data = (uint8_t *)properties[i].val;
+                       int len;
+                       for (len = 0; len < properties[i].len; len++)
+                               dev_info->manufacturer_data[len] = data[len];
+                       dev_info->manufacturer_data_len = len;
+                       break;
+               }
                case BT_PROPERTY_REMOTE_BLE_ADV_DATA: {
                        if (adv_info) {
                                adv_info->adv_data = properties[i].val;
old mode 100755 (executable)
new mode 100644 (file)
index abcbb7f..89c10a9
@@ -44,7 +44,7 @@ extern "C" {
 
 #define BLUETOOTH_UUID_STRING_MAX       50
 
-#define BT_DEVICE_MANUFACTURER_DATA_LEN_MAX 62 /**<This specifies the Maximum manufacturer data Length>*/
+#define BT_DEVICE_MANUFACTURER_DATA_LEN_MAX 240 /**<This specifies the Maximum manufacturer data Length>*/
 
 typedef void (*oal_event_callback)(int event, gpointer event_data, gsize size);
 
@@ -141,6 +141,8 @@ typedef struct {
        oal_uuid_t uuid[BT_MAX_SERVICES_FOR_DEVICE];
        int is_trusted;
        int is_alias_set;
+       char manufacturer_data[BT_DEVICE_MANUFACTURER_DATA_LEN_MAX];
+       int manufacturer_data_len;
 } remote_device_t;
 
 /** GATT ID adding instance id tracking to the UUID */
old mode 100755 (executable)
new mode 100644 (file)
index c192336..d0d9d35
@@ -705,25 +705,9 @@ void cb_device_properties(bt_status_t status, bt_bdaddr_t *bd_addr,
                        memcpy(&dev_props_event->device_info,
                                dev_info, sizeof(remote_device_t));
                } else {
-                       int i;
-
                        BT_DBG("BREDR type Device");
-
-                       /* Legacy Manufacturer data */
-                       if (adv_info.len > 0) {
-                               dev_props_event->adv_len = adv_info.len;
-                               if (dev_props_event->adv_len > 0)
-                                       memcpy(dev_props_event->adv_data,
-                                               adv_info.adv_data, adv_info.len);
-
-                               for (i = 0; i < dev_props_event->adv_len; i++)
-                                       BT_DBG("Adv Data[%d] = [0x%x]",
-                                               i, dev_props_event->adv_data[i]);
-                       }
-
                        memcpy(&dev_props_event->device_info,
                                dev_info, sizeof(remote_device_t));
-
                }
 
                event_data = dev_props_event;
index 1907461..cdf5e83 100644 (file)
@@ -1362,6 +1362,11 @@ void _bt_copy_remote_dev(bt_remote_dev_info_t *dev_info, remote_device_t *oal_de
        dev_info->device_type = (int)oal_device->type;
        dev_info->is_alias_set = ((oal_device->is_alias_set == 0) ? FALSE : TRUE);
 
+       dev_info->manufacturer_data_len = oal_device->manufacturer_data_len;
+       if (dev_info->manufacturer_data_len)
+               dev_info->manufacturer_data = g_memdup2(oal_device->manufacturer_data,
+                               dev_info->manufacturer_data_len);
+       BT_DBG("manufacturer_data_len: %d", dev_info->manufacturer_data_len);
 }
 
 void _bt_free_remote_dev(bt_remote_dev_info_t *dev_info)
index a8d87c8..3780df4 100644 (file)
@@ -342,9 +342,6 @@ static void __bt_device_remote_properties_callback(event_dev_properties_t *oal_d
                        BT_INFO("Check data[%d] = [[0x%x]",
                                        k, oal_dev_props->adv_data[k]);
                }
-       } else {
-               rem_info->manufacturer_data = NULL;
-               rem_info->manufacturer_data_len = 0;
        }
 
        /* a. Check if bonding is on-going, if yes, we MUST update the bonding device properties */