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(指示了发送设备的地址类型):
广播地址是否为公共public(TxADD =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() 函数中进行信道设置。