我正在尝试使用 Broadcom 和 CSR 芯片组设置蓝牙加密狗的(查询)传输功率hciconfig
,例如:
hciconfig hci0 inqtpl 3
Run Code Online (Sandbox Code Playgroud)
但是无论我传递什么有效参数,之后读取该值总是会产生 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
Run Code Online (Sandbox Code Playgroud)
当我传递无效值时,我收到一条错误消息:
Can't set inquiry transmit power level on hci0: Input/output error (5)
Run Code Online (Sandbox Code Playgroud)
所以很明显,参数被检查了有效性。我很确定它是由芯片组检查的,因为在手动发送适当的 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>
[...]
Run Code Online (Sandbox Code Playgroud)
是我弄错了,还是只是偶尔我使用的两个芯片组都不支持此功能?
只是为了仔细检查:
你能通过 bccmd psget 获取最大值和默认值吗?前任:
bccmd psget 0x0017
Run Code Online (Sandbox Code Playgroud)
一旦收到这些值,您是否可以通过设置 0x1 来尝试介于该范围之间的值?
另外 iirc,1 是硬件的最大值,0.5 是 50% 的传输功率,不过这可能是特定于驱动程序的,因此在您的情况下可能是垃圾信息。
我几乎可以肯定,在设置传输电源后,您需要调用一个存储程序,以便设备开始使用它,以防止设备立即尝试设置错误的传输电源。
这有什么帮助吗:
http://www.spinics.net/lists/linux-bluetooth/msg16546.html