我使用BlueZ的两个蓝牙适配器,两个都是相同的设备,但天线类型不同,有没有办法找出BlueZ(hci0 / hci1)上的标识符是指哪个usb端口?
我可以通过hcitool dev发现设备的MAC地址,所以如果有办法发现哪个USB端口连接了该MAC地址,那也可以解决我的问题。
由于两个适配器都是同一型号,lsusb不提供我可以使用的任何识别信息。
使用Ubuntu 16.04。我正在寻找任何形式的解决方案,无论是shell命令还是java / C / python /等。
答案 0 :(得分:1)
我不知道这是否是您所需要的,但您应该通过以下命令找到有关设备的详细信息: -
hciconfig -a
这将为您提供足够的详细信息以识别特定设备。您可以在shell脚本中添加它,并使用一些字符串操作和条件来确定您的设备。
在我的情况下,我连接了一个BT加密狗,并且运行hciconfig -a
给出以下输出: -
hci0: Type: BR/EDR Bus: USB
BD Address: 00:16:A4:06:AC:E6 ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING
RX bytes:670 acl:0 sco:0 events:46 errors:0
TX bytes:2495 acl:0 sco:0 commands:46 errors:0
Features: 0xff 0xff 0xcf 0xfe 0xdb 0xff 0x5b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'youssif'
Class: 0x0c0000
Service Classes: Rendering, Capturing
Device Class: Miscellaneous,
HCI Version: 4.0 (0x6) Revision: 0x22bb
LMP Version: 4.0 (0x6) Subversion: 0x22bb
Manufacturer: Cambridge Silicon Radio (10)
如果这还不够,您还可以使用lsusb
和hciconfig
命令的组合来确定哪个设备连接到哪个端口。
答案 1 :(得分:1)
此答案应为您指明正确的方向,尽管它并不能为您提供完整的解决方案。
您应该能够在/sys/class/bluetooth
下使用“ sys”文件系统的内容:
$ ll -lA /sys/class/bluetooth/
total 0
lrwxrwxrwx 1 root root 0 Dec 8 09:35 hci0 -> ../../devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/bluetooth/hci0
lrwxrwxrwx 1 root root 0 Dec 8 09:35 hci1 -> ../../devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci1
来自我的Raspberry Pi,它在/ dev / ttyAMA0 UART接口上带有一个内置适配器,在USB上添加了一个蓝牙适配器。 symlink目标中的信息从技术上告诉您适配器插入的物理端口。
如果您不熟悉USB设备编号的约定(形成一个节点树,因为端口可以具有带有多个其他端口的USB集线器等),请查看/ sys / bus / usb / devices下的内容,然后将其与“ lsusb”输出匹配,您应该弄清楚。在我的情况下,“ lsusb”显示适配器为“ Bus 001 Device 004:ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0”,如果我记得,它对应于/ sys / class / bluetooth中的“ 1-3”路径(不幸的是,总线值使用索引原点1,而设备编号使用索引原点0,因此4在那里变成3)。
如果您尝试将USB适配器移动到不同的物理端口,则应该能够弄清楚模式。