BLE鏈路層狀態機初探


狀態機


BLE鏈路層把所有的功能放到五種不同的狀態中,在不同的狀態分別執行不同的功能。

一般來說,BLE設備大致有這么幾種狀態:空閑,廣播,掃描,發起連接和連接成功。

廣播和掃描是相對應的,一個設備廣播,另一個設備掃描,廣播的設備就會被掃描的設備發現

當設備通過掃描成功發現目標設備后,就會發起連接請求,連接成功之后就進入到已連接的狀態

這其中的“空閑,廣播,掃描,發起連接和連接成功”分別對應鏈路層的 就緒態,廣播態,掃描態,發起態和連接態

下面分別來介紹着五種狀態:

  • 就緒態
  • 廣播態
  • 掃描態
  • 發起態
  • 連接態

就緒態

就緒態,就是鏈路層上電之后,進入並保持的狀態。其實可以理解為空閑狀態。

就緒態的鏈路層什么也不干,既不廣播,也不掃描,既不發起連接,也不處於連接狀態。

但是,一旦鏈路層接收到應用層指令,比如,廣播,掃描或發起連接之類的,那么設備就會進入到相應的狀態。

一旦設備空閑下來,則又會進入就緒態

廣播態

廣播態的功能,就是讓周圍設備能夠發現自己。

處於廣播態的鏈路層會發送廣播報文,該報文會被周圍設備搜索並解析出來,廣播報文的內容包括了設備是否可被連接,設備的名字,設備的地址,設備提供的服務及其他相關信息。收到廣播報文的設備可以發送回應報文,廣播態的鏈路層還可以監聽這種回應報文,並作出響應

掃描態

掃描態的主要功能,就是發現周圍的設備。掃描過程可以分為主動掃描和被動掃描。

被動掃描,就是監聽(廣播)信道,並且不會向周圍發送任何報文,周圍設備發送的非定向廣播報文都可以被接收到。非定向報文是指,沒有指定報文接收地址的報文。

主動掃描,就是主動發出掃描請求的報文,處於廣播狀態的鏈路層會監聽這種報文,並且對方收到報文后會發出回應報文,這種回應報文是定向報文,只能被發出掃描請求的設備接收並解析出來。

打個不太恰當的比方,假如在一個月黑風高的晚上,你進入到一所黑乎乎的大房子里,由於沒有燈光,一開始你並不知道房子里面有沒有人,或者有幾個人,為了知道房間有沒有人,現在你有兩種方式:

  • 你不發出任何聲音,通過聽覺去辨別周圍環境中有沒有人聲,有幾個人聲,這就是被動掃描
  • 現在你也可以吼一嗓子:“有人嗎?”,看看周圍有沒有人給你回應,這就是主動掃描

發起態

發起態,是准備發起連接到連接完成前的一段狀態,它的功能是完成連接所需要的所有過程。

再借用上面的例子打比方:

通過主動掃描和被動掃描這兩種方式,你終於在黑乎乎的大房子里找到了闊別已久的老朋友,於是你跟他打招呼,並准備握手,這就是發起態

連接態

連接態,顧名思義就是設備連接建立完成之后的狀態,從應用層的角度來看,兩個設備已經成功建立了物理連接,並且可以交互用戶數據了。

狀態的切換


從任何其他狀態都可以直接進入到就緒態

就緒態 -> 掃描態

當鏈路層接收到應用層掃描周圍設備的指令后,進入到掃描態,好比說,鏈路層進入“discovery”模式,用被動或者主動的方式對周圍的小伙伴說“有人么?周圍有人么?”

就緒態 -> 廣播態

當鏈路層接收到應用層指令后,進入到廣播態,此時鏈路層仿佛拿着個大喇叭對着周圍的小伙伴呼喊:“我在這,我在這了,快來發現我吧”,態度非常高調

就緒態 -> 發起態

存在兩種從就緒態進入發起態的情形:

  • 設備一開始在掃描態,並通過掃描周圍設備發現了想要連接的目標設備,但是鏈路層並不能直接從掃描態進入到發起態。因此,設備先進入就緒態,再進入到發起態

  • 設備一開始就在就緒態,因為上一次跟某個設備成功建立過連接,現在鏈路層還保留着那個設備的相關信息。所以不需要再走掃描設備的流程,可以直接利用保存的目標設備的信息,直接對其發起連接,因此可以直接從就緒態進入發起態

廣播態 -> 連接態

鏈路層發出的廣播報文被周圍設備掃描到,並且對方設備向自己發起連接請求,連接成功之后,處於廣播態的鏈路層就進入到了連接態,從此之后大家就是好朋友,可以相互交流感情了

發起態 -> 連接態

無論是通過主動掃描還是被動掃描,抑或是之前就保存了對方設備的相關信息,處於發起態的鏈路層已經掌握了足夠的信息,可以向對方發起連接請求了,經過一番握手之后,大家都進入到連接態了,大家就是好buddy了

連接態 -> 就緒態

可能由於某種原因,可能出於自己或者是對方設備的原因,抑或是距離的原因(異地戀你懂的),大家不想做好朋友了,可能是自己或者對方設備發出了斷開連接的請求,抑或是超出一定距離,由於藍牙信號弱,不得不斷開連接。總之就是由於種種主觀的或客觀的原因,連接被斷開了,鏈路層從連接態進入到了就緒態

就緒態無法直接到連接態

就緒態為什么不能直接跨入到連接態了,因為連接需要一個過程,就好比是談戀愛一樣,總得需要一個過程才能相互確認那女朋友的關系,如果忽略這個過程,直接霸王硬上弓,那是不道德的。因此,對於廣播者來說,是從廣播態進入到連接態,對於發起者來說,是從發起態進入到連接態。這就好比,畢竟男女有別,大家進入戀愛的方式和體驗都是不一樣的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM