Linux BlueZ 5.65 hcitool结合服务UUID和制造数据广告

dgiusagp  于 2023-05-06  发布在  Linux
关注(0)|答案(1)|浏览(231)

bounty明天到期。此问题的答案有资格获得+200声望奖励。PhilBot希望引起更多关注这个问题。

我在定制的嵌入式Linux 5.15板上运行BlueZ 5.56。该板具有Atmel wilc 3000 WiFi/蓝牙无线电板载。我已经实现了一个基于BlueZ示例的python GATT服务器,它在raspberry pi上工作得很好。但是,该示例的广告部分不适用于wilc 3000。因此我使用hcitool手动启动广告。这些广告工作-但是我不知道如何将制造数据与服务UUID结合起来。
我正在我的MacBook上使用LightBlue进行测试和调试。如果我设置了下面的两个命令,广告似乎互相争斗,有时我得到一个或另一个,有时我得到空的广告,什么也没有收到。
我如何将这两个组合起来,以便同时接收制造和服务UUID广告?谢谢大家。

# Custom Manufacturing Advertisement
hcitool -i hci0 cmd 0x08 0x0008 11 02 01 06 07 09 61 62 63 64 65 66 05 ff fe 01 00 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00

# Custom Service UUID Advertisement
hcitool -i hci0 cmd 0x08 0x0008 12 11 07 30 44 5a 3e 35 50 0f ab 01 48 fd 25 11 63 a7 f5 00 00 00 00 00 00 00 00 00 00 00 00 00
6tdlim6h

6tdlim6h1#

我认为主要的问题是,你是设置广告报告两次,什么是最有可能发生的是,第二个广告报告是覆盖第一个.您只需按以下方式呼叫Hcitool cmd一次:-

hcitool -i hci0 cmd 0x08 0x0008 12 02 01 06 05 02 FF 01 FF 02 08 FF 00 11 22 33 44 55 66

广告中的BLE数据解码如下(基于Assigned Numbers Document):

  • 第1个字节=长度(n个字节)
  • 第二个字节=类型
  • n-1字节=实际数据

因此,上述数据被解码为:

12 - 18 (length of full advert report)
02 - Length of next advert report entry (2 bytes)
01 - Type: Flags
06 - 02 && 04 LE General Discoverable && BR/EDR Not supported
05 - Length of the next advert report entry (5 bytes)
02 - Type: Complete list of 16-bit UUIDs
FF 01 FF 02 - The UUIDs 0xFF01 and 0xFF02 will be included in the advert report
08 - Length of the next advert report entry
FF - Type: Manufacturer data
00 11 22 33 44 55 66 - The actual manufacturer data

也就是说,我建议您避免使用hcitool命令,因为它已被弃用,并且与较新的bluez命令相比有许多限制。相反,您可以使用btmgmt工具(如果您的系统上可用)发送包含UUID和制造商数据的广告。为此,您可以使用以下命令:

sudo btmgmt add-adv -u FF01 -u FF02 -d 02010608FF00112233445566 1

上面的行将UUID 0xFF 01、0xFF 02和制造商数据00112233445566添加到通告报告中。btmgmt add-adv选项的完整列表如下:

Usage: add-adv [options] <instance_id>

Options:
     -u, --uuid <uuid>         Service UUID
     -d, --adv-data <data>     Advertising Data bytes
     -s, --scan-rsp <data>     Scan Response Data bytes
     -t, --timeout <timeout>   Timeout in seconds
     -D, --duration <duration> Duration in seconds
     -P, --phy <phy>           Phy type, Specify 1M/2M/CODED
     -c, --connectable         "connectable" flag
     -g, --general-discov      "general-discoverable" flag
     -l, --limited-discov      "limited-discoverable" flag
     -n, --scan-rsp-local-name "local-name" flag
     -a, --scan-rsp-appearance "appearance" flag
     -m, --managed-flags       "managed-flags" flag
     -p, --tx-power            "tx-power" flag
e.g.:
    add-adv -u 180d -u 180f -d 080954657374204C45 1

广告中的BLE数据解码如下(基于Assigned Numbers Document):

  • 第1个字节=长度(n个字节)
  • 第二个字节=类型
  • n-1字节=实际数据

所以我添加的广告数据的含义:-

02 - Length (2 bytes)
01 - Type: Flags
06 - Flag - 02 && 04 LE General Discoverable && BR/EDR Not supported
08 - Length (8 bytes)
FF - Type: Manufacturer data
00112233445566 - Actual manufacturer data

其他有用的链接:

相关问题