Ele está usando o QN9021 SoC funcionando no modo do controlador (especificação de núcleo Bluetooth BLE v4.0). Ele suporta alguns comandos HCI padrão, bem como alguns comandos específicos do fornecedor. Eu estou tentando anexá-lo no meu laptop ubuntu.
O comando que eu usei é hciattach
.
hciattach -s 9600 /dev/ttyUSBx any 9600 noflow nosleep
O hcidump é exibido durante a execução do sudo hciconfig hci1.
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
O comando hciconfig mostra:
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
Eu gostaria de saber como evitar que o kernel ou algum módulo do kernel bluetooth envie comandos HCI não suportados. Preciso corrigir o código-fonte do kernel do linux ou escrever um módulo para o meu SoC.
Nota: - Não é possível alterar o SoC ou gravar o firmware para suportar todos os comandos necessários para este projeto.
EDITAR:
Eu conheço a lista de comandos da HCI suportados pelo meu SoC. Estou pensando em criar um módulo para dizer ao kernel e aos daemons que estão rodando para enviar apenas os comandos suportados para o SoC. Eu tenho uma olhada na fonte do kernel do Linux (especificamente neste hci_core.c). Acho que modificá-lo pode resolver o problema depois de passar por este link. Neste link, algum desenvolvedor forneceu um patch para suportar um dongle bluetooth. O patch impede que o arquivo hci_core.c envie um comando HCI específico para um dongle de um determinado fabricante.
Tudo que eu quero é uma sugestão para resolver este problema. Preciso modificar o kernel do linux ou escrever um módulo para o meu SoC?
NOTA: - O aplicativo será executado no openwrt linux.
Tags bluetooth bluez linux-kernel