蓝牙广播者.docx
- 文档编号:10422376
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:11
- 大小:51.07KB
蓝牙广播者.docx
《蓝牙广播者.docx》由会员分享,可在线阅读,更多相关《蓝牙广播者.docx(11页珍藏版)》请在冰豆网上搜索。
蓝牙广播者
1.1广播类型
广播可设置以下几种类型:
1)ConnectableUndirectedEventTyp(e可连接无定向广播)
2)ConnectableDirectedEventTyp(e可连接定向广播)
3)ScannableUndirectedEventType可扫描无定向广播)
4)Non-connectableUndirectedEventTyp(e不可连接无定向广播)
所谓定向和无定向是针对广播的对象而言的,如果是针对特定对象的广播(在广播包PDU中会包含目标对象的BD_ADDR)就是定向广播,反之就是无定向。
可连接和不可连接是指是否接受连接请求,如果是不可连接的广播类型,它将不回应连接请求。
可扫描类型是指回应扫描请求。
在TICC2540中实现:
广播类型定位在(include/gap.h),具体定义的类型如下:
GAP_ADTYPE_ADV_IND//!
GAP_ADTYPE_ADV_HDC_DIRECT_IND//! GAPRole_SetParameter(GAPROLE_ADV_EVENT_TYPE,sizeof(uint8),&advType); 1.1.1ConnectableUndirectedEventType 可连接非定向广播包为(ADV_INDPDU)。 在可连接的无定向广播类型下,一个“扫描者”或“发起者”可以用扫描请求或连接请求来回应这个广播包。 “扫描者”可发送一个扫描请求(SCAN_REQPDU)来获取广播的额外信息(SCAN_RSP;“发起者”可发送一个连接请求(CONNECT_REQPDU)来要求LinkLayer(链接层)进入链接状态。 LinkLayer(链接层)需在同一个广播信道上监听来自“扫描者”或“发起者”的请求。 如果“广播者”收到一个扫描请求包(SCAN_REQPDU),该请求包含有它的设备地址,并且该“扫描者”为广播过滤策略所允许,那么“广播者”就会在同一信道上回应一个数据包(SCAN_RSPPDU)。 当(SCAN_RSPPDU)发送完成后,或由于广播过滤策略阻止 了该请求包,“广播者”就会移到下一个广播信道来发送另一个广播包(ADV_INDPUD, 或关闭广播事件 如果“广播者”收到一个连接请求包(CONNECT_REQPDU),该请求包含有它的设备地址,并且该“发起者”为广播策略所允许,LinkLayer(链接层)就会退出广播状态并转移 到连接状态,并且角色转化为“从设备”。 如果广播过滤策略阻止了该连接请求包,“广播者”就会移到下一个广播信道来发送另一个广播包(ADV_INDPUD),或关闭广播事件。 在一个广播事件中的两个相邻广播包(ADV_INDPDU)的时间间距小于等于10ms广播状态将在advertisinginterva内完成状态的关闭。 一个没有扫描请求和连接请求的广播事件(使用所有广播信道37、38、39)如下图所示: (示意图) 一个包含扫描请求的广播事件(使用所有广播信道37、38、39),扫描请求在广播事件的中间,如下图所示: (示意图) 一个包含扫描请求的广播事件(使用所有广播信道37、38、39),扫描请求在广播事件的末尾,如下图所示: (示意图) 一个包含连接请求的广播事件,如下图所示: (示意图) 1.1.2ConnectableDirectedEventType 可连接的定向广播包为(ADV_DIRECT_INDPDU)。 该类型允许一个“发起者”以连接请求包来回应(CONNECT_REQPDU)该广播包,“发起者”发送一个连接请求包要求LinkLayer(链接层)进入连接状态。 可连接的定向广播包(ADV_DIRECT_INDPDU)同时包含“发起者”设备地址和“广播者”设备地址。 只有符合该地址的“发起者”才可向“广播者”发起一个连接请求 (CONNECT_REQPDU),也就是说当“发起者”收到该广播包时,它会检测是否和自己的地址一致,如果不一致就丢弃该包不做任何回应,如果是自己的地址,它会将它提交到Host层,由Host层来决定是否发起一个连接请求。 当“广播者”发送一个广播包(ADV_DIRECT_INDPDU)后,它将在同一信道上监听连接请求包(CONNECT_REQPDU)。 任何扫描包将被忽略,也就是说不接受扫描请求。 如果“广播者”收到一个包含它设备地址的连接请求包,并且该“发起者”就是广播包的指定目标,那么LinkLayer(链接层)将退出广播状态并转移到连接状态,并且角色将由“广播者”转化为“从设备”。 否则,“广播者”将切换到下一个广播信道发送下一个广播包,或者关闭这个广播事件。 在同一个广播信道上的两个相邻广播包的时间间隔小于等于3.75ms可见该类型的广播速度比可连接非定向广播包(<=30ms)要快很多。 当进入广播状态后,LinkLayer(链接层)会在1.28内退出广播状态。 一个没有连接请求(CONNECT_REQPDU),含有5个广播包(ADV_DIRECT_INDPDU) 的两个广播事件序列图,如下所示: (示意图) 应用场合: 可连接的定向广播类型用于期望快速建立连接的场合(如: 重连)。 1.1.3ScannableUndirectedEventType 可扫描非定向广播包(ADV_SCAN_INDPDU),允许一个“扫描者”回应一个扫描请求 包(SAN_REQPDU)来向“广播者”获取附加信息(SCAN_RSP。 LinkLayer(链接层)将在同一个信道上监控来自扫描者的请求。 如果“广播者”收到一个包含它的地址的扫描请求包(SCAN_REQPDU),并且该“扫描者”的地址符合过滤策略(说白了就是该设备合法,不被“广播者”的地址过滤策略过滤),那么“广播者”将在同一广播信道上回应一个数据包(SCAN_RSPPDU)。 当SCAN_RSPPDU数据包发送完成后或SCAN_REQ被过滤策略阻止,那么“广播者”将切换到下一个广播信道发送下一个广播包或关闭该广播事件。 在一个广播事件中的两个相邻广播包(ADV_INDPDU)的时间间距小于等于10ms广播状态将在advertisinginterva内完成状态的关闭。 没有扫描请求的包序列示意如下: (示意图) 有扫描请求的包序列示意如下,其中一个扫描请求在中间,另一个扫描请求在末尾: (示意 图) (示意图) 1.1.4Non-connectableUndirectedEventType 不可连接非定向广播包(ADV_NONCONNN_INDPDU),该广播类型不接受任何请求包(包含: 扫描请求和连接请求),“扫描者”可接收来自“广播者”的广播包。 在一个广播事件中的两个相邻广播包(ADV_INDPDU)的时间间距小于等于10ms广播 状态将在advertisinginterva内完成状态的关闭。 广播事件如下图所示: (示意图) 1.2广播相关参数说明 与广播相关可设置的参数有: 1)Advertising_Interval_Min 2)Advertising_Interval_Max, 3)Advertising_Type, 4)Own_Address_Type, 5)Direct_Address_Type, 6)Direct_Address, 7)Advertising_Channel_Map, 8)Advertising_Filter_Policy 9)AdvertisingData 10)ScanReponseData 1.2.1Advertisinginterval 首先介绍一下Advertisinginterval(广播时间间隔): 在所有的非定向广播事件中,两个相邻的广播事件的时间间隔(T_advEvent)为: T_AdvEvent=advInterval+advDelay advInterva必须是0.625ms勺整数倍,并且范围在20ms-10.24之间,对于“可扫描非定向广播” 和“不可连接非定向广播”这两种类型,该值应不小于100ms即至少要160个0.625ms)对 于“可连接的非定向广播”该值可设置的范围为20ms-10.24s advDelay是LinkLayer(链接层)分配的一个伪随机数,它的范围为O/Oms 广播包的时间间隔示意图如下: (示意图) 参数Advertising_lnterval_Min和Advertising_lnterval_Max就是用于调整advertisingintervOl勺,它 们通常是以0.625m为单位的,这里设置一个上限值和下限值,目的是希望让控制器根据其 工作情况来动态调整合适的广播包发送频率,当然你也可以设置为同一个值。 Advertising_lnterval_MinSize: 2Bytes 值 参数描述 N=OxXXXX 非定向广播包的最小广播间隔。 范围: 0x0020-0x4000 默认值: N=0x0800(1.28秒) Time=N*0.625ms 时间范围: 20ms-10.24s Advertising」nterval_MaxSize: 2Bytes 值 参数描述 非定向广播包的最大广播间隔。 范围: 0x0020-0x4000 N=0xXXXX 默认值: N=0x0800(1.28秒) Time=N*0.625ms 时间范围: 20ms-10.24s 1.2.2Advertising_Type 就是本章介绍的各种广播类型 Advertising_Type Size: 1Bytes 值 参数描述 0x00 Connectableundirectedadvertising(ADV_IND)(default) 0x01 Connectabledirectedadvertising(ADV_DIRECT_IND) 0x02 Scannableundirectedadvertising(ADV_SCAN_IND) 0x03 Nonconnectableundirectedadvertising(ADV_NONCONN_IND) 0x04-0xFF Reservedforfutureuse 广播类型决定了回应包类型,下表列出各种类型下的扫描请求和连接请求的对照关系: 广播类型 广播包(PDU) 回应包(PDU) 扫描请求 (SCNA_REQ) 连接请求 (CONNECT_REQ) 可连接非定向广播 ADV_IND YES YES 可连接定向广播 ADV_DIRECT_IND NO YES 不可连接非定向广播 ADV_NOCONN_IND NO NO 可扫描非定向广播 ADV_SCAN_IND YES NO 1.2.3Own_Address_Type Own_Address_TypeSize: 1Bytes 值 参数描述 0x00 PublicDeviceAddress(default) 0x01 RandomDeviceAddress 0x02-0xFF Reservedforfutureuse “广播者”自身使用的设备地址类型。 设备地址类型: PublicDeviceAddress公有设备地址是设备所特有的并且是不可改变的,类似网络设备的 MAC地址,它的长度为48位。 这个地址是从IEEE注册当局获取的,由2个部分组成: Company_ic部分: 高地址部分由24位组成。 Company_assigne部分: 低地址部分由24位组成。 LSBMSB Company_assigned(位) Company_id(24^) RamdomDeviceAddres随机设备地址(私有设备地址),它也是48位 random(24位) hash(24位) 1.2.4Direct_Address_Type, 定向目标的地址类型,同上。 1.2.5Direct_Address, 定向对象的设备地址(根据类型设置,可以是公有设备地址或私有设备地址) 1.2.6Advertising_Channel_Map 广播信道的选择 Size: 1Bytes Advertising_Channel_Map 值 参数描述 00000000b 保留 xxxxxxx1b 允许使用37信道 xxxxxx1xb 允许使用38信道 xxxxx1xxb 允许使用39信道 00000111b Default(允许所有广播信道) 1.2.7Advertising_Filter_Policy “广播者”过滤策略,对发来请求包设备采用的过滤策略设置: Advertising_Filter_PolicySize: 1Bytes 值 参数描述 0x00 允许任何扫描请求,允许任何连接请求(default) 0x01 只允许来自白名单的扫描请求,允许任何连接请求 0x02 允许任何扫描请求,只允许来自白名单的连接请求 0x03 只允许来自白名单的扫描和连接请求 0x04-0xFF 保留 1.2.8AdvertisingData 广播包中携带的广播数据,它的长度最多不超过31个字节(0-31),数据必须符合下面的格 式要求: (可以有多个AD数据段,每个AD数据段由Length: Data组成,其中Length为1个字节,Data的长度为Lenth,所有一个AD段的长度为Length+1)。 广播数据可以根据实际需要进行适时改变。 (示意图) 1.2.9ReponseData 扫描请求回应的附加数据,它的长度最多不超过31个字节(0-31),数据包的格式同Advertising Data。 1.3广播流程(UndirectedAdvertising) 1.3.1无定向广播流程(UndirectedAdvertising)一个蓝牙设备进入广播状态,通常流程如下: (示意图) 1.3.2定向广播 (示意图) 1.4TICC254X下的实现 参数设置: GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA,sizeof(scanRspData),scanRspData); GAPRole_SetParameter(GAPROLE_ADVERT_DATA,sizeof(advertData),advertData); GAPRole_SetParameter(GAPROLE_ADV_EVENT_TYPE,sizeof(uint8),&advType); GAP_SetParamValue(TGAP_LIM_DISC_ADV_INT_MIN,advInt); GAP_SetParamValue(TGAP_LIM_DISC_ADV_INT_MAX,advInt); GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MIN,advInt); GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MAX,advInt); 广播使能(关闭): GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED,sizeof(uint8),&initial_advertising_enable);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝牙 广播