日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝牙4.0技术分析1-广播者角色

發(fā)布時間:2025/3/21 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝牙4.0技术分析1-广播者角色 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第1章? BlueTooth Roles-Broadcaster

1.1??? 廣播類型

廣播可設置以下幾種類型:

1)?? Connectable Undirected Event Type(可連接無定向廣播)

2)?? Connectable Directed Event Type(可連接定向廣播)

3)?? Scannable Undirected Event Type(可掃描無定向廣播)

4)?? Non-connectable Undirected Event Type(不可連接無定向廣播)

所謂定向和無定向是針對廣播的對象而言的,如果是針對特定對象的廣播(在廣播包PDU中會包含目標對象的BD_ADDR)就是定向廣播,反之就是無定向。可連接和不可連接是指是否接受連接請求,如果是不可連接的廣播類型,它將不回應連接請求。可掃描類型是指回應掃描請求。

?

在TICC2540中實現:

廣播類型定位在(include/gap.h),具體定義的類型如下:

GAP_ADTYPE_ADV_IND???????????????????? //!< Connectable undirected advertisement

GAP_ADTYPE_ADV_HDC_DIRECT_IND????? //!< Connectable high duty cycledirected advertisement

GAP_ADTYPE_ADV_SCAN_IND? ????????? //!<Scannable undirected advertisement

GAP_ADTYPE_ADV_NONCONN_IND? ?????? //!<Non-Connectable undirected advertisement

GAP_ADTYPE_ADV_LDC_DIRECT_IND? ???????? //!<Connectable low duty cycle directed advertisement

其中定向可連接廣播類型分成兩種方式(High duty cycle和Low duty cycle)

參數設置的API為:

??? GAPRole_SetParameter(GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &advType );

1.1.1?? Connectable Undirected Event Type

可連接非定向廣播包為(ADV_IND PDU)。在可連接的無定向廣播類型下,一個“掃描者”或“發(fā)起者”可以用掃描請求或連接請求來回應這個廣播包。“掃描者”可發(fā)送一個掃描請求(SCAN_REQ PDU)來獲取廣播的額外信息(SCAN_RSP);“發(fā)起者”可發(fā)送一個連接請求(CONNECT_REQ PDU)來要求Link Layer(鏈接層)進入鏈接狀態(tài)。

Link Layer(鏈接層)需在同一個廣播信道上監(jiān)聽來自“掃描者”或“發(fā)起者”的請求。

如果“廣播者”收到一個掃描請求包(SCAN_REQ PDU),該請求包含有它的設備地址,并且該“掃描者”為廣播過濾策略所允許,那么“廣播者”就會在同一信道上回應一個數據包(SCAN_RSP PDU)。當(SCAN_RSP PDU)發(fā)送完成后,或由于廣播過濾策略阻止了該請求包,“廣播者”就會移到下一個廣播信道來發(fā)送另一個廣播包(ADV_IND PUD),或關閉廣播事件。

如果“廣播者”收到一個連接請求包(CONNECT_REQ PDU), 該請求包含有它的設備地址,并且該“發(fā)起者”為廣播策略所允許,Link Layer(鏈接層)就會退出廣播狀態(tài)并轉移到連接狀態(tài),并且角色轉化為“從設備”。如果廣播過濾策略阻止了該連接請求包,“廣播者”就會移到下一個廣播信道來發(fā)送另一個廣播包(ADV_IND PUD),或關閉廣播事件。

在一個廣播事件中的兩個相鄰廣播包(ADV_IND PDU)的時間間距小于等于10ms,廣播狀態(tài)將在advertising interval內完成狀態(tài)的關閉。

一個沒有掃描請求和連接請求的廣播事件(使用所有廣播信道37、38、39)如下圖所示:

(示意圖)


注意:廣播的間隔時間一般不會是嚴格的10ms,系統(tǒng)會產生一個隨機的時間值,加上10ms,防止沖突。


一個包含掃描請求的廣播事件(使用所有廣播信道37、38、39),掃描請求在廣播事件的中間,如下圖所示:

(示意圖)


一個包含掃描請求的廣播事件(使用所有廣播信道37、38、39),掃描請求在廣播事件的末尾,如下圖所示:

(示意圖)


一個包含連接請求的廣播事件,如下圖所示:(示意圖)


1.1.2?? Connectable Directed Event Type

可連接的定向廣播包為(ADV_DIRECT_IND PDU)。該類型允許一個“發(fā)起者”以連接請求包來回應(CONNECT_REQ PDU)該廣播包,“發(fā)起者”發(fā)送一個連接請求包要求LinkLayer(鏈接層)進入連接狀態(tài)。

可連接的定向廣播包(ADV_DIRECT_IND PDU)同時包含“發(fā)起者”設備地址和“廣播者”設備地址。只有符合該地址的“發(fā)起者”才可向“廣播者”發(fā)起一個連接請求(CONNECT_REQ PDU),也就是說當“發(fā)起者”收到該廣播包時,它會檢測是否和自己的地址一致,如果不一致就丟棄該包不做任何回應,如果是自己的地址,它會將它提交到Host層,由Host層來決定是否發(fā)起一個連接請求。

當“廣播者”發(fā)送一個廣播包(ADV_DIRECT_IND PDU)后,它將在同一信道上監(jiān)聽連接請求包(CONNECT_REQPDU)。任何掃描包將被忽略,也就是說不接受掃描請求。

如果“廣播者”收到一個包含它設備地址的連接請求包,并且該“發(fā)起者”就是廣播包的指定目標,那么Link Layer(鏈接層)將退出廣播狀態(tài)并轉移到連接狀態(tài),并且角色將由“廣播者”轉化為“從設備”。否則,“廣播者”將切換到下一個廣播信道發(fā)送下一個廣播包,或者關閉這個廣播事件。

在同一個廣播信道上的兩個相鄰廣播包的時間間隔小于等于3.75ms,可見該類型的廣播速度比可連接非定向廣播包(<=30ms)要快很多。

當進入廣播狀態(tài)后,Link Layer(鏈接層)會在1.28s內退出廣播狀態(tài)。

一個沒有連接請求(CONNECT_REQ PDU),含有5個廣播包(ADV_DIRECT_IND PDU)的兩個廣播事件序列圖,如下所示:

(示意圖)


應用場合:可連接的定向廣播類型用于期望快速建立連接的場合(如:重連)。

1.1.3?? Scannable Undirected Event Type

可掃描非定向廣播包(ADV_SCAN_IND PDU),允許一個“掃描者”回應一個掃描請求包(SAN_REQ PDU)來向“廣播者”獲取附加信息(SCAN_RSP)。

Link Layer(鏈接層)將在同一個信道上監(jiān)控來自掃描者的請求。

如果“廣播者”收到一個包含它的地址的掃描請求包(SCAN_REQ PDU),并且該“掃描者”的地址符合過濾策略(說白了就是該設備合法,不被“廣播者”的地址過濾策略過濾),那么“廣播者”將在同一廣播信道上回應一個數據包(SCAN_RSP PDU)。當SCAN_RSP PDU數據包發(fā)送完成后或SCAN_REQ被過濾策略阻止,那么“廣播者”將切換到下一個廣播信道發(fā)送下一個廣播包或關閉該廣播事件。

在一個廣播事件中的兩個相鄰廣播包(ADV_IND PDU)的時間間距小于等于10ms,廣播狀態(tài)將在advertising interval內完成狀態(tài)的關閉。

沒有掃描請求的包序列示意如下:(示意圖)


有掃描請求的包序列示意如下,其中一個掃描請求在中間,另一個掃描請求在末尾:(示意圖)


(示意圖)

1.1.4?? Non-connectable Undirected Event Type

不可連接非定向廣播包(ADV_NONCONNN_IND PDU),該廣播類型不接受任何請求包(包含:掃描請求和連接請求),“掃描者”可接收來自“廣播者”的廣播包。

在一個廣播事件中的兩個相鄰廣播包(ADV_IND PDU)的時間間距小于等于10ms,廣播狀態(tài)將在advertising interval內完成狀態(tài)的關閉。

廣播事件如下圖所示:(示意圖)

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)? ScanReponse Data

1.2.1?? Advertising interval

首先介紹一下Advertising interval(廣播時間間隔):在所有的非定向廣播事件中,兩個相鄰的廣播事件的時間間隔(T_advEvent)為:

T_AdvEvent = advInterval + advDelay

advInterval必須是0.625ms的整數倍,并且范圍在20ms-10.24s之間,對于“可掃描非定向廣播”和“不可連接非定向廣播”這兩種類型,該值應不小于100ms(即至少要160個0.625ms),對于“可連接的非定向廣播”該值可設置的范圍為20ms-10.24s。

advDelay是Link Layer(鏈接層)分配的一個偽隨機數,它的范圍為0-10ms。

廣播包的時間間隔示意圖如下:(示意圖)

參數Advertising_Interval_Min和Advertising_Interval_Max就是用于調整advertisinginterval的,它們通常是以0.625ms為單位的,這里設置一個上限值和下限值,目的是希望讓控制器根據其工作情況來動態(tài)調整合適的廣播包發(fā)送頻率,當然你也可以設置為同一個值。

Advertising_Interval_Min???? ???? ??????????????????????????????????????????????????????????????????????????? Size:2 Bytes

參數描述

N = 0xXXXX

非定向廣播包的最小廣播間隔。

范圍:0x0020-0x4000

默認值:N = 0x0800(1.28秒)

Time = N * 0.625ms

時間范圍:20ms-10.24s

?

Advertising_Interval_Max??? ???? ??????????????????????????????????????????????????????????????????????????? Size:2 Bytes

參數描述

N = 0xXXXX

非定向廣播包的最大廣播間隔。

范圍:0x0020-0x4000

默認值:N = 0x0800(1.28秒)

Time = N * 0.625ms

時間范圍:20ms-10.24s

1.2.2?? Advertising_Type

就是本章介紹的各種廣播類型。

Advertising_Type????? ????? ???????????????????????????????????????????????????????????????????????????????? Size:1 Bytes

參數描述

0x00

Connectable undirected advertising (ADV_IND)(default)

0x01

Connectable directed advertising (ADV_DIRECT_IND)

0x02

Scannable undirected advertising (ADV_SCAN_IND)

0x03

Non connectable undirected advertising (ADV_NONCONN_IND)

0x04 – 0xFF

Reserved for future use

?

廣播類型決定了回應包類型,下表列出各種類型下的掃描請求和連接請求的對照關系:

廣播類型

廣播包(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.3?? Own_Address_Type

Own_Address_Type? ????? ???????????????????????????????????????????????????????????????????????????????? Size:1 Bytes

參數描述

0x00

Public Device Address (default)

0x01

Random Device Address

0x02 – 0xFF

Reserved for future use

“廣播者”自身使用的設備地址類型。

設備地址類型:

Public Device Address:公有設備地址是設備所特有的并且是不可改變的,類似網絡設備的MAC地址,它的長度為48位。這個地址是從IEEE注冊當局獲取的,由2個部分組成:

Company_id部分:高地址部分由24位組成。

Company_assigned部分:低地址部分由24位組成。

LSB????? ???? ???????????????????????????????????????????????????????????????????????????????? ????????????????????MSB

Company_assigned (24位)

Company_id (24位)

?

Ramdom Device Address:隨機設備地址(私有設備地址),它也是48位

LSB????? ???? ???????????????????????????????????????????????????????????????????????????????? ????????????????????MSB

hash (24位)

random (24位)

1.2.4?? Direct_Address_Type,

定向目標的地址類型,同上。

1.2.5?? Direct_Address,

定向對象的設備地址(根據類型設置,可以是公有設備地址或私有設備地址)

1.2.6?? Advertising_Channel_Map

廣播信道的選擇

Advertising_Channel_Map?? ???? ??????????????????????????????????????????????????????????????????????????? Size:1 Bytes

參數描述

00000000b

保留

xxxxxxx1b

允許使用37信道

xxxxxx1xb

允許使用38信道

xxxxx1xxb

允許使用39信道

00000111b

Default (允許所有廣播信道)

1.2.7?? Advertising_Filter_Policy

“廣播者”過濾策略,對發(fā)來請求包設備采用的過濾策略設置:

Advertising_Filter_Policy?? ?????? ???????????????????????????????????????????????????????????????????????????????? Size:1 Bytes

參數描述

0x00

允許任何掃描請求,允許任何連接請求(default)

0x01

只允許來自白名單的掃描請求,允許任何連接請求

0x02

允許任何掃描請求,只允許來自白名單的連接請求

0x03

只允許來自白名單的掃描和連接請求

0x04 – 0xFF

保留

1.2.8?? Advertising Data

廣播包中攜帶的廣播數據,它的長度最多不超過31個字節(jié)(0-31),數據必須符合下面的格式要求:(可以有多個AD數據段,每個AD數據段由Length:Data組成,其中Length為1個字節(jié),Data的長度為Lenth,所有一個AD段的長度為Length+1)。廣播數據可以根據實際需要進行適時改變。(示意圖)

1.2.9?? Reponse Data

掃描請求回應的附加數據,它的長度最多不超過31個字節(jié)(0-31),數據包的格式同Advertising Data。

1.3??? 廣播流程(Undirected Advertising)

1.3.1?? 無定向廣播流程(Undirected Advertising)

一個藍牙設備進入廣播狀態(tài),通常流程如下:(示意圖)

1.3.2?? 定向廣播

(示意圖)

1.4??? TI CC254X下的實現

參數設置:

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 );


總結

以上是生活随笔為你收集整理的蓝牙4.0技术分析1-广播者角色的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。