btmgmt命令如何用于设置PHY?

问题描述 投票:0回答:1

当我运行命令时:

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,其中包括 LE2MTXLE2MRX(我正在寻找)。

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
bluetooth-lowenergy bluez hci
1个回答
0
投票

您无法禁用不可可配置的 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)。但我还没有测试这最终是否给出了想要的结果。

© www.soinside.com 2019 - 2024. All rights reserved.