Fix LegacyManufacturerData parsing issue 58/299858/3 accepted/tizen/8.0/unified/20231103.040832
authorWootak Jung <wootak.jung@samsung.com>
Wed, 11 Oct 2023 03:13:28 +0000 (12:13 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Thu, 12 Oct 2023 01:00:28 +0000 (10:00 +0900)
LegacyManufacturerDataLen is stored as uint16 not uint32
LegacyManufacturerData should be stored with HAL_PROP_DEVICE_MANUFACTURER_DATA
not HAL_PROP_DEVICE_BLE_ADV_DATA

Change-Id: I6cb7fe979b7c85190383ff318a127b75a4b4357a
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
bt-oal/bluez_hal/src/bt-hal-event-receiver.c

index 14f2f65..65860c0 100644 (file)
@@ -1732,7 +1732,6 @@ static void __bt_hal_device_properties_lookup(GVariant *result, char *address)
        GVariant *tmp_value;
        GVariant *value;
        gchar *name;
-       gchar *manufacturer_data = NULL;
        DBG("+");
 
        if (result != NULL) {
@@ -1875,30 +1874,40 @@ static void __bt_hal_device_properties_lookup(GVariant *result, char *address)
                g_variant_unref(tmp_value);
 
                /* LegacyManufacturerDataLen */
-               tmp_value = g_variant_lookup_value(value, "LegacyManufacturerDataLen", G_VARIANT_TYPE_UINT32);
-               unsigned int manufacturer_data_len = tmp_value ? g_variant_get_uint32(tmp_value) : 0;
+               tmp_value = g_variant_lookup_value(value, "LegacyManufacturerDataLen", G_VARIANT_TYPE_UINT16);
+               unsigned int manufacturer_data_len = tmp_value ? g_variant_get_uint16(tmp_value) : 0;
                if (manufacturer_data_len > BT_HAL_MANUFACTURER_DATA_LENGTH_MAX) {
                        ERR("manufacturer_data_len is too long(len = %d)", manufacturer_data_len);
                        manufacturer_data_len = BT_HAL_MANUFACTURER_DATA_LENGTH_MAX;
                }
                if (tmp_value)
                        g_variant_unref(tmp_value);
+
                /*size += __bt_insert_hal_properties(buf + size, HAL_PROP_DEVICE_MANUFACTURER_DATA_LEN,
                  sizeof(unsigned int), &manufacturer_data_len);
                  ev->num_props++;*/
                DBG("Device Legacy Manufacturer data length [%u]", manufacturer_data_len);
 
                /* ManufacturerData */
+               GVariantIter *char_value_iter;
+               GByteArray *manufacturer_data = NULL;
+               guint8 char_value;
+
                tmp_value = g_variant_lookup_value(value, "LegacyManufacturerData", G_VARIANT_TYPE_BYTESTRING);
-               manufacturer_data = value ? (gchar *)g_variant_get_bytestring(tmp_value) : NULL;
+               g_variant_get(tmp_value, "ay", &char_value_iter);
+               manufacturer_data = g_byte_array_new();
+               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,
-                               size += __bt_insert_hal_properties(buf + size, HAL_PROP_DEVICE_BLE_ADV_DATA,
-                                               manufacturer_data_len, manufacturer_data);
+                               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);
                if (tmp_value)
                        g_variant_unref(tmp_value);