Bluetooth 蓝牙LE中制造数据、服务数据和广告数据的区别

Bluetooth 蓝牙LE中制造数据、服务数据和广告数据的区别,bluetooth,bluez,Bluetooth,Bluez,关于BLE,我对BlueZ中的术语及其用法感到有些困惑: 制造商数据 服务数据 广告数据 我将试着总结我所理解的,以及其中的分歧 从那时起,广告包中有一个31字节长的有效负载,可用于用户定义的数据 然而,BlueZ在其应用程序中对数据有不同的概念。它从文档中获取的dict 再看一看,您会发现这个表似乎具有相同的数据结构 它具有用户定义的有效载荷,具体如下: 0xFF «Manufacturer Specific Data» Bluetooth Core Specificatio

关于BLE,我对BlueZ中的术语及其用法感到有些困惑:

  • 制造商数据
  • 服务数据
  • 广告数据

我将试着总结我所理解的,以及其中的分歧

从那时起,广告包中有一个31字节长的有效负载,可用于用户定义的数据

然而,BlueZ在其应用程序中对数据有不同的概念。它从文档中获取
的dict

再看一看,您会发现这个表似乎具有相同的数据结构

它具有用户定义的有效载荷,具体如下:

0xFF    «Manufacturer Specific Data»    Bluetooth Core Specification:Vol. 3, Part C, section 8.1.4 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.4 and 18.11 (v4.0)Core Specification Supplement, Part A, section 1.4
因此,我下载了规范,试图了解这一区别,这让我想到了一句我不太明白的话:

在广告或定期广告活动中发送数据。主持人广告 数据放置在ADV_IND、ADV_nonn_IND、, 高级扫描索引、辅助高级索引和辅助链索引PDU。附加的 控制器广告数据放置在AUX_ADV_IND的ACAD字段中, 辅助同步指示和辅助扫描RSP PDU。定期发布广告数据 放置在辅助同步索引和辅助链索引PDU的AdvData字段中。 扫描响应数据在SCANRSP PDU的ScanRspData字段中发送,或 辅助扫描RSP PDU的AdvData字段。如果完整的数据无法放入 AUX_ADV_IND、AUX_SYNC_IND或 辅助扫描RSP PDU、辅助链IND PDU用于发送 数据的剩余片段。一个广告结构可以分为两部分 或更多PDU

另外,当我查看他们自己的DBUSAPI的BlueZ实现时,我看到他们提供了一种填充制造数据的方法,但没有改变广告类型的方法(ADV_noncn vs ADV_CONN)

它们也有一个
adv_data
类型,但它只有25个字节?为什么我不能得到完整的31字节


实际问题:

  • 当使用BlueZ实现BT外设时,我有31或25个字节。我是否可以同时填写服务数据和制造商数据,总共50字节
  • 制造商数据是对广告数据的抽象吗?如果是,我如何访问基础广告数据?如果没有,理论上我可以同时填写广告和制造商数据吗

  • 下面由Jos Ryke创建的图像可能有助于可视化正在发生的事情

    如图所示,ADV标志和广告数据构成了31字节的广告有效负载,但可用数据只有26字节。该图像包含制造商数据(类型=FF)和服务数据(类型=16)的示例

    在D-Bus API中,要更改广告类型(ADV_noncn vs ADV_CONN),请使用
    type
    属性:

    广播
    =ADV\u n

    您可以在同一广告中同时包含服务和制造商数据(参见示例),但其长度不能超过31字节。使用BlueZ,您可以注册(如果我没记错的话)多达四个广告,这些广告将作为不同的数据包发送


    总之,服务数据和制造商数据是广告有效载荷中的子元素类型。BlueZ允许你在广告中建立你想要的不同内容,然后注册广播。

    下面由Jos Ryke创建的图像可能有助于可视化正在发生的事情

    如图所示,ADV标志和广告数据构成了31字节的广告有效负载,但可用数据只有26字节。该图像包含制造商数据(类型=FF)和服务数据(类型=16)的示例

    在D-Bus API中,要更改广告类型(ADV_noncn vs ADV_CONN),请使用
    type
    属性:

    广播
    =ADV\u n

    您可以在同一广告中同时包含服务和制造商数据(参见示例),但其长度不能超过31字节。使用BlueZ,您可以注册(如果我没记错的话)多达四个广告,这些广告将作为不同的数据包发送


    总之,服务数据和制造商数据是广告有效载荷中的子元素类型。BlueZ允许您在广告中构建所需的不同内容,然后将其注册为广播。

    对于ble,广告包长度有限制。我用过北欧的ble,但不是bluez。但是在那里,数据包的宽度是31字节。因此,这是一个数据包中可以传输的最大限制。不管你喜欢什么,这些都可以分解。因此,设备名称、设备制造商数据类型、广告数据、广告商公司等是可扩展性的基本限制之一。您可以添加一个称为扫描响应的东西来获取更多数据。对我来说,制造商数据是对广告数据的抽象。因为它在广告数据中。对于ble,广告包长度有限制。我用过北欧的ble,但不是bluez。但是在那里,数据包的宽度是31字节。因此,这是一个数据包中可以传输的最大限制。不管你喜欢什么,这些都可以分解。因此,设备名称、设备制造商数据类型、广告数据、广告商公司等是可扩展性的基本限制之一。您可以添加一个称为扫描响应的东西来获取更多数据。对我来说,制造商数据是对广告数据的抽象。因为它在广告数据中。