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

来源:互联网 发布:深入分析java web pdf 编辑:程序博客网 时间:2024/05/20 10:11

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

感谢xiaoleiacm,在学习中,经常来查阅,可是每次查阅都不太容易找到。就自己转过来了,方便查找!!

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()  函数中进行信道设置。


1 0