Получить RSSI с hcidump

Для чтения необработанных значений RSSI используется утилита hcidump, которая отслеживает данные Bluetooth HCI. Используя команды hcidump, мы можем прочитать необработанные значения RSSI при получении ответа на запрос. Для получения значений RSSI для каждого пакета ответа мы сначала устанавливаем режим запроса на запрос с RSSI.Для чтения необработанных значений RSSI мы запускаем инструмент hcidump, а затем используем соответствующий
Функции HCI для запуска периодического запроса.

Я не знаю, как использовать hcidump для obatain только RSSI raw данных или, возможно, как начать периодический запрос. Я вижу все опционы, но не могу.

Я делаю hcidump — raw, чтобы получить необработанные данные, и пытаюсь разобрать эти данные, чтобы получить rssi, но я не знаю, что hex-это информация rssi.

Это то, что я получаю

  04 2F FF 01 AC A2 65 92 88 EC 01 00 0C 02 5A 2D 1F D2 08 09 
  4E 65 78 75 73 20 36 17 03 05 11 0A 11 0C 11 0E 11 12 11 15 
  11 16 11 1F 11 2F 11 00 12 32 11 01 05 01 07 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

Теперь мне нужно знать, какое значение RSSI.

2 ответа

  1. Мы можем выяснить это, проверив исходный код за hcidumpинструментом. Это часть BlueZ, официального стека Bluetooth Linux. Вы можете скачать исходный код BlueZ здесь, чтобы следовать вдоль. Если вы откроете исходный код и шагнете в lib/папку, вы можете найтиhci.h, которая имеет struct definitons для функций HCI BlueZ. В противном случае, вы можете посмотреть в заголовочных файлах вашей системы Linux. Путь должен быть примерно таким:/usr/include/bluetooth/hci.h. В этом файле заголовка вы найдете все определения структуры для функциональности HCI BlueZ. В частности, вы можете найти определение структуры для inquiry_info_with_rssi. Файл заголовка составляет несколько тысяч строк, поэтому вам лучше будет искать файл заголовка, а не пытаться его просмотреть. Глядя на эту структуру и #defineниже, вы можете увидеть, что размер структуры составляет 14 байт. Значение rssi является последним членом структуры и только 1 байтом, поэтому оно должно быть 14-м байтом, который вы считаете.

    typedef struct {
    bdaddr_t    bdaddr;
    uint8_t     pscan_rep_mode;
    uint8_t     pscan_period_mode;
    uint8_t     dev_class[3];
    uint16_t    clock_offset;
    int8_t      rssi;
    } __attribute__ ((packed)) inquiry_info_with_rssi;
    #define INQUIRY_INFO_WITH_RSSI_SIZE 14
    

    Интересно отметить, что __attribute__ ((packed))это препроцессор компилятора, направляющий его не заполнять структуру, поэтому размер 14 байт гарантирован.

  2. вы можете попробовать использовать sudo hcidump [-a]это даст вам имя и значение RSSI всех близлежащих устройств bluetooth.вы можете проверить, что вы можете сделать с hcidump здесь .