BlueZ, API управления Bluetooth: команда чтения информации контроллера, bluetooth_version, удобочитаемая - PullRequest
1 голос
/ 24 января 2020

Какой читаемый человеком номер версии соответствует bluetooth_version, возвращенному командой чтения информации контроллера API управления Bluetooth BlueZ?

Например, мой контроллер возвращает 0x08. Это Bluetooth 4.1 или 5.2 или 1.1 или ...?

Я не могу найти информацию об этом файле mgmt-api.txt . Поиски в Google с "бинарной версией bluetooth-строки" также не дали ничего полезного. Кроме того, spe c ничего не показало для "0x08" или "версии Bluetooth". Поиск версии здесь не имеет смысла, поскольку каждый заголовок страницы содержит это слово ...

Новое понимание

Кажется, что btmon знает ...

@ MGMT Событие: команда Comp .. (0x0001) plen 283 {0x0003} [hci0]

11: 04: 18.712443 Считывание информации о контроллере (0x0004) plen 280

    Status: Success (0x00)
    Address: 00:25:CA:2A:08:38 (OUI 00-25-CA)
    Version: Bluetooth 4.2 (0x08)

Ответы [ 2 ]

1 голос
/ 24 января 2020

Я не знаю, документировано ли и где сопоставление версии Bluetooth.

Однако такое сопоставление можно найти внутри исходного файла bluez lib/hci.c:

/* Version mapping */
static hci_map ver_map[] = {
    { "1.0b",   0x00 },
    { "1.1",    0x01 },
    { "1.2",    0x02 },
    { "2.0",    0x03 },
    { "2.1",    0x04 },
    { "3.0",    0x05 },
    { "4.0",    0x06 },
    { "4.1",    0x07 },
    { "4.2",    0x08 },
    { "5.0",    0x09 },
    { "5.1",    0x0a },
    { NULL }
};
0 голосов
/ 24 января 2020

Я также нашел отображение в monitor/packet.c:

void packet_print_version(const char *label, uint8_t version,
                const char *sublabel, uint16_t subversion)
{
    const char *str;

    switch (version) {
    case 0x00:
        str = "Bluetooth 1.0b";
        break;
    case 0x01:
        str = "Bluetooth 1.1";
        break;
    case 0x02:
        str = "Bluetooth 1.2";
        break;
    case 0x03:
        str = "Bluetooth 2.0";
        break;
    case 0x04:
        str = "Bluetooth 2.1";
        break;
    case 0x05:
        str = "Bluetooth 3.0";
        break;
    case 0x06:
        str = "Bluetooth 4.0";
        break;
    case 0x07:
        str = "Bluetooth 4.1";
        break;
    case 0x08:
        str = "Bluetooth 4.2";
        break;
    case 0x09:
        str = "Bluetooth 5.0";
        break;
    case 0x0a:
        str = "Bluetooth 5.1";
        break;
    default:
        str = "Reserved";
        break;
    }

    if (sublabel)
        print_field("%s: %s (0x%2.2x) - %s %d (0x%4.4x)",
                    label, str, version,
                    sublabel, subversion, subversion);
    else
        print_field("%s: %s (0x%2.2x)", label, str, version);
}
...