bluetooth mesh provisioning PDU学习笔记
自己学习的笔记,如有不正确的地方,望各读者指出,谢谢。
在provision过程中,如果发送方在发送完第一条消息之后,30秒内没有收到一个交易应答消息,那么这个发送方就必须取消交互,取消provisioning的进程,并关闭链路。如果是分段消息,则在接收完所有的段后,接收方验证FCS无误后要给发送方发送一个交易应答PDU。
Provisioning由五个步骤来完成:beaconing,邀请,交换公共密钥,认证,分发provisioning数据。
当provisioner确认一个设备可以被provision后,就发送一个Provisioning Start PDU出去。Provisioner只能从新设备的Provisioning Capability PDU里提供的算法中选择一个算法来使用。
PB-ADV PDU格式:
Field |
Size(octets) |
Description |
Link ID |
4 |
一个链接ID |
Transaction Number |
1 |
用来识别不同交互的号码 |
Generic Provisioning PDU |
1 - 24 |
将要被传送的Generic Provisioning PDU |
Transaction Start PDU 的GenericProvisioning Control Field
Field |
Size(bits) |
Description |
SegN |
6 |
最后一个分段消息段号 |
GPCF |
2 |
0b00 = Transaction Start |
TotalLength |
16 |
Provisioning PDU的字节数 |
FCS |
8 |
Provisioning PDU的帧检查 |
Provisioning PDU格式
Field |
Size(bits) |
Description |
Padding |
2 |
0b00.不能为其它值 |
Type |
6 |
Provisioning PDU类型值(具体见下面PDU类型表) |
Parameters |
variable |
消息参数 |
Provisioning PDU类型
Type |
Name |
Description |
0x00 |
Provisioning Invite |
邀请一个设备加入mesh网络 |
0x01 |
Provisioning Capabilities |
指示设备的能力 |
0x02 |
Provisioning Start |
指示provisioner基于设备的能力所选择的provisioning方式 |
0x03 |
Provisioning Public Key |
包含设备的或者prvisioner的Public Key |
0x04 |
Provisioning Input Complete |
指示用户已经完成值输入 |
0x05 |
Provisioning Confirmation |
包含provisioner的或者设备的provisioning确认值 |
0x06 |
Provisioning Random |
包含设备的或者provisioner的provisioning随机值 |
0x07 |
Provisioning Data |
包括分配给主元素的unicast地址,一个网络密钥(network key),NetKey索引,标志(Flags)和IV索引 |
0x08 |
Provisioning Complete |
指示provisioning完成 |
0x09 |
Provisioning Failed |
指示provisioning失败 |
0x0A-0xFF |
RFU |
为将来使用保留 |
以发送公共密钥为例,展示provisioning时PDU的正确组合:
Provisioning Start
Public Key :2c31a47b5779809ef44cb5eaaf5c3e43d5f8faad4a8794cb987e9b03745c78dd
919512183898dfbecd52e2408e43871fd021109117bd3ed4eaf8437743715d4f
Message : 032c31a47b5779809ef44cb5eaaf5c3e43d5f8faad4a8794cb987e9b03745c78
dd919512183898dfbecd52e2408e43871fd021109117bd3ed4eaf8437743715d
4f
(此处把publickey当成provisioning PDU发送出去,所以把它组成一个PDU时,按照provisioningPDU格式的要求,在PDU最前面加上了padding和Type(如前面“Provisioning PDU格式“所示),合起来就是0x03。)
LinkID : 23af5850
Transaction : 02
Segment0 : 032c31a47b5779809ef44cb5eaaf5c3e43d5f8fa
Segment1 : ad4a8794cb987e9b03745c78dd919512183898dfbecd52
Segment2 : e2408e43871fd021109117bd3ed4eaf8437743715d4f
SegN : 02
PDU Length : 0041
FCS : d1
Message0 : 23af585002080041d1032c31a47b5779809ef44cb5eaaf5c3e43d5f8fa
Message1 : 23af58500206ad4a8794cb987e9b03745c78dd919512183898dfbecd52
Message2 : 23af5850020ae2408e43871fd021109117bd3ed4eaf8437743715d4f
message0分解对应下图:
由于message0是第一分段消息,属于Transaction Start PDU,所以GPCF为0b00。所以此段第一个字节为0x08。
messag1和message2分解对应下图:
message1和message2两段PDU属Transaction Continuation PDU,所以GPCF是0b10,与相应的段号合并起来就是0x06和0x0a。每个Provisioning PDU都当成一个单独的事务来传送,一个事务可能由一个或多个段组成。段号从0 到63,段0 必须用Transaction Start PDU来发送。其它段要用Transaction Continuation PDU来发送。Provisioning PDU的每个段都被放在PB-ADV的GenericProvisioning PDU里发送。
附上两种类型PDU的格式:
bluetooth mesh provisioning PDU学习笔记相关推荐
- ESP32_WIFI MESH学习笔记4 MESH网WIFI桥接
ESP32_WIFI MESH学习笔记4 MESH网与WIFI桥接 前言 在PlainlessMEH库的帮助下,我们很容易就建立了一个WIFI_MESH网络,但只是一个单一网络.本文计录使用WIFI ...
- ESP32 WIFI MESH学习笔记7-物联网与控制(ESP32部分)
ESP32 WIFI MESH学习笔记 文章目录 前言 一.服务器部分 二.ESP32部分 1.引入例子 2.修改用户名称及密码 3.初始化IOT登陆信息 4.初始化 5.侦听函数 6.主函数 7.子 ...
- PMBOK(第六版) 学习笔记 ——《考试、成绩、PDU》
系列文章目录 PMBOK(第六版) 学习笔记 --<第一章 引论> PMBOK(第六版) 学习笔记 --<第二章 项目运行环境> PMBOK(第六版) 学习笔记 --<第 ...
- Unity学习笔记——Mesh
Unity学习笔记--Mesh Unity中的Mesh组件是一个很好玩的东西,这次的目标是根据高程图创建出一个平面. 1.用脚本创建一个简单的三角形 新建空的物体,挂上MeshFilter.MeshR ...
- ESP32_WIFI Mesh学习笔记1---Ardino IDE 环境配置
ESP_WIFI MESH学习笔记1-Ardino IDE 环境配置 文章目录 ESP_WIFI MESH学习笔记1---Ardino IDE 环境配置 前言 一.Arduino IDE配置问题 二. ...
- nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新
nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新 主机连接 nrf52832 SDK中主机连接从机需要使用 sd_ble_gap_connect(ble_gap_addr_t const ...
- nrf52832 学习笔记(三)蓝牙从机广播
nrf52832 学习笔记(三)蓝牙从机广播 蓝牙从机要想被主机连接,首先需要发送广播信息,周围主机通过扫描广播信号,根据从机的广播信息,判断是否连接. 蓝牙协议栈初始化 不管是主机还是从机,要想使用 ...
- EFR32BG22 Thunderboard Kit 学习笔记总结
EFR32BG22 Thunderboard Kit 学习笔记总结 Thunderboard™ BG22 开发套件是Silicon Labs提供的一个小型原型平台,适用于电池供电的蓝牙应用. 上面搭载 ...
- nrf52832 学习笔记(七)蓝牙协议层级理解
nrf52832 学习笔记(七)蓝牙协议层级理解 本文主要由一下几篇文档摘录汇总而成 ,如有错误欢迎斧正 da14531 蓝牙协议文档 深入浅出低功耗蓝牙(BLE)协议栈 低功耗蓝牙ATT/GATT/ ...
最新文章
- LeetCode刷题记录7——824. Goat Latin(easy)
- 清华 CVer 对自监督学习的一些思考
- eclipse Plugin execution not covered by lifecycle configuration:maven.***.plugin
- array sort - 2 : quick sort
- SpringCloud注册中心高可用搭建
- 【万字长文】创业公司就应该技术选型 Spring Cloud Alibaba , 开箱即用
- 标准exception类层次图
- drupal 使用补丁_使用Drupal解决大学需求
- 页面文件太小无法完成操作_PPT操作界面基础解析
- python函数表格_python 6.7 编写printTable()函数表格打印(完整代码)
- matlab三角波发生器精度改为定点型,关于matlab simulink中三角波模块的问题!
- java中如何生成对外的接口_Java利用Swagger2自动生成对外接口的文档
- html 页面加载中 请稍候,html 提示“数据在加载中,请稍后……”
- vecm模型怎么写系数_时变秩和时变系数VECM模型与“费雪效应”机制检验
- Educational Codeforces Round 118 (Rated for Div. 2)
- esp8266WIFI模块教程:正点原子ATK-ESP8266进行网络通信,单片机与电脑,单片机与手机发送数据
- 上海电信光猫超级管理员密码后门
- ps抠头发丝详细教程,去除人像中的杂乱头发
- php三D立体模拟,CSS3使用3D环境实现立体魔方效果的实例代码分享
- linux怎么创建牡蛎_牡蛎的意思
热门文章
- 电梯媒体吵架再升级,江南春张继学隔空喊话!
- 《炬丰科技-半导体工艺》硅片超声清洗方法及配置
- Digicert SSL证书与Symantec SSL证书的对照
- 向“微软”宣战?Salesforce将以277亿美元并购Slack
- rstudio拉格朗日插值法_拉格朗日插值法学习笔记
- 用PageOffice实现最简单的在线打开保存PPT文件
- 洛谷P3961 图的遍历
- 《Android游戏编程之从零开始(配光盘)》
- 首页创业 不想一直做普工,去学这5个技术,好找工作,赚钱也容易点
- itext word模板替换_【极简Python 自动化办公】Python写入Word文档