From 8a78860b1681b52c69c26d036219abd8b6c09098 Mon Sep 17 00:00:00 2001 From: zhiweijian Date: Tue, 27 Mar 2018 20:12:57 +0800 Subject: [PATCH] Component/bt: add esp_ble_gap_get_local_used_addr() API --- components/bt/bluedroid/api/esp_gap_ble_api.c | 12 +++++++ .../bluedroid/api/include/esp_gap_ble_api.h | 13 +++++++- .../bt/bluedroid/stack/btm/btm_ble_gap.c | 31 +++++++++++++++++++ .../bt/bluedroid/stack/include/btm_ble_api.h | 13 ++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/components/bt/bluedroid/api/esp_gap_ble_api.c b/components/bt/bluedroid/api/esp_gap_ble_api.c index 84df9d613..1c4846e8a 100644 --- a/components/bt/bluedroid/api/esp_gap_ble_api.c +++ b/components/bt/bluedroid/api/esp_gap_ble_api.c @@ -268,6 +268,18 @@ esp_err_t esp_ble_gap_set_device_name(const char *name) return esp_bt_dev_set_device_name(name); } +esp_err_t esp_ble_gap_get_local_used_addr(esp_bd_addr_t local_used_addr, uint8_t * addr_type) +{ + if(esp_bluedroid_get_status() != (ESP_BLUEDROID_STATUS_ENABLED)) { + LOG_ERROR("%s, bluedroid status error", __func__); + return ESP_FAIL; + } + if(!BTM_BleGetCurrentAddress(local_used_addr, addr_type)) { + return ESP_FAIL; + } + return ESP_OK; +} + uint8_t *esp_ble_resolve_adv_data( uint8_t *adv_data, uint8_t type, uint8_t *length) { if (((type < ESP_BLE_AD_TYPE_FLAG) || (type > ESP_BLE_AD_TYPE_128SERVICE_DATA)) && diff --git a/components/bt/bluedroid/api/include/esp_gap_ble_api.h b/components/bt/bluedroid/api/include/esp_gap_ble_api.h index 3e0c16e34..6aa07f24d 100644 --- a/components/bt/bluedroid/api/include/esp_gap_ble_api.h +++ b/components/bt/bluedroid/api/include/esp_gap_ble_api.h @@ -830,7 +830,18 @@ esp_err_t esp_ble_gap_set_prefer_conn_params(esp_bd_addr_t bd_addr, */ esp_err_t esp_ble_gap_set_device_name(const char *name); - +/** + * @brief This function is called to get local used address and adress type. + * uint8_t *esp_bt_dev_get_address(void) get the public address + * + * @param[in] local_used_addr - current local used ble address (six bytes) + * @param[in] addr_type - ble address type + * + * @return - ESP_OK : success + * - other : failed + * + */ +esp_err_t esp_ble_gap_get_local_used_addr(esp_bd_addr_t local_used_addr, uint8_t * addr_type); /** * @brief This function is called to get ADV data for a specific type. * diff --git a/components/bt/bluedroid/stack/btm/btm_ble_gap.c b/components/bt/bluedroid/stack/btm/btm_ble_gap.c index 14c60f44e..eb918ce6e 100644 --- a/components/bt/bluedroid/stack/btm/btm_ble_gap.c +++ b/components/bt/bluedroid/stack/btm/btm_ble_gap.c @@ -1588,6 +1588,37 @@ BOOLEAN BTM_BleSetRandAddress(BD_ADDR rand_addr) return set_flag; } +/******************************************************************************* +** +** Function BTM_BleGetCurrentAddress +** +** Description This function is called to get local used BLE address. +** +** Parameters: None. +** +** Returns success or fail +** +*******************************************************************************/ +BOOLEAN BTM_BleGetCurrentAddress(BD_ADDR addr, uint8_t *addr_type) +{ + if(addr == NULL || addr_type == NULL) { + BTM_TRACE_ERROR("%s addr or addr_type is NULL\n", __func__); + return FALSE; + } + if(btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type == BLE_ADDR_RANDOM) { + *addr_type = BLE_ADDR_RANDOM; + memcpy(addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, BD_ADDR_LEN); + } else if(btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type == BLE_ADDR_PUBLIC) { + *addr_type = BLE_ADDR_PUBLIC; + memcpy(addr, &controller_get_interface()->get_address()->address, BD_ADDR_LEN); + } else { + BTM_TRACE_ERROR("%s\n", __func__); + memset(addr, 0, BD_ADDR_LEN); + return FALSE; + } + return TRUE; +} + /******************************************************************************* ** ** Function BTM_CheckAdvData diff --git a/components/bt/bluedroid/stack/include/btm_ble_api.h b/components/bt/bluedroid/stack/include/btm_ble_api.h index 0587b65be..9edb0bd6b 100644 --- a/components/bt/bluedroid/stack/include/btm_ble_api.h +++ b/components/bt/bluedroid/stack/include/btm_ble_api.h @@ -1541,6 +1541,19 @@ void BTM_BleReadControllerFeatures(tBTM_BLE_CTRL_FEATURES_CBACK *p_vsc_cback); //extern UINT8 *BTM_CheckAdvData( UINT8 *p_adv, UINT8 type, UINT8 *p_length); +/******************************************************************************* +** +** Function BTM_BleGetCurrentAddress +** +** Description This function is called to get local used BLE address. +** +** Parameters: None. +** +** Returns success or fail +** +*******************************************************************************/ +BOOLEAN BTM_BleGetCurrentAddress(BD_ADDR addr, uint8_t *addr_type); + /******************************************************************************* ** ** Function BTM__BLEReadDiscoverability