我想知道任何人都可以帮助我解决我在使用 BlueZ 管理 API 时遇到的问题吗?
我正在运行最新版本,v5.64
在 mgmt API 中有一个命令,
0x0054: Add Extended Advertising Parameters Command
具有如下概述的参数:
Command Code: 0x0054
Controller Index: <controller id>
Command Parameters: Instance (1 Octet)
Flags (4 Octets)
Params (2 Octets)
Duration (2 Octets)
Timeout (2 Octets)
MinInterval (4 Octets)
MaxInterval (4 Octets)
TxPower (1 Octet)
Return Parameters: Instance (1 Octet)
TxPower (1 Octet)
MaxAdvDataLen (1 Octet)
MaxScanRspLen (1 Octet)
(现在,一个问题是这个文档似乎不正确,但是暂时搁置一下,因为我已经设法弄清楚它真正想要的是什么......)
我向它发送命令,如下面的
btmon
跟踪所示:
@ MGMT Command: Add Extended Advertising Parameters (0x0054) plen 20
Instance: 1
Flags: 0x00000002
Advertise as Discoverable
Duration: 0
Timeout: 0
Min advertising interval: 200.000 msec (0x0140)
Max advertising interval: 200.000 msec (0x0140)
TX power: 0 dbm (0x00)
接下来
btmon
我看到它做了以下事情:
< HCI Command: LE Set Extended Advertising Parameters (0x08|0x0036) plen 25
Handle: 0x01
Properties: 0x0013
Connectable
Scannable
Use legacy advertising PDUs: ADV_IND
Min advertising interval: 1280.000 msec (0x0800)
Max advertising interval: 1280.000 msec (0x0800)
如您所见,它将间隔设置为 1280 毫秒。
然后我发送命令
0x0055: Add Extended Advertising Data Command
,我得到了预期的广告,除了它没有 200 毫秒的间隔,它有 1280 毫秒的间隔。
这个 1280 毫秒的值来自
/sys/kernel/debug/bluetooth/hci0/adv_min_interval
和 /sys/kernel/debug/bluetooth/hci0/adv_max_interval
都读作 2048
.
2048 * 0.625ms slots = 1280ms
通常之前,我会将值回显到此文件中以更改广告间隔,但在我当前的应用程序中,我想即时更改间隔并且回显新值仅在广告停止并重新开始时才有效。
有谁知道如何让 BlueZ 忽略
adv_max_interval
和 adv_min_interval
中的值,而是使用命令 0x0054 中发送的值?
谢谢!
我也在使用 BlueZ mgmt api 5.64 版。但是当我运行相同的命令时,我得到了未知的命令。在运行此命令之前,我是否需要遵循命令序列。提前致谢。
@ MGMT Command: Add Extended Advertising Parameters (0x0054) plen 18 {0x0002} [hci0] 36.151368
Instance: 1
Flags: 0x00004002
Advertise as Discoverable
Use provided interval parameters
Duration: 0
Timeout: 0
Min advertising interval: 100.000 msec (0x00a0)
Max advertising interval: 100.000 msec (0x00a0)
TX power: 12 dbm (0x0c)
@ MGMT Event: Command Status (0x0002) plen 3 {0x0002} [hci0] 36.151380
Add Extended Advertising Parameters (0x0054)
Status: Unknown Command (0x01)