am 66988a02: This patch contains bug fixes for solving race conditions for multiple advertisers and incorrect VS command length which makes uuid filters not working.
* commit '66988a022d219f5385b3f76e3ae26566ad80fb86':
This patch contains bug fixes for solving race conditions for multiple advertisers and incorrect VS command length which makes uuid filters not working.
diff --git a/stack/btm/btm_ble_gap.c b/stack/btm/btm_ble_gap.c
index 5ec5f3a..7337e1a 100644
--- a/stack/btm/btm_ble_gap.c
+++ b/stack/btm/btm_ble_gap.c
@@ -430,10 +430,12 @@
*******************************************************************************/
static void btm_ble_vendor_capability_vsc_cmpl_cback (tBTM_VSC_CMPL *p_vcs_cplt_params)
{
+ BTM_TRACE_EVENT0 ("btm_ble_vendor_capability_vsc_cmpl_cback");
UINT8 status = 0xFF, *p;
UINT8 rpa_offloading, max_irk_list_sz, filtering_support, max_filter;
UINT16 scan_result_storage;
-
+ tBTM_BLE_VENDOR_CB *p_vcb = &btm_ble_vendor_cb;
+ max_irk_list_sz = 0;
/* Check status of command complete event */
if((p_vcs_cplt_params->opcode == HCI_BLE_VENDOR_CAP_OCF)
&&(p_vcs_cplt_params->param_len > 0 ))
@@ -451,6 +453,8 @@
STREAM_TO_UINT8 (filtering_support, p);
STREAM_TO_UINT8 (max_filter, p);
}
+ p_vcb->irk_avail_size = max_irk_list_sz;
+ BTM_TRACE_EVENT3 ("btm_ble_vendor_capability_vsc_cmpl_cback:%d, status=%d, max_irk_size=%d", btm_multi_adv_cb.adv_inst_max, status,btm_ble_vendor_cb.irk_avail_size);
}
/*******************************************************************************
@@ -464,6 +468,8 @@
*******************************************************************************/
void btm_ble_vendor_capability_init(void)
{
+ BTM_TRACE_ERROR0("btm_ble_vendor_capability_init");
+ memset(&btm_ble_vendor_cb, 0, sizeof(tBTM_BLE_VENDOR_CB));
if ( BTM_VendorSpecificCommand (HCI_BLE_VENDOR_CAP_OCF,
0,
NULL,
diff --git a/stack/btm/btm_devctl.c b/stack/btm/btm_devctl.c
index 8117c45..35d9932 100644
--- a/stack/btm/btm_devctl.c
+++ b/stack/btm/btm_devctl.c
@@ -671,6 +671,8 @@
btm_cb.ble_ctr_cb.p_select_cback = NULL;
memset(&btm_cb.ble_ctr_cb.bg_dev_list, 0, (sizeof(tBTM_LE_BG_CONN_DEV)*BTM_BLE_MAX_BG_CONN_DEV_NUM));
gatt_reset_bgdev_list();
+ btm_ble_multi_adv_init();
+ btm_ble_vendor_capability_init();
#endif
}
}
diff --git a/stack/include/btm_ble_api.h b/stack/include/btm_ble_api.h
index 2bb8434..65296f6 100644
--- a/stack/include/btm_ble_api.h
+++ b/stack/include/btm_ble_api.h
@@ -784,6 +784,7 @@
**
*******************************************************************************/
BTM_API extern void BTM_BleSetConnScanParams (UINT16 scan_interval, UINT16 scan_window);
+BTM_API extern void btm_ble_vendor_capability_init(void);
/*******************************************************************************
**
diff --git a/stack/l2cap/l2c_ble.c b/stack/l2cap/l2c_ble.c
index b1af837..59a597a 100644
--- a/stack/l2cap/l2c_ble.c
+++ b/stack/l2cap/l2c_ble.c
@@ -630,7 +630,7 @@
if (p_dev_rec->ble.active_addr_type == BTM_BLE_ADDR_RRA)
{
init_addr_type = BLE_ADDR_RANDOM;
- memcpy(init_addr, p_dev_rec->ble.cur_rand_addr, BD_ADDR_LEN);
+ //memcpy(init_addr, p_dev_rec->ble.cur_rand_addr, BD_ADDR_LEN);
}
/* if privacy is on and current do not consider using reconnection address */
if (btm_cb.ble_ctr_cb.privacy ) /* && p_dev_rec->ble.use_reconn_addr */
diff --git a/vnd/ble/vendor_ble.c b/vnd/ble/vendor_ble.c
index db1dadf..e0cccca 100644
--- a/vnd/ble/vendor_ble.c
+++ b/vnd/ble/vendor_ble.c
@@ -105,7 +105,6 @@
return;
}
op_subcode = *p ++;
-
switch (op_subcode)
{
case BTM_BLE_META_PF_LOCAL_NAME:
@@ -530,7 +529,7 @@
{
UINT8 param[BTM_BLE_META_UUID_LEN + BTM_BLE_META_HDR_LENGTH],
* p= param,
- len = BTM_BLE_META_HDR_LENGTH + 7;
+ len = BTM_BLE_META_HDR_LENGTH;
tBTM_STATUS st = BTM_ILLEGAL_VALUE;
tBTM_BLE_PF_UUID_COND *p_uuid_cond;
UINT8 evt_type;
@@ -1153,14 +1152,19 @@
evt_len--;
+ /*if (evt_len < 2 )
+ {
+ BTM_TRACE_ERROR0("can not interpret IRK VSC cmpl callback");
+ return;
+ }*/
+ op_subcode = *p ++;
+ BTM_TRACE_DEBUG1("btm_ble_vendor_irk_vsc_op_cmpl op_subcode = %d", op_subcode);
if (evt_len < 2 )
{
BTM_TRACE_ERROR0("can not interpret IRK VSC cmpl callback");
return;
}
- op_subcode = *p ++;
- BTM_TRACE_DEBUG1("btm_ble_vendor_irk_vsc_op_cmpl op_subcode = %d", op_subcode);
if (op_subcode == BTM_BLE_META_CLEAR_IRK_LIST)
{
@@ -1386,7 +1390,7 @@
tBTM_BLE_VENDOR_CB *p_cb = &btm_ble_vendor_cb;
BOOLEAN rt = FALSE;
tBTM_BLE_IRK_ENTRY *p_irk_entry = NULL;
-
+ BTM_TRACE_DEBUG1 ("btm_ble_vendor_irk_list_load_dev:max_irk_size=%d", p_cb->irk_avail_size);
memset(param, 0, 40);
if (p_dev_rec != NULL && /* RPA is being used and PID is known */
@@ -1523,7 +1527,7 @@
*******************************************************************************/
void btm_ble_vendor_init(void)
{
- memset(&btm_ble_vendor_cb, 0, sizeof(tBTM_BLE_VENDOR_CB));
+ //memset(&btm_ble_vendor_cb, 0, sizeof(tBTM_BLE_VENDOR_CB));
if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1]))
return;
diff --git a/vnd/include/vendor_ble.h b/vnd/include/vendor_ble.h
index 6cd587d..39c529e 100644
--- a/vnd/include/vendor_ble.h
+++ b/vnd/include/vendor_ble.h
@@ -40,7 +40,7 @@
#define BTM_BLE_IRK_ENABLE_LEN 2
/* BLE meta vsc header: 1 bytes of sub_code, 1 byte of PCF action */
-#define BTM_BLE_META_HDR_LENGTH 2
+#define BTM_BLE_META_HDR_LENGTH 3
#define BTM_BLE_PF_FEAT_SEL_LEN 18
#define BTM_BLE_PCF_ENABLE_LEN 2
#define BTM_BLE_META_ADDR_LEN 7