蓝牙信标Eddystone(二)——协议规范

Eddystone协议规范中记录了Eddystone帧格式的常见帧PDU类型和个别服务数据字节格式。

蓝牙信标——Eddystone协议概述

1. 公共元素

每个Eddystone帧类型必须包含以下PDU数据类型:

  • 由蓝牙核心规范(Bluetooth Core Specification Supplement, CSS, v5)定义的16bit Service UUIDs。Eddystone服务UUID为0xFEAA,增加此UUID允许在iOS设备上进行后台扫描;
  • 服务数据数据类型,16bit UUID服务数据类型也必须是Eddystone服务UUID 0xFEAA。

Eddystone帧的具体类型编码在与服务 UUID 相关联的服务数据的第一个八位字节的高四位中。允许的取值包括:

帧类型高4bit字节值
UID00000x00
URL00010x10
TLM00100x20
EID00110x30
RESERVED01000x40

低4bit预留未来使用,当前必须为0000.

需要注意,虽然蓝牙核心规范中定义为小端字节序,但是在Eddystone的服务数据中是按照大端字节序。

2. Eddystone-UID

Eddystone-UID 帧广播一个不透明、唯一的 16 字节 Beacon ID,该Beacon ID由一个 10 字节的命名空间和一个 6 字节的实例组成。Beacon ID 可能在将设备映射到外部存储中的记录时很有用。ID 的命名空间部分可以用于分组一组特定的信标,而实例 ID 则标识组内的个别设备。将 ID 划分为命名空间和实例组件还可以用于优化BLE扫描策略,例如仅基于命名空间进行过滤。

字节序描述
0帧类型Value = 0x00
1距离数据在0m处校正后的发射功率
2NID[0]10-byte 命名空间
3NID[1]
4NID[2]
5NID[3]
6NID[4]
7NID[5]
8NID[6]
9NID[7]
10NID[8]
11NID[9]
12BID[0]6-byte 实例
13BID[1]
14BID[2]
15BID[3]
16BID[4]
17BID[5]
18RFUReserved for future use, must be0x00
19RFUReserved for future use, must be0x00

3. Eddystone-URL

Eddystone-URL框架使用压缩编码格式广播URL,以便在有限长度的广播数据包中容纳更多信息。

解码之后,任何具有互联网访问权限的客户端都可以使用该URL。例如,如果一个Eddystone-URL信标广播URL为:https://goo.gl/Aq18zF,那么接收到该数据包的任何客户端都可以选择访问该URL。

Eddystone-URL框架是物理网络的核心,旨在实现对周围环境相关网页内容的无摩擦发现。Eddystone-URL整合了从其演化而来的UriBeacon格式的所有经验教训。

字节序描述
0帧类型Value = 0x10
1发射功率在0m处校正后的发射功率
2URL Scheme编码后前缀
3+Encoded URL为加密后的URL,长度1-17不等

3.1 关于URL编码规则

十进制Hex扩展
00x00http://www.
10x01https://www.
20x02http://
30x03https://

3.2 Eddystone-URL HTTP URL编码

HTTP URL方案由RFC 1738定义,例如:https://goo.gl/S6zT6P,用于指定使用HTTP可访问的互联网资源。

编码由一系列的字符组成。URL编码中排除的字符代码用作文本扩展代码。当一个用户代理(user agent)接收到Eddystone-URL时,URL标识符中的字节码将根据下表被扩展文字替代。(结尾一个字节表示相关的域名尾缀。)

十进制Hex扩展
00x00.com/
10x01.org/
20x02.edu/
30x03.net/
40x04.info/
50x05.biz/
60x06.gov/
70x07.com
80x08.org
90x09.edu
100x0a.net
110x0b.info
120x0c.biz
130x0d.gov
14…320x0e…0x20Reserved for Future Use
127…2550x7F…0xFFReserved for Future Use

注意:
1. URL仅使用US-ASCII编码字符集的可打印字符编码;即不使用0x00-0x20,与0x7F-0xFF.
2. 0x07-0x0d中顶级域名与0x0-0x6相同,但是没有结尾的斜杆"/".

4. Eddystone-TLM

Eddystone-TLM框架广播有关信标本身的遥测信息,例如电池电压、设备温度和广播数据包的计数。这些信息对于监控信标群的健康状况和运行情况非常有用。由于Eddystone-TLM帧不包含信标ID,因此必须与提供ID的识别帧(Eddystone-UID或Eddystone-URL类型)配对使用。

TLM帧可以明文广播,就像UID和URL帧一样,或者在信标配置为Eddystone-EID时,使用在EID配置期间设置的身份密钥进行加密。当以明文广播时,没有消息完整性验证,您应该设计您的应用程序以适应此类广播的开放性质。

  • 未加密TLM规范
字节序说明
0Frame TypeValue = 0x20
1VersionTLM version, value = 0x00
2VBATT[0]电池电压, 1 mV/bit
3VBATT[1]
4TEMP[0]Beacon 温度
5TEMP[1]
6ADV_CNT[0]Advertising PDU 计数
7ADV_CNT[1]
8ADV_CNT[2]
9ADV_CNT[3]
10SEC_CNT[0]上电或重启后的时间,单位s
11SEC_CNT[1]
12SEC_CNT[2]
13SEC_CNT[3]
  • 加密TLM规范
字节序说明
0Frame TypeValue = 0x20
1VersionTLM version, value = 0x01
2ETLM[0]12字节加密TLM数据
3ETLM[1]
4ETLM[2]
5ETLM[3]
6ETLM[4]
7ETLM[5]
8ETLM[6]
9ETLM[7]
10ETLM[8]
11ETLM[9]
12ETLM[10]
13ETLM[11]
14SALT[0]16-bit salt
15SALT[1]
16MIC[0]16bit 消息完整性检查
17MIC[1]

5. Eddystone-EID

Eddystone-EID框架广播一个加密的临时标识符,该标识符定期更改,更改速率在与Web服务的初始注册期间确定。广播的临时ID可以由注册的服务远程解析,但对其他观察者来说,它似乎是随机变化的。该框架类型旨在用于具有安全和隐私增强功能的设备。

5.1 帧格式规范

字节顺序描述
0帧类型 Frame Type=0x30
1距离数据在0m处校正后的Tx功率
2EID[0]8字节的临时标识符
3EDI[1]
4EDI[2]
5EDI[3]
6EDI[4]
7EDI[5]
8EDI[6]
9EDI[7]

该帧的长度是固定的,且在EID字节之后进行截断。

由于Eddystone-EID帧的目的在于提供更好的隐私保护,因此在实现时不建议将EID帧的广播与属于同一设备的任何其他帧交错使用。信标应当在旋转周期外旋转BD_ADDR,以防止跟踪。

参考链接Eddystone协议规范


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萝卜D大哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值