使用hciattach在uart上进行蓝牙?

Abhiarora:

我正在使用QN9021SoC controller mode(BLE蓝牙核心规范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

我想知道如何防止内核或某些蓝牙内核模块发送不支持的HCI命令。我需要修补Linux内核源代码还是为SoC编写模块。

注意:-此项目无法更改SoC或为其编写固件以支持所有必需的命令。


编辑:

我知道HCI我的SoC支持命令列表我正在考虑创建一个module告诉内核和运行的守护进程,仅将支持的命令发送到SoC。我看一下Linux内核源代码(特别是在此hci_core.c中)。我认为修改此链接可能会解决此问题在此链接中,一些开发人员提供了一个补丁来支持bluetooth dongle该修补程序可防止hci_core.c文件将特定的HCI命令发送到特定制造商的加密狗。

我想要的只是解决这个问题的建议。我需要修改linux内核或为SoC编写模块吗?

注意:-该应用程序将在openwrtLinux上运行

Abhiarora:

几年前,我已经解决了这个问题。我正在使用Linux版本4.4.14和Bluez stack 5.38看起来QN9021有一些错误。问题不是与有关的,Read Class of Device而是与QN9021命令给出的响应有关Read Local Supported Features由于它是BLE控制器芯片,因此不应Features: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00作为对以上命令的响应进行发送

问题是内核将其检测为Classic Bluetooth控制器芯片,然后将不支持的HCI命令发送到该芯片。该芯片应已将命令中第4个字节的第5位和第6位(LMP_NO_BREDRLMP_LE位)Features设置为命令Read Local Supported Features,然后内核将其检测为BLE控制器模式芯片,并且不会将任何不受支持的命令发送到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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章