BLE 协议栈之ibeacon广播包羞涩初探

来源:互联网 发布:乌龙山伯爵 知乎 编辑:程序博客网 时间:2024/06/06 20:43

转自:http://blog.csdn.net/xiaoleiacmer/article/details/43308699

Ibeacon

数据定义:一小片数据段广播信息。它不需要配对

数据包括周围环境温度,位置信息,自身的感应信息。

广播功率设定

#defineLL_EXT_TX_POWER_MINUS_23_DBM 0

#defineLL_EXT_TX_POWER_MINUS_6_DBM 1

#defineLL_EXT_TX_POWER_0_DBM 2

#defineLL_EXT_TX_POWER_4_DBM 3

#define GAP_ADTYPE_POWER_LEVEL 0x0A //!< TX Power Level: 0xXX:-127 to +127 dBm

下面的函数定义在hci.h

广播数据包:

Preamble(报头):0xff(固定)

Access Address:0x8e89bed6 (固定)

Packet Payload

Head(2byte):用来描述数据包的类别和PDU的类别

PDU Type

定义为0010 ADV_NONCONN_IND时,lightblue扫描时将不能显示(不确定是否能发现数据)搜所到的从机,但usb dongle可以检测到当前设备发射的数据。

定义为ADV_SCAN_IND

定义为 0110 ADV_SCAN_IND ,lightblue进行扫描时可以随时发现从机,并显示出回复数据。

定义为ADV_SCAN_IND

TxAdd(指示了发送设备的地址类型):

广播地址是否为公共publicTxADD =0)还是随机地址(TxADD=1

Public 地址:是遵循IEEE 802标准,被IEEE协会认证的MAC地址

Random 地址(适用于特定连接的设备):

1 static 静态地址,除非掉电改变否则无法更改

2 Private (随时改变):

resolvable address:来源于MAC地址

non-resolvableaddress:程序改变

RxAdd: 此字节被用于保留,并不适用于此基站

Length: 数据长度。

广播数据类型

Data Type Value 定义在Gap.h中。

数据定义结构:

数据长度 | 标志位| 数据内容

用户定义31个字节:

Flag 被蓝牙核心编程规范Core Specification所规定。

#define GAP_ADTYPE_FLAGS_LIMITED 0x01 //!< Discovery Mode: LE Limited Discoverable Mode广播180

#define GAP_ADTYPE_FLAGS_GENERAL 0x02 //!< Discovery Mode: LE General Discoverable Mode广播时间不确定

#define GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED 0x04 //!< Discovery Mode: BR/EDR Not Supported默认设置

对于ADV_NONCONN_IND等不需要连接回复数据的可以省略。

Manufacturer Specific Data 厂商定义制造字节

定义在 #define GAP_ADTYPE_MANUFACTURER_SPECIFIC 0xFF

最大允许字节长度25~28byte

广播间隔:

无连接广播间隔不能小于100ms

有连接广播间隔不能小于20ms

功耗:

在使用UART,SPI,I2C是会增加其功耗,甚至会超出低功耗蓝牙协议规定的功耗。

广播类别设定(PDU type):

//uint8 advType = GAP_ADTYPE_ADV_NONCONN_IND; // use non-connectable advertisements

在广播时不允许广播数据和回复数据的发送

uint8 advType = GAP_ADTYPE_ADV_SCAN_IND; // use scannable unidirected advertisements

在广播时允许进行请求数据和回复数据的发送

广播信道:

定义在gap.h

#define GAP_ADVCHAN_37 0x01 //!< Advertisement Channel 37

#define GAP_ADVCHAN_38 0x02 //!< Advertisement Channel 38

#define GAP_ADVCHAN_39 0x04 //!< Advertisement Channel 39

GAPRole_Init() 函数中进行信道设置。

原创粉丝点击