]> granicus.if.org Git - esp-idf/commitdiff
component/bt: add clear rand address API
authorzwj <zhiweijian@espressif.com>
Mon, 27 Aug 2018 13:32:39 +0000 (21:32 +0800)
committerchensheng <chensheng@espressif.com>
Mon, 17 Sep 2018 12:09:03 +0000 (20:09 +0800)
19 files changed:
components/bt/bluedroid/api/esp_gap_ble_api.c
components/bt/bluedroid/api/include/api/esp_gap_ble_api.h
components/bt/bluedroid/bta/dm/bta_dm_act.c
components/bt/bluedroid/bta/dm/bta_dm_api.c
components/bt/bluedroid/bta/dm/bta_dm_main.c
components/bt/bluedroid/bta/dm/include/bta_dm_int.h
components/bt/bluedroid/bta/include/bta/bta_api.h
components/bt/bluedroid/btc/profile/std/gap/btc_gap_ble.c
components/bt/bluedroid/btc/profile/std/include/btc_gap_ble.h
components/bt/bluedroid/stack/btm/btm_ble_addr.c
components/bt/bluedroid/stack/btm/btm_ble_gap.c
components/bt/bluedroid/stack/btm/btm_dev.c
components/bt/bluedroid/stack/btm/include/btm_ble_int.h
components/bt/bluedroid/stack/include/stack/btm_ble_api.h
components/bt/bluedroid/stack/l2cap/l2c_ble.c
components/bt/bluedroid/stack/l2cap/l2c_utils.c
components/bt/bluedroid/stack/smp/smp_utils.c
components/idf_test/integration_test/INIT_COND_SSC.yml
components/idf_test/integration_test/TC_IT_BTSTK_GAP.yml

index 0dcd89cfeedfc4200fbb6d50ae7a96adac02a522..9c444bb13e59dec2ab7d33a12ea44151761883f6 100644 (file)
@@ -179,6 +179,18 @@ esp_err_t esp_ble_gap_set_rand_addr(esp_bd_addr_t rand_addr)
     return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
 }
 
+esp_err_t esp_ble_gap_clear_rand_addr(void)
+{
+    btc_msg_t msg;
+
+    ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
+
+    msg.sig = BTC_SIG_API_CALL;
+    msg.pid = BTC_PID_GAP_BLE;
+    msg.act = BTC_GAP_BLE_ACT_CLEAR_RAND_ADDRESS;
+
+    return (btc_transfer_context(&msg, NULL, 0, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
+}
 
 esp_err_t esp_ble_gap_config_local_privacy (bool privacy_enable)
 {
index d4bb690793b29e359f2a0fd94200719730fb98e4..c4a5b95f9f6479865eac26f08b3565ddc49f1f23 100644 (file)
@@ -820,10 +820,8 @@ esp_err_t esp_ble_gap_update_conn_params(esp_ble_conn_update_params_t *params);
  */
 esp_err_t esp_ble_gap_set_pkt_data_len(esp_bd_addr_t remote_device, uint16_t tx_data_length);
 
-
-
 /**
- * @brief           This function set the random address for the application
+ * @brief           This function sets the random address for the application
  *
  * @param[in]       rand_addr: the random address which should be setting
  *
@@ -834,6 +832,16 @@ esp_err_t esp_ble_gap_set_pkt_data_len(esp_bd_addr_t remote_device, uint16_t tx_
  */
 esp_err_t esp_ble_gap_set_rand_addr(esp_bd_addr_t rand_addr);
 
+/**
+ * @brief           This function clears the random address for the application
+ *
+ * @return
+ *                  - ESP_OK : success
+ *                  - other  : failed
+ *
+ */
+esp_err_t esp_ble_gap_clear_rand_addr(void);
+
 
 
 /**
index ab04118e8cb14691effbfa50eee25653d1e63a1c..26d71f06c3686c3d6edfd48e4afca29d478061d9 100644 (file)
@@ -765,6 +765,8 @@ void bta_dm_remove_device(tBTA_DM_MSG *p_data)
     if (continue_delete_dev) {
         bta_dm_process_remove_device(p_dev->bd_addr, transport);
     }
+
+    BTM_ClearInqDb (p_dev->bd_addr);
 }
 
 /*******************************************************************************
@@ -4687,6 +4689,12 @@ void bta_dm_ble_set_rand_address(tBTA_DM_MSG *p_data)
 
 }
 
+void bta_dm_ble_clear_rand_address(tBTA_DM_MSG *p_data)
+{
+    UNUSED(p_data);
+    BTM_BleClearRandAddress();
+}
+
 /*******************************************************************************
 **
 ** Function         bta_dm_ble_stop_advertising
index 83229e3ce0e58d7ac3310a67df5fff9924790fa8..a20a6efab9d59e21f92be25749bd205dd215112d 100644 (file)
@@ -2392,6 +2392,16 @@ extern void BTA_DmSetRandAddress(BD_ADDR rand_addr, tBTA_SET_RAND_ADDR_CBACK *p_
     }
 }
 
+void BTA_DmClearRandAddress(void)
+{
+    tBTA_DM_APT_CLEAR_ADDR *p_msg;
+    if ((p_msg = (tBTA_DM_APT_CLEAR_ADDR *) osi_malloc(sizeof(tBTA_DM_APT_CLEAR_ADDR))) != NULL) {
+        memset(p_msg, 0, sizeof(tBTA_DM_APT_CLEAR_ADDR));
+        p_msg->hdr.event = BTA_DM_API_CLEAR_RAND_ADDR_EVT;
+        bta_sys_sendmsg(p_msg);
+    }
+}
+
 /*******************************************************************************
 **
 ** Function         BTA_VendorInit
index 7f720799cc5984ab47077ef52518f677fccb5782..aa651c267e1024e3564fe8b3d0a67695cf301e9e 100644 (file)
@@ -107,7 +107,8 @@ const tBTA_DM_ACTION bta_dm_action[BTA_DM_MAX_EVT] = {
     /* This handler function added by
        Yulong at 2016/9/9 to support the
        random address setting for the APP */
-    bta_dm_ble_set_rand_address,            /* BTA_DM_API_SET_RAND_ADDR_EVT */
+    bta_dm_ble_set_rand_address,            /* BTA_DM_API_SET_RAND_ADDR_EVT*/
+    bta_dm_ble_clear_rand_address,          /* BTA_DM_API_CLEAR_RAND_ADDR_EVT */
     /* This handler function added by
        Yulong at 2016/10/19 to support
        stop the ble advertising setting
index 7a73c17b9f47d9a5c74ea4fec1ab6203a6897ac6..c54f26728bd45a92d7bf0a0d2c7f20412586456f 100644 (file)
@@ -106,6 +106,7 @@ enum {
     /*******This event added by Yulong at 2016/9/9 to
     support the random address setting for the APP******/
     BTA_DM_API_SET_RAND_ADDR_EVT,
+    BTA_DM_API_CLEAR_RAND_ADDR_EVT,
     /*******This event added by Yulong at 2016/10/19 to
     support stop the ble advertising setting by the APP******/
     BTA_DM_API_BLE_STOP_ADV_EVT,
@@ -571,6 +572,10 @@ typedef struct {
     tBTA_SET_RAND_ADDR_CBACK *p_set_rand_addr_cback;
 } tBTA_DM_APT_SET_DEV_ADDR;
 
+typedef struct {
+    BT_HDR      hdr;
+} tBTA_DM_APT_CLEAR_ADDR;
+
 /* set adv parameter for BLE advertising */
 typedef struct {
     BT_HDR                  hdr;
@@ -829,6 +834,7 @@ typedef union {
     tBTA_DM_API_UPDATE_CONN_PARAM       ble_update_conn_params;
     tBTA_DM_API_BLE_SET_DATA_LENGTH     ble_set_data_length;
     tBTA_DM_APT_SET_DEV_ADDR            set_addr;
+    tBTA_DM_APT_CLEAR_ADDR              clear_addr;
     tBTA_DM_API_BLE_MULTI_ADV_ENB       ble_multi_adv_enb;
     tBTA_DM_API_BLE_MULTI_ADV_PARAM     ble_multi_adv_param;
     tBTA_DM_API_BLE_MULTI_ADV_DATA      ble_multi_adv_data;
@@ -1224,6 +1230,7 @@ extern void bta_dm_ble_scan (tBTA_DM_MSG *p_data);
 extern void bta_dm_ble_update_conn_params (tBTA_DM_MSG *p_data);
 extern void bta_dm_ble_disconnect (tBTA_DM_MSG *p_data);
 extern void bta_dm_ble_set_rand_address(tBTA_DM_MSG *p_data);
+extern void bta_dm_ble_clear_rand_address(tBTA_DM_MSG *p_data);
 extern void bta_dm_ble_stop_advertising(tBTA_DM_MSG *p_data);
 extern void bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data);
 extern void bta_dm_ble_config_local_icon (tBTA_DM_MSG *p_data);
index 15c22ba61a74dff41eecd692a5065d9ec018b054..1546389bed7de4ef9d4c7a7bd5bef91965ce4202 100644 (file)
@@ -2121,6 +2121,7 @@ extern void BTA_DmBleScan(BOOLEAN start, UINT32 duration,
 extern void BTA_DmBleStopAdvertising(void);
 
 extern void BTA_DmSetRandAddress(BD_ADDR rand_addr, tBTA_SET_RAND_ADDR_CBACK *p_set_rand_addr_cback);
+extern void BTA_DmClearRandAddress(void);
 
 #endif
 
index 33e1ea67017f16585457374ebacfc6556f6cd50a..e3c4262f8c128540252f264d367153bee1924d9c 100644 (file)
@@ -839,6 +839,11 @@ static void btc_ble_set_rand_addr (BD_ADDR rand_addr, tBTA_SET_RAND_ADDR_CBACK *
     }
 }
 
+static void btc_ble_clear_rand_addr (void)
+{
+    BTA_DmClearRandAddress();
+}
+
 static void btc_ble_config_local_privacy(bool privacy_enable, tBTA_SET_LOCAL_PRIVACY_CBACK *set_local_privacy_cback)
 {
     BTA_DmBleConfigLocalPrivacy(privacy_enable, set_local_privacy_cback);
@@ -1043,6 +1048,10 @@ void btc_gap_ble_call_handler(btc_msg_t *msg)
         btc_ble_set_rand_addr(bd_addr, btc_set_rand_addr_callback);
         break;
     }
+    case BTC_GAP_BLE_ACT_CLEAR_RAND_ADDRESS: {
+        btc_ble_clear_rand_addr();
+        break;
+    }
     case BTC_GAP_BLE_ACT_CONFIG_LOCAL_PRIVACY:
         btc_ble_config_local_privacy(arg->cfg_local_privacy.privacy_enable, btc_set_local_privacy_callback);
         break;
index c9e0f5645af214a42b13b3becea727d194b665e9..b73759481634075cdcfe82f5b28ddf9796d48b2f 100644 (file)
@@ -30,6 +30,7 @@ typedef enum {
     BTC_GAP_BLE_ACT_UPDATE_CONN_PARAM,
     BTC_GAP_BLE_ACT_SET_PKT_DATA_LEN,
     BTC_GAP_BLE_ACT_SET_RAND_ADDRESS,
+    BTC_GAP_BLE_ACT_CLEAR_RAND_ADDRESS,
     BTC_GAP_BLE_ACT_CONFIG_LOCAL_PRIVACY,
     BTC_GAP_BLE_ACT_CONFIG_LOCAL_ICON,
     BTC_GAP_BLE_ACT_UPDATE_WHITE_LIST,
index 785ed733fd72e665e0d730b4e73e406774c63ff0..730d7895bcb869e8cf42d0d2a41789b928cf2515 100644 (file)
@@ -59,7 +59,8 @@ static void btm_gen_resolve_paddr_cmpl(tSMP_ENC *p)
         /* set it to controller */
         btsnd_hcic_ble_set_random_addr(p_cb->private_addr);
 
-        p_cb->own_addr_type = BLE_ADDR_RANDOM;
+        p_cb->exist_addr_bit |= BTM_BLE_GAP_ADDR_BIT_RESOLVABLE;
+        memcpy(p_cb->resolvale_addr, p_cb->private_addr, BD_ADDR_LEN);
         if (p_cb->set_local_privacy_cback){
             (*p_cb->set_local_privacy_cback)(BTM_SET_PRIVACY_SUCCESS);
             p_cb->set_local_privacy_cback = NULL;
@@ -613,12 +614,7 @@ void btm_ble_refresh_local_resolvable_private_addr(BD_ADDR pseudo_addr,
     BD_ADDR     dummy_bda = {0};
 
     if (p != NULL) {
-/*
- *  Temporary solutions for pair with random address:
- *  use BLE_ADDR_RANDOM when adverting with random adress or in privacy mode
- *  We will do futher work here
- */
-        if (btm_cb.ble_ctr_cb.privacy_mode != BTM_PRIVACY_NONE || btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type == BLE_ADDR_RANDOM) {
+        if (btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type == BLE_ADDR_RANDOM) {
             p->conn_addr_type = BLE_ADDR_RANDOM;
             if (memcmp(local_rpa, dummy_bda, BD_ADDR_LEN)) {
                 memcpy(p->conn_addr, local_rpa, BD_ADDR_LEN);
index 3caab465aab40cb96ccba01c7f204707f31a541e..a3d4b85126d35861095ed03aeef2159200f77d27 100644 (file)
@@ -760,20 +760,6 @@ BOOLEAN BTM_BleConfigPrivacy(BOOLEAN privacy_mode, tBTM_SET_LOCAL_PRIVACY_CBACK
         return FALSE;
     }
 
-/*
- *  Temporary solutions for pair with random address:
- *  can't set privacy when advertising, scaning or using static random address
- *  We will do futher work here
- */
-    if (p_cb->privacy_mode == BTM_PRIVACY_NONE
-        && random_cb->own_addr_type == BLE_ADDR_RANDOM) {
-        BTM_TRACE_ERROR("Have set random adress, can't set privacy ");
-        if (random_cb && random_cb->set_local_privacy_cback){
-            (*random_cb->set_local_privacy_cback)(BTM_SET_PRIVACY_FAIL);
-            random_cb->set_local_privacy_cback = NULL;
-        }
-        return FALSE;
-    }
     if (!(p_cb->inq_var.state == BTM_BLE_STOP_SCAN || p_cb->inq_var.state == BTM_BLE_STOP_ADV || p_cb->inq_var.state == BTM_BLE_IDLE)) {
         BTM_TRACE_ERROR("Advertising or scaning now, can't set privacy ");
         if (random_cb && random_cb->set_local_privacy_cback){
@@ -787,6 +773,8 @@ BOOLEAN BTM_BleConfigPrivacy(BOOLEAN privacy_mode, tBTM_SET_LOCAL_PRIVACY_CBACK
     uint8_t addr_resolution = 0;
 #endif  /* defined(GAP_INCLUDED) && GAP_INCLUDED == TRUE && GATTS_INCLUDED == TRUE */
     if (!privacy_mode) { /* if privacy disabled, always use public address */
+        p_cb->addr_mgnt_cb.exist_addr_bit &= (~BTM_BLE_GAP_ADDR_BIT_RESOLVABLE);
+        memset(p_cb->addr_mgnt_cb.resolvale_addr, 0, BD_ADDR_LEN);
         p_cb->addr_mgnt_cb.own_addr_type = BLE_ADDR_PUBLIC;
         p_cb->privacy_mode = BTM_PRIVACY_NONE;
         if (random_cb && random_cb->set_local_privacy_cback){
@@ -795,7 +783,6 @@ BOOLEAN BTM_BleConfigPrivacy(BOOLEAN privacy_mode, tBTM_SET_LOCAL_PRIVACY_CBACK
         }
     } else { /* privacy is turned on*/
         /* always set host random address, used when privacy 1.1 or priavcy 1.2 is disabled */
-        p_cb->addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM;
         btm_gen_resolvable_private_addr((void *)btm_gen_resolve_paddr_low);
 
         if (BTM_BleMaxMultiAdvInstanceCount() > 0) {
@@ -1232,17 +1219,66 @@ tBTM_STATUS BTM_BleSetAdvParamsStartAdv(UINT16 adv_int_min, UINT16 adv_int_max,
         return BTM_ILLEGAL_VALUE;
     }
 
-/*
- *  Temporary solutions for pair with random address:
- *  can't set advertising with BLE_ADDR_PUBLIC when having set random adress or in privacy mode
- *  We will do futher work here
- */
-    if (btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type == BLE_ADDR_RANDOM && own_bda_type == BLE_ADDR_PUBLIC) {
-        BTM_TRACE_ERROR ("own_addr_type is BLE_ADDR_RANDOM but use BLE_ADDR_PUBLIC\n");
-        if(adv_cb) {
-            (* adv_cb)(HCI_ERR_ESP_VENDOR_FAIL);
+    if(own_bda_type == BLE_ADDR_RANDOM) {
+        if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RANDOM) == BTM_BLE_GAP_ADDR_BIT_RANDOM) { 
+            //close privacy
+            #if BLE_PRIVACY_SPT == TRUE
+            if (btm_cb.ble_ctr_cb.privacy_mode != BTM_PRIVACY_NONE) {
+                BTM_BleConfigPrivacy(FALSE, NULL);
+            }
+            #endif
+            btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM;
+            memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr, BD_ADDR_LEN);
+            // set address to controller 
+            btsnd_hcic_ble_set_random_addr(btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr);
+        } else if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) == BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) {
+            btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM;
+            memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr, BD_ADDR_LEN);
+            btsnd_hcic_ble_set_random_addr(btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr);
+        }else {
+            BTM_TRACE_ERROR ("No random address yet, please set random address and try\n");
+            if(adv_cb) {
+                (* adv_cb)(HCI_ERR_ESP_VENDOR_FAIL);
+            }
+            return BTM_ILLEGAL_VALUE;    
         }
-        return BTM_ILLEGAL_VALUE;
+    } else if(own_bda_type == BLE_ADDR_PUBLIC_ID || own_bda_type == BLE_ADDR_RANDOM_ID) {
+        if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) == BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) {
+            own_bda_type = BLE_ADDR_RANDOM;
+            btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM;
+            memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr, BD_ADDR_LEN);
+            btsnd_hcic_ble_set_random_addr(btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr);
+        } else {
+            #if BLE_PRIVACY_SPT == TRUE
+            if(btm_cb.ble_ctr_cb.privacy_mode != BTM_PRIVACY_NONE) {
+                BTM_TRACE_ERROR ("Error state\n");
+                if(adv_cb) {
+                    (* adv_cb)(HCI_ERR_ESP_VENDOR_FAIL);
+                }
+                return BTM_ILLEGAL_VALUE; 
+            }
+            #endif
+            if(own_bda_type == BLE_ADDR_PUBLIC_ID) {
+                own_bda_type = BLE_ADDR_PUBLIC;
+                btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_PUBLIC;
+            } else { //own_bda_type == BLE_ADDR_RANDOM_ID
+                if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RANDOM) == BTM_BLE_GAP_ADDR_BIT_RANDOM) {
+                    own_bda_type = BLE_ADDR_RANDOM;
+                    btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM;
+                    memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr, BD_ADDR_LEN);
+                    btsnd_hcic_ble_set_random_addr(btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr);
+                } else {
+                    BTM_TRACE_ERROR ("No RPA and no random address yet, please set RPA or random address and try\n");
+                    if(adv_cb) {
+                        (* adv_cb)(HCI_ERR_ESP_VENDOR_FAIL);
+                    }
+                    return BTM_ILLEGAL_VALUE;   
+                }
+            }
+        }
+    } else {
+        btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_PUBLIC;    
     }
 
     if (!BTM_BLE_ISVALID_PARAM(adv_int_min, BTM_BLE_ADV_INT_MIN, BTM_BLE_ADV_INT_MAX) ||
@@ -1414,17 +1450,67 @@ void BTM_BleSetScanFilterParams(tGATT_IF client_if, UINT32 scan_interval, UINT32
         return;
     }
 
-/*
- *  Temporary solutions for pair with random address:
- *  can't set scan with BLE_ADDR_PUBLIC when having set random adress or in privacy mode
- *  We will do futher work here
- */
-    if (btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type == BLE_ADDR_RANDOM && addr_type_own == BLE_ADDR_PUBLIC) {
-        BTM_TRACE_ERROR ("own_addr_type is BLE_ADDR_RANDOM but use BLE_ADDR_PUBLIC\n");
-        if (scan_setup_status_cback != NULL) {
-            scan_setup_status_cback(client_if, BTM_ILLEGAL_VALUE);
+    if(addr_type_own == BLE_ADDR_RANDOM) {
+        if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RANDOM) == BTM_BLE_GAP_ADDR_BIT_RANDOM) {
+            //close privacy
+            #if BLE_PRIVACY_SPT == TRUE
+            if (btm_cb.ble_ctr_cb.privacy_mode != BTM_PRIVACY_NONE) {
+                BTM_BleConfigPrivacy(FALSE, NULL);
+            }
+            #endif
+            btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM; 
+            memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr, BD_ADDR_LEN);
+            // set address to controller 
+            btsnd_hcic_ble_set_random_addr(btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr);
+        } else if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) == BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) {
+            btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM;
+            memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr, BD_ADDR_LEN);
+            btsnd_hcic_ble_set_random_addr(btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr);
+        }else {
+            if (scan_setup_status_cback != NULL) {
+                scan_setup_status_cback(client_if, BTM_ILLEGAL_VALUE);
+            }
+            BTM_TRACE_ERROR ("No random address yet, please set random address and try\n");
+            return;  
         }
-        return;
+    } else if(addr_type_own == BLE_ADDR_PUBLIC_ID || addr_type_own == BLE_ADDR_RANDOM_ID) {
+        if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) == BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) {
+            addr_type_own = BLE_ADDR_RANDOM;
+            btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM; 
+            memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr, BD_ADDR_LEN);
+            btsnd_hcic_ble_set_random_addr(btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr);
+        } else {
+            #if BLE_PRIVACY_SPT == TRUE
+            if(btm_cb.ble_ctr_cb.privacy_mode != BTM_PRIVACY_NONE) {
+                BTM_TRACE_ERROR ("Error state\n");
+                if (scan_setup_status_cback != NULL) {
+                    scan_setup_status_cback(client_if, BTM_ILLEGAL_VALUE);
+                }
+                return; 
+            }
+            #endif
+            if(addr_type_own == BLE_ADDR_PUBLIC_ID) {
+                addr_type_own = BLE_ADDR_PUBLIC;
+                btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_PUBLIC; 
+            } else {
+                //own_bda_type == BLE_ADDR_RANDOM_ID
+                if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RANDOM) == BTM_BLE_GAP_ADDR_BIT_RANDOM) {
+                    addr_type_own = BLE_ADDR_RANDOM;
+                    btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM;
+                    memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr, BD_ADDR_LEN);
+                    btsnd_hcic_ble_set_random_addr(btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr);
+                } else {
+                    BTM_TRACE_ERROR ("No RPA and no random address yet, please set RPA or random address and try\n");
+                    if (scan_setup_status_cback != NULL) {
+                        scan_setup_status_cback(client_if, BTM_ILLEGAL_VALUE);
+                    }
+                    return;   
+                }
+            }
+        }
+    } else {
+        btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_PUBLIC;    
     }
 
     /* If not supporting extended scan support, use the older range for checking */
@@ -1613,32 +1699,43 @@ tBTM_STATUS BTM_BleSetRandAddress(BD_ADDR rand_addr)
        if (rand_addr == NULL)
                return BTM_SET_STATIC_RAND_ADDR_FAIL;
 
-/*
- *  Temporary solutions for pair with random address:
- *  can't set rand address when advertising, scaning or in privacy mode
- *  We will do futher work here
- */
-#if BLE_PRIVACY_SPT == TRUE
-    if (btm_cb.ble_ctr_cb.privacy_mode != BTM_PRIVACY_NONE) {
-        BTM_TRACE_ERROR("privacy_mode is not BTM_PRIVACY_NONE ");
-        return BTM_SET_STATIC_RAND_ADDR_FAIL;
-    }
-
-#endif
     if (!(btm_cb.ble_ctr_cb.inq_var.state == BTM_BLE_STOP_SCAN || btm_cb.ble_ctr_cb.inq_var.state == BTM_BLE_STOP_ADV || btm_cb.ble_ctr_cb.inq_var.state == BTM_BLE_IDLE)) {
         BTM_TRACE_ERROR("Advertising or scaning now, can't set randaddress %d", btm_cb.ble_ctr_cb.inq_var.state);
         return BTM_SET_STATIC_RAND_ADDR_FAIL;
     }
     memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, rand_addr, BD_ADDR_LEN);
-    btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM;
+    memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr, rand_addr, BD_ADDR_LEN);
     //send the set random address to the controller
     if(btsnd_hcic_ble_set_random_addr(rand_addr)) {
+        btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit |= BTM_BLE_GAP_ADDR_BIT_RANDOM;
         return BTM_SUCCESS;
     } else {
         return BTM_SET_STATIC_RAND_ADDR_FAIL;
     }
 }
 
+/*******************************************************************************
+**
+** Function         BTM_BleClearRandAddress
+**
+** Description      This function is called to clear the LE random address.
+**
+** Parameters:       None.
+**
+** Returns          void
+**
+*******************************************************************************/
+void BTM_BleClearRandAddress(void)
+{
+    tBTM_BLE_CB  *p_cb = &btm_cb.ble_ctr_cb;
+    if (btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type == BLE_ADDR_RANDOM && (!(p_cb->inq_var.state == BTM_BLE_STOP_SCAN || p_cb->inq_var.state == BTM_BLE_STOP_ADV || p_cb->inq_var.state == BTM_BLE_IDLE))) {
+        BTM_TRACE_ERROR("Advertising or scaning now, can't restore public address ");
+        return;
+    }
+    memset(btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr, 0, BD_ADDR_LEN);
+    btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit &= (~BTM_BLE_GAP_ADDR_BIT_RANDOM);
+    btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_PUBLIC;
+}
 /*******************************************************************************
 **
 ** Function         BTM_BleGetCurrentAddress
index d8073e112e0e9b7dc94adc0b9f813fb7db02d7ac..798f88e1b7114b00cd01cd63d734fa3745a20128 100644 (file)
@@ -368,6 +368,10 @@ void btm_sec_free_dev (tBTM_SEC_DEV_REC *p_dev_rec, tBT_TRANSPORT transport)
         btm_sec_clear_ble_keys (p_dev_rec);
 #endif
     }
+    /* No BLE keys and BT keys, clear the sec_flags */
+    if(p_dev_rec->sec_flags == BTM_SEC_IN_USE) {
+        p_dev_rec->sec_flags = 0;
+    }
 }
 
 /*******************************************************************************
index c080c9e7ea0260f2b44ec47f82afc002e69acd33..b3b8ad10c2a6c03fa9cf5873001bd61433dc33b2 100644 (file)
@@ -181,9 +181,15 @@ typedef void (tBTM_BLE_RESOLVE_CBACK) (void *match_rec, void *p);
 
 typedef void (tBTM_BLE_ADDR_CBACK) (BD_ADDR_PTR static_random, void *p);
 
+#define BTM_BLE_GAP_ADDR_BIT_RANDOM      (1<<0)
+#define BTM_BLE_GAP_ADDR_BIT_RESOLVABLE  (1<<1)
+
 /* random address management control block */
 typedef struct {
     tBLE_ADDR_TYPE              own_addr_type;         /* local device LE address type */
+    UINT8                       exist_addr_bit;
+    BD_ADDR                     static_rand_addr;
+    BD_ADDR                     resolvale_addr;
     BD_ADDR                     private_addr;
     BD_ADDR                     random_bda;
     BOOLEAN                     busy;
index 0a07c643b4add10d988c43d22bca0b1f4fe100c8..e0d67ee63bea55a3b841cc027132a08670613862 100644 (file)
@@ -996,6 +996,8 @@ tBTM_STATUS BTM_BleWriteAdvDataRaw(UINT8 *p_raw_adv, UINT32 raw_adv_len);
 
 tBTM_STATUS BTM_BleSetRandAddress(BD_ADDR rand_addr);
 
+void BTM_BleClearRandAddress(void);
+
 
 /*******************************************************************************
 **
index 7329552106a721f215b8d5bc4005a49c2db6d1d2..552477a0570b2d67196608804c7b4ffef53edfe3 100644 (file)
@@ -805,7 +805,7 @@ BOOLEAN l2cble_init_direct_conn (tL2C_LCB *p_lcb)
     memcpy(peer_addr, p_lcb->remote_bd_addr, BD_ADDR_LEN);
 
 #if ( (defined BLE_PRIVACY_SPT) && (BLE_PRIVACY_SPT == TRUE))
-    own_addr_type = btm_cb.ble_ctr_cb.privacy_mode ? BLE_ADDR_RANDOM : BLE_ADDR_PUBLIC;
+    own_addr_type = btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type;
     if(dev_rec_exist) {
         // if the current address information is valid, get the real address information
         if(p_dev_rec->ble.current_addr_valid) {
index 978e020e6501d01bc66880252c483e96f307a6f5..ef92f5da418c9d85027ad9453f6a020fc358dabb 100644 (file)
@@ -2211,13 +2211,17 @@ BOOLEAN l2cu_create_conn (tL2C_LCB *p_lcb, tBT_TRANSPORT transport)
 #if (BLE_INCLUDED == TRUE)
     tBT_DEVICE_TYPE     dev_type;
     tBLE_ADDR_TYPE      addr_type = p_lcb->open_addr_type;
-    BTM_ReadDevInfo(p_lcb->remote_bd_addr, &dev_type, &addr_type);
+    if(addr_type == BLE_ADDR_UNKNOWN_TYPE) {
+        BTM_ReadDevInfo(p_lcb->remote_bd_addr, &dev_type, &addr_type);
+    }
 
     if (transport == BT_TRANSPORT_LE) {
         if (!controller_get_interface()->supports_ble()) {
             return FALSE;
         }
-
+        if(addr_type > BLE_ADDR_TYPE_MAX) {
+            addr_type = BLE_ADDR_PUBLIC;
+        }
         p_lcb->ble_addr_type = addr_type;
         p_lcb->transport = BT_TRANSPORT_LE;
 
index 31497591f000021db445f635a156f357c648012a..cdb9c63fa7fb8c4d786ab145893635b3d79bf1fc 100644 (file)
@@ -590,8 +590,16 @@ static BT_HDR *smp_build_id_addr_cmd(UINT8 cmd_code, tSMP_CB *p_cb)
         p = (UINT8 *)(p_buf + 1) + L2CAP_MIN_OFFSET;
 
         UINT8_TO_STREAM (p, SMP_OPCODE_ID_ADDR);
-        UINT8_TO_STREAM (p, 0);
-        BDADDR_TO_STREAM (p, controller_get_interface()->get_address()->address);
+        /* Identity Address Information is used in the Transport Specific Key Distribution phase to distribute 
+        its public device address or static random address. if slave using static random address is encrypted,
+        it should distribute its static random address */
+        if(btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type == BLE_ADDR_RANDOM && memcmp(btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr,6) == 0) {
+            UINT8_TO_STREAM (p, 0x01);
+            BDADDR_TO_STREAM (p, btm_cb.ble_ctr_cb.addr_mgnt_cb.static_rand_addr);
+        } else {
+            UINT8_TO_STREAM (p, 0);
+            BDADDR_TO_STREAM (p, controller_get_interface()->get_address()->address);
+        }
 
         p_buf->offset = L2CAP_MIN_OFFSET;
         p_buf->len = SMP_ID_ADDR_SIZE;
index e9359e2166063d4a8c912850e0f62693bde74ddf..abdd492f2e7f69059d75ae219a8b463937009101 100644 (file)
@@ -357,12 +357,16 @@ initial condition:
     - - 'R SSC[1-2] C +BLE:'
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -385,12 +389,16 @@ initial condition:
     - - 'R SSC[1-2] C +BLE:'
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -427,12 +435,16 @@ initial condition:
     - - 'R SSC[1-2] C +BLE:'
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -455,12 +467,16 @@ initial condition:
     - - 'R SSC[1-2] C +BLE:'
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -497,12 +513,16 @@ initial condition:
     - - 'R SSC[1-2] C +BLE:'
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -527,12 +547,16 @@ initial condition:
     - - 'R SSC[1-2] C +BLE:'
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -569,12 +593,16 @@ initial condition:
     - - 'R SSC[1-5] C +BLE:'
   - - SSC SSC[1-5] bleconn -D -z all
     - - 'R SSC[1-5] C +BLECONN:'
+  - - SSC SSC[1-5] blesmp -B -z clear
+    - - R SSC[1-5] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-5] gatts -S -z delete
     - - 'R SSC[1-5] C +GATTS:'
   - - SSC SSC[1-5] gattc -U -z all
     - - R SSC[1-5] C +GATTC:OK
   - - SSC SSC[1-5] bleadv -D -z stop
     - - R SSC[1-5] C +BLEADV:OK
+  - - SSC SSC[1-5] ble -S -z public
+    - - R SSC[1-5] C +BLE:OK
   - - SSC SSC[2-5] bleadv -D -z start
     - - P SSC[2-5] C +BLEADV:Start,OK
   - - SSC SSC[2-5] gatts -S -z load -p 0xA2
@@ -599,12 +627,16 @@ initial condition:
     - - 'R SSC[1-5] C +BLE:'
   - - SSC SSC[1-5] bleconn -D -z all
     - - 'R SSC[1-5] C +BLECONN:'
+  - - SSC SSC[1-5] blesmp -B -z clear
+    - - R SSC[1-5] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-5] gatts -S -z delete
     - - 'R SSC[1-5] C +GATTS:'
   - - SSC SSC[1-5] gattc -U -z all
     - - R SSC[1-5] C +GATTC:OK
   - - SSC SSC[1-5] bleadv -D -z stop
     - - R SSC[1-5] C +BLEADV:OK
+  - - SSC SSC[1-5] ble -S -z public
+    - - R SSC[1-5] C +BLE:OK
   - - SSC SSC[2-5] bleadv -D -z start
     - - P SSC[2-5] C +BLEADV:Start,OK
   - - SSC SSC[2-5] gatts -S -z load -p 0xA2
@@ -641,12 +673,16 @@ initial condition:
     - - 'R SSC[1-5] C +BLE:'
   - - SSC SSC[1-5] bleconn -D -z all
     - - 'R SSC[1-5] C +BLECONN:'
+  - - SSC SSC[1-5] blesmp -B -z clear
+    - - R SSC[1-5] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-5] gatts -S -z delete
     - - 'R SSC[1-5] C +GATTS:'
   - - SSC SSC[1-5] gattc -U -z all
     - - R SSC[1-5] C +GATTC:OK
   - - SSC SSC[1-5] bleadv -D -z stop
     - - R SSC[1-5] C +BLEADV:OK
+  - - SSC SSC[1-5] ble -S -z public
+    - - R SSC[1-5] C +BLE:OK
   - - SSC SSC1 gatts -S -z load -p 0xA2
     - - R SSC1 C +GATTS:StartService,OK,A002
   - - LOOP 4 2 "[2,3,4,5]" "[2,3,4,5]"
@@ -669,12 +705,16 @@ initial condition:
     - - 'R SSC[1-5] C +BLE:'
   - - SSC SSC[1-5] bleconn -D -z all
     - - 'R SSC[1-5] C +BLECONN:'
+  - - SSC SSC[1-5] blesmp -B -z clear
+    - - R SSC[1-5] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-5] gatts -S -z delete
     - - 'R SSC[1-5] C +GATTS:'
   - - SSC SSC[1-5] gattc -U -z all
     - - R SSC[1-5] C +GATTC:OK
   - - SSC SSC[1-5] bleadv -D -z stop
     - - R SSC[1-5] C +BLEADV:OK
+  - - SSC SSC[1-5] ble -S -z public
+    - - R SSC[1-5] C +BLE:OK
   - - SSC SSC1 gatts -S -z load -p 0xA2
     - - R SSC1 C +GATTS:StartService,OK,A002
   - - SSC SSC[2-5] gattc -F -r <dut1_bt_mac>
@@ -711,12 +751,16 @@ initial condition:
     - - 'R SSC[1-5] C +BLE:'
   - - SSC SSC[1-5] bleconn -D -z all
     - - 'R SSC[1-5] C +BLECONN:'
+  - - SSC SSC[1-5] blesmp -B -z clear
+    - - R SSC[1-5] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-5] gatts -S -z delete
     - - 'R SSC[1-5] C +GATTS:'
   - - SSC SSC[1-5] gattc -U -z all
     - - R SSC[1-5] C +GATTC:OK
   - - SSC SSC[1-5] bleadv -D -z stop
     - - R SSC[1-5] C +BLEADV:OK
+  - - SSC SSC[1-5] ble -S -z public
+    - - R SSC[1-5] C +BLE:OK
   - - SSC SSC[1-3] gatts -S -z load -p 0xA2
     - - R SSC[1-3] C +GATTS:StartService,OK,A002
   - - LOOP 2 2 "[4,5]" "[4,5]"
@@ -744,12 +788,16 @@ initial condition:
     - - 'R SSC[1-5] C +BLE:'
   - - SSC SSC[1-5] bleconn -D -z all
     - - 'R SSC[1-5] C +BLECONN:'
+  - - SSC SSC[1-5] blesmp -B -z clear
+    - - R SSC[1-5] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-5] gatts -S -z delete
     - - 'R SSC[1-5] C +GATTS:'
   - - SSC SSC[1-5] gattc -U -z all
     - - R SSC[1-5] C +GATTC:OK
   - - SSC SSC[1-5] bleadv -D -z stop
     - - R SSC[1-5] C +BLEADV:OK
+  - - SSC SSC[1-5] ble -S -z public
+    - - R SSC[1-5] C +BLE:OK
   - - SSC SSC[1-3] gatts -S -z load -p 0xA2
     - - R SSC[1-3] C +GATTS:StartService,OK,A002
   - - LOOP 2 2 "[4,5]" "[4,5]"
@@ -792,13 +840,15 @@ initial condition:
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
   - - SSC SSC[1-2] blesmp -B -z clear
-    - - R SSC[1-2] C +BLESMP:ClearBond,Succes
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -832,13 +882,15 @@ initial condition:
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
   - - SSC SSC[1-2] blesmp -B -z clear
-    - - R SSC[1-2] C +BLESMP:ClearBond,Succes
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -955,6 +1007,8 @@ initial condition:
     - - 'R SSC1 C +BLE:'
   - - SSC SSC1 bleconn -D -z all
     - - 'R SSC1 C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   force restore cmd set:
   - ''
   - - SSC SSC1 reboot
@@ -972,6 +1026,8 @@ initial condition:
     - []
   - - SSC SSC1 bleconn -D -z all
     - - 'R SSC1 C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC1 gatts -S -z delete
     - - 'R SSC1 C +GATTS:'
   - - SSC SSC1 gattc -U -z all
@@ -1009,6 +1065,8 @@ initial condition:
     - - 'R SSC[1-2] C +BLE:'
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
@@ -1017,6 +1075,8 @@ initial condition:
     - - R SSC2 C +GATTS:StartService,OK,A000
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -1052,6 +1112,8 @@ initial condition:
     - - 'R SSC[1-2] C +BLE:'
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
@@ -1060,6 +1122,8 @@ initial condition:
     - - R SSC2 C +GATTS:StartService,OK,A002
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 bleadv -L -c 0 -t 3
     - - R SSC2 C +BLEADV:SetAdv,OK
   - - SSC SSC2 bleadv -D -z start
@@ -1096,6 +1160,8 @@ initial condition:
     - - 'R SSC[1-5] C +BLE:'
   - - SSC SSC[1-5] bleconn -D -z all
     - - 'R SSC[1-5] C +BLECONN:'
+  - - SSC SSC[1-5] blesmp -B -z clear
+    - - R SSC[1-5] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-5] gatts -S -z delete
     - - 'R SSC[1-5] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
@@ -1104,6 +1170,8 @@ initial condition:
     - ["P SSC[2-5] C +GATTS:StartService,OK,A000"]
   - - SSC SSC[1-5] bleadv -D -z stop
     - - R SSC[1-5] C +BLEADV:OK
+  - - SSC SSC[1-5] ble -S -z public
+    - - R SSC[1-5] C +BLE:OK
   - - SSC SSC1 gattc -F -r <dut2_bt_mac>
     - - R SSC1 C +GATTC:OK
   - - SSC SSC1 ram
@@ -1130,13 +1198,15 @@ initial condition:
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
   - - SSC SSC[1-2] blesmp -B -z clear
-    - - R SSC[1-2] C +BLESMP:ClearBond,Succes
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 gatts -S -z load -p 0xA2
     - - R SSC2 C +GATTS:StartService,OK,A002
   - - SSC SSC2 bleadv -L -c 0 -t 3
@@ -1159,13 +1229,15 @@ initial condition:
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
   - - SSC SSC[1-2] blesmp -B -z clear
-    - - R SSC[1-2] C +BLESMP:ClearBond,Succes
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC2 gatts -S -z load -p 0xA2
     - - R SSC2 C +GATTS:StartService,OK,A002
   - - SSC SSC2 bleadv -L -c 0 -t 3
@@ -1200,13 +1272,15 @@ initial condition:
   - - SSC SSC[1-5] bleconn -D -z all
     - - 'R SSC[1-5] C +BLECONN:'
   - - SSC SSC[1-5] blesmp -B -z clear
-    - - R SSC[1-5] C +BLESMP:ClearBond,Succes
+    - - R SSC[1-5] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-5] gatts -S -z delete
     - - 'R SSC[1-5] C +GATTS:'
   - - SSC SSC[1-5] gattc -U -z all
     - - R SSC[1-5] C +GATTC:OK
   - - SSC SSC[1-5] bleadv -D -z stop
     - - R SSC[1-5] C +BLEADV:OK
+  - - SSC SSC[1-5] ble -S -z public
+    - - R SSC[1-5] C +BLE:OK
   - - SSC SSC[2-5] gatts -S -z load -p 0xA0
     - - R SSC[2-5] C +GATTS:StartService,OK,A000
   - - SSC SSC[2-5] bleadv -L -c 0 -t 3
@@ -1226,13 +1300,15 @@ initial condition:
   - - SSC SSC[1-5] bleconn -D -z all
     - - 'R SSC[1-5] C +BLECONN:'
   - - SSC SSC[1-5] blesmp -B -z clear
-    - - R SSC[1-5] C +BLESMP:ClearBond,Succes
+    - - R SSC[1-5] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-5] gatts -S -z delete
     - - 'R SSC[1-5] C +GATTS:'
   - - SSC SSC[1-5] gattc -U -z all
     - - R SSC[1-5] C +GATTC:OK
   - - SSC SSC[1-5] bleadv -D -z stop
     - - R SSC[1-5] C +BLEADV:OK
+  - - SSC SSC[1-5] ble -S -z public
+    - - R SSC[1-5] C +BLE:OK
   - - SSC SSC[2-5] gatts -S -z load -p 0xA0
     - - R SSC[2-5] C +GATTS:StartService,OK,A000
   - - SSC SSC[2-5] bleadv -L -c 0 -t 3
@@ -2100,12 +2176,16 @@ initial condition:
     - - 'R SSC[1-2] C +BLE:'
   - - SSC SSC[1-2] bleconn -D -z all
     - - 'R SSC[1-2] C +BLECONN:'
+  - - SSC SSC[1-2] blesmp -B -z clear
+    - - R SSC[1-2] C +BLESMP:ClearBond,Success
   - - SSC SSC[1-2] gatts -S -z delete
     - - 'R SSC[1-2] C +GATTS:'
   - - SSC SSC[1-2] gattc -U -z all
     - - R SSC[1-2] C +GATTC:OK
   - - SSC SSC[1-2] bleadv -D -z stop
     - - R SSC[1-2] C +BLEADV:OK
+  - - SSC SSC[1-2] ble -S -z public
+    - - R SSC[1-2] C +BLE:OK
   - - SSC SSC1 ram
     - - R SSC1 A <heap_size>:(\d+)
 - tag: T3_1
index 52f508c42e4c7ee69e5d605630a00dcd1fb74ceb..4aa6754e08fbbd20b0721418eadcec7ba9caf128 100644 (file)
@@ -808,9 +808,7 @@ test cases:
   - - "SSC SSC2 bleadv -D -z start -t 0 -o 2"
     - ["R SSC2 C +BLEADV:OK"]
   - - "SSC SSC1 blescan -D -z start"
-    - ["R SSC1 P <dut2_bt_mac> C Complete"]
-  - - "SSC SSC1 bleconn -C -p 0x10 -a <dut2_bt_mac>"
-    - ["R SSC1 C +BLE:GattcConnect,OK", "R SSC2 C +BLE:GattsConnect"]
+    - ["R SSC1 NP <dut2_bt_mac> C Complete"]
 - ID: BTSTK_GAP_03009
   <<: *GAP_CASE
   test point 2: BLE GAP set advertise param
@@ -860,7 +858,6 @@ test cases:
     - ["R SSC1 C +BLE:GattcConnect,OK", "R SSC2 C +BLE:GattsConnect"]
 - ID: BTSTK_GAP_03010
   <<: *GAP_CASE
-  CI ready: "No"  # can't restore to use public address after set to use private address
   test point 2: BLE GAP set advertise param
   summary: ble adv with privacy address and RPA_RANDOM
   initial condition: BLE_INIT_SMP
@@ -881,12 +878,9 @@ test cases:
   - - "SSC SSC2 bleadv -D -z start -t 0 -o 3"
     - ["R SSC2 C +BLEADV:OK"]
   - - "SSC SSC1 blescan -D -z start"
-    - ["R SSC1 P <dut2_bt_mac> C Complete"]
-  - - "SSC SSC1 bleconn -C -p 0x10 -a <dut2_bt_mac>"
-    - ["R SSC1 C +BLE:GattcConnect,OK", "R SSC2 C +BLE:GattsConnect"]
+    - ["R SSC1 NP <dut2_bt_mac> C Complete"]
 - ID: BTSTK_GAP_03011
   <<: *GAP_CASE
-  CI ready: "No"  # can't restore to use public address after set to use private address
   test point 2: BLE GAP set advertise param
   summary: ble set adv owner address type as RPA_RANDOM
   initial condition: BLE_INIT_SMP