Bluetooth через uart с помощью hciattach?

Я использую QN9021 SoC работает в controller mode (BLE спецификация ядра Bluetooth v4.0). Поддерживает какой-то стандарт HCI Команды, а также некоторые специфические для поставщика команды. Я пытаюсь прикрепить его в моем ubuntu ноутбук.

Команда, которую я использовал, hciattach,

hciattach -s 9600 /dev/ttyUSBx any 9600 noflow nosleep 

hcidump показывает во время исполнения sudo hciconfig hci1 up,

HCI sniffer - Bluetooth packet analyzer ver 5.37
device: hci1 snap_len: 1500 filter: 0xffffffffffffffff
> HCI Event: Command Complete (0x0e) plen 12
    Read Local Supported Features (0x04|0x0003) ncmd 11
    status 0x00
    Features: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
> HCI Event: Command Complete (0x0e) plen 12
    Read Local Version Information (0x04|0x0001) ncmd 11
    status 0x00
    HCI Version: 4.0 (0x6) HCI Revision: 0x400
    LMP Version: 4.0 (0x6) LMP Subversion: 0x400
    Manufacturer: Quintic Corp. (142)
> HCI Event: Command Complete (0x0e) plen 10
    Read BD ADDR (0x04|0x0009) ncmd 11
    status 0x00 bdaddr 08:7C:BE:3E:34:BB
> HCI Event: Command Complete (0x0e) plen 11
    Read Buffer Size (0x04|0x0005) ncmd 11
    status 0x00
    ACL MTU 0:0 SCO MTU 0:0
> HCI Event: Command Complete (0x0e) plen 4
    Read Class of Device (0x03|0x0023) ncmd 11
    status 0x01 class 0x000000
    Error: Unknown HCI Command

hciconfig команда показывает:

hci1:   Type: BR/EDR  Bus: UART
    BD Address: 08:7C:BE:3E:34:BB  ACL MTU: 0:0  SCO MTU: 0:0
    DOWN 
    RX bytes:192 acl:0 sco:0 events:15 errors:0
    TX bytes:60 acl:0 sco:0 commands:15 errors:0

hci0:   Type: BR/EDR  Bus: USB
    BD Address: C4:8E:8F:66:3B:0E  ACL MTU: 820:8  SCO MTU: 255:16
    UP RUNNING PSCAN 
    RX bytes:2457 acl:0 sco:0 events:196 errors:0
    TX bytes:24646 acl:0 sco:0 commands:196 errors:0

Я хотел бы знать, как запретить ядру или некоторому модулю ядра Bluetooth отправлять неподдерживаемые команды HCI. Нужно ли исправлять исходный код ядра Linux или написать модуль для моего SoC.

Примечание:- Изменение SoC или написание прошивки для поддержки всех необходимых команд для этого проекта невозможно.


РЕДАКТИРОВАТЬ:

Я знаю список HCI Команда поддерживается моим SoC. Я думаю о создании module сообщить ядру и демонам, работающим для отправки только поддерживаемых команд в SoC. Я смотрю на источник ядра Linux (в частности, на этот hci_core.c). Я думаю, что изменение его может решить проблему после перехода по этой ссылке. По этой ссылке, некоторые разработчики предоставили патч для поддержки bluetooth dongle, Патч запрещает файлу hci_core.c отправлять определенную команду HCI ключу конкретного производителя.

Все, что я хочу, это предложение решить эту проблему. Мне нужно изменить ядро ​​Linux или написать модуль для моего SoC?

ПРИМЕЧАНИЕ:- Приложение будет работать на openwrt линукс.

1 ответ

Хорошо, сегодня мы нашли решение:

# hciattach -r /dev/ttyS0 bcsp 115200

Может быть, это кому-то помогает

Полезные советы: Пусть эта ссылка поможет вам.

Я дам две ссылки для более подробной информации и для Bluetooth нажмите здесь и для конфигурации ядра нажмите здесь

Я решил эту проблему несколько лет назад. Я использовал версию для Linux4.4.14 и стек Bluez 5.38. Выглядит какQN9021были некоторые ошибки. Проблема была не вRead Class of Device но с ответом, данным QN9021 для команды: Read Local Supported Features. Поскольку это микросхема контроллера BLE, она не должна отправлятьFeatures: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 как ответ на указанную выше команду.

Проблема в том, что ядро ​​определяет его как чип классического контроллера Bluetooth, а затем отправляет на чип неподдерживаемые команды HCI. Чип должен установить 5-й и 6-й биты (биты LMP_NO_BREDR и LMP_LE) 4-го байта вFeatures к команде Read Local Supported Features а затем ядро ​​обнаруживает его как BLE микросхему режима контроллера и не будет отправлять неподдерживаемые команды на микросхему режима контроллера.

Так как прошивку чипа поменять не могу, пришлось прошить ядро.

Вот мои патчи:

*** hci_event.c 2017-02-10 00:05:13.149974000 +0530
--- bluetooth/hci_event.c   2016-06-24 22:48:38.000000000 +0530
***************
*** 588,597 ****
    if (rp->status)
        return;

- 
    memcpy(hdev->features, rp->features, 8);
-   hdev->features[0][4] |= LMP_NO_BREDR;
-   hdev->features[0][4] |= LMP_LE;

    /* Adjust default settings according to features
     * supported by device. */
--- 588,594 ----

Я тоже устал от следующей команды, но это не помогло:

hciattach -r /dev/ttyS0 bcsp 115200
Другие вопросы по тегам