第06節-開源藍牙協議BTStack框架分析


本篇博客根據韋東山的視頻,整理所得。

本篇博客講解BTStack的框架,首先來看一下硬件的結構:

 

 

 

 藍牙模塊接在電腦上,或是接在開發板上。不論接在哪,我們都需要編寫程序來控制這個藍牙模塊。

1. 我們需要發送數據給藍牙模塊

   需要發送命令給藍牙模塊,比如讓它發出無線信號去掃描、識別、連接、讀寫附近的藍牙設備

2. 需要從藍牙模塊獲得數據

3. 需要處理獲得的數據

上述3步驟可以簡化為一個循環

1.讀取數據:可以讀取用戶輸入的指示,也可以讀取藍牙模塊的數據

2.處理數據:根據用戶的指示發送數據給藍牙模塊,或處理從藍牙模塊讀到的數據

要點是:硬件操作、循環、處理

 

 

這個循環就是程序的核心,BTStack最重要的東西就在那個循環里面。

BTStack支持多種操作系統,比如說它支持widows,linux。它支持多種接口的藍牙模塊,比如說usb口、比如說串口。

無論怎樣,在程序中應該有一個循環,在windows系統中,它利用的是btstack_run_loop_windows.c來實現了一個循環,在循環內部它去等待讀取硬件數據,得到數據后再進行處理。

 

 

 

 

對於linux操作系統,它在btstack_run_loop_posix.c中是實現了一個循環,在循環內部它去等待讀取硬件數據,得到數據后再進行處理。

 

 

 BTStack支持多OS,多接口硬件
1)操作硬件
2)循環
  a. 接收(涉及硬件操作。因為它支持多接口的硬件,顯然在循環之前必須要打開硬件)
  b. 處理
在循環建立之前,有個main.c,main.c中有個main函數。這個main函數處於不同的文件里面(不同的硬件接口以及操作系統,main.c所處的文件都是不同的。可以從上面的幾幅圖可以看出來)。不同文件中的main.c中的main函數回去操作不同的硬件。然后再去創建一個循環。
操作硬件以及創建循環所涉及的源文件如下:

 

 在循環中最重要的一步就是處理,處理才是關鍵,那么如何處理呢?

 

 要發送數據時,通過HCI這一層把數據發送給藍牙模塊,接收數據時也是通過HCI這一層從藍牙模塊里面獲取數據。接收到數據之后要進行處理,在HCI這一層可以進行處理。在L2CAP層可以處理自己感興趣的數據。同樣,上面的各個層都可以處理自己感興趣的數據,因此都可以提供處理數據的函數。最上面的APP也可以提供處理函數。

在循環里面,從藍牙模塊里面獲取數據,然后依次調用各個層次提供的處理函數,在這些處理函數里面它會分辨那些數據,如果對數據感興趣就去處理,不感興趣就不管。

總結:

最重要的就是對數據的處理,這分為2部分:

1. 藍牙協議棧各層處數據的處理

 比如說向藍牙模塊發送什么命令,它返回什么數據,這是由藍牙協議規定的。

2. APP對數據的處理

藍牙協議棧各層、APP,提供自己的處理函數,在循環體里獲得數據后,將依次調用這些處理函數。各個處理函數自行解析數據,如果感興趣就處理,不感興趣就直接返回。

在不同的操作系統、不同接口的藍牙模塊見上面的圖,所涉及的源文件:

操作系統相關的代碼

不同接口相關的代碼

藍牙協議棧相關的代碼

APP相關的代碼

對於不同的操作系統、不同的硬件接口,main函數來自不同的文件:

1.main函數會調用操作系統相關的代碼(下圖中的①)、硬件接口相關的代碼(下圖中的②),進行初始化。

2.然后調用btstack_main函數:不同的APP提供自己的btstack_main函數

 


免責聲明!

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



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