}
} 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);
}
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;
#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);
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 */
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;
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)
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 */