Классический API Bluetooth GAP в ESP-IDF Framework имеет функцию:
#include "esp_gap_bt_api.h"
esp_err_t esp_bt_gap_read_rssi_delta(esp_bd_addr_t remote_addr)
со следующим описанием:
" Эта функция вызывается для чтения дельты RSSI по адресупосле подключения. Значение RSSI, возвращаемое ESP_BT_GAP_READ_RSSI_DELTA_EVT.
Возврат: ESP_OK: Успешный; ESP_FAIL: другие
Параметры: remote_addr: - удаленное устройствоадрес, соответствующий определенному дескриптору соединения."
Хорошо, что я делаю (после подключения к устройству BT): определите структуру, которая, я думаю, будет содержать нужный мне результат:
struct read_rssi_delta_param
{
esp_bd_addr_t bda; /*remote bluetooth device address*/
esp_bt_status_t stat; /*read rssi status */
int8_t rssi_delta; /*rssi delta value in range -128 ~127*/
} read_rssi_delta; /*read rssi parameter struct */
и вызов функции:
esp_err_t err_code = esp_bt_gap_read_rssi_delta((uint8_t*)esp_bt_dev_get_address());
возвращает err_code = ESP_OK (0, success), но структура read_rssi_delta содержит только все нули.
Я чувствую, что ясделать что-то не так, потому что должна быть задействована еще одна вещь: это ESP_BT_GAP_READ_RSSI_DELTA_EVT (см. описание выше).Это определено в перечислении:
enum esp_bt_gap_cb_event_t //BT GAP callback events.
..... skip some
ESP_BT_GAP_READ_RSSI_DELTA_EVT //read rssi event
..... etc.
В некоторых источниках это называется «событие», в других - «функция обратного вызова», но ничего о том, как его использовать!
Итак, вопрос: как собрать все это вместе, чтобы получить RSSI с устройства?
Примечание: Bluetooth - это классика, а не BLE!