diff --git a/components/bt/bluedroid/api/esp_gattc_api.c b/components/bt/bluedroid/api/esp_gattc_api.c index bb368a68de..b80966cd86 100644 --- a/components/bt/bluedroid/api/esp_gattc_api.c +++ b/components/bt/bluedroid/api/esp_gattc_api.c @@ -482,5 +482,22 @@ esp_gatt_status_t esp_ble_gattc_unregister_for_notify (esp_gatt_if_t gattc_if, return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } +esp_err_t esp_ble_gattc_cache_refresh(esp_bd_addr_t remote_bda) +{ + btc_msg_t msg; + btc_ble_gattc_args_t arg; + + if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) { + return ESP_ERR_INVALID_STATE; + } + + msg.sig = BTC_SIG_API_CALL; + msg.pid = BTC_PID_GATTC; + msg.act = BTC_GATTC_ACT_CACHE_REFRESH; + memcpy(arg.cache_refresh.remote_bda, remote_bda, sizeof(esp_bd_addr_t)); + + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); +} + #endif ///GATTC_INCLUDED == TRUE diff --git a/components/bt/bluedroid/api/include/esp_gattc_api.h b/components/bt/bluedroid/api/include/esp_gattc_api.h index ae53bf5751..c2cae797b7 100644 --- a/components/bt/bluedroid/api/include/esp_gattc_api.h +++ b/components/bt/bluedroid/api/include/esp_gattc_api.h @@ -629,6 +629,19 @@ esp_gatt_status_t esp_ble_gattc_unregister_for_notify (esp_gatt_if_t gattc_if, esp_gatt_srvc_id_t *srvc_id, esp_gatt_id_t *char_id); + +/** +* @brief Refresh the server cache store in the gattc stack of the remote device +* +* @param[in] remote_bda: remote device BD address. +* +* @return +* - ESP_OK: success +* - other: failed +* +*/ +esp_err_t esp_ble_gattc_cache_refresh(esp_bd_addr_t remote_bda); + #ifdef __cplusplus } #endif diff --git a/components/bt/bluedroid/btc/profile/std/gatt/btc_gattc.c b/components/bt/bluedroid/btc/profile/std/gatt/btc_gattc.c index 4d126ff6c3..eaeb904a4d 100644 --- a/components/bt/bluedroid/btc/profile/std/gatt/btc_gattc.c +++ b/components/bt/bluedroid/btc/profile/std/gatt/btc_gattc.c @@ -551,6 +551,9 @@ void btc_gattc_call_handler(btc_msg_t *msg) case BTC_GATTC_ACT_UNREG_FOR_NOTIFY: btc_gattc_unreg_for_notify(arg); break; + case BTC_GATTC_ACT_CACHE_REFRESH: + BTA_GATTC_Refresh(arg->cache_refresh.remote_bda); + break; default: LOG_ERROR("%s: Unhandled event (%d)!\n", __FUNCTION__, msg->act); break; diff --git a/components/bt/bluedroid/btc/profile/std/include/btc_gattc.h b/components/bt/bluedroid/btc/profile/std/include/btc_gattc.h index 2528668381..1374dc0a72 100644 --- a/components/bt/bluedroid/btc/profile/std/include/btc_gattc.h +++ b/components/bt/bluedroid/btc/profile/std/include/btc_gattc.h @@ -41,7 +41,8 @@ typedef enum { BTC_GATTC_ACT_PREPARE_WRITE_CHAR_DESCR, BTC_GATTC_ACT_EXECUTE_WRITE, BTC_GATTC_ACT_REG_FOR_NOTIFY, - BTC_GATTC_ACT_UNREG_FOR_NOTIFY + BTC_GATTC_ACT_UNREG_FOR_NOTIFY, + BTC_GATTC_ACT_CACHE_REFRESH, } btc_gattc_act_t; /* btc_ble_gattc_args_t */ @@ -186,6 +187,10 @@ typedef union { esp_gatt_srvc_id_t service_id; esp_gatt_id_t char_id; } unreg_for_notify; + //BTC_GATTC_ACT_CACHE_REFRESH, + struct cache_refresh_arg { + esp_bd_addr_t remote_bda; + } cache_refresh; } btc_ble_gattc_args_t; void btc_gattc_call_handler(btc_msg_t *msg);