有没有办法找出哪个蓝牙设备插入哪个USB端口?
Is there a way to find out which Bluetooth device is plugged into which USB port?
我在 BlueZ 上使用了两个蓝牙适配器,它们是同一台设备,但天线类型不同,有什么方法可以找出 BlueZ (hci0/hci1) 上的标识符指的是哪个 USB 端口到?
我可以通过 hcitool dev 发现设备的 MAC 地址,所以如果有办法发现具有 MAC 地址的适配器连接到哪个 USB 端口,那也解决我的问题。
由于两个适配器是同一型号,lsusb 没有提供任何我可以使用的识别信息。
使用 Ubuntu 16.04。我正在寻找任何形式的解决方案,无论是 shell 命令还是 java/C/python/etc.
我不知道这是否是您需要的,但您应该通过以下命令找到有关所连接设备的详细信息:-
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
命令的组合来确定哪个设备连接到哪个端口。
这个答案应该会为您指明正确的方向,但不会为您提供完整的解决方案。
您应该可以使用 /sys/class/bluetooth
:
下的“sys”文件系统的内容
$ ls -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 上添加了一个蓝牙适配器。符号链接目标中的信息从技术上告诉您适配器插入哪个物理端口。
如果您不熟悉 USB 设备编号的约定(它形成了一个节点树,因为一个端口可以有一个带有多个附加端口的 USB 集线器等),请查看 /sys/bus/usb/devices,并将其与“lsusb”输出相匹配,您应该弄明白了。在我的例子中,“lsusb”显示该适配器为“Bus 001 Device 004:ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0”,如果我记得它对应于 [=24= 中的“1-3”内容] 路径(不幸的是,总线值使用索引原点 1,而设备编号使用索引原点 0,因此 4 变成了 3)。
如果您尝试将 USB 适配器移动到不同的物理端口,您应该能够找出规律。
我在 BlueZ 上使用了两个蓝牙适配器,它们是同一台设备,但天线类型不同,有什么方法可以找出 BlueZ (hci0/hci1) 上的标识符指的是哪个 USB 端口到?
我可以通过 hcitool dev 发现设备的 MAC 地址,所以如果有办法发现具有 MAC 地址的适配器连接到哪个 USB 端口,那也解决我的问题。
由于两个适配器是同一型号,lsusb 没有提供任何我可以使用的识别信息。
使用 Ubuntu 16.04。我正在寻找任何形式的解决方案,无论是 shell 命令还是 java/C/python/etc.
我不知道这是否是您需要的,但您应该通过以下命令找到有关所连接设备的详细信息:-
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
命令的组合来确定哪个设备连接到哪个端口。
这个答案应该会为您指明正确的方向,但不会为您提供完整的解决方案。
您应该可以使用 /sys/class/bluetooth
:
$ ls -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 上添加了一个蓝牙适配器。符号链接目标中的信息从技术上告诉您适配器插入哪个物理端口。
如果您不熟悉 USB 设备编号的约定(它形成了一个节点树,因为一个端口可以有一个带有多个附加端口的 USB 集线器等),请查看 /sys/bus/usb/devices,并将其与“lsusb”输出相匹配,您应该弄明白了。在我的例子中,“lsusb”显示该适配器为“Bus 001 Device 004:ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0”,如果我记得它对应于 [=24= 中的“1-3”内容] 路径(不幸的是,总线值使用索引原点 1,而设备编号使用索引原点 0,因此 4 变成了 3)。
如果您尝试将 USB 适配器移动到不同的物理端口,您应该能够找出规律。