我正在尝试使用 Broadcom 和 CSR 芯片组设置(查询)蓝牙适配器的传输功率hciconfig
,例如:
hciconfig hci0 inqtpl 3
但无论我传递什么有效参数,之后读取值总是会产生 0,如下所示:
hci0: Type: BR/EDR Bus: USB
BD Address: 00:02:72:D6:6B:25 ACL MTU: 1021:8 SCO MTU: 64:1
Inquiry transmit power level: 0
当我传递无效值时,我收到一条错误消息:
Can't set inquiry transmit power level on hci0: Input/output error (5)
显然,该参数已被检查有效性。我非常确定它是由芯片组检查的,因为我在手动发送适当的 HCI 命令时得到了相同的结果。
两种芯片组还声明它们支持此功能:
# hciconfig hci0 features
hci0: Type: BR/EDR Bus: USB
BD Address: 00:02:72:D6:6B:25 ACL MTU: 1021:8 SCO MTU: 64:1
Features page 0: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
[...]
<err. data report> <non-flush flag> <LSTO> <inquiry TX power>
[...]
我是否遇到了问题,或者只是偶然我使用的两个芯片组都不支持此功能?
答案1
只是为了仔细检查:
你能通过 bccmd psget 获取最大值和默认值吗?前任:
bccmd psget 0x0017
一旦收到这些值,您是否可以通过设置 0x1 来尝试介于该范围之间的值?
另外 iirc,1 是硬件的最大值,0.5 是 50% 的传输功率,不过这可能是特定于驱动程序的,因此在您的情况下可能是垃圾信息。
我几乎可以肯定,在设置传输电源后,您需要调用一个存储程序,以便设备开始使用它,以防止设备立即尝试设置错误的传输电源。
这有什么帮助吗:
http://www.spinics.net/lists/linux-bluetooth/msg16546.html
答案2
尝试:
sudo bccmd psget -s 0x0000 0x0017
答案3
bccmd psget -s 0x0000 0x0021
Default transmit power: 0x0004 (4)
localhost ~ # bccmd psset -r -s 0x0000 0x0021 0x0006
localhost ~ # bccmd psget -s 0x0000 0x0021
Default transmit power: 0x0006 (6)
它可以与我基于 CSR8510 A10 的硬件配合使用