Классический Bluetooth GAP API в 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, успех), но структура 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!