diff --git a/components/bt/host/bluedroid/api/esp_bluedroid_hci.c b/components/bt/host/bluedroid/api/esp_bluedroid_hci.c index 82f0246e3e..3dcaee9e38 100644 --- a/components/bt/host/bluedroid/api/esp_bluedroid_hci.c +++ b/components/bt/host/bluedroid/api/esp_bluedroid_hci.c @@ -81,6 +81,8 @@ void hci_host_send_packet(uint8_t *data, uint16_t len) #else /* BT_CONTROLLER_INCLUDED == TRUE */ if (s_hci_driver_ops.send) { s_hci_driver_ops.send(data, len); + } else { + ESP_LOGE(LOG_TAG, "%s send function is not registered", __func__); } #endif /* BT_CONTROLLER_INCLUDED == TRUE */ } diff --git a/components/bt/host/bluedroid/api/esp_bt_main.c b/components/bt/host/bluedroid/api/esp_bt_main.c index a728e81c35..fd5a0e2a92 100644 --- a/components/bt/host/bluedroid/api/esp_bt_main.c +++ b/components/bt/host/bluedroid/api/esp_bt_main.c @@ -52,6 +52,7 @@ esp_err_t esp_bluedroid_enable(void) msg.act = BTC_MAIN_ACT_ENABLE; if (btc_transfer_context(&msg, NULL, 0, NULL, NULL) != BT_STATUS_SUCCESS) { + future_free(*future_p); LOG_ERROR("Bluedroid enable failed\n"); return ESP_FAIL; } @@ -163,6 +164,9 @@ esp_err_t esp_bluedroid_init_with_cfg(esp_bluedroid_config_t *cfg) ret = bluedroid_config_init(cfg); if (ret != BT_STATUS_SUCCESS) { LOG_ERROR("Bluedroid stack initialize fail, ret:%d", ret); +#if HEAP_MEMORY_STATS + osi_mem_deinit(); +#endif return ESP_FAIL; } @@ -172,6 +176,11 @@ esp_err_t esp_bluedroid_init_with_cfg(esp_bluedroid_config_t *cfg) ret = btc_init(); if (ret != BT_STATUS_SUCCESS) { LOG_ERROR("Bluedroid Initialize Fail"); + bluedroid_config_deinit(); +#if HEAP_MEMORY_STATS + osi_mem_deinit(); +#endif + return ESP_FAIL; } @@ -179,6 +188,12 @@ esp_err_t esp_bluedroid_init_with_cfg(esp_bluedroid_config_t *cfg) *future_p = future_new(); if (*future_p == NULL) { LOG_ERROR("Bluedroid Initialize Fail!"); + btc_deinit(); + bluedroid_config_deinit(); +#if HEAP_MEMORY_STATS + osi_mem_deinit(); +#endif + return ESP_ERR_NO_MEM; } @@ -188,11 +203,22 @@ esp_err_t esp_bluedroid_init_with_cfg(esp_bluedroid_config_t *cfg) if (btc_transfer_context(&msg, NULL, 0, NULL, NULL) != BT_STATUS_SUCCESS) { LOG_ERROR("Bluedroid Initialize Fail"); + future_free(*future_p); + btc_deinit(); + bluedroid_config_deinit(); +#if HEAP_MEMORY_STATS + osi_mem_deinit(); +#endif return ESP_FAIL; } if (future_await(*future_p) == FUTURE_FAIL) { LOG_ERROR("Bluedroid Initialize Fail"); + btc_deinit(); + bluedroid_config_deinit(); +#if HEAP_MEMORY_STATS + osi_mem_deinit(); +#endif return ESP_FAIL; } diff --git a/components/bt/host/bluedroid/api/esp_gap_ble_api.c b/components/bt/host/bluedroid/api/esp_gap_ble_api.c index 7dfe9dd3dd..32745bd192 100644 --- a/components/bt/host/bluedroid/api/esp_gap_ble_api.c +++ b/components/bt/host/bluedroid/api/esp_gap_ble_api.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -33,6 +33,7 @@ esp_err_t esp_ble_gap_config_adv_data(esp_ble_adv_data_t *adv_data) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -59,6 +60,7 @@ esp_err_t esp_ble_gap_set_scan_params(esp_ble_scan_params_t *scan_params) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -78,6 +80,7 @@ esp_err_t esp_ble_gap_start_scanning(uint32_t duration) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -92,7 +95,7 @@ esp_err_t esp_ble_gap_start_scanning(uint32_t duration) esp_err_t esp_ble_gap_stop_scanning(void) { - btc_msg_t msg; + btc_msg_t msg = {0}; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -108,6 +111,7 @@ esp_err_t esp_ble_gap_start_advertising(esp_ble_adv_params_t *adv_params) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -125,7 +129,7 @@ esp_err_t esp_ble_gap_start_advertising(esp_ble_adv_params_t *adv_params) esp_err_t esp_ble_gap_stop_advertising(void) { - btc_msg_t msg; + btc_msg_t msg = {0}; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -142,6 +146,7 @@ esp_err_t esp_ble_gap_update_conn_params(esp_ble_conn_update_params_t *params) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); if(!params) { @@ -172,6 +177,7 @@ esp_err_t esp_ble_gap_set_pkt_data_len(esp_bd_addr_t remote_device, uint16_t tx_ { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -218,6 +224,7 @@ esp_err_t esp_ble_gap_set_rand_addr(esp_bd_addr_t rand_addr) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -243,6 +250,7 @@ esp_err_t esp_ble_gap_set_resolvable_private_address_timeout(uint16_t rpa_timeou btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; @@ -263,6 +271,7 @@ esp_err_t esp_ble_gap_add_device_to_resolving_list(esp_bd_addr_t peer_addr, uint btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; @@ -277,7 +286,7 @@ esp_err_t esp_ble_gap_add_device_to_resolving_list(esp_bd_addr_t peer_addr, uint esp_err_t esp_ble_gap_clear_rand_addr(void) { - btc_msg_t msg; + btc_msg_t msg = {0}; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -292,6 +301,7 @@ esp_err_t esp_ble_gap_config_local_privacy (bool privacy_enable) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -307,6 +317,7 @@ esp_err_t esp_ble_gap_config_local_icon (uint16_t icon) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -322,6 +333,7 @@ esp_err_t esp_ble_gap_update_whitelist(bool add_remove, esp_bd_addr_t remote_bda { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -342,7 +354,7 @@ esp_err_t esp_ble_gap_update_whitelist(bool add_remove, esp_bd_addr_t remote_bda esp_err_t esp_ble_gap_clear_whitelist(void) { - btc_msg_t msg; + btc_msg_t msg = {0}; if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -359,6 +371,7 @@ esp_err_t esp_ble_gap_get_whitelist_size(uint16_t *length) if (length == NULL) { return ESP_FAIL; } + ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); btc_get_whitelist_size(length); return ESP_OK; @@ -370,6 +383,7 @@ esp_err_t esp_ble_gap_set_prefer_conn_params(esp_bd_addr_t bd_addr, { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -408,6 +422,7 @@ esp_err_t esp_ble_gap_set_device_name(const char *name) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -445,6 +460,7 @@ esp_err_t esp_ble_gap_set_key_material(const uint8_t session_key[16], const uint { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -507,6 +523,7 @@ esp_err_t esp_ble_gap_config_adv_data_raw(uint8_t *raw_data, uint32_t raw_data_l { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -517,7 +534,8 @@ esp_err_t esp_ble_gap_config_adv_data_raw(uint8_t *raw_data, uint32_t raw_data_l msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_ACT_CFG_ADV_DATA_RAW; - arg.cfg_adv_data_raw.raw_adv = raw_data; + // Check if raw_data_len is 0 and raw_data is not NULL + arg.cfg_adv_data_raw.raw_adv = (raw_data_len > 0) ? raw_data : NULL; arg.cfg_adv_data_raw.raw_adv_len = raw_data_len; return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), btc_gap_ble_arg_deep_copy, @@ -529,6 +547,7 @@ esp_err_t esp_ble_gap_config_scan_rsp_data_raw(uint8_t *raw_data, uint32_t raw_d { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -539,7 +558,8 @@ esp_err_t esp_ble_gap_config_scan_rsp_data_raw(uint8_t *raw_data, uint32_t raw_d msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_ACT_CFG_SCAN_RSP_DATA_RAW; - arg.cfg_scan_rsp_data_raw.raw_scan_rsp = raw_data; + // Check if raw_data_len is 0 and raw_data is not NULL + arg.cfg_scan_rsp_data_raw.raw_scan_rsp = (raw_data_len > 0) ? raw_data : NULL; arg.cfg_scan_rsp_data_raw.raw_scan_rsp_len = raw_data_len; return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), btc_gap_ble_arg_deep_copy, @@ -553,6 +573,7 @@ esp_err_t esp_ble_gap_read_rssi(esp_bd_addr_t remote_addr) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -576,6 +597,7 @@ esp_err_t esp_ble_gap_add_duplicate_scan_exceptional_device(esp_ble_duplicate_ex { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -600,6 +622,7 @@ esp_err_t esp_ble_gap_remove_duplicate_scan_exceptional_device(esp_ble_duplicate { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -624,6 +647,7 @@ esp_err_t esp_ble_gap_clean_duplicate_scan_exceptional_list(esp_duplicate_scan_e { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -671,6 +695,7 @@ esp_err_t esp_ble_gap_set_security_param(esp_ble_sm_param_t param_type, } btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -689,6 +714,7 @@ esp_err_t esp_ble_set_encryption(esp_bd_addr_t bd_addr, esp_ble_sec_act_t sec_ac { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -710,6 +736,7 @@ esp_err_t esp_ble_gap_security_rsp(esp_bd_addr_t bd_addr, bool accept) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -732,6 +759,7 @@ esp_err_t esp_ble_passkey_reply(esp_bd_addr_t bd_addr, bool accept, uint32_t pas { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -742,9 +770,9 @@ esp_err_t esp_ble_passkey_reply(esp_bd_addr_t bd_addr, bool accept, uint32_t pas msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_PASSKEY_REPLY_EVT; - arg.enc_passkey_replay.accept = accept; - arg.enc_passkey_replay.passkey = passkey; - memcpy(arg.enc_passkey_replay.bd_addr, bd_addr, ESP_BD_ADDR_LEN); + arg.enc_passkey_reply.accept = accept; + arg.enc_passkey_reply.passkey = passkey; + memcpy(arg.enc_passkey_reply.bd_addr, bd_addr, ESP_BD_ADDR_LEN); return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); @@ -754,6 +782,7 @@ esp_err_t esp_ble_confirm_reply(esp_bd_addr_t bd_addr, bool accept) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -764,8 +793,8 @@ esp_err_t esp_ble_confirm_reply(esp_bd_addr_t bd_addr, bool accept) msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_CONFIRM_REPLY_EVT; - arg.enc_comfirm_replay.accept = accept; - memcpy(arg.enc_comfirm_replay.bd_addr, bd_addr, ESP_BD_ADDR_LEN); + arg.enc_confirm_reply.accept = accept; + memcpy(arg.enc_confirm_reply.bd_addr, bd_addr, ESP_BD_ADDR_LEN); return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); @@ -775,6 +804,9 @@ esp_err_t esp_ble_remove_bond_device(esp_bd_addr_t bd_addr) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); + + ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); if (bd_addr == NULL) { return ESP_ERR_INVALID_ARG; @@ -831,6 +863,7 @@ esp_err_t esp_ble_oob_req_reply(esp_bd_addr_t bd_addr, uint8_t *TK, uint8_t len) btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -853,6 +886,7 @@ esp_err_t esp_ble_sc_oob_req_reply(esp_bd_addr_t bd_addr, uint8_t p_c[16], uint8 btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -871,6 +905,8 @@ esp_err_t esp_ble_create_sc_oob_data(void) { btc_msg_t msg = {0}; + 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_SC_CR_OOB_DATA_EVT; @@ -905,6 +941,7 @@ esp_err_t esp_ble_gap_disconnect(esp_bd_addr_t remote_device) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -922,10 +959,11 @@ esp_err_t esp_ble_gap_disconnect(esp_bd_addr_t remote_device) esp_err_t esp_ble_get_current_conn_params(esp_bd_addr_t bd_addr, esp_gap_conn_params_t *conn_params) { - if(!bd_addr || !conn_params) { + if (!bd_addr || !conn_params) { return ESP_ERR_INVALID_ARG; } - if(BTM_GetCurrentConnParams(bd_addr, &conn_params->interval, &conn_params->latency, &conn_params->timeout)) { + ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (BTM_GetCurrentConnParams(bd_addr, &conn_params->interval, &conn_params->latency, &conn_params->timeout)) { return ESP_OK; } return ESP_ERR_NOT_FOUND; @@ -935,6 +973,7 @@ esp_err_t esp_gap_ble_set_channels(esp_gap_ble_channels channels) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -959,8 +998,9 @@ esp_err_t esp_ble_gap_read_channel_map(esp_bd_addr_t bd_addr) return ESP_ERR_INVALID_ARG; } - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -978,6 +1018,7 @@ esp_err_t esp_gap_ble_set_authorization(esp_bd_addr_t bd_addr, bool authorize) if (!bd_addr) { return ESP_ERR_INVALID_ARG; } + ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); if (BTM_Ble_Authorization(bd_addr, authorize)) { return ESP_OK; } @@ -989,6 +1030,7 @@ esp_err_t esp_ble_dtm_tx_start(const esp_ble_dtm_tx_t *tx_params) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (!tx_params) { return ESP_ERR_INVALID_ARG; @@ -1009,6 +1051,7 @@ esp_err_t esp_ble_dtm_rx_start(const esp_ble_dtm_rx_t *rx_params) { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (!rx_params) { return ESP_ERR_INVALID_ARG; @@ -1031,6 +1074,7 @@ esp_err_t esp_ble_dtm_enh_tx_start(const esp_ble_dtm_enh_tx_t *tx_params) { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (!tx_params) { return ESP_ERR_INVALID_ARG; @@ -1051,6 +1095,7 @@ esp_err_t esp_ble_dtm_enh_rx_start(const esp_ble_dtm_enh_rx_t *rx_params) { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (!rx_params) { return ESP_ERR_INVALID_ARG; @@ -1085,11 +1130,16 @@ esp_err_t esp_ble_dtm_stop(void) esp_err_t esp_ble_gap_set_privacy_mode(esp_ble_addr_type_t addr_type, esp_bd_addr_t addr, esp_ble_privacy_mode_t mode) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (addr == NULL) { + return ESP_ERR_INVALID_ARG; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_SET_PRIVACY_MODE; @@ -1106,11 +1156,16 @@ esp_err_t esp_ble_gap_set_privacy_mode(esp_ble_addr_type_t addr_type, esp_bd_add esp_err_t esp_ble_gap_read_phy(esp_bd_addr_t bd_addr) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (bd_addr == NULL) { + return ESP_ERR_INVALID_ARG; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_READ_PHY; @@ -1123,8 +1178,9 @@ esp_err_t esp_ble_gap_read_phy(esp_bd_addr_t bd_addr) esp_err_t esp_ble_gap_set_preferred_default_phy(esp_ble_gap_phy_mask_t tx_phy_mask, esp_ble_gap_phy_mask_t rx_phy_mask) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1144,11 +1200,16 @@ esp_err_t esp_ble_gap_set_preferred_phy(esp_bd_addr_t bd_addr, esp_ble_gap_phy_mask_t rx_phy_mask, esp_ble_gap_prefer_phy_options_t phy_options) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (bd_addr == NULL) { + return ESP_ERR_INVALID_ARG; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_SET_DEF_PHY; @@ -1164,11 +1225,16 @@ esp_err_t esp_ble_gap_set_preferred_phy(esp_bd_addr_t bd_addr, #if (BLE_50_EXTEND_ADV_EN == TRUE) esp_err_t esp_ble_gap_ext_adv_set_rand_addr(uint8_t instance, esp_bd_addr_t rand_addr) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (rand_addr == NULL) { + return ESP_ERR_INVALID_ARG; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_SET_EXT_ADV_RAND_ADDR; @@ -1183,8 +1249,9 @@ esp_err_t esp_ble_gap_ext_adv_set_rand_addr(uint8_t instance, esp_bd_addr_t rand esp_err_t esp_ble_gap_ext_adv_set_params(uint8_t instance, const esp_ble_gap_ext_adv_params_t *params) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1216,11 +1283,17 @@ esp_err_t esp_ble_gap_ext_adv_set_params(uint8_t instance, esp_err_t esp_ble_gap_config_ext_adv_data_raw(uint8_t instance, uint16_t length, const uint8_t *data) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (length != 0 && data == NULL) { + return ESP_ERR_INVALID_ARG; + } + + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_CFG_EXT_ADV_DATA_RAW; @@ -1236,11 +1309,16 @@ esp_err_t esp_ble_gap_config_ext_adv_data_raw(uint8_t instance, uint16_t length, esp_err_t esp_ble_gap_config_ext_scan_rsp_data_raw(uint8_t instance, uint16_t length, const uint8_t *scan_rsp_data) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (length != 0 && scan_rsp_data == NULL) { + return ESP_ERR_INVALID_ARG; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_CFG_EXT_SCAN_RSP_DATA_RAW; @@ -1255,11 +1333,17 @@ esp_err_t esp_ble_gap_config_ext_scan_rsp_data_raw(uint8_t instance, uint16_t le esp_err_t esp_ble_gap_ext_adv_start(uint8_t num_adv, const esp_ble_gap_ext_adv_t *ext_adv) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (num_adv == 0 || ext_adv == NULL) { + return ESP_ERR_INVALID_ARG; + } + + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_EXT_ADV_START; @@ -1273,11 +1357,16 @@ esp_err_t esp_ble_gap_ext_adv_start(uint8_t num_adv, const esp_ble_gap_ext_adv_t esp_err_t esp_ble_gap_ext_adv_stop(uint8_t num_adv, const uint8_t *ext_adv_inst) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (num_adv > 0 && ext_adv_inst == NULL) { + return ESP_ERR_INVALID_ARG; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_EXT_ADV_STOP; @@ -1291,8 +1380,9 @@ esp_err_t esp_ble_gap_ext_adv_stop(uint8_t num_adv, const uint8_t *ext_adv_inst) esp_err_t esp_ble_gap_ext_adv_set_remove(uint8_t instance) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1307,7 +1397,7 @@ esp_err_t esp_ble_gap_ext_adv_set_remove(uint8_t instance) esp_err_t esp_ble_gap_ext_adv_set_clear(void) { - btc_msg_t msg; + btc_msg_t msg = {0}; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1322,11 +1412,17 @@ esp_err_t esp_ble_gap_ext_adv_set_clear(void) #if (BLE_50_PERIODIC_ADV_EN == TRUE) esp_err_t esp_ble_gap_periodic_adv_set_params(uint8_t instance, const esp_ble_gap_periodic_adv_params_t *params) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (params == NULL) { + return ESP_ERR_INVALID_ARG; + } + + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_SET_PERIODIC_ADV_PARAMS; @@ -1347,11 +1443,18 @@ esp_err_t esp_ble_gap_config_periodic_adv_data_raw(uint8_t instance, uint16_t le const uint8_t *data) #endif { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (length != 0 && data == NULL) + { + return ESP_ERR_INVALID_ARG; + } + + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_CFG_PERIODIC_ADV_DATA_RAW; @@ -1376,8 +1479,9 @@ esp_err_t esp_ble_gap_periodic_adv_start(uint8_t instance,bool include_adi) esp_err_t esp_ble_gap_periodic_adv_start(uint8_t instance) #endif { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1399,8 +1503,9 @@ esp_err_t esp_ble_gap_periodic_adv_start(uint8_t instance) esp_err_t esp_ble_gap_periodic_adv_stop(uint8_t instance) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1419,11 +1524,17 @@ esp_err_t esp_ble_gap_periodic_adv_stop(uint8_t instance) #if (BLE_50_EXTEND_SYNC_EN == TRUE) esp_err_t esp_ble_gap_periodic_adv_create_sync(const esp_ble_gap_periodic_adv_sync_params_t *params) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (params == NULL) { + return ESP_ERR_INVALID_ARG; + } + + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_PERIODIC_ADV_CREATE_SYNC; @@ -1437,7 +1548,7 @@ esp_err_t esp_ble_gap_periodic_adv_create_sync(const esp_ble_gap_periodic_adv_sy esp_err_t esp_ble_gap_periodic_adv_sync_cancel(void) { - btc_msg_t msg; + btc_msg_t msg = {0}; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1452,8 +1563,9 @@ esp_err_t esp_ble_gap_periodic_adv_sync_cancel(void) esp_err_t esp_ble_gap_periodic_adv_sync_terminate(uint16_t sync_handle) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1471,11 +1583,16 @@ esp_err_t esp_ble_gap_periodic_adv_add_dev_to_list(esp_ble_addr_type_t addr_type esp_bd_addr_t addr, uint8_t sid) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (addr == NULL) { + return ESP_ERR_INVALID_ARG; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_PERIODIC_ADV_ADD_DEV_TO_LIST; @@ -1495,11 +1612,16 @@ esp_err_t esp_ble_gap_periodic_adv_remove_dev_from_list(esp_ble_addr_type_t addr esp_bd_addr_t addr, uint8_t sid) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (addr == NULL) { + return ESP_ERR_INVALID_ARG; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_PERIODIC_REMOVE_ADD_DEV_FROM_LIST; @@ -1517,7 +1639,7 @@ esp_err_t esp_ble_gap_periodic_adv_remove_dev_from_list(esp_ble_addr_type_t addr esp_err_t esp_ble_gap_periodic_adv_clear_dev(void) { - btc_msg_t msg; + btc_msg_t msg = {0}; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1535,6 +1657,7 @@ esp_err_t esp_ble_gap_get_periodic_list_size(uint8_t *size) if (size == NULL) { return ESP_FAIL; } + ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); btc_get_periodic_list_size(size); return ESP_OK; @@ -1545,8 +1668,9 @@ esp_err_t esp_ble_gap_get_periodic_list_size(uint8_t *size) #if (BLE_50_EXTEND_SCAN_EN == TRUE) esp_err_t esp_ble_gap_set_ext_scan_params(const esp_ble_ext_scan_params_t *params) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (!params) { return ESP_ERR_INVALID_ARG; @@ -1566,8 +1690,9 @@ esp_err_t esp_ble_gap_set_ext_scan_params(const esp_ble_ext_scan_params_t *param esp_err_t esp_ble_gap_start_ext_scan(uint32_t duration, uint16_t period) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1584,7 +1709,7 @@ esp_err_t esp_ble_gap_start_ext_scan(uint32_t duration, uint16_t period) esp_err_t esp_ble_gap_stop_ext_scan(void) { - btc_msg_t msg; + btc_msg_t msg = {0}; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1602,11 +1727,16 @@ esp_err_t esp_ble_gap_prefer_ext_connect_params_set(esp_bd_addr_t addr, const esp_ble_gap_conn_params_t *phy_2m_conn_params, const esp_ble_gap_conn_params_t *phy_coded_conn_params) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (addr == NULL) { + return ESP_ERR_INVALID_ARG; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GAP_BLE; msg.act = BTC_GAP_BLE_SET_EXT_PEFER_CONNET_PARAMS; @@ -1614,7 +1744,7 @@ esp_err_t esp_ble_gap_prefer_ext_connect_params_set(esp_bd_addr_t addr, arg.set_ext_conn_params.phy_mask = phy_mask; if (phy_mask & ESP_BLE_GAP_PHY_1M_PREF_MASK) { if (!phy_1m_conn_params) { - return BT_STATUS_PARM_INVALID; + return ESP_ERR_INVALID_ARG; } if (ESP_BLE_IS_VALID_PARAM(phy_1m_conn_params->interval_min, ESP_BLE_CONN_INT_MIN, ESP_BLE_CONN_INT_MAX) && @@ -1638,7 +1768,7 @@ esp_err_t esp_ble_gap_prefer_ext_connect_params_set(esp_bd_addr_t addr, if (phy_mask & ESP_BLE_GAP_PHY_2M_PREF_MASK) { if (!phy_2m_conn_params) { - return BT_STATUS_PARM_INVALID; + return ESP_ERR_INVALID_ARG; } if (ESP_BLE_IS_VALID_PARAM(phy_2m_conn_params->interval_min, ESP_BLE_CONN_INT_MIN, ESP_BLE_CONN_INT_MAX) && @@ -1662,7 +1792,7 @@ esp_err_t esp_ble_gap_prefer_ext_connect_params_set(esp_bd_addr_t addr, if (phy_mask & ESP_BLE_GAP_PHY_CODED_PREF_MASK) { if (!phy_coded_conn_params) { - return BT_STATUS_PARM_INVALID; + return ESP_ERR_INVALID_ARG; } if (ESP_BLE_IS_VALID_PARAM(phy_coded_conn_params->interval_min, ESP_BLE_CONN_INT_MIN, ESP_BLE_CONN_INT_MAX) && @@ -1696,8 +1826,9 @@ esp_err_t esp_ble_gap_prefer_ext_connect_params_set(esp_bd_addr_t addr, #if (BLE_FEAT_PERIODIC_ADV_SYNC_TRANSFER == TRUE) esp_err_t esp_ble_gap_periodic_adv_recv_enable(uint16_t sync_handle, uint8_t enable) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1714,8 +1845,9 @@ esp_err_t esp_ble_gap_periodic_adv_recv_enable(uint16_t sync_handle, uint8_t ena esp_err_t esp_ble_gap_periodic_adv_sync_trans(esp_bd_addr_t addr, uint16_t service_data, uint16_t sync_handle) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1737,8 +1869,9 @@ esp_err_t esp_ble_gap_periodic_adv_sync_trans(esp_bd_addr_t addr, uint16_t servi esp_err_t esp_ble_gap_periodic_adv_set_info_trans(esp_bd_addr_t addr, uint16_t service_data, uint8_t adv_handle) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1760,8 +1893,9 @@ esp_err_t esp_ble_gap_periodic_adv_set_info_trans(esp_bd_addr_t addr, uint16_t s esp_err_t esp_ble_gap_set_periodic_adv_sync_trans_params(esp_bd_addr_t addr, const esp_ble_gap_past_params_t *params) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1790,6 +1924,7 @@ esp_err_t esp_ble_gap_vendor_command_send(esp_ble_vendor_cmd_params_t *vendor_cm { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -1818,6 +1953,7 @@ esp_err_t esp_ble_gap_set_vendor_event_mask(esp_ble_vendor_evt_mask_t event_mask { btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -1834,7 +1970,7 @@ esp_err_t esp_ble_gap_set_vendor_event_mask(esp_ble_vendor_evt_mask_t event_mask esp_err_t esp_ble_gap_clear_advertising(void) { - btc_msg_t msg; + btc_msg_t msg = {0}; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1847,8 +1983,9 @@ esp_err_t esp_ble_gap_clear_advertising(void) esp_err_t esp_ble_gap_set_csa_support(uint8_t csa_select) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1922,6 +2059,7 @@ esp_err_t esp_ble_gap_enhanced_read_transmit_power_level(uint16_t conn_handle, e { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -1933,7 +2071,7 @@ esp_err_t esp_ble_gap_enhanced_read_transmit_power_level(uint16_t conn_handle, e arg.enh_read_trans_pwr_level.conn_handle = conn_handle; arg.enh_read_trans_pwr_level.phy = phy; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -1941,6 +2079,7 @@ esp_err_t esp_ble_gap_read_remote_transmit_power_level(uint16_t conn_handle, esp { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -1952,7 +2091,7 @@ esp_err_t esp_ble_gap_read_remote_transmit_power_level(uint16_t conn_handle, esp arg.read_rem_trans_pwr_level.conn_handle = conn_handle; arg.read_rem_trans_pwr_level.phy = phy; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -1960,6 +2099,7 @@ esp_err_t esp_ble_gap_set_path_loss_reporting_params(esp_ble_path_loss_rpt_param { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -1979,7 +2119,7 @@ esp_err_t esp_ble_gap_set_path_loss_reporting_params(esp_ble_path_loss_rpt_param arg.set_path_loss_rpt_params.low_hysteresis = path_loss_rpt_params->low_hysteresis; arg.set_path_loss_rpt_params.min_time_spent = path_loss_rpt_params->min_time_spent; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -1987,6 +2127,7 @@ esp_err_t esp_ble_gap_set_path_loss_reporting_enable(uint16_t conn_handle, bool { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -1998,7 +2139,7 @@ esp_err_t esp_ble_gap_set_path_loss_reporting_enable(uint16_t conn_handle, bool arg.set_path_loss_rpt_en.conn_handle = conn_handle; arg.set_path_loss_rpt_en.enable = enable; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -2006,6 +2147,7 @@ esp_err_t esp_ble_gap_set_transmit_power_reporting_enable(uint16_t conn_handle, { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2018,7 +2160,7 @@ esp_err_t esp_ble_gap_set_transmit_power_reporting_enable(uint16_t conn_handle, arg.set_trans_pwr_rpting_en.local_enable = local_enable; arg.set_trans_pwr_rpting_en.remote_enable = remote_enable; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -2029,6 +2171,7 @@ esp_err_t esp_ble_gap_set_default_subrate(esp_ble_default_subrate_param_t *defau { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2048,7 +2191,7 @@ esp_err_t esp_ble_gap_set_default_subrate(esp_ble_default_subrate_param_t *defau arg.default_subrate_param.continuation_number = default_subrate_params->continuation_number; arg.default_subrate_param.supervision_timeout = default_subrate_params->supervision_timeout; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -2056,6 +2199,7 @@ esp_err_t esp_ble_gap_subrate_request(esp_ble_subrate_req_param_t *subrate_req_p { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2076,7 +2220,7 @@ esp_err_t esp_ble_gap_subrate_request(esp_ble_subrate_req_param_t *subrate_req_p arg.subrate_req_param.continuation_number = subrate_req_params->continuation_number; arg.subrate_req_param.supervision_timeout = subrate_req_params->supervision_timeout; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } #endif // #if (BLE_FEAT_CONN_SUBRATING == TRUE) @@ -2084,8 +2228,9 @@ esp_err_t esp_ble_gap_subrate_request(esp_ble_subrate_req_param_t *subrate_req_p #if (BLE_50_FEATURE_SUPPORT == TRUE) esp_err_t esp_ble_gap_set_host_feature(uint16_t bit_num, uint8_t bit_val) { - btc_msg_t msg; + btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2117,6 +2262,7 @@ esp_err_t esp_ble_gap_set_periodic_adv_subevent_data(esp_ble_per_adv_subevent_da { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2146,7 +2292,7 @@ esp_err_t esp_ble_gap_set_periodic_adv_subevent_data(esp_ble_per_adv_subevent_da arg.per_adv_subevent_data_params.num_subevents_with_data = subevent_data_params->num_subevents_with_data; arg.per_adv_subevent_data_params.subevent_params = subevent_data_params->subevent_params; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), btc_gap_ble_arg_deep_copy, btc_gap_ble_arg_deep_free) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), btc_gap_ble_arg_deep_copy, btc_gap_ble_arg_deep_free) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -2154,6 +2300,7 @@ esp_err_t esp_ble_gap_set_periodic_adv_response_data(esp_ble_per_adv_response_da { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2179,7 +2326,7 @@ esp_err_t esp_ble_gap_set_periodic_adv_response_data(esp_ble_per_adv_response_da arg.per_adv_response_data_params.response_data_len = rsp_data_params->response_data_len; arg.per_adv_response_data_params.response_data = rsp_data_params->response_data; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), btc_gap_ble_arg_deep_copy, btc_gap_ble_arg_deep_free) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), btc_gap_ble_arg_deep_copy, btc_gap_ble_arg_deep_free) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -2187,6 +2334,7 @@ esp_err_t esp_ble_gap_set_periodic_sync_subevent(esp_ble_per_sync_subevent_param { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2209,7 +2357,7 @@ esp_err_t esp_ble_gap_set_periodic_sync_subevent(esp_ble_per_sync_subevent_param arg.per_sync_subevent_params.num_subevents_to_sync = sync_subevent_params->num_subevents_to_sync; arg.per_sync_subevent_params.subevent = sync_subevent_params->subevent; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), btc_gap_ble_arg_deep_copy, btc_gap_ble_arg_deep_free) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_5_gap_args_t), btc_gap_ble_arg_deep_copy, btc_gap_ble_arg_deep_free) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } #endif // #if (BT_BLE_FEAT_PAWR_EN == TRUE) @@ -2235,6 +2383,7 @@ esp_err_t esp_ble_cs_read_remote_supported_capabilities(uint16_t conn_handle) { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2307,6 +2456,7 @@ esp_err_t esp_ble_cs_security_enable(uint16_t conn_handle) { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2357,6 +2507,7 @@ esp_err_t esp_ble_cs_read_remote_fae_table(uint16_t conn_handle) { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2440,6 +2591,7 @@ esp_err_t esp_ble_cs_remove_config(esp_ble_cs_remove_config_params *remove_confi { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2464,6 +2616,7 @@ esp_err_t esp_ble_cs_set_channel_classification(esp_ble_cs_set_channel_class_par { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2487,6 +2640,7 @@ esp_err_t esp_ble_cs_set_procedure_params(esp_ble_cs_set_proc_params *procedure_ { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; @@ -2523,6 +2677,7 @@ esp_err_t esp_ble_cs_procedure_enable(esp_ble_cs_procedure_enable_params *proced { btc_msg_t msg = {0}; btc_ble_5_gap_args_t arg; + memset(&arg, 0, sizeof(arg)); if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { return ESP_ERR_INVALID_STATE; diff --git a/components/bt/host/bluedroid/api/esp_gatt_common_api.c b/components/bt/host/bluedroid/api/esp_gatt_common_api.c index d0f3b0e02a..9254b8d87a 100644 --- a/components/bt/host/bluedroid/api/esp_gatt_common_api.c +++ b/components/bt/host/bluedroid/api/esp_gatt_common_api.c @@ -25,6 +25,7 @@ esp_err_t esp_ble_gatt_set_local_mtu (uint16_t mtu) { btc_msg_t msg = {0}; btc_ble_gatt_com_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -54,6 +55,9 @@ extern UINT16 L2CA_GetFreePktBufferNum_LE(void); uint16_t esp_ble_get_sendable_packets_num (void) { + if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { + return 0; + } return L2CA_GetFreePktBufferNum_LE(); } @@ -70,6 +74,9 @@ uint16_t esp_ble_get_sendable_packets_num (void) extern UINT16 L2CA_GetCurFreePktBufferNum_LE(UINT16 conn_id); uint16_t esp_ble_get_cur_sendable_packets_num (uint16_t connid) { + if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { + return 0; + } return L2CA_GetCurFreePktBufferNum_LE(connid); } #endif diff --git a/components/bt/host/bluedroid/api/esp_gattc_api.c b/components/bt/host/bluedroid/api/esp_gattc_api.c index f54deb8ea2..c9c6fb8f46 100644 --- a/components/bt/host/bluedroid/api/esp_gattc_api.c +++ b/components/bt/host/bluedroid/api/esp_gattc_api.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -31,6 +31,9 @@ esp_err_t esp_ble_gattc_register_callback(esp_gattc_cb_t callback) esp_gattc_cb_t esp_ble_gattc_get_callback(void) { + if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { + return NULL; + } return (esp_gattc_cb_t) btc_profile_cb_get(BTC_PID_GATTC); } @@ -38,6 +41,7 @@ esp_err_t esp_ble_gattc_app_register(uint16_t app_id) { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -57,6 +61,7 @@ esp_err_t esp_ble_gattc_app_unregister(esp_gatt_if_t gattc_if) { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -72,6 +77,7 @@ esp_err_t esp_ble_gattc_enh_open(esp_gatt_if_t gattc_if, esp_ble_gatt_creat_conn { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); const esp_ble_conn_params_t *conn_params; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -216,6 +222,7 @@ esp_err_t esp_ble_gattc_aux_open_with_pawr_synced(esp_gatt_if_t gattc_if, esp_bl { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); const esp_ble_conn_params_t *conn_params; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -315,6 +322,7 @@ esp_err_t esp_ble_gattc_close (esp_gatt_if_t gattc_if, uint16_t conn_id) { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -330,6 +338,7 @@ esp_err_t esp_ble_gattc_send_mtu_req (esp_gatt_if_t gattc_if, uint16_t conn_id) { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -345,6 +354,7 @@ esp_err_t esp_ble_gattc_search_service(esp_gatt_if_t gattc_if, uint16_t conn_id, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -386,15 +396,16 @@ esp_gatt_status_t esp_ble_gattc_get_all_char(esp_gatt_if_t gattc_if, { ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); - if ((start_handle == 0) && (end_handle == 0)) { - *count = 0; - return ESP_GATT_INVALID_HANDLE; - } if (result == NULL || count == NULL || *count == 0) { return ESP_GATT_INVALID_PDU; } + if ((start_handle == 0) && (end_handle == 0)) { + *count = 0; + return ESP_GATT_INVALID_HANDLE; + } + uint16_t conn_hdl = BTC_GATT_CREATE_CONN_ID(gattc_if, conn_id); return btc_ble_gattc_get_all_char(conn_hdl, start_handle, end_handle, result, count, offset); } @@ -429,15 +440,15 @@ esp_gatt_status_t esp_ble_gattc_get_char_by_uuid(esp_gatt_if_t gattc_if, { ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (result == NULL || count == NULL || *count == 0) { + return ESP_GATT_INVALID_PDU; + } + if (start_handle == 0 && end_handle == 0) { *count = 0; return ESP_GATT_INVALID_HANDLE; } - if (result == NULL || count == NULL || *count == 0) { - return ESP_GATT_INVALID_PDU; - } - uint16_t conn_hdl = BTC_GATT_CREATE_CONN_ID(gattc_if,conn_id); return btc_ble_gattc_get_char_by_uuid(conn_hdl, start_handle, end_handle, char_uuid, result, count); } @@ -471,15 +482,15 @@ esp_gatt_status_t esp_ble_gattc_get_descr_by_char_handle(esp_gatt_if_t gattc_if, { ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (result == NULL || count == NULL || *count == 0) { + return ESP_GATT_INVALID_PDU; + } + if (char_handle == 0) { *count = 0; return ESP_GATT_INVALID_HANDLE; } - if (result == NULL || count == NULL || *count == 0) { - return ESP_GATT_INVALID_PDU; - } - uint16_t conn_hdl = BTC_GATT_CREATE_CONN_ID(gattc_if, conn_id); return btc_ble_gattc_get_descr_by_char_handle(conn_hdl, char_handle, descr_uuid, result, count); } @@ -494,15 +505,15 @@ esp_gatt_status_t esp_ble_gattc_get_include_service(esp_gatt_if_t gattc_if, { ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (result == NULL || count == NULL || *count == 0) { + return ESP_GATT_INVALID_PDU; + } + if (start_handle == 0 && end_handle == 0) { *count = 0; return ESP_GATT_INVALID_HANDLE; } - if (result == NULL || count == NULL || *count == 0) { - return ESP_GATT_INVALID_PDU; - } - uint16_t conn_hdl = BTC_GATT_CREATE_CONN_ID(gattc_if, conn_id); return btc_ble_gattc_get_include_service(conn_hdl, start_handle, end_handle, incl_uuid, result, count); } @@ -517,15 +528,15 @@ esp_gatt_status_t esp_ble_gattc_get_attr_count(esp_gatt_if_t gattc_if, { ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (count == NULL) { + return ESP_GATT_INVALID_PDU; + } + if ((start_handle == 0 && end_handle == 0) && (type != ESP_GATT_DB_DESCRIPTOR)) { *count = 0; return ESP_GATT_INVALID_HANDLE; } - if (count == NULL) { - return ESP_GATT_INVALID_PDU; - } - uint16_t conn_hdl = BTC_GATT_CREATE_CONN_ID(gattc_if, conn_id); return btc_ble_gattc_get_attr_count(conn_hdl, type, start_handle, end_handle, char_handle, count); } @@ -535,15 +546,16 @@ esp_gatt_status_t esp_ble_gattc_get_db(esp_gatt_if_t gattc_if, uint16_t conn_id, { ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); - if (start_handle == 0 && end_handle == 0) { - *count = 0; - return ESP_GATT_INVALID_HANDLE; - } if (db == NULL || count == NULL || *count == 0) { return ESP_GATT_INVALID_PDU; } + if (start_handle == 0 && end_handle == 0) { + *count = 0; + return ESP_GATT_INVALID_HANDLE; + } + uint16_t conn_hdl = BTC_GATT_CREATE_CONN_ID(gattc_if, conn_id); return btc_ble_gattc_get_db(conn_hdl, start_handle, end_handle, db, count); } @@ -555,6 +567,7 @@ esp_err_t esp_ble_gattc_read_char (esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); tGATT_TCB *p_tcb = gatt_get_tcb_by_idx(conn_id); @@ -591,6 +604,7 @@ esp_err_t esp_ble_gattc_read_by_type (esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -631,10 +645,11 @@ esp_err_t esp_ble_gattc_read_multiple(esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); - if (read_multi == NULL) { + if ((read_multi == NULL) || (read_multi->num_attr == 0) || (read_multi->num_attr > ESP_GATT_MAX_READ_MULTI_HANDLES)) { return ESP_ERR_INVALID_ARG; } @@ -656,12 +671,8 @@ esp_err_t esp_ble_gattc_read_multiple(esp_gatt_if_t gattc_if, arg.read_multiple.num_attr = read_multi->num_attr; arg.read_multiple.auth_req = auth_req; - if (read_multi->num_attr > 0) { - memcpy(arg.read_multiple.handles, read_multi->handles, sizeof(uint16_t)*read_multi->num_attr); - } else { - LOG_ERROR("%s(), the num_attr should not be 0.", __func__); - return ESP_FAIL; - } + memcpy(arg.read_multiple.handles, read_multi->handles, sizeof(uint16_t)*read_multi->num_attr); + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -671,10 +682,11 @@ esp_err_t esp_ble_gattc_read_multiple_variable(esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); - if (read_multi == NULL) { + if ((read_multi == NULL) || (read_multi->num_attr == 0) || (read_multi->num_attr > ESP_GATT_MAX_READ_MULTI_HANDLES)) { return ESP_ERR_INVALID_ARG; } @@ -695,13 +707,8 @@ esp_err_t esp_ble_gattc_read_multiple_variable(esp_gatt_if_t gattc_if, arg.read_multiple.conn_id = BTC_GATT_CREATE_CONN_ID(gattc_if, conn_id); arg.read_multiple.num_attr = read_multi->num_attr; arg.read_multiple.auth_req = auth_req; + memcpy(arg.read_multiple.handles, read_multi->handles, sizeof(uint16_t)*read_multi->num_attr); - if (read_multi->num_attr > 0) { - memcpy(arg.read_multiple.handles, read_multi->handles, sizeof(uint16_t)*read_multi->num_attr); - } else { - LOG_ERROR("%s(), the num_attr should not be 0.", __func__); - return ESP_FAIL; - } return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } @@ -711,6 +718,7 @@ esp_err_t esp_ble_gattc_read_char_descr (esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -748,9 +756,14 @@ esp_err_t esp_ble_gattc_write_char(esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if(value == NULL || value_len == 0) { + return ESP_ERR_INVALID_ARG; + } + tGATT_TCB *p_tcb = gatt_get_tcb_by_idx(conn_id); if (!gatt_check_connection_state_by_tcb(p_tcb)) { LOG_WARN("%s, The connection not created.", __func__); @@ -791,6 +804,7 @@ esp_err_t esp_ble_gattc_write_char_descr (esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -834,6 +848,7 @@ esp_err_t esp_ble_gattc_prepare_write(esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -875,6 +890,7 @@ esp_err_t esp_ble_gattc_prepare_write_char_descr(esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -911,6 +927,7 @@ esp_err_t esp_ble_gattc_execute_write (esp_gatt_if_t gattc_if, uint16_t conn_id, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -928,6 +945,7 @@ esp_err_t esp_ble_gattc_register_for_notify (esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -954,6 +972,7 @@ esp_err_t esp_ble_gattc_unregister_for_notify (esp_gatt_if_t gattc_if, { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -978,6 +997,7 @@ esp_err_t esp_ble_gattc_cache_refresh(esp_bd_addr_t remote_bda) { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -997,6 +1017,7 @@ esp_err_t esp_ble_gattc_cache_clean(esp_bd_addr_t remote_bda) { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1016,6 +1037,7 @@ esp_err_t esp_ble_gattc_cache_assoc(esp_gatt_if_t gattc_if, esp_bd_addr_t src_ad { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -1038,6 +1060,7 @@ esp_err_t esp_ble_gattc_cache_get_addr_list(esp_gatt_if_t gattc_if) { btc_msg_t msg = {0}; btc_ble_gattc_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); diff --git a/components/bt/host/bluedroid/api/esp_gatts_api.c b/components/bt/host/bluedroid/api/esp_gatts_api.c index 1d7c696126..ceaf047875 100644 --- a/components/bt/host/bluedroid/api/esp_gatts_api.c +++ b/components/bt/host/bluedroid/api/esp_gatts_api.c @@ -31,6 +31,9 @@ esp_err_t esp_ble_gatts_register_callback(esp_gatts_cb_t callback) esp_gatts_cb_t esp_ble_gatts_get_callback(void) { + if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { + return NULL; + } return (esp_gatts_cb_t) btc_profile_cb_get(BTC_PID_GATTS); } @@ -38,6 +41,7 @@ esp_err_t esp_ble_gatts_app_register(uint16_t app_id) { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -59,6 +63,7 @@ esp_err_t esp_ble_gatts_app_unregister(esp_gatt_if_t gatts_if) { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -75,6 +80,7 @@ esp_err_t esp_ble_gatts_create_service(esp_gatt_if_t gatts_if, { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -99,6 +105,7 @@ esp_err_t esp_ble_gatts_create_attr_tab(const esp_gatts_attr_db_t *gatts_attr_db { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -128,6 +135,7 @@ esp_err_t esp_ble_gatts_add_included_service(uint16_t service_handle, uint16_t i { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -147,6 +155,7 @@ esp_err_t esp_ble_gatts_add_char(uint16_t service_handle, esp_bt_uuid_t *char_ { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); esp_err_t status; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -191,6 +200,7 @@ esp_err_t esp_ble_gatts_add_char_descr (uint16_t service_handle, { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); esp_err_t status; ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -231,6 +241,7 @@ esp_err_t esp_ble_gatts_delete_service(uint16_t service_handle) { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -246,6 +257,7 @@ esp_err_t esp_ble_gatts_start_service(uint16_t service_handle) { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -261,6 +273,7 @@ esp_err_t esp_ble_gatts_stop_service(uint16_t service_handle) { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -276,15 +289,20 @@ esp_err_t esp_ble_gatts_stop_service(uint16_t service_handle) esp_err_t esp_ble_gatts_send_indicate(esp_gatt_if_t gatts_if, uint16_t conn_id, uint16_t attr_handle, uint16_t value_len, uint8_t *value, bool need_confirm) { + ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); if (value_len > ESP_GATT_MAX_ATTR_LEN) { LOG_ERROR("%s, value_len > ESP_GATT_MAX_ATTR_LEN.", __func__); return ESP_ERR_INVALID_SIZE; } + if(value == NULL && value_len > 0) { + return ESP_ERR_INVALID_ARG; + } + btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); - ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); tGATT_TCB *p_tcb = gatt_get_tcb_by_idx(conn_id); if (!gatt_check_connection_state_by_tcb(p_tcb)) { @@ -317,6 +335,9 @@ esp_err_t esp_ble_gatts_send_response(esp_gatt_if_t gatts_if, uint16_t conn_id, { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); + + // rsp may be NULL ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -342,6 +363,11 @@ esp_err_t esp_ble_gatts_set_attr_value(uint16_t attr_handle, uint16_t length, co { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); + + if(value == NULL && length > 0) { + return ESP_ERR_INVALID_ARG; + } ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -376,6 +402,7 @@ esp_err_t esp_ble_gatts_open(esp_gatt_if_t gatts_if, esp_bd_addr_t remote_bda, b { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -398,6 +425,7 @@ esp_err_t esp_ble_gatts_close(esp_gatt_if_t gatts_if, uint16_t conn_id) { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); @@ -414,6 +442,7 @@ esp_err_t esp_ble_gatts_send_service_change_indication(esp_gatt_if_t gatts_if, e { btc_msg_t msg = {0}; btc_ble_gatts_args_t arg; + memset(&arg, 0, sizeof(arg)); ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); diff --git a/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h b/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h index 01c2be6b21..a9e6b9a6fc 100644 --- a/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h +++ b/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h @@ -2448,7 +2448,7 @@ typedef union { * @brief ESP_GAP_BLE_CS_READ_LOCAL_SUPP_CAPS_EVT */ struct ble_cs_read_local_supp_caps_evt { - uint8_t status; /*!< Indicate channel sounding read local supported capabilities command successfully completed */ + esp_bt_status_t status; /*!< Indicate channel sounding read local supported capabilities command successfully completed */ uint16_t conn_handle; /*!< Connection Handle */ uint8_t num_config_supported; /*!< Number of CS configurations supported per connection */ uint16_t max_consecutive_proc_supported; /*!< 0x0000: Support for both a fixed number of consecutive CS procedures and for an indefinite number of CS procedures until termination @@ -2515,7 +2515,7 @@ typedef union { * @brief ESP_GAP_BLE_CS_READ_REMOTE_SUPP_CAPS_CMPL_EVT */ struct ble_cs_read_remote_supp_caps { - uint8_t status; /*!< 0x00: Channel sounding read remote supported capabilities command successfully completed + esp_bt_status_t status; /*!< 0x00: Channel sounding read remote supported capabilities command successfully completed other: Channel sounding read remote supported capabilities command failed */ uint16_t conn_handle; /*!< Connection Handle */ uint8_t num_config_supported; /*!< Number of CS configurations supported per connection */ @@ -2578,7 +2578,7 @@ typedef union { * @brief ESP_GAP_BLE_CS_WRITE_CACHED_REMOTE_SUPP_CAPS_EVT */ struct ble_cs_write_cached_remote_supp_caps { - uint8_t status; /*!< 0x00: Channel sounding write cached remote FAE table command succeeded + esp_bt_status_t status; /*!< 0x00: Channel sounding write cached remote FAE table command succeeded 0x01: Channel sounding write cached remote FAE table command failed */ uint16_t conn_handle; /*!< Connection Handle */ } cs_write_cached_remote_supp_caps; /*!< Event parameter of ESP_GAP_BLE_CS_WRITE_CACHED_REMOTE_SUPP_CAPS_EVT */ @@ -2586,7 +2586,7 @@ typedef union { * @brief ESP_GAP_BLE_CS_SECURITY_ENABLE_CMPL_EVT */ struct ble_cs_security_enable { - uint8_t status; /*!< 0x00: Channel sounding security parameters successfully exchanged + esp_bt_status_t status; /*!< 0x00: Channel sounding security parameters successfully exchanged other: Channel sounding CS security parameter exchange failed */ uint16_t conn_handle; /*!< Connection Handle */ } cs_security_enable; /*!< Event parameter of ESP_GAP_BLE_CS_SECURITY_ENABLE_CMPL_EVT */ @@ -2594,7 +2594,7 @@ typedef union { * @brief ESP_GAP_BLE_CS_SET_DEFAULT_SETTINGS_EVT */ struct ble_cs_set_default_settings { - uint8_t status; /*!< 0x00: Channel sounding set default settings command successfully completed + esp_bt_status_t status; /*!< 0x00: Channel sounding set default settings command successfully completed other: Channel sounding set default settings command failed*/ uint16_t conn_handle; /*!< Connection Handle */ } cs_set_default_settings; /*!< Event parameter of ESP_GAP_BLE_CS_SET_DEFAULT_SETTINGS_EVT */ @@ -2602,7 +2602,7 @@ typedef union { * @brief ESP_GAP_BLE_CS_READ_REMOTE_FAE_TABLE_CMPL_EVT */ struct ble_cs_read_remote_fae_tab { - uint8_t status; /*!< 0x00: Channel sounding read remote FAE Table command successfully completed + esp_bt_status_t status; /*!< 0x00: Channel sounding read remote FAE Table command successfully completed other: Channel sounding read remote FAE Table command failed*/ uint16_t conn_handle; /*!< Connection Handle */ uint8_t remote_fae_table[72]; /*!< Per-channel mode-0 Frequency Actuation Error table of the remote Controller */ @@ -2611,7 +2611,7 @@ typedef union { * @brief ESP_GAP_BLE_CS_WRITE_CACHED_REMOTE_FAE_TABLE_EVT */ struct ble_cs_write_cached_remote_fae_tab { - uint8_t status; /*!< 0x00: Channel sounding write cached remote FAE table command succeeded + esp_bt_status_t status; /*!< 0x00: Channel sounding write cached remote FAE table command succeeded other: Channel sounding write cached remote FAE table command failed */ uint16_t conn_handle; /*!< Connection Handle */ } cs_write_cached_remote_fae_tab; /*!< Event parameter of ESP_GAP_BLE_CS_WRITE_CACHED_REMOTE_FAE_TABLE_EVT */ @@ -2619,7 +2619,7 @@ typedef union { * @brief ESP_GAP_BLE_CS_CONFIG_CMPL_EVT */ struct ble_cs_config_udpate { - uint8_t status; /*!< 0x00: Channel Sounding Configuration procedure succeeded + esp_bt_status_t status; /*!< 0x00: Channel Sounding Configuration procedure succeeded other: Channel Sounding Configuration procedure failed */ uint16_t conn_handle; /*!< Connection Handle */ uint8_t config_id; /*!< CS configuration identifier */ @@ -2680,7 +2680,7 @@ typedef union { * @brief ESP_GAP_BLE_CS_SET_PROC_PARAMS_CMPL_EVT */ struct ble_cs_set_proc_params { - uint8_t status; /*!< 0x00: Channel sounding set procedure_Parameters command successful + esp_bt_status_t status; /*!< 0x00: Channel sounding set procedure_Parameters command successful other: Channel sounding set procedure_Parameters command failed */ uint16_t conn_handle; /*!< Connection Handle */ } cs_set_proc_params; /*!< Event parameter of ESP_GAP_BLE_CS_SET_PROC_PARAMS_CMPL_EVT */ @@ -2688,14 +2688,14 @@ typedef union { * @brief ESP_GAP_BLE_CS_SET_CHANNEL_CLASS_CMPL_EVT */ struct ble_cs_set_channel_class { - uint8_t status; /*!< 0x00: Channel sounding set channel classification command successful + esp_bt_status_t status; /*!< 0x00: Channel sounding set channel classification command successful other: Channel sounding set channel classification command failed */ } cs_set_channel_class; /*!< Event parameter of ESP_GAP_BLE_CS_SET_CHANNEL_CLASS_CMPL_EVT */ /** * @brief ESP_GAP_BLE_CS_PROC_ENABLE_CMPL_EVT */ struct ble_cs_proc_enable { - uint8_t status; /*!< 0x00: Channel sounding procedure enable command successful + esp_bt_status_t status; /*!< 0x00: Channel sounding procedure enable command successful other: Channel sounding procedure enable command failed */ uint16_t conn_handle; /*!< Connection Handle */ uint8_t config_id; /*!< CS configuration identifier */