gpt4 book ai didi

bluetooth-lowenergy - 使用 HCITool 为蓝牙 LE 服务做广告

转载 作者:行者123 更新时间:2023-12-04 19:46:44 25 4
gpt4 key购买 nike

我正在尝试在我的 Linux 计算机上创建一个蓝牙低功耗外设(目标是通过蓝牙从 iPhone 发送数据)。我目前正在使用工具 hciconfig , hcitoolhcidump .

我目前的实验是用一个特定的 UUID 来宣传一个服务,iOS CoreBluetooth 库会选择它。 (注意:我不是要创建 iBeacon)。

现在,它实际上就像困扰我的一个单一命令一样简单。

hcitool -i hci0 cmd 0x08 0x0008 15 02 01 1a 11 07 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50

我认为它应该做的是以下内容:
  • 0x08:将组设置为 BLE
  • 0x0008:设置命令到 HCI_LE_Set_Advertising_Data


  • 0x15:设置Header中的有效字节长度为21。(标志包3字节,服务结构18字节)
  • 0x02:设置Flags结构的长度为2字节
  • 0x01:将结构类型设置为 AD 标志
  • 0x1a:标志值:
    bit 0 (OFF) LE Limited Discoverable Mode
    bit 1 (ON) LE General Discoverable Mode
    bit 2 (OFF) BR/EDR Not Supported
    bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller)
    bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host)

  • (旗帜结束)
  • 0x11 设置服务结构长度为 17 字节
  • 0x07 设置结构类型为 128 位完整服务 UUID 列表
  • 0x41 ... 0x50 将测试服务的 UUID 设置为 ABCDEFGHIJKLMNOP

  • 据我所知 hcidump ,它正确执行并且看起来像我想要的那样。但它被错误拒绝:
    LE Set Advertising Data (0x08|0x0008) ncmd 1
    status 0x12
    Error: Invalid HCI Command Parameters

    我花了一整天的时间试图让它正确。有没有熟练的人看到我做错了什么?这是宣传服务的正确方法吗?

    (感兴趣的读者的上下文:我已经成功地使用 NodeJs 中的 Bleno 库完成了我想做的事情。但是,这不适合我们系统中的大图。直接使用 HCITool 进行广告只是为了实验,将被写入稍后在 Python 中)

    最佳答案

    HCI_LE_Set_Advertising_Data 有效载荷的长度应该正好是 32 个字节。尝试对命令进行零填充以达到 32 个字节:

    hcitool -i hci0 cmd 0x08 0x0008 15 02 01 1a 11 07 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 00 00 00 00 00 00 00 00 00 00

    您可以使用 hcidump --raw. 获得更多见解。
    比较原始命令的输出:
    $hcidump --raw
    HCI sniffer - Bluetooth packet analyzer ver 5.30
    device: hci0 snap_len: 1500 filter: 0xffffffffffffffff
    < 01 08 20 16 15 02 01 1A 11 07 41 42 43 44 45 46 47 48 49 4A
    4B 4C 4D 4E 4F 50
    > 04 0E 04 01 08 2

    用零填充一个:
    HCI sniffer - Bluetooth packet analyzer ver 5.30
    device: hci0 snap_len: 1500 filter: 0xffffffffffffffff
    < 01 08 20 20 15 02 01 1A 11 07 41 42 43 44 45 46 47 48 49 4A
    4B 4C 4D 4E 4F 50 00 00 00 00 00 00 00 00 00 00
    > 04 0E 04 01 08 20 00

    另一种获得更多洞察力的方法是运行 hciconfig hci0 leadv并使用 hcidump --raw检查由 hciconfig 发送的 SET_ADVERTISING_PARAMETERS 命令的有效负载。

    顺便说一句,我注意到有时非零填充命令也可以使用,这可能取决于您使用的 bluez 版本。

    关于bluetooth-lowenergy - 使用 HCITool 为蓝牙 LE 服务做广告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35872097/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com