tBTA_STATUS status = BTA_FAILURE;
if (BTM_BleWriteAdvData(p_data->ble_set_adv_data.data_mask,
- (tBTM_BLE_ADV_DATA *)p_data->ble_set_adv_data.p_adv_cfg) == BTM_SUCCESS)
+ (tBTM_BLE_ADV_DATA *)&p_data->ble_set_adv_data.adv_cfg) == BTM_SUCCESS)
{
status = BTA_SUCCESS;
}
tBTA_STATUS status = BTA_FAILURE;
if(BTM_BleWriteScanRsp(p_data->ble_set_adv_data.data_mask,
- (tBTM_BLE_ADV_DATA *)p_data->ble_set_adv_data.p_adv_cfg) == BTM_SUCCESS)
+ (tBTM_BLE_ADV_DATA *)&p_data->ble_set_adv_data.adv_cfg) == BTM_SUCCESS)
{
status = BTA_SUCCESS;
}
btm_status = BTM_BleCfgAdvInstData(p_data->ble_multi_adv_data.inst_id,
p_data->ble_multi_adv_data.is_scan_rsp,
p_data->ble_multi_adv_data.data_mask,
- (tBTM_BLE_ADV_DATA*)p_data->ble_multi_adv_data.p_data);
+ (tBTM_BLE_ADV_DATA*)&p_data->ble_multi_adv_data.data);
}
if(BTM_CMD_STARTED != btm_status)
void BTA_DmBleSetAdvConfig (tBTA_BLE_AD_MASK data_mask, tBTA_BLE_ADV_DATA *p_adv_cfg,
tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback)
{
- tBTA_DM_API_SET_ADV_CONFIG *p_msg;
-
- if ((p_msg = (tBTA_DM_API_SET_ADV_CONFIG *)
- GKI_getbuf(sizeof(tBTA_DM_API_SET_ADV_CONFIG))) != NULL)
- {
- p_msg->hdr.event = BTA_DM_API_BLE_SET_ADV_CONFIG_EVT;
- p_msg->data_mask = data_mask;
- p_msg->p_adv_data_cback = p_adv_data_cback;
- p_msg->p_adv_cfg = p_adv_cfg;
-
- bta_sys_sendmsg(p_msg);
- }
+ tBTA_DM_API_SET_ADV_CONFIG *p_msg = GKI_getbuf(sizeof(*p_msg));
+ if (!p_msg) return;
+
+ memset(p_msg, 0, sizeof(*p_msg));
+ p_msg->hdr.event = BTA_DM_API_BLE_SET_ADV_CONFIG_EVT;
+ p_msg->data_mask = data_mask;
+ p_msg->p_adv_data_cback = p_adv_data_cback;
+ memcpy(&p_msg->adv_cfg, p_adv_cfg, sizeof(p_msg->adv_cfg));
+ bta_sys_sendmsg(p_msg);
}
/*******************************************************************************
extern void BTA_DmBleSetScanRsp (tBTA_BLE_AD_MASK data_mask, tBTA_BLE_ADV_DATA *p_adv_cfg,
tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback)
{
- tBTA_DM_API_SET_ADV_CONFIG *p_msg;
-
- if ((p_msg = (tBTA_DM_API_SET_ADV_CONFIG *)
- GKI_getbuf(sizeof(tBTA_DM_API_SET_ADV_CONFIG))) != NULL)
- {
- p_msg->hdr.event = BTA_DM_API_BLE_SET_SCAN_RSP_EVT;
- p_msg->data_mask = data_mask;
- p_msg->p_adv_data_cback = p_adv_data_cback;
- p_msg->p_adv_cfg = p_adv_cfg;
-
- bta_sys_sendmsg(p_msg);
- }
+ tBTA_DM_API_SET_ADV_CONFIG *p_msg = GKI_getbuf(sizeof(*p_msg));
+ if (!p_msg) return;
+
+ memset(p_msg, 0, sizeof(*p_msg));
+ p_msg->hdr.event = BTA_DM_API_BLE_SET_SCAN_RSP_EVT;
+ p_msg->data_mask = data_mask;
+ p_msg->p_adv_data_cback = p_adv_data_cback;
+ memcpy(&p_msg->adv_cfg, p_adv_cfg, sizeof(p_msg->adv_cfg));
+ bta_sys_sendmsg(p_msg);
}
/*******************************************************************************
tBTA_BLE_AD_MASK data_mask,
tBTA_BLE_ADV_DATA *p_data)
{
- tBTA_DM_API_BLE_MULTI_ADV_DATA *p_msg;
- UINT16 len = sizeof(tBTA_DM_API_BLE_MULTI_ADV_DATA) ;
-
- APPL_TRACE_API ("BTA_BleCfgAdvInstData");
-
- if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_DATA *) GKI_getbuf(len)) != NULL)
- {
- memset(p_msg, 0, len);
- p_msg->hdr.event = BTA_DM_API_BLE_MULTI_ADV_DATA_EVT;
- p_msg->inst_id = inst_id;
- p_msg->is_scan_rsp = is_scan_rsp;
- p_msg->data_mask = data_mask;
- p_msg->p_data = p_data;
-
- bta_sys_sendmsg(p_msg);
- }
+ tBTA_DM_API_BLE_MULTI_ADV_DATA *p_msg = GKI_getbuf(sizeof(*p_msg));
+ if (!p_msg) return;
+
+ memset(p_msg, 0, sizeof(*p_msg));
+ p_msg->hdr.event = BTA_DM_API_BLE_MULTI_ADV_DATA_EVT;
+ p_msg->inst_id = inst_id;
+ p_msg->is_scan_rsp = is_scan_rsp;
+ p_msg->data_mask = data_mask;
+ memcpy(&p_msg->data, p_data, sizeof(p_msg->data));
+ bta_sys_sendmsg(p_msg);
}
/*******************************************************************************
UINT8 inst_id;
BOOLEAN is_scan_rsp;
tBTA_BLE_AD_MASK data_mask;
- tBTA_BLE_ADV_DATA *p_data;
+ tBTA_BLE_ADV_DATA data;
}tBTA_DM_API_BLE_MULTI_ADV_DATA;
typedef struct
{
BT_HDR hdr;
UINT32 data_mask;
- tBTA_BLE_ADV_DATA *p_adv_cfg;
+ tBTA_BLE_ADV_DATA adv_cfg;
tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback;
}tBTA_DM_API_SET_ADV_CONFIG;
#define BTA_DM_BLE_AD_BIT_RANDOM_ADDR BTM_BLE_AD_BIT_RANDOM_ADDR
#define BTA_DM_BLE_AD_BIT_SERVICE_128 BTM_BLE_AD_BIT_SERVICE_128 /*128-bit Service UUIDs*/
-typedef tBTM_BLE_AD_MASK tBTA_BLE_AD_MASK;
-
-/* slave preferred connection interval range */
-typedef struct
-{
- UINT16 low;
- UINT16 hi;
-
-}tBTA_BLE_INT_RANGE;
-
-/* Service tag supported in the device */
-typedef struct
-{
- UINT8 num_service;
- BOOLEAN list_cmpl;
- UINT16 *p_uuid;
-}tBTA_BLE_SERVICE;
-
-
-typedef struct
-{
- UINT8 len;
- UINT8 *p_val;
-}tBTA_BLE_MANU;
-
-typedef struct
-{
- UINT8 adv_type;
- UINT8 len;
- UINT8 *p_val; /* number of len byte */
-}tBTA_BLE_PROP_ELEM;
-
-/* vendor proprietary adv type */
-typedef struct
-{
- UINT8 num_elem;
- tBTA_BLE_PROP_ELEM *p_elem;
-}tBTA_BLE_PROPRIETARY;
-
-typedef struct
-{
- tBT_UUID service_uuid;
- UINT8 len;
- UINT8 *p_val;
-}tBTA_BLE_SERVICE_DATA;
-
+typedef tBTM_BLE_AD_MASK tBTA_BLE_AD_MASK;
+typedef tBTM_BLE_INT_RANGE tBTA_BLE_INT_RANGE;
+typedef tBTM_BLE_SERVICE tBTA_BLE_SERVICE;
+typedef tBTM_BLE_PROP_ELEM tBTA_BLE_PROP_ELEM;
+typedef tBTM_BLE_PROPRIETARY tBTA_BLE_PROPRIETARY;
+typedef tBTM_BLE_MANU tBTA_BLE_MANU;
+typedef tBTM_BLE_SERVICE_DATA tBTA_BLE_SERVICE_DATA;
typedef tBTM_BLE_128SERVICE tBTA_BLE_128SERVICE;
typedef tBTM_BLE_32SERVICE tBTA_BLE_32SERVICE;
typedef struct
{
tBTA_BLE_INT_RANGE int_range; /* slave prefered conn interval range */
- tBTA_BLE_MANU *p_manu; /* manufacturer data */
- tBTA_BLE_SERVICE *p_services; /* 16 bits services */
- tBTA_BLE_128SERVICE *p_services_128b; /* 128 bits service */
- tBTA_BLE_32SERVICE *p_service_32b; /* 32 bits Service UUID */
- tBTA_BLE_SERVICE *p_sol_services; /* 16 bits services Solicitation UUIDs */
- tBTA_BLE_32SERVICE *p_sol_service_32b; /* List of 32 bit Service Solicitation UUIDs */
- tBTA_BLE_128SERVICE *p_sol_service_128b;/* List of 128 bit Service Solicitation UUIDs */
- tBTA_BLE_PROPRIETARY *p_proprietary; /* proprietary data */
- tBTA_BLE_SERVICE_DATA *p_service_data; /* service data */
+ tBTA_BLE_MANU manu; /* manufacturer data */
+ tBTA_BLE_SERVICE services; /* 16 bits services */
+ tBTA_BLE_128SERVICE services_128b; /* 128 bits service */
+ tBTA_BLE_32SERVICE service_32b; /* 32 bits Service UUID */
+ tBTA_BLE_SERVICE sol_services; /* 16 bits services Solicitation UUIDs */
+ tBTA_BLE_32SERVICE sol_service_32b; /* List of 32 bit Service Solicitation UUIDs */
+ tBTA_BLE_128SERVICE sol_service_128b;/* List of 128 bit Service Solicitation UUIDs */
+ tBTA_BLE_PROPRIETARY proprietary; /* proprietary data */
+ tBTA_BLE_SERVICE_DATA service_data; /* service data */
UINT16 appearance; /* appearance data */
UINT8 flag;
UINT8 tx_power;
typedef struct
{
- BOOLEAN is_scan_rsp;
UINT8 client_if;
- UINT16 service_uuid_len;
tBTA_BLE_AD_MASK mask;
tBTA_BLE_ADV_DATA data;
tBTA_BLE_ADV_PARAMS param;
btif_obtain_multi_adv_data_cb();
BTA_BleCfgAdvInstData(
(UINT8)inst_id,
- p_multi_adv_data_cb->inst_cb[cbindex].is_scan_rsp,
+ p_adv_data->set_scan_rsp,
p_multi_adv_data_cb->inst_cb[cbindex].mask,
&p_multi_adv_data_cb->inst_cb[cbindex].data);
}
if (NULL == p_multi_adv_data_cb || cbindex < 0)
return false;
- BTIF_TRACE_DEBUG("%s", __FUNCTION__);
- memset(&p_multi_adv_data_cb->inst_cb[cbindex].data, 0, sizeof(tBTA_BLE_ADV_DATA));
+ BTIF_TRACE_DEBUG("%s", __func__);
+
+ memset(&p_multi_adv_data_cb->inst_cb[cbindex].data, 0,
+ sizeof(p_multi_adv_data_cb->inst_cb[cbindex].data));
p_multi_adv_data_cb->inst_cb[cbindex].mask = 0;
- p_multi_adv_data_cb->inst_cb[cbindex].is_scan_rsp = p_adv_data->set_scan_rsp ? 1 : 0;
if (!p_adv_data->set_scan_rsp)
{
p_multi_adv_data_cb->inst_cb[cbindex].mask = BTM_BLE_AD_BIT_FLAGS;
p_multi_adv_data_cb->inst_cb[cbindex].data.appearance = p_adv_data->appearance;
}
- if (p_adv_data->manufacturer_len > 0 && p_adv_data->p_manufacturer_data != NULL)
+ if (p_adv_data->manufacturer_len > 0 &&
+ p_adv_data->p_manufacturer_data != NULL &&
+ p_adv_data->manufacturer_len < MAX_SIZE_MANUFACTURER_DATA)
{
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu =
- GKI_getbuf(sizeof(tBTA_BLE_MANU));
- if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu != NULL)
- {
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val =
- GKI_getbuf(p_adv_data->manufacturer_len);
- if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val != NULL)
- {
- p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_MANU;
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->len =
- p_adv_data->manufacturer_len;
- memcpy(p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val,
- p_adv_data->p_manufacturer_data, p_adv_data->manufacturer_len);
- }
- }
+ p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_MANU;
+ p_multi_adv_data_cb->inst_cb[cbindex].data.manu.len =
+ p_adv_data->manufacturer_len;
+ memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].data.manu.val,
+ p_adv_data->p_manufacturer_data, p_adv_data->manufacturer_len);
}
- tBTA_BLE_PROP_ELEM *p_elem_service_data = NULL;
- if (p_adv_data->service_data_len > 0 && p_adv_data->p_service_data != NULL)
+ if (p_adv_data->service_data_len > 0 &&
+ p_adv_data->p_service_data != NULL &&
+ p_adv_data->service_data_len < MAX_SIZE_PROPRIETARY_ELEMENT)
{
- BTIF_TRACE_DEBUG("%s - In service_data", __FUNCTION__);
- p_elem_service_data = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM));
- if (p_elem_service_data != NULL)
- {
- p_elem_service_data->p_val = GKI_getbuf(p_adv_data->service_data_len);
- if (p_elem_service_data->p_val != NULL)
- {
- p_elem_service_data->adv_type = BTM_BLE_AD_TYPE_SERVICE_DATA;
- p_elem_service_data->len = p_adv_data->service_data_len;
- memcpy(p_elem_service_data->p_val, p_adv_data->p_service_data,
- p_adv_data->service_data_len);
- } else {
- GKI_freebuf(p_elem_service_data);
- p_elem_service_data = NULL;
- }
- }
- }
+ BTIF_TRACE_DEBUG("%s - In service_data", __func__);
+ tBTA_BLE_PROPRIETARY *p_prop = &p_multi_adv_data_cb->inst_cb[cbindex].data.proprietary;
+ p_prop->num_elem = 1;
- if (NULL != p_elem_service_data)
- {
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary =
- GKI_getbuf(sizeof(tBTA_BLE_PROPRIETARY));
- if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary)
- {
- tBTA_BLE_PROP_ELEM *p_elem = NULL;
- tBTA_BLE_PROPRIETARY *p_prop = p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary;
- p_prop->num_elem = 0;
- p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_PROPRIETARY;
- p_prop->num_elem = 1;
- p_prop->p_elem = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM) * p_prop->num_elem);
- p_elem = p_prop->p_elem;
- if (NULL != p_elem)
- memcpy(p_elem++, p_elem_service_data, sizeof(tBTA_BLE_PROP_ELEM));
- GKI_freebuf(p_elem_service_data);
- }
+ tBTA_BLE_PROP_ELEM *p_elem = &p_prop->elem[0];
+ p_elem->adv_type = BTM_BLE_AD_TYPE_SERVICE_DATA;
+ p_elem->len = p_adv_data->service_data_len;
+ memcpy(p_elem->val, p_adv_data->p_service_data,
+ p_adv_data->service_data_len);
+
+ p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_PROPRIETARY;
}
if (p_adv_data->service_uuid_len && p_adv_data->p_service_uuid)
{
case (LEN_UUID_16):
{
- if (NULL == p_multi_adv_data_cb->inst_cb[cbindex].data.p_services)
+ if (p_multi_adv_data_cb->inst_cb[cbindex].data.services.num_service == 0)
{
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_services =
- GKI_getbuf(sizeof(tBTA_BLE_SERVICE));
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->list_cmpl = FALSE;
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service = 0;
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid =
- GKI_getbuf(p_adv_data->service_uuid_len / LEN_UUID_128 * LEN_UUID_16);
- p_uuid_out16 = p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid;
+ p_multi_adv_data_cb->inst_cb[cbindex].data.services.list_cmpl = FALSE;
+ p_uuid_out16 = p_multi_adv_data_cb->inst_cb[cbindex].data.services.uuid;
}
- if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid)
+ if (p_multi_adv_data_cb->inst_cb[cbindex].data.services.num_service < MAX_16BIT_SERVICES)
{
- BTIF_TRACE_DEBUG("%s - In 16-UUID_data", __FUNCTION__);
+ BTIF_TRACE_DEBUG("%s - In 16-UUID_data", __func__);
p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE;
- ++p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service;
+ ++p_multi_adv_data_cb->inst_cb[cbindex].data.services.num_service;
*p_uuid_out16++ = bt_uuid.uu.uuid16;
}
break;
case (LEN_UUID_32):
{
- if (NULL == p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b)
+ if (p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.num_service == 0)
{
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b =
- GKI_getbuf(sizeof(tBTA_BLE_32SERVICE));
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->list_cmpl = FALSE;
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->num_service = 0;
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->p_uuid =
- GKI_getbuf(p_adv_data->service_uuid_len / LEN_UUID_128 * LEN_UUID_32);
- p_uuid_out32 = p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->p_uuid;
+ p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.list_cmpl = FALSE;
+ p_uuid_out32 = p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.uuid;
}
- if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->p_uuid)
+ if (p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.num_service < MAX_32BIT_SERVICES)
{
- BTIF_TRACE_DEBUG("%s - In 32-UUID_data", __FUNCTION__);
+ BTIF_TRACE_DEBUG("%s - In 32-UUID_data", __func__);
p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE_32;
- ++p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->num_service;
+ ++p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.num_service;
*p_uuid_out32++ = bt_uuid.uu.uuid32;
}
break;
case (LEN_UUID_128):
{
/* Currently, only one 128-bit UUID is supported */
- if (NULL == p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b)
+ if (p_multi_adv_data_cb->inst_cb[cbindex].data.services_128b.num_service == 0)
{
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b =
- GKI_getbuf(sizeof(tBTA_BLE_128SERVICE));
- if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b)
- {
- BTIF_TRACE_DEBUG("%s - In 128-UUID_data", __FUNCTION__);
- p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE_128;
- memcpy(p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b->uuid128,
- bt_uuid.uu.uuid128, LEN_UUID_128);
- BTIF_TRACE_DEBUG("%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x", bt_uuid.uu.uuid128[0],
- bt_uuid.uu.uuid128[1],bt_uuid.uu.uuid128[2], bt_uuid.uu.uuid128[3],
- bt_uuid.uu.uuid128[4],bt_uuid.uu.uuid128[5],bt_uuid.uu.uuid128[6],
- bt_uuid.uu.uuid128[7],bt_uuid.uu.uuid128[8],bt_uuid.uu.uuid128[9],
- bt_uuid.uu.uuid128[10],bt_uuid.uu.uuid128[11],bt_uuid.uu.uuid128[12],
- bt_uuid.uu.uuid128[13],bt_uuid.uu.uuid128[14],bt_uuid.uu.uuid128[15]);
- p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b->list_cmpl = TRUE;
- }
+ BTIF_TRACE_DEBUG("%s - In 128-UUID_data", __FUNCTION__);
+ p_multi_adv_data_cb->inst_cb[cbindex].mask |=
+ BTM_BLE_AD_BIT_SERVICE_128;
+ memcpy(p_multi_adv_data_cb->inst_cb[cbindex]
+ .data.services_128b.uuid128,
+ bt_uuid.uu.uuid128, LEN_UUID_128);
+ BTIF_TRACE_DEBUG(
+ "%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x",
+ bt_uuid.uu.uuid128[0], bt_uuid.uu.uuid128[1],
+ bt_uuid.uu.uuid128[2], bt_uuid.uu.uuid128[3],
+ bt_uuid.uu.uuid128[4], bt_uuid.uu.uuid128[5],
+ bt_uuid.uu.uuid128[6], bt_uuid.uu.uuid128[7],
+ bt_uuid.uu.uuid128[8], bt_uuid.uu.uuid128[9],
+ bt_uuid.uu.uuid128[10], bt_uuid.uu.uuid128[11],
+ bt_uuid.uu.uuid128[12], bt_uuid.uu.uuid128[13],
+ bt_uuid.uu.uuid128[14], bt_uuid.uu.uuid128[15]);
+ ++p_multi_adv_data_cb->inst_cb[cbindex]
+ .data.services_128b.num_service;
+ p_multi_adv_data_cb->inst_cb[cbindex]
+ .data.services_128b.list_cmpl = TRUE;
}
break;
}
STD_ADV_INSTID : btif_gattc_obtain_idx_for_datacb(inst_id, INST_ID_IDX);
if (cbindex < 0) return;
- BTIF_TRACE_DEBUG("Cleaning up multi_inst_cb for inst_id %d, cbindex %d", inst_id, cbindex);
+ BTIF_TRACE_DEBUG("%s: inst_id %d, cbindex %d", __func__, inst_id, cbindex);
btif_gattc_cleanup_multi_inst_cb(&p_multi_adv_data_cb->inst_cb[cbindex], stop_timer);
}
p_multi_inst_cb->tle_limited_timer.in_use = 0;
}
- // Manufacturer data cleanup
- if (p_multi_inst_cb->data.p_manu != NULL)
- {
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_manu->p_val);
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_manu);
- }
-
- // Proprietary data cleanup
- if (p_multi_inst_cb->data.p_proprietary != NULL)
- {
- int i = 0;
- tBTA_BLE_PROP_ELEM *p_elem = p_multi_inst_cb->data.p_proprietary->p_elem;
- while (i++ != p_multi_inst_cb->data.p_proprietary->num_elem
- && p_elem)
- {
- btif_gattc_cleanup((void**) &p_elem->p_val);
- ++p_elem;
- }
-
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_proprietary->p_elem);
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_proprietary);
- }
-
- // Service list cleanup
- if (p_multi_inst_cb->data.p_services != NULL)
- {
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_services->p_uuid);
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_services);
- }
-
- // Service data cleanup
- if (p_multi_inst_cb->data.p_service_data != NULL)
- {
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_data->p_val);
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_data);
- }
-
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_services_128b);
-
- if (p_multi_inst_cb->data.p_service_32b != NULL)
- {
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_32b->p_uuid);
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_32b);
- }
-
- if (p_multi_inst_cb->data.p_sol_services != NULL)
- {
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_services->p_uuid);
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_services);
- }
-
- if (p_multi_inst_cb->data.p_sol_service_32b != NULL)
- {
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_service_32b->p_uuid);
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_service_32b);
- }
-
- btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_service_128b);
+ memset(&p_multi_inst_cb->data, 0, sizeof(p_multi_inst_cb->data));
}
void btif_gattc_cleanup(void** buf)
UINT8 rsp_data[BTM_BLE_AD_DATA_LEN],
*p = rsp_data;
- BTM_TRACE_EVENT (" BTM_BleWriteScanRsp");
-
+ BTM_TRACE_EVENT ("%s: data_mask:%08x", __func__, data_mask);
if (!controller_get_interface()->supports_ble())
return BTM_ILLEGAL_VALUE;
UINT8 *p = p_adv;
UINT8 length;
UINT8 adv_type;
- BTM_TRACE_API("BTM_CheckAdvData type=0x%02X", type);
+ BTM_TRACE_API("%s: type=0x%02x", __func__, type);
STREAM_TO_UINT8(length, p);
#endif
/* manufacturer data */
if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_MANU &&
- p_data && p_data->p_manu &&
- p_data->p_manu->len != 0 && p_data->p_manu->p_val)
+ p_data && p_data->manu.len != 0)
{
- if (p_data->p_manu->len > (len - MIN_ADV_LENGTH))
+ if (p_data->manu.len > (len - MIN_ADV_LENGTH))
cp_len = len - MIN_ADV_LENGTH;
else
- cp_len = p_data->p_manu->len;
+ cp_len = p_data->manu.len;
*p++ = cp_len + 1;
*p++ = BTM_BLE_AD_TYPE_MANU;
- ARRAY_TO_STREAM(p, p_data->p_manu->p_val, cp_len);
+ ARRAY_TO_STREAM(p, p_data->manu.val, cp_len);
len -= (cp_len + MIN_ADV_LENGTH);
data_mask &= ~BTM_BLE_AD_BIT_MANU;
}
/* 16 bits services */
if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_SERVICE &&
- p_data && p_data->p_services &&
- p_data->p_services->num_service != 0 &&
- p_data->p_services->p_uuid)
+ p_data && p_data->services.num_service != 0)
{
- if (p_data->p_services->num_service * LEN_UUID_16 > (len - MIN_ADV_LENGTH))
+ if (p_data->services.num_service * LEN_UUID_16 > (len - MIN_ADV_LENGTH))
{
cp_len = (len - MIN_ADV_LENGTH)/LEN_UUID_16;
*p ++ = 1 + cp_len * LEN_UUID_16;
}
else
{
- cp_len = p_data->p_services->num_service;
+ cp_len = p_data->services.num_service;
*p++ = 1 + cp_len * LEN_UUID_16;
*p++ = BTM_BLE_AD_TYPE_16SRV_CMPL;
}
for (i = 0; i < cp_len; i ++)
{
- UINT16_TO_STREAM(p, *(p_data->p_services->p_uuid + i));
+ UINT16_TO_STREAM(p, *(p_data->services.uuid + i));
}
len -= (cp_len * MIN_ADV_LENGTH + MIN_ADV_LENGTH);
}
/* 32 bits service uuid */
if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_SERVICE_32 &&
- p_data && p_data->p_service_32b &&
- p_data->p_service_32b->num_service != 0 &&
- p_data->p_service_32b->p_uuid)
+ p_data && p_data->service_32b.num_service != 0)
{
- if ((p_data->p_service_32b->num_service * LEN_UUID_32) > (len - MIN_ADV_LENGTH))
+ if ((p_data->service_32b.num_service * LEN_UUID_32) > (len - MIN_ADV_LENGTH))
{
cp_len = (len - MIN_ADV_LENGTH)/LEN_UUID_32;
*p ++ = 1 + cp_len * LEN_UUID_32;
}
else
{
- cp_len = p_data->p_service_32b->num_service;
+ cp_len = p_data->service_32b.num_service;
*p++ = 1 + cp_len * LEN_UUID_32;
*p++ = BTM_BLE_AD_TYPE_32SRV_CMPL;
}
for (i = 0; i < cp_len; i ++)
{
- UINT32_TO_STREAM(p, *(p_data->p_service_32b->p_uuid + i));
+ UINT32_TO_STREAM(p, *(p_data->service_32b.uuid + i));
}
len -= (cp_len * LEN_UUID_32 + MIN_ADV_LENGTH);
}
/* 128 bits services */
if (len >= (MAX_UUID_SIZE + 2) && data_mask & BTM_BLE_AD_BIT_SERVICE_128 &&
- p_data && p_data->p_services_128b)
+ p_data && p_data->services_128b.num_service)
{
*p ++ = 1 + MAX_UUID_SIZE;
- if (!p_data->p_services_128b->list_cmpl)
+ if (!p_data->services_128b.list_cmpl)
*p++ = BTM_BLE_AD_TYPE_128SRV_PART;
else
*p++ = BTM_BLE_AD_TYPE_128SRV_CMPL;
- ARRAY_TO_STREAM(p, p_data->p_services_128b->uuid128, MAX_UUID_SIZE);
+ ARRAY_TO_STREAM(p, p_data->services_128b.uuid128, MAX_UUID_SIZE);
len -= (MAX_UUID_SIZE + MIN_ADV_LENGTH);
data_mask &= ~BTM_BLE_AD_BIT_SERVICE_128;
}
/* 32 bits Service Solicitation UUIDs */
if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_SERVICE_32SOL &&
- p_data && p_data->p_sol_service_32b &&
- p_data->p_sol_service_32b->num_service != 0 &&
- p_data->p_sol_service_32b->p_uuid)
+ p_data->sol_service_32b.num_service != 0)
{
- if ((p_data->p_sol_service_32b->num_service * LEN_UUID_32) > (len - MIN_ADV_LENGTH))
+ if ((p_data->sol_service_32b.num_service * LEN_UUID_32) > (len - MIN_ADV_LENGTH))
{
cp_len = (len - MIN_ADV_LENGTH)/LEN_UUID_32;
*p ++ = 1 + cp_len * LEN_UUID_32;
}
else
{
- cp_len = p_data->p_sol_service_32b->num_service;
+ cp_len = p_data->sol_service_32b.num_service;
*p++ = 1 + cp_len * LEN_UUID_32;
}
*p++ = BTM_BLE_AD_TYPE_32SOL_SRV_UUID;
for (i = 0; i < cp_len; i ++)
{
- UINT32_TO_STREAM(p, *(p_data->p_sol_service_32b->p_uuid + i));
+ UINT32_TO_STREAM(p, *(p_data->sol_service_32b.uuid + i));
}
len -= (cp_len * LEN_UUID_32 + MIN_ADV_LENGTH);
}
/* 128 bits Solicitation services UUID */
if (len >= (MAX_UUID_SIZE + MIN_ADV_LENGTH) && data_mask & BTM_BLE_AD_BIT_SERVICE_128SOL &&
- p_data && p_data->p_sol_service_128b)
+ p_data && p_data->sol_service_128b.num_service)
{
*p ++ = 1 + MAX_UUID_SIZE;
*p++ = BTM_BLE_AD_TYPE_128SOL_SRV_UUID;
- ARRAY_TO_STREAM(p, p_data->p_sol_service_128b->uuid128, MAX_UUID_SIZE);
+ ARRAY_TO_STREAM(p, p_data->sol_service_128b.uuid128, MAX_UUID_SIZE);
len -= (MAX_UUID_SIZE + MIN_ADV_LENGTH);
data_mask &= ~BTM_BLE_AD_BIT_SERVICE_128SOL;
}
/* 16bits/32bits/128bits Service Data */
if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_SERVICE_DATA &&
- p_data && p_data->p_service_data->len != 0 && p_data->p_service_data->p_val)
+ p_data && p_data->service_data.len != 0)
{
- if (len > (p_data->p_service_data->service_uuid.len + MIN_ADV_LENGTH))
+ if (len > (p_data->service_data.service_uuid.len + MIN_ADV_LENGTH))
{
- if (p_data->p_service_data->len > (len - MIN_ADV_LENGTH))
- cp_len = len - MIN_ADV_LENGTH- p_data->p_service_data->service_uuid.len;
+ if (p_data->service_data.len > (len - MIN_ADV_LENGTH))
+ cp_len = len - MIN_ADV_LENGTH- p_data->service_data.service_uuid.len;
else
- cp_len = p_data->p_service_data->len;
+ cp_len = p_data->service_data.len;
- *p++ = cp_len + 1 + p_data->p_service_data->service_uuid.len;
- if (p_data->p_service_data->service_uuid.len == LEN_UUID_16)
+ *p++ = cp_len + 1 + p_data->service_data.service_uuid.len;
+ if (p_data->service_data.service_uuid.len == LEN_UUID_16)
{
*p++ = BTM_BLE_AD_TYPE_SERVICE_DATA;
- UINT16_TO_STREAM(p, p_data->p_service_data->service_uuid.uu.uuid16);
+ UINT16_TO_STREAM(p, p_data->service_data.service_uuid.uu.uuid16);
}
- else if (p_data->p_service_data->service_uuid.len == LEN_UUID_32)
+ else if (p_data->service_data.service_uuid.len == LEN_UUID_32)
{
*p++ = BTM_BLE_AD_TYPE_32SERVICE_DATA;
- UINT32_TO_STREAM(p, p_data->p_service_data->service_uuid.uu.uuid32);
+ UINT32_TO_STREAM(p, p_data->service_data.service_uuid.uu.uuid32);
}
else
{
*p++ = BTM_BLE_AD_TYPE_128SERVICE_DATA;
- ARRAY_TO_STREAM(p, p_data->p_service_data->service_uuid.uu.uuid128,
+ ARRAY_TO_STREAM(p, p_data->service_data.service_uuid.uu.uuid128,
LEN_UUID_128);
}
- ARRAY_TO_STREAM(p, p_data->p_service_data->p_val, cp_len);
+ ARRAY_TO_STREAM(p, p_data->service_data.val, cp_len);
- len -= (cp_len + MIN_ADV_LENGTH + p_data->p_service_data->service_uuid.len);
+ len -= (cp_len + MIN_ADV_LENGTH + p_data->service_data.service_uuid.len);
data_mask &= ~BTM_BLE_AD_BIT_SERVICE_DATA;
}
else
len -= 6;
data_mask &= ~BTM_BLE_AD_BIT_INT_RANGE;
}
- if (data_mask & BTM_BLE_AD_BIT_PROPRIETARY && p_data && p_data->p_proprietary)
+ if (data_mask & BTM_BLE_AD_BIT_PROPRIETARY && p_data)
{
- for (i = 0; i < p_data->p_proprietary->num_elem ; i ++)
+ for (i = 0; i < p_data->proprietary.num_elem; ++i)
{
- p_elem = p_data->p_proprietary->p_elem + i;
+ p_elem = &p_data->proprietary.elem[i];
if (len >= (MIN_ADV_LENGTH + p_elem->len))/* len byte(1) + ATTR type(1) + Uuid len(2)
+ value length */
{
*p ++ = p_elem->len + 1; /* Uuid len + value length */
*p ++ = p_elem->adv_type;
- ARRAY_TO_STREAM(p, p_elem->p_val, p_elem->len);
+ ARRAY_TO_STREAM(p, p_elem->val, p_elem->len);
len -= (MIN_ADV_LENGTH + p_elem->len);
}
}tBTM_BLE_INT_RANGE;
/* Service tag supported in the device */
+#define MAX_16BIT_SERVICES 16
typedef struct
{
UINT8 num_service;
BOOLEAN list_cmpl;
- UINT16 *p_uuid;
+ UINT16 uuid[MAX_16BIT_SERVICES];
}tBTM_BLE_SERVICE;
/* 32 bits Service supported in the device */
+#define MAX_32BIT_SERVICES 4
typedef struct
{
UINT8 num_service;
BOOLEAN list_cmpl;
- UINT32 *p_uuid;
+ UINT32 uuid[MAX_32BIT_SERVICES];
}tBTM_BLE_32SERVICE;
/* 128 bits Service supported in the device */
typedef struct
{
+ UINT8 num_service;
BOOLEAN list_cmpl;
UINT8 uuid128[MAX_UUID_SIZE];
}tBTM_BLE_128SERVICE;
+#define MAX_SIZE_MANUFACTURER_DATA 32
typedef struct
{
- UINT8 len;
- UINT8 *p_val;
+ UINT8 len;
+ UINT8 val[MAX_SIZE_MANUFACTURER_DATA];
}tBTM_BLE_MANU;
-
+#define MAX_SIZE_SERVICE_DATA 32
typedef struct
{
tBT_UUID service_uuid;
UINT8 len;
- UINT8 *p_val;
+ UINT8 val[MAX_SIZE_SERVICE_DATA];
}tBTM_BLE_SERVICE_DATA;
+#define MAX_SIZE_PROPRIETARY_ELEMENT 32
typedef struct
{
UINT8 adv_type;
UINT8 len;
- UINT8 *p_val; /* number of len byte */
+ UINT8 val[MAX_SIZE_PROPRIETARY_ELEMENT]; /* number of len byte */
}tBTM_BLE_PROP_ELEM;
+#define MAX_PROPRIETARY_ELEMENTS 4
typedef struct
{
UINT8 num_elem;
- tBTM_BLE_PROP_ELEM *p_elem;
+ tBTM_BLE_PROP_ELEM elem[MAX_PROPRIETARY_ELEMENTS];
}tBTM_BLE_PROPRIETARY;
typedef struct
{
tBTM_BLE_INT_RANGE int_range; /* slave prefered conn interval range */
- tBTM_BLE_MANU *p_manu; /* manufactuer data */
- tBTM_BLE_SERVICE *p_services; /* services */
- tBTM_BLE_128SERVICE *p_services_128b; /* 128 bits service */
- tBTM_BLE_32SERVICE *p_service_32b; /* 32 bits Service UUID */
- tBTM_BLE_SERVICE *p_sol_services; /* 16 bits services Solicitation UUIDs */
- tBTM_BLE_32SERVICE *p_sol_service_32b; /* List of 32 bit Service Solicitation UUIDs */
- tBTM_BLE_128SERVICE *p_sol_service_128b; /* List of 128 bit Service Solicitation UUIDs */
- tBTM_BLE_PROPRIETARY *p_proprietary;
- tBTM_BLE_SERVICE_DATA *p_service_data; /* service data */
+ tBTM_BLE_MANU manu; /* manufactuer data */
+ tBTM_BLE_SERVICE services; /* services */
+ tBTM_BLE_128SERVICE services_128b; /* 128 bits service */
+ tBTM_BLE_32SERVICE service_32b; /* 32 bits Service UUID */
+ tBTM_BLE_SERVICE sol_services; /* 16 bits services Solicitation UUIDs */
+ tBTM_BLE_32SERVICE sol_service_32b; /* List of 32 bit Service Solicitation UUIDs */
+ tBTM_BLE_128SERVICE sol_service_128b; /* List of 128 bit Service Solicitation UUIDs */
+ tBTM_BLE_PROPRIETARY proprietary;
+ tBTM_BLE_SERVICE_DATA service_data; /* service data */
UINT16 appearance;
UINT8 flag;
UINT8 tx_power;