]> granicus.if.org Git - esp-idf/commitdiff
component bt:debug the scan result and add the resove adv data method to the gapapi
authorYulong <huangyulong@espressif.com>
Fri, 18 Nov 2016 08:43:51 +0000 (03:43 -0500)
committerYulong <huangyulong@espressif.com>
Fri, 18 Nov 2016 08:43:51 +0000 (03:43 -0500)
components/bt/bluedroid/api/esp_gap_ble_api.c
components/bt/bluedroid/api/include/esp_gap_ble_api.h
components/bt/bluedroid/btc/profile/std/gap/btc_gap_ble.c
components/bt/bluedroid/include/bt_target.h
components/bt/bluedroid/stack/btm/btm_ble_gap.c
components/bt/bluedroid/stack/btu/btu_hcif.c
examples/09_arch_client/components/bluedroid_demos/app_core/bt_app_core.c
examples/09_arch_client/components/bluedroid_demos/app_project/Arch_SimpleClientProject.c

index a31e7ff283112851119045a72d33381548b51bdb..253545341ce462a6d2a686a5038eed32bf4d07eb 100644 (file)
@@ -173,3 +173,35 @@ esp_err_t esp_ble_gap_set_device_name(char *name)
        return (btc_transfer_context(&msg, &arg, sizeof(esp_ble_gap_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
 }
 
+
+/*******************************************************************************
+**
+** Function           esp_ble_resolve_adv_data
+**
+** Description       This function is called to get ADV data for a specific type.
+**
+** Parameters       p_adv - pointer of ADV data
+**                     type   - finding ADV data type
+**                     p_length - return the length of ADV data not including type
+**
+** Returns             pointer of ADV data
+**
+*******************************************************************************/
+uint8_t *esp_ble_resolve_adv_data( uint8_t *p_adv, uint8_t type, uint8_t *p_length )
+{
+    if ((type < ESP_BLE_AD_TYPE_FLAG) || (type > ESP_BLE_AD_TYPE_128SERVICE_DATA) ||
+        (type != ESP_BLE_AD_MANUFACTURER_SPECIFIC_TYPE))
+    {
+               LOG_ERROR("the eir type not define, type = %x\n", type);
+               return NULL;
+    }
+
+   if (p_adv == NULL)
+   {
+       LOG_ERROR("Invalid p_eir data.\n");
+       return NULL;
+   }
+
+   return (BTM_CheckAdvData( p_adv, type, p_length));
+}
+
index 84fa4d26017b5ca8bf197d7e55dd6a6c408abd91..4566713c82e3257077d0ffac4b4e30eb5244a679 100644 (file)
 #define ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT                2
 #define ESP_GAP_BLE_SCAN_RESULT_EVT                                    3
 
+/****************** define the adv type macro***************************************/
+#define ESP_BLE_AD_TYPE_FLAG                                           0x01                 
+#define ESP_BLE_AD_TYPE_16SRV_PART                                     0x02       
+#define ESP_BLE_AD_TYPE_16SRV_CMPL                                     0x03   
+#define ESP_BLE_AD_TYPE_32SRV_PART                                     0x04       
+#define ESP_BLE_AD_TYPE_32SRV_CMPL                                     0x05   
+#define ESP_BLE_AD_TYPE_128SRV_PART                                    0x06      
+#define ESP_BLE_AD_TYPE_128SRV_CMPL                                    0x07   
+#define ESP_BLE_AD_TYPE_NAME_SHORT                                     0x08      
+#define ESP_BLE_AD_TYPE_NAME_CMPL                                      0x09       
+#define ESP_BLE_AD_TYPE_TX_PWR                                         0x0A            
+#define ESP_BLE_AD_TYPE_DEV_CLASS                                      0x0D
+#define ESP_BLE_AD_TYPE_SM_TK                                          0x10
+#define ESP_BLE_AD_TYPE_SM_OOB_FLAG                                    0x11
+#define ESP_BLE_AD_TYPE_INT_RANGE                                      0x12
+#define ESP_BLE_AD_TYPE_SOL_SRV_UUID                                   0x14
+#define ESP_BLE_AD_TYPE_128SOL_SRV_UUID                                0x15
+#define ESP_BLE_AD_TYPE_SERVICE_DATA                                   0x16
+#define ESP_BLE_AD_TYPE_PUBLIC_TARGET                                  0x17
+#define ESP_BLE_AD_TYPE_RANDOM_TARGET                                  0x18
+#define ESP_BLE_AD_TYPE_APPEARANCE                                     0x19
+#define ESP_BLE_AD_TYPE_ADV_INT                                        0x1A
+#define ESP_BLE_AD_TYPE_32SOL_SRV_UUID                                 0x1B
+#define ESP_BLE_AD_TYPE_32SERVICE_DATA                                 0x1C
+#define ESP_BLE_AD_TYPE_128SERVICE_DATA                                0x1D
+#define ESP_BLE_AD_MANUFACTURER_SPECIFIC_TYPE                          0xFF            
+
+
 typedef uint32_t esp_gap_ble_event_t;
 
 /// Advertising mode
@@ -169,6 +197,7 @@ typedef union {
                esp_bt_dev_type_t dev_type;
                esp_ble_addr_type_t ble_addr_type;
                int     rssi;
+               uint8_t   *p_eir;                 /* received EIR */
                int flag;
                int num_resps;
        } scan_rst;
@@ -337,4 +366,20 @@ esp_err_t esp_ble_gap_config_local_privacy (bool privacy_enable);
 *******************************************************************************/
 esp_err_t esp_ble_gap_set_device_name(char *name);
 
+
+/*******************************************************************************
+**
+** @function        esp_ble_resolve_adv_data
+**
+** @brief             This function is called to get ADV data for a specific type.
+**
+** @param[in]       p_adv - pointer of ADV data whitch to be resolved
+** @param[in]       type   - finding ADV data type
+** @param[out]     p_length - return the length of ADV data not including type
+**
+** @return              pointer of ADV data 
+**
+*******************************************************************************/
+uint8_t *esp_ble_resolve_adv_data( uint8_t *p_adv, uint8_t type, uint8_t *p_length );
+
 #endif /* __ESP_GAP_BLE_API_H__ */
index 06172945584808387114ccc6fb6e11afe8a58a78..b3b605fdb3ec447dd05d4a6ba676961a309b961e 100644 (file)
@@ -411,6 +411,8 @@ static void btc_ble_start_advertising(esp_ble_adv_params_t *ble_adv_params)
                                                           ble_adv_params->channel_map,
                                                           ble_adv_params->adv_filter_policy,
                                                           &bd_addr);
+
+       
 }
 
 
@@ -454,7 +456,7 @@ static void btc_search_callback(tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data
 {
        esp_ble_gap_cb_param_t param;
        btc_msg_t msg;
-    uint8_t len;
+       uint8_t len;
 
        msg.sig = BTC_SIG_API_CB;
        msg.pid = BTC_PID_GAP_BLE;
@@ -463,11 +465,13 @@ static void btc_search_callback(tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data
        param.scan_rst.search_evt = event;
     switch (event) {
        case BTA_DM_INQ_RES_EVT: {
+               LOG_ERROR("BTA_DM_INQ_RES_EVT\n");
                bdcpy(param.scan_rst.bda, p_data->inq_res.bd_addr);
                param.scan_rst.dev_type = p_data->inq_res.device_type;
                param.scan_rst.rssi = p_data->inq_res.rssi;
                param.scan_rst.ble_addr_type = p_data->inq_res.ble_addr_type;
                param.scan_rst.flag = p_data->inq_res.flag;
+               param.scan_rst.p_eir = p_data->inq_res.p_eir;
                break;
        }
        case BTA_DM_INQ_CMPL_EVT: {
@@ -475,8 +479,23 @@ static void btc_search_callback(tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data
                LOG_ERROR("%s  BLE observe complete. Num Resp %d\n", __FUNCTION__,p_data->inq_cmpl.num_resps);
                break;
        }
+       case BTA_DM_DISC_RES_EVT:
+               LOG_ERROR("BTA_DM_DISC_RES_EVT\n");
+               break;
+       case BTA_DM_DISC_BLE_RES_EVT:
+               LOG_ERROR("BTA_DM_DISC_BLE_RES_EVT\n");
+               break;
+       case BTA_DM_DISC_CMPL_EVT:
+               LOG_ERROR("BTA_DM_DISC_CMPL_EVT\n");
+               break;
+       case BTA_DM_DI_DISC_CMPL_EVT:
+               LOG_ERROR("BTA_DM_DI_DISC_CMPL_EVT\n");
+               break;
+       case BTA_DM_SEARCH_CANCEL_CMPL_EVT:
+               LOG_ERROR("BTA_DM_SEARCH_CANCEL_CMPL_EVT\n");
+               break;
        default:
-        LOG_ERROR("%s : Unknown event 0x%x", __FUNCTION__, event);
+               LOG_ERROR("%s : Unknown event 0x%x\n", __FUNCTION__, event);
         return;
     }
     btc_transfer_context(&msg, &param, sizeof(esp_ble_gap_cb_param_t), NULL);
index bb9d59860d673777055688fd70b49dc88092a9a6..c427f8f49a52cbb5e909501c29205558df05c428 100755 (executable)
  * resolution, local address rotation etc.
  */
 #ifndef BLE_PRIVACY_SPT
-#define BLE_PRIVACY_SPT         TRUE
+#define BLE_PRIVACY_SPT                        FALSE   ///TRUE
 #endif
 
 /*
index fee4842219f3344848b52e4cb2d9fe702c44baa0..80a4b577b03b214f4f087f467568dd9019831cff 100755 (executable)
@@ -415,7 +415,7 @@ tBTM_STATUS BTM_BleObserve(BOOLEAN start, UINT8 duration,
     }
     else
     {
-        BTM_TRACE_ERROR("%s Observe not active", __func__);
+        BTM_TRACE_ERROR("%s Observe not active\n", __func__);
     }
 
     return status;
@@ -2869,13 +2869,14 @@ void btm_ble_process_adv_pkt (UINT8 *p_data)
         STREAM_TO_UINT8    (evt_type, p);
         STREAM_TO_UINT8    (addr_type, p);
         STREAM_TO_BDADDR   (bda, p);
-
+       BTM_TRACE_ERROR("btm_ble_process_adv_pkt:bda= %0x:%0x:%0x:%0x:%0x:%0x\n",
+                                     bda[0],bda[1],bda[2],bda[3],bda[4],bda[5]);
 #if (defined BLE_PRIVACY_SPT && BLE_PRIVACY_SPT == TRUE)
         /* map address to security record */
         match = btm_identity_addr_to_random_pseudo(bda, &addr_type, FALSE);
 
-        BTM_TRACE_DEBUG("btm_ble_process_adv_pkt:bda= %0x:%0x:%0x:%0x:%0x:%0x",
-                                     bda[0],bda[1],bda[2],bda[3],bda[4],bda[5]);
+       // BTM_TRACE_ERROR("btm_ble_process_adv_pkt:bda= %0x:%0x:%0x:%0x:%0x:%0x\n",
+        //                             bda[0],bda[1],bda[2],bda[3],bda[4],bda[5]);
         /* always do RRA resolution on host */
         if (!match && BTM_BLE_IS_RESOLVE_BDA(bda))
         {
@@ -2993,7 +2994,7 @@ static void btm_ble_process_adv_pkt_cont(BD_ADDR bda, UINT8 addr_type, UINT8 evt
             btm_send_sel_conn_callback(bda, evt_type, p, addr_type);
         else
         {
-            BTM_TRACE_DEBUG("None LE device, can not initiate selective connection");
+            BTM_TRACE_DEBUG("None LE device, can not initiate selective connection\n");
         }
     }
     else
index ccbc90a9df4015064260f8f69219809f6aac121b..ebfd8c6ae565440a0e0d79d7a77698b35ee81733 100755 (executable)
@@ -1687,7 +1687,7 @@ static void btu_hcif_encryption_key_refresh_cmpl_evt (UINT8 *p)
 
 static void btu_ble_process_adv_pkt (UINT8 *p)
 {
-    HCI_TRACE_EVENT("btu_ble_process_adv_pkt");
+    HCI_TRACE_ERROR("btu_ble_process_adv_pkt\n");
 
     btm_ble_process_adv_pkt(p);
 }
index 68e97fb2e1028c112c889b45ce05651bd9336942..71854cfba1014a3328555dae76c5fbfe067cf1a7 100644 (file)
@@ -314,7 +314,7 @@ static void bte_dm_evt(tBTA_DM_SEC_EVT event, tBTA_DM_SEC* p_data)
 
 void bt_app_init_ok(UNUSED_ATTR uint16_t event, UNUSED_ATTR char *p_param)
 {
-    BTA_EnableBluetooth(bte_dm_evt);
+    //BTA_EnableBluetooth(bte_dm_evt);
     vTaskDelay(1000 / portTICK_PERIOD_MS);
     bt_app_start_timer(&main_boot_tle, BT_APP_TTYPE_MAIN_ENTRY, 8);
 }
index bcf8128a22dbd854605f74afaf99da5fcfd9cb7d..3fb3191891d7aa548fdb92a01613768ea52731ae 100644 (file)
@@ -33,6 +33,8 @@
 #include "bta_gatt_api.h"
 #include "esp_gap_ble_api.h"
 #include "esp_gattc_api.h"
+#include "esp_bt_main.h"
+
 
 #define BT_BD_ADDR_STR         "%02x:%02x:%02x:%02x:%02x:%02x"
 #define BT_BD_ADDR_HEX(addr)   addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]
@@ -129,12 +131,24 @@ static void esp_scan_result_cb(uint32_t event, void *param)
                case ESP_GAP_BLE_SCAN_RESULT_EVT:
                {
                        esp_ble_gap_cb_param_t *scan_result = (esp_ble_gap_cb_param_t *)param;
-                       //switch(scan_result->scan_rst.search_evt)
-                       //{
-                       //      case ESP_GAP_SEARCH_DISC_BLE_RES_EVT:
+                       switch(scan_result->scan_rst.search_evt)
+                       {
+                               case ESP_GAP_SEARCH_INQ_RES_EVT:
+                                       for (int i = 0; i < 6; i++)
+                                       {
+                                               LOG_ERROR("%x\n", scan_result->scan_rst.bda[i]);
+                                       }
+
+                                       LOG_ERROR("\n");
+                                       //if(strcmp(scan_result->scan_rst.bda, ))
+                                       break;
+                               case ESP_GAP_SEARCH_INQ_CMPL_EVT:
+                                       break;
+                               default:
+                                       break;
                        //              LOG_ERROR("ESP_GAP_SEARCH_DISC_BLE_RES_EVT\n");
                        //      break;
-                       //}
+                       }
                        break;
                }
                //case :
@@ -401,6 +415,7 @@ void ble_client_appRegister(void)
 void gattc_client_test(void)
 {
     BTM_SetTraceLevel(BT_TRACE_LEVEL_DEBUG);
-
+    esp_init_bluetooth();
+    esp_enable_bluetooth();
     ble_client_appRegister();
 }