当我运行命令时:
btmgmt phy LE2MTX LE2MRX
它返回:
Could not set PHY Configuration with status 0x0d (Invalid Parameters)
btmon 显示:
@ MGMT Open: btmgmt
@ MGMT Command: Set PHY Configuration (0x0045) plen 4
Selected PHYs: 0x1800
LE 2M TX
LE 2M RX
@ MGMT Event: Command Status (0x0002) plen 3
Set PHY Configuration (0x0045)
Status: Invalid Parameters (0x0d)
@ MGMT Close: btmgmt
我对btmgmt非常不熟悉,如何指定尽可能使用 LE 2M PHY?
如果我跑步:
btmgmt phy
我获得了可用的 PHY,其中包括 LE2MTX 和 LE2MRX(我正在寻找)。
Supported phys: BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
Configurable phys: BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE2MTX LE2MRX
Selected phys: BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE2MTX LE2MRX
这些也可以在btmon中看到:
Get PHY Configuration (0x0044) plen 12
Status: Success (0x00)
Supported PHYs: 0x1fff
BR 1M 1SLOT
BR 1M 3SLOT
BR 1M 5SLOT
EDR 2M 1SLOT
EDR 2M 3SLOT
EDR 2M 5SLOT
EDR 3M 1SLOT
EDR 3M 3SLOT
EDR 3M 5SLOT
LE 1M TX
LE 1M RX
LE 2M TX
LE 2M RX
Configurable PHYs: 0x19fe
BR 1M 3SLOT
BR 1M 5SLOT
EDR 2M 1SLOT
EDR 2M 3SLOT
EDR 2M 5SLOT
EDR 3M 1SLOT
EDR 3M 3SLOT
EDR 3M 5SLOT
LE 2M TX
LE 2M RX
Selected PHYs: 0x19ff
BR 1M 1SLOT
BR 1M 3SLOT
BR 1M 5SLOT
EDR 2M 1SLOT
EDR 2M 3SLOT
EDR 2M 5SLOT
EDR 3M 1SLOT
EDR 3M 3SLOT
EDR 3M 5SLOT
LE 2M TX
LE 2M RX
您无法禁用不可可配置的 PHY。您必须在 PHY 列表中至少包含
BR1M1SLOT
、LE1MTX
和 LE1MRX
。所以打电话
btmgmt phy BR1M1SLOT LE1MTX LE1MRX LE2MTX LE2MRX
应该可以。 可配置 PHY 列表是硬编码在 Linux 内核中的(如 5.15.141 中所示):
static u32 get_configurable_phys(struct hci_dev *hdev)
{
return (get_supported_phys(hdev) & ~MGMT_PHY_BR_1M_1SLOT &
~MGMT_PHY_LE_1M_TX & ~MGMT_PHY_LE_1M_RX);
}
请注意,
btmgmt phy
会导致设置默认 PHY(蓝牙核心 v5.3,第 7.8.48 节 – LE 设置默认 PHY 命令)。这是用于new连接的首选 PHY 列表。由于此处不可能仅指定 BLE 2M PHY,因此我无法判断上述命令是否会增加实际使用 BLE 2M PHY 的机会。
蓝牙核心 v5.3 规范还有另一章(7.8.49 – LE 设置 PHY 命令)用于设置活动连接的 PHY。但是这个 HCI 命令在
btmgmt
和 Linux 内核中都没有实现。为套接字的底层 LE 连接调用 LE Set PHY 命令(通过 setsockopt
)的补丁系列已被拒绝。
作为最后的手段,您可以尝试通过 hcitool
强制PHY:
hcitool cmd 0x08 0x0031 0x00 0x02 0x02
这会将 new LE 连接的默认 PHY 设置为 BLE 2M(无 BLE 1M)。但我还没有测试这最终是否给出了想要的结果。