provisioning bearer layer实现了在provision过程中provisioning PDUs的传输。mesh协议中定义了两种provisioning bearers
- PB_ADV
- PB_GATT(今日不做讲)
未配网设备可以支持PB_ADV或是PB_GATT,建议在未配网设备同时实现两种bearer。provisioner至少支持一种,强烈建议provisioner支持PB-ADV。
PB-ADV
PB-ADV是一个provisioning bearer,是用来在advertising channel上使用Generic Provision PDUs来进行provision的。provision机制是基于对话(session)的。一个未配网设备一次只能支持一个对话(session),而对于provisioner则无此限制。
PB-ADV用来传输Generic Provisioning PDUs,PB-ADV bearer最大的传输单元(Maximum Transmission Unit, MTU)是24个字节。
支持PB-ADV的设备应该以占空比100%的频率扫描消息,以免丢失Generic Provision PDUs。
PB-ADV PDU 消息包的格式如下:
Feild | Size | Description |
---|---|---|
Length | 1 | length of the pb-adv PDU |
AD type | 1 | PB_ADV |
contents | 可变 | PDB-ADV PDU |
其中PB-ADV PDU格式如下:
Field | Size | Description |
---|---|---|
LInk ID | 4 | 一个link的标识符 |
Transaction Number | 1 | The number for identifying a transaction |
Generic Provisioning PDU | 1-24 | Generic Provisioning PDU being transferred |
LinkID 用来表示两个设备之间的一个连接。
Transaction Number 包含一个1-byte的值,用来表示每个Generic Provisioning PDU, 如果Generic Provisioning PDU经过了分段,则每个分片的Transaction Number 都是相同的。而且当Generic Provisioning PDU重发时,该值也是不变的。
在实现时还需要遵循以下几条规则:
- 当PB-ADV PDU包含Provisioning Bearer Control PDU时, Transaction Number应该设置为0.
- 当一个Provisioner通过一个打开的provision link,首次发送Provisioning PDU时,Transaction Number 的值应该从0x00开始,每发送一个Provisioning PDU该值累加。当到达0x7F时,返回的0.
- 当未配网设备通过一个打开的provisin link首次发送PDU时,Transaction Number的值应该从0x80开始,每发送一个provisioning PDU累加1.当到达0xFF时,返回到0x80.
- 当一个设备收到provisioning PDU时,将会根据收到包的Transaction Number值来设置该值。
- 当一个设备发送Transaction响应PDU时, Transaction Number 值应该设置为其响应的那条消息的 Transaction Number 值。