From 67edd0c10e2d3d33adcf177390fc17b2e2ca0ad4 Mon Sep 17 00:00:00 2001 From: baohongde Date: Wed, 23 Sep 2020 11:57:17 +0800 Subject: [PATCH] components/bt: Replace task post with btc_inter_profile_call, when post message from btc_dm to btc_gap --- components/bt/bluedroid/btc/core/btc_dm.c | 41 +++++++------------ components/bt/common/btc/core/btc_task.c | 35 ++++++++++++++++ .../bt/common/btc/include/btc/btc_task.h | 18 ++++++++ 3 files changed, 68 insertions(+), 26 deletions(-) diff --git a/components/bt/bluedroid/btc/core/btc_dm.c b/components/bt/bluedroid/btc/core/btc_dm.c index 84a0dd1a90..6972380094 100644 --- a/components/bt/bluedroid/btc/core/btc_dm.c +++ b/components/bt/bluedroid/btc/core/btc_dm.c @@ -22,7 +22,7 @@ #include "common/bt_target.h" #include "btc/btc_storage.h" #include "btc/btc_ble_storage.h" -#include "esp_gap_ble_api.h" +#include "btc_gap_ble.h" #include "btm_int.h" #include "bta/bta_api.h" #include "bta/bta_gatt_api.h" @@ -404,11 +404,10 @@ static void btc_dm_auth_cmpl_evt (tBTA_DM_AUTH_CMPL *p_auth_cmpl) memcpy(param.auth_cmpl.bda, p_auth_cmpl->bd_addr, ESP_BD_ADDR_LEN); memcpy(param.auth_cmpl.device_name, p_auth_cmpl->bd_name, ESP_BT_GAP_MAX_BDNAME_LEN + 1); - ret = btc_transfer_context(&msg, ¶m, - sizeof(esp_bt_gap_cb_param_t), NULL); + ret = btc_inter_profile_call(&msg, ¶m); if (ret != BT_STATUS_SUCCESS) { - BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + BTC_TRACE_ERROR("%s btc_inter_profile_call failed\n", __func__); } #endif /// BTC_GAP_BT_INCLUDED == TRUE @@ -427,11 +426,10 @@ static void btc_dm_pin_req_evt(tBTA_DM_PIN_REQ *p_pin_req) param.pin_req.min_16_digit = p_pin_req->min_16_digit; memcpy(param.pin_req.bda, p_pin_req->bd_addr, ESP_BD_ADDR_LEN); - ret = btc_transfer_context(&msg, ¶m, - sizeof(esp_bt_gap_cb_param_t), NULL); + ret = btc_inter_profile_call(&msg, ¶m); if (ret != BT_STATUS_SUCCESS) { - BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + BTC_TRACE_ERROR("%s btc_inter_profile_call failed\n", __func__); } #endif /// BTC_GAP_BT_INCLUDED == TRUE } @@ -455,11 +453,10 @@ static void btc_dm_sp_cfm_req_evt(tBTA_DM_SP_CFM_REQ *p_cfm_req) param.cfm_req.num_val = p_cfm_req->num_val; memcpy(param.cfm_req.bda, p_cfm_req->bd_addr, ESP_BD_ADDR_LEN); - ret = btc_transfer_context(&msg, ¶m, - sizeof(esp_bt_gap_cb_param_t), NULL); + ret = btc_inter_profile_call(&msg, ¶m); if (ret != BT_STATUS_SUCCESS) { - BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + BTC_TRACE_ERROR("%s btc_inter_profile_call failed\n", __func__); } #endif /// BTC_GAP_BT_INCLUDED == TRUE } @@ -476,11 +473,10 @@ static void btc_dm_sp_key_notif_evt(tBTA_DM_SP_KEY_NOTIF *p_key_notif) param.key_notif.passkey = p_key_notif->passkey; memcpy(param.key_notif.bda, p_key_notif->bd_addr, ESP_BD_ADDR_LEN); - ret = btc_transfer_context(&msg, ¶m, - sizeof(esp_bt_gap_cb_param_t), NULL); + ret = btc_inter_profile_call(&msg, ¶m); if (ret != BT_STATUS_SUCCESS) { - BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + BTC_TRACE_ERROR("%s btc_inter_profile_call failed\n", __func__); } #endif /// BTC_GAP_BT_INCLUDED == TRUE } @@ -496,17 +492,15 @@ static void btc_dm_sp_key_req_evt(tBTA_DM_SP_KEY_REQ *p_key_req) msg.act = BTC_GAP_BT_KEY_REQ_EVT; memcpy(param.key_req.bda, p_key_req->bd_addr, ESP_BD_ADDR_LEN); - ret = btc_transfer_context(&msg, ¶m, - sizeof(esp_bt_gap_cb_param_t), NULL); + ret = btc_inter_profile_call(&msg, ¶m); if (ret != BT_STATUS_SUCCESS) { - BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + BTC_TRACE_ERROR("%s btc_inter_profile_call failed\n", __func__); } #endif /// BTC_GAP_BT_INCLUDED == TRUE } #endif /// BT_SSP_INCLUDED == TRUE -#if (SMP_INCLUDED == TRUE) static void btc_dm_dev_unpaired_evt(tBTA_DM_LINK_DOWN *p_link_down) { esp_bt_gap_cb_param_t param; @@ -527,15 +521,13 @@ static void btc_dm_dev_unpaired_evt(tBTA_DM_LINK_DOWN *p_link_down) msg.pid = BTC_PID_GAP_BT; msg.act = BTC_GAP_BT_REMOVE_BOND_DEV_COMPLETE_EVT; - ret = btc_transfer_context(&msg, ¶m, - sizeof(esp_bt_gap_cb_param_t), NULL); + ret = btc_inter_profile_call(&msg, ¶m); if (ret != BT_STATUS_SUCCESS) { - BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + BTC_TRACE_ERROR("%s btc_inter_profile_call failed\n", __func__); } #endif /// BTC_GAP_BT_INCLUDED == TRUE } -#endif /* #if (SMP_INCLUDED == TRUE) */ tBTA_SERVICE_MASK btc_get_enabled_services_mask(void) { @@ -674,9 +666,7 @@ void btc_dm_sec_cb_handler(btc_msg_t *msg) #endif ///BT_SSP_INCLUDED == TRUE case BTA_DM_DEV_UNPAIRED_EVT: { -#if (SMP_INCLUDED == TRUE) btc_dm_dev_unpaired_evt(&p_data->link_down); -#endif /* #if (SMP_INCLUDED == TRUE) */ break; } case BTA_DM_BLE_DEV_UNPAIRED_EVT: { @@ -879,11 +869,10 @@ void btc_dm_sec_cb_handler(btc_msg_t *msg) } if (rsp_app) { - ret = btc_transfer_context(&ble_msg, ¶m, - sizeof(esp_ble_gap_cb_param_t), NULL); + ret = btc_inter_profile_call(&ble_msg, ¶m); if (ret != BT_STATUS_SUCCESS) { - BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + BTC_TRACE_ERROR("%s btc_inter_profile_call failed\n", __func__); } } btc_dm_sec_arg_deep_free(msg); diff --git a/components/bt/common/btc/core/btc_task.c b/components/bt/common/btc/core/btc_task.c index 53f77629a9..d20f9416af 100644 --- a/components/bt/common/btc/core/btc_task.c +++ b/components/bt/common/btc/core/btc_task.c @@ -164,6 +164,15 @@ static bt_status_t btc_task_post(btc_msg_t *msg, task_post_t timeout) return BT_STATUS_SUCCESS; } +/** + * transfer an message to another module in the different task. + * @param msg message + * @param arg paramter + * @param arg_len length of paramter + * @param copy_func deep copy function + * @return BT_STATUS_SUCCESS: success + * others: fail + */ bt_status_t btc_transfer_context(btc_msg_t *msg, void *arg, int arg_len, btc_arg_deep_copy_t copy_func) { btc_msg_t lmsg; @@ -192,6 +201,32 @@ bt_status_t btc_transfer_context(btc_msg_t *msg, void *arg, int arg_len, btc_arg return btc_task_post(&lmsg, TASK_POST_BLOCKING); } +/** + * transfer an message to another module in tha same task. + * @param msg message + * @param arg paramter + * @return BT_STATUS_SUCCESS: success + * others: fail + */ +bt_status_t btc_inter_profile_call(btc_msg_t *msg, void *arg) +{ + if (msg == NULL) { + return BT_STATUS_PARM_INVALID; + } + + msg->arg = arg; + switch (msg->sig) { + case BTC_SIG_API_CALL: + profile_tab[msg->pid].btc_call(msg); + break; + case BTC_SIG_API_CB: + profile_tab[msg->pid].btc_cb(msg); + break; + default: + break; + } + return BT_STATUS_SUCCESS; +} int btc_init(void) { diff --git a/components/bt/common/btc/include/btc/btc_task.h b/components/bt/common/btc/include/btc/btc_task.h index 00b63e55c0..8e6cb6a673 100644 --- a/components/bt/common/btc/include/btc/btc_task.h +++ b/components/bt/common/btc/include/btc/btc_task.h @@ -92,8 +92,26 @@ typedef struct { typedef void (* btc_arg_deep_copy_t)(btc_msg_t *msg, void *dst, void *src); +/** + * transfer an message to another module in the different task. + * @param msg message + * @param arg paramter + * @param arg_len length of paramter + * @param copy_func deep copy function + * @return BT_STATUS_SUCCESS: success + * others: fail + */ bt_status_t btc_transfer_context(btc_msg_t *msg, void *arg, int arg_len, btc_arg_deep_copy_t copy_func); +/** + * transfer an message to another module in tha same task. + * @param msg message + * @param arg paramter + * @return BT_STATUS_SUCCESS: success + * others: fail + */ +bt_status_t btc_inter_profile_call(btc_msg_t *msg, void *arg); + int btc_init(void); void btc_deinit(void); bool btc_check_queue_is_congest(void);