如何设置蓝牙发射功率?

dom*_*som 11 bluetooth

我正在尝试使用 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)

是我弄错了,还是只是偶尔我使用的两个芯片组都不支持此功能?

Tor*_*xed 2

只是为了仔细检查:

你能通过 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