Skip to content

Commit

Permalink
Merge branch 'feat/add_get_device_name_api' into 'master'
Browse files Browse the repository at this point in the history
feat(bt/bluedroid): Added API to get local device name

Closes BT-3526

See merge request espressif/esp-idf!27667
  • Loading branch information
wmy-espressif committed Dec 27, 2023
2 parents eef9c40 + a3f68ae commit 4c8f6c5
Show file tree
Hide file tree
Showing 28 changed files with 254 additions and 26 deletions.
2 changes: 1 addition & 1 deletion components/bt/common/btc/core/btc_task.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ osi_thread_t *btc_thread;
static const btc_func_t profile_tab[BTC_PID_NUM] = {
#ifdef CONFIG_BT_BLUEDROID_ENABLED
[BTC_PID_MAIN_INIT] = {btc_main_call_handler, NULL },
[BTC_PID_DEV] = {btc_dev_call_handler, NULL },
[BTC_PID_DEV] = {btc_dev_call_handler, btc_dev_cb_handler },
#if (GATTS_INCLUDED == TRUE)
[BTC_PID_GATTS] = {btc_gatts_call_handler, btc_gatts_cb_handler },
#endif ///GATTS_INCLUDED == TRUE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ void esp_blufi_deinit(void)

void esp_blufi_adv_start(void)
{
esp_ble_gap_set_device_name(BLUFI_DEVICE_NAME);
esp_bt_dev_set_device_name(BLUFI_DEVICE_NAME);
esp_ble_gap_config_adv_data(&blufi_adv_data);
}

Expand Down
30 changes: 30 additions & 0 deletions components/bt/host/bluedroid/api/esp_bt_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,21 @@
#include "btc/btc_task.h"
#include "btc/btc_dev.h"
#include "btc/btc_config.h"
#include "btc/btc_manage.h"

esp_err_t esp_bt_dev_register_callback(esp_bt_dev_cb_t callback)
{
if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
return ESP_ERR_INVALID_STATE;
}

if (callback == NULL) {
return ESP_ERR_INVALID_ARG;
}

btc_profile_cb_set(BTC_PID_DEV, callback);
return ESP_OK;
}

const uint8_t *esp_bt_dev_get_address(void)
{
Expand Down Expand Up @@ -49,6 +64,21 @@ esp_err_t esp_bt_dev_set_device_name(const char *name)
return (btc_transfer_context(&msg, &arg, sizeof(btc_dev_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
}

esp_err_t esp_bt_dev_get_device_name(void)
{
btc_msg_t msg = {0};

if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
return ESP_ERR_INVALID_STATE;
}

msg.sig = BTC_SIG_API_CALL;
msg.pid = BTC_PID_DEV;
msg.act = BTC_DEV_ACT_GET_DEVICE_NAME;

return (btc_transfer_context(&msg, NULL, 0, NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
}

#if (ESP_COEX_VSC_INCLUDED == TRUE)
esp_err_t esp_bt_dev_coex_status_config(esp_bt_dev_coex_type_t type, esp_bt_dev_coex_op_t op, uint8_t status)
{
Expand Down
49 changes: 49 additions & 0 deletions components/bt/host/bluedroid/api/include/api/esp_bt_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,41 @@ typedef enum {
ESP_BT_DEV_COEX_TYPE_BT,
} esp_bt_dev_coex_type_t;

/// BT device callback events
typedef enum {
ESP_BT_DEV_NAME_RES_EVT = 0, /*!< Device name result event */
ESP_BT_DEV_EVT_MAX,
} esp_bt_dev_cb_event_t;

/// BT device callback parameters
typedef union {
/**
* @brief ESP_BT_DEV_NAME_RES_EVT
*/
struct name_res_param {
esp_bt_status_t status; /*!< Status of getting device name */
char *name; /*!< Name of Bluetooth device */
} name_res; /*!< discovery result parameter struct */
} esp_bt_dev_cb_param_t;

/**
* @brief bluetooth device callback function type
*
* @param event : Event type
*
* @param param : Pointer to callback parameter
*/
typedef void (* esp_bt_dev_cb_t)(esp_bt_dev_cb_event_t event, esp_bt_dev_cb_param_t *param);

/**
* @brief register callback function. This function should be called after esp_bluedroid_enable() completes successfully
*
* @return
* - ESP_OK : Succeed
* - ESP_FAIL: others
*/
esp_err_t esp_bt_dev_register_callback(esp_bt_dev_cb_t callback);

/**
*
* @brief Get bluetooth device address. Must use after "esp_bluedroid_enable".
Expand All @@ -63,6 +98,20 @@ const uint8_t *esp_bt_dev_get_address(void);
*/
esp_err_t esp_bt_dev_set_device_name(const char *name);

/**
* @brief Get bluetooth device name. This function should be called after esp_bluedroid_enable()
* completes successfully.
*
* A BR/EDR/LE device type shall have a single Bluetooth device name which shall be
* identical irrespective of the physical channel used to perform the name discovery procedure.
*
* @return
* - ESP_OK : Succeed
* - ESP_ERR_INVALID_STATE : if bluetooth stack is not yet enabled
* - ESP_FAIL : others
*/
esp_err_t esp_bt_dev_get_device_name(void);

/**
* @brief Config bluetooth device coexis status. This function should be called after esp_bluedroid_enable()
* completes successfully.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1714,7 +1714,7 @@ esp_err_t esp_ble_gap_set_prefer_conn_params(esp_bd_addr_t bd_addr,
* - other : failed
*
*/
esp_err_t esp_ble_gap_set_device_name(const char *name);
esp_err_t esp_ble_gap_set_device_name(const char *name) __attribute__((deprecated("Please use esp_bt_dev_set_device_name")));

/**
* @brief Get device name of the local device
Expand All @@ -1724,7 +1724,7 @@ esp_err_t esp_ble_gap_set_device_name(const char *name);
* - other : failed
*
*/
esp_err_t esp_ble_gap_get_device_name(void);
esp_err_t esp_ble_gap_get_device_name(void) __attribute__((deprecated("Please use esp_bt_dev_get_device_name")));

/**
* @brief This function is called to get local used address and address type.
Expand Down
80 changes: 76 additions & 4 deletions components/bt/host/bluedroid/btc/core/btc_dev.c
Original file line number Diff line number Diff line change
@@ -1,17 +1,54 @@
/*
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <string.h>
#include "osi/allocator.h"
#include "stack/bt_types.h"
#include "bta/bta_api.h"
#include "btc/btc_task.h"
#include "btc/btc_manage.h"
#include "btc/btc_util.h"
#include "btc/btc_dev.h"

void btc_dev_arg_deep_free(btc_msg_t *msg)
static inline void btc_dev_cb_to_app(esp_bt_dev_cb_event_t event, esp_bt_dev_cb_param_t *param)
{
esp_bt_dev_cb_t btc_bt_dev_cb = (esp_bt_dev_cb_t)btc_profile_cb_get(BTC_PID_DEV);
if (btc_bt_dev_cb) {
btc_bt_dev_cb(event, param);
}
}

static void btc_dev_get_dev_name_callback(UINT8 status, char *name)
{
esp_bt_dev_cb_param_t param;
bt_status_t ret;
btc_msg_t msg = {0};

memset(&param, 0, sizeof(esp_bt_dev_cb_param_t));

msg.sig = BTC_SIG_API_CB;
msg.pid = BTC_PID_DEV;
msg.act = ESP_BT_DEV_NAME_RES_EVT;

param.name_res.status = btc_btm_status_to_esp_status(status);
param.name_res.name = (char *)osi_malloc(BTC_MAX_LOC_BD_NAME_LEN + 1);
if (param.name_res.name) {
BCM_STRNCPY_S(param.name_res.name, name, BTC_MAX_LOC_BD_NAME_LEN);
param.name_res.name[BTC_MAX_LOC_BD_NAME_LEN] = '\0';
} else {
param.name_res.status = ESP_BT_STATUS_NOMEM;
}

ret = btc_transfer_context(&msg, &param, sizeof(esp_bt_dev_cb_param_t), NULL, NULL);
if (ret != BT_STATUS_SUCCESS) {
BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__);
}
}

void btc_dev_call_arg_deep_free(btc_msg_t *msg)
{
BTC_TRACE_DEBUG("%s \n", __func__);

Expand All @@ -23,10 +60,29 @@ void btc_dev_arg_deep_free(btc_msg_t *msg)
}
break;
}
case BTC_DEV_ACT_GET_DEVICE_NAME:
#if (ESP_COEX_VSC_INCLUDED == TRUE)
case BTC_DEV_ACT_CFG_COEX_STATUS:
break;
#endif
break;
default:
BTC_TRACE_DEBUG("Unhandled deep free %d\n", msg->act);
break;
}
}

void btc_dev_cb_arg_deep_free(btc_msg_t *msg)
{
BTC_TRACE_DEBUG("%s \n", __func__);

switch (msg->act) {
case ESP_BT_DEV_NAME_RES_EVT:{
char *name = ((esp_bt_dev_cb_param_t *)msg->arg)->name_res.name;
if (name) {
osi_free(name);
}
break;
}
default:
BTC_TRACE_DEBUG("Unhandled deep free %d\n", msg->act);
break;
Expand All @@ -43,6 +99,9 @@ void btc_dev_call_handler(btc_msg_t *msg)
case BTC_DEV_ACT_SET_DEVICE_NAME:
BTA_DmSetDeviceName(arg->set_dev_name.device_name);
break;
case BTC_DEV_ACT_GET_DEVICE_NAME:
BTA_DmGetDeviceName(btc_dev_get_dev_name_callback);
break;
#if (ESP_COEX_VSC_INCLUDED == TRUE)
case BTC_DEV_ACT_CFG_COEX_STATUS:
BTA_DmCfgCoexStatus(arg->cfg_coex_status.op,
Expand All @@ -54,5 +113,18 @@ void btc_dev_call_handler(btc_msg_t *msg)
break;
}

btc_dev_arg_deep_free(msg);
btc_dev_call_arg_deep_free(msg);
}

void btc_dev_cb_handler(btc_msg_t *msg)
{
esp_bt_dev_cb_param_t *param = (esp_bt_dev_cb_param_t *)msg->arg;

if (msg->act < ESP_BT_DEV_EVT_MAX) {
btc_dev_cb_to_app(msg->act, param);
} else {
BTC_TRACE_ERROR("%s, unknow msg->act = %d", __func__, msg->act);
}

btc_dev_cb_arg_deep_free(msg);
}
2 changes: 2 additions & 0 deletions components/bt/host/bluedroid/btc/include/btc/btc_dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

typedef enum {
BTC_DEV_ACT_SET_DEVICE_NAME,
BTC_DEV_ACT_GET_DEVICE_NAME,
#if (ESP_COEX_VSC_INCLUDED == TRUE)
BTC_DEV_ACT_CFG_COEX_STATUS,
#endif
Expand All @@ -36,5 +37,6 @@ typedef union {
} btc_dev_args_t;

void btc_dev_call_handler(btc_msg_t *msg);
void btc_dev_cb_handler(btc_msg_t *msg);

#endif /* __BTC_DEV_H__ */
3 changes: 2 additions & 1 deletion components/protocomm/src/simple_ble/simple_ble.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <esp_gap_ble_api.h>
#include <esp_gatts_api.h>
#include <esp_bt_main.h>
#include "esp_bt_device.h"
#include <esp_gatt_common_api.h>

#include "simple_ble.h"
Expand Down Expand Up @@ -93,7 +94,7 @@ static void gatts_profile_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_
ESP_LOGE(TAG, "create attr table failed, error code = 0x%x", ret);
return;
}
ret = esp_ble_gap_set_device_name(g_ble_cfg_p->device_name);
ret = esp_bt_dev_set_device_name(g_ble_cfg_p->device_name);
if (ret) {
ESP_LOGE(TAG, "set device name failed, error code = 0x%x", ret);
return;
Expand Down
19 changes: 19 additions & 0 deletions docs/en/migration-guides/release-5.x/5.3/bluetooth-low-energy.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Bluetooth Low Energy
====================

:link_to_translation:`zh_CN:[中文]`

Bluedroid
---------

The following Bluedroid APIs have been removed:

- :component_file:`bt/host/bluedroid/api/include/api/esp_gap_ble_api.h`

- Remove ``esp_err_t esp_ble_gap_set_device_name(const char *name)``

- Local device name setting calls have been moved to :cpp:func:`esp_bt_dev_set_device_name`. This function can be deleted directly.

- Remove ``esp_err_t esp_ble_gap_get_device_name(void)``

- Local device name getting calls have been moved to :cpp:func:`esp_bt_dev_get_device_name`. This function can be deleted directly.
1 change: 1 addition & 0 deletions docs/en/migration-guides/release-5.x/5.3/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Migration from 5.2 to 5.3
.. toctree::
:maxdepth: 1

bluetooth-low-energy
peripherals
security
storage
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
低功耗蓝牙
==========

:link_to_translation:`en:[English]`

Bluedroid
---------

以下 Bluedroid API 已被移除:

- :component_file:`bt/host/bluedroid/api/include/api/esp_gap_ble_api.h`

- 移除 ``esp_err_t esp_ble_gap_set_device_name(const char *name)``

- 设置本地设备名的调用已经被移到 :cpp:func:`esp_bt_dev_set_device_name` 中。可直接删除该函数。

- 移除 ``esp_err_t esp_ble_gap_get_device_name(void)``

- 获取本地设备名的调用已经被移到 :cpp:func:`esp_bt_dev_get_device_name` 中。可直接删除该函数。
1 change: 1 addition & 0 deletions docs/zh_CN/migration-guides/release-5.x/5.3/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
.. toctree::
:maxdepth: 1

bluetooth-low-energy
peripherals
security
storage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "esp_gatts_api.h"
#include "esp_bt_defs.h"
#include "esp_bt_main.h"
#include "esp_bt_device.h"
#include "esp_gattc_api.h"
#include "esp_gatt_defs.h"
#include "esp_gatt_common_api.h"
Expand Down Expand Up @@ -331,7 +332,7 @@ static void gattc_profile_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_
switch (event) {
case ESP_GATTC_REG_EVT:
ESP_LOGI(BLE_ANCS_TAG, "REG_EVT");
esp_ble_gap_set_device_name(EXAMPLE_DEVICE_NAME);
esp_bt_dev_set_device_name(EXAMPLE_DEVICE_NAME);
esp_ble_gap_config_local_icon (ESP_BLE_APPEARANCE_GENERIC_WATCH);
//generate a resolvable random address
esp_ble_gap_config_local_privacy(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "esp_gap_ble_api.h"
#include "esp_gatts_api.h"
#include "esp_bt_main.h"
#include "esp_bt_device.h"
#include "ble_compatibility_test.h"
#include "esp_gatt_common_api.h"

Expand Down Expand Up @@ -465,7 +466,7 @@ static void gatts_profile_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_
{
switch (event) {
case ESP_GATTS_REG_EVT:{
esp_err_t set_dev_name_ret = esp_ble_gap_set_device_name(SAMPLE_DEVICE_NAME);
esp_err_t set_dev_name_ret = esp_bt_dev_set_device_name(SAMPLE_DEVICE_NAME);
if (set_dev_name_ret){
ESP_LOGE(EXAMPLE_TAG, "set device name failed, error code = %x", set_dev_name_ret);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ static void hidd_event_callback(esp_hidd_cb_event_t event, esp_hidd_cb_param_t *
case ESP_HIDD_EVENT_REG_FINISH: {
if (param->init_finish.state == ESP_HIDD_INIT_OK) {
//esp_bd_addr_t rand_addr = {0x04,0x11,0x11,0x11,0x11,0x05};
esp_ble_gap_set_device_name(HIDD_DEVICE_NAME);
esp_bt_dev_set_device_name(HIDD_DEVICE_NAME);
esp_ble_gap_config_adv_data(&hidd_adv_data);

}
Expand Down
Loading

0 comments on commit 4c8f6c5

Please sign in to comment.