Merge "ble: use appearance uuid to determine class of device"
diff --git a/stack/btm/btm_ble_gap.c b/stack/btm/btm_ble_gap.c
index 6d53a6c..e60aa09 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 164aa56..3e1bf7b 100644
--- a/stack/include/btm_ble_api.h
+++ b/stack/include/btm_ble_api.h
@@ -836,6 +836,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