]> granicus.if.org Git - esp-idf/commitdiff
component/bt: check for registration status of callback function before using it
authorwangmengyang <wangmengyang@espressif.com>
Wed, 11 Jan 2017 03:31:35 +0000 (11:31 +0800)
committerwangmengyang <wangmengyang@espressif.com>
Wed, 11 Jan 2017 03:31:35 +0000 (11:31 +0800)
components/bt/bluedroid/btc/profile/esp/blufi/blufi_prf.c
components/bt/bluedroid/btc/profile/std/gap/btc_gap_ble.c
components/bt/bluedroid/btc/profile/std/gatt/btc_gattc.c
components/bt/bluedroid/btc/profile/std/gatt/btc_gatts.c

index c126273a7231cee23a8d15ee4d11aa947189d991..85be60b7b2269416ac76502d4cede1c2c931c089 100644 (file)
 
 #include "esp_blufi_api.h"
 
-#define BTC_BLUFI_CB_TO_APP(event, param) ((esp_blufi_event_cb_t)btc_profile_cb_get(BTC_PID_BLUFI))((event), (param))
+#define BTC_BLUFI_CB_TO_APP(event, param)     do { \
+        esp_blufi_event_cb_t btc_blufi_cb = (esp_blufi_event_cb_t)btc_profile_cb_get(BTC_PID_BLUFI); \
+        if (btc_blufi_cb) { \
+            btc_blufi_cb(event, param); \
+        } \
+    } while (0)
 
 #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]
index ede530e772505b31b951bdddb3fb344c4381a949..e2f4815087c405c55c1f477ab447dc7e4a8d0b7f 100644 (file)
 static tBTA_BLE_ADV_DATA gl_bta_adv_data;
 static tBTA_BLE_ADV_DATA gl_bta_scan_rsp_data;
 
-#define BTC_GAP_BLE_CB_TO_APP(event, param) ((esp_gap_ble_cb_t)btc_profile_cb_get(BTC_PID_GAP_BLE))((event), (param))
-
+#define BTC_GAP_BLE_CB_TO_APP(event, param)      do { \
+        esp_gap_ble_cb_t btc_gap_ble_cb = (esp_gap_ble_cb_t)btc_profile_cb_get(BTC_PID_GAP_BLE); \
+        if (btc_gap_ble_cb) { \
+            btc_gap_ble_cb(event, param); \
+        } \
+    } while (0)
 
 static void btc_gap_adv_point_cleanup(void **buf)
 {
index 9bc7b0d2bd2de67f27d579ab38769807e83045e1..4b6947940f71ca6e084b3970c0e09feb13b718cb 100644 (file)
 #include "bt_trace.h"
 #include "esp_gattc_api.h"
 
-#define BTC_GATTC_CB_TO_APP(event, gattc_if, param)    ((esp_gattc_cb_t )btc_profile_cb_get(BTC_PID_GATTC))((event), (gattc_if), (param))
+#define BTC_GATTC_CB_TO_APP(event, gattc_if, param)    do { \
+        esp_gattc_cb_t btc_gattc_cb = (esp_gattc_cb_t )btc_profile_cb_get(BTC_PID_GATTC); \
+        if (btc_gattc_cb) { \
+            btc_gattc_cb(event, gattc_if, param); \
+        } \
+    } while (0)
+
 
 void btc_gattc_arg_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src)
 {
index c7afabfa2a62e5fb4f479379031a18d05bc6235e..3a988fc3b118eb0681aacacda0c7992bcf6a2e4a 100644 (file)
 
 #include "esp_gatts_api.h"
 
-#define BTC_GATTS_CB_TO_APP(event, gatts_if, param) ((esp_gatts_cb_t)btc_profile_cb_get(BTC_PID_GATTS))((event), (gatts_if), (param))
+#define BTC_GATTS_CB_TO_APP(event, gatts_if, param)     do { \
+        esp_gatts_cb_t btc_gatts_cb = (esp_gatts_cb_t)btc_profile_cb_get(BTC_PID_GATTS); \
+        if (btc_gatts_cb) { \
+            btc_gatts_cb(event, gatts_if, param); \
+        } \
+    } while (0)
 
 #define A2C_GATTS_EVT(_bta_event) (_bta_event) //BTA TO BTC EVT
 #define C2A_GATTS_EVT(_btc_event) (_btc_event) //BTC TO BTA EVT
@@ -299,9 +304,9 @@ void btc_gatts_cb_handler(btc_msg_t *msg)
         param.read.conn_id = BTC_GATT_GET_CONN_ID(p_data->req_data.conn_id);
         param.read.trans_id = p_data->req_data.trans_id;
         memcpy(param.read.bda, p_data->req_data.remote_bda, ESP_BD_ADDR_LEN);
-        param.read.handle = p_data->req_data.p_data->read_req.handle,
-        param.read.offset = p_data->req_data.p_data->read_req.offset,
-        param.read.is_long = p_data->req_data.p_data->read_req.is_long,
+        param.read.handle = p_data->req_data.p_data->read_req.handle;
+        param.read.offset = p_data->req_data.p_data->read_req.offset;
+        param.read.is_long = p_data->req_data.p_data->read_req.is_long;
 
         BTC_GATTS_CB_TO_APP(ESP_GATTS_READ_EVT, gatts_if, &param);
         break;