說明:主要介紹兩個方面的內容,一個是電源管理,一個是bcsp。實際上就是兩個dll檔案,通過這兩個檔案來介紹開發mobile下藍牙堆疊的相關技術。
同時介紹一下bcsp和bccmd協議
推薦文檔: http://download.csdn.net/source/3461668
Bthpowermgr.dll
匯出函數
1、PowerOn
開啟電源,初始化硬體。
2、PowerOff
關閉電源,恢複硬體狀態。
包含的原始碼檔案
1、bth_powerMgr.cpp
主要實現了btReset();btConfigPin();btPowerOn();btPowerOff();這幾個函數,匯出的函數的實現就是通過這幾個函數來控制底層實現的。具體見流程圖。
2、generic_debug_zones.cxx
是用來調試驅動,輸出調試的資訊。檔案內部實現了DebugOutW();
DebugOutModuleW();DebugInitialize();DebugUninitialize();函數內部主要是通過使用臨界地區實現同步訪問共用地區,輸出調試資訊。
實現流程
1、Dll檔案調用整體
2、PowerOn實現流程
3、PowerOff實現流程
4、調試資訊說明
當系統建立進程調用此dll時,會調用generic_debug_zones.cxx檔案中的DebugOutW();DebugInitialize();函數,打出調試資訊,可以通過串口觀察;當系統銷毀進程的時候,會調用DebugUninitialize();來恢複相應參數的值。
Bcsp協議
簡介
Bcsp全名:BlueCore Serial Protocol。這個協議是用來通過高度可靠的串口串連傳輸資料流集的。設計這個協議棧是為了在藍芽主機和藍芽主機控制器之間進行資料轉送。這個協議也是為了支援HCI協議和其他協議。
Bcsp被用於CSR BlueCore 主機控制器,同時,CSR也提供了更多的硬體來支援協議棧的更多的功能。
語義
Bcsp被用來控制和安排藍芽主機和藍芽主機控制器之間的資訊流,如所示。協議棧在一個UART串連上承載著兩台主機之間雙向的資訊流互動。
Bcsp向上提供了兩種服務:一種是雙向可靠資料報服務,一種是雙向不可靠資料報服務。上層的協議也可以建立在這兩種資料報服務之上。
綜述
是bcsp的元素的綜述圖。下面就從下到上進行說明:
l UART驅動層初始化並控制本地的UART,將物理層串口串連的位元組流翻譯成基於SLIP層的位元組流給串連的主機。
l SLIP層用串口串連網路通訊協定將位元組流轉換為資料報流
l 完善資料報層確保從SLIP層接收的資料報是完整的
l MUX層將收到的資料報交給Sequecing層或者Datagram Queue層。MUX層也會用一個標識來表示最後成功收到資料報的時間
l Sequecing層利用視窗機制提供雙向可靠的資料報流的互動,上層會用協議的一個標識值將資料報交給下面。
l Datagram Queue層提供雙向不可靠的資料報流的互動,上層會用協議的一個標識值將資料報交給下面。
Bcmmd協議
簡介
命令直譯器協議(BlueCore Command),允許一個藍芽主機上的軟體實體監控藍芽晶片,因此,這個協議邏輯上是在HCI通道上的協議。雖然BCCMD協議是特定晶片命令和記錄資料的通道之一,但是這個協議有時候被稱為晶片的私密通道。這個協議一般是載在BCSP通道上的,雖然也可以選著其他的通道。
語義
1、標準語義
BCCMD協議允許一台主機監控自己的BlueCore晶片。下面的圖顯示了作為bcmgr(BlueCore manager)進程和晶片響應韌體bccmd(BlueCore commandinterpreter)進程的實體圖。
2、HCI 通道語義
最早的BlueCore晶片只通過BCSP串連自己的主機。後來的版本也允許用標準的USB和H4 HCI介面作為可選的BCSP。如果BCSP不備用,那麼標準的BCCMD語義就不起作用。
最直接的解決辦法是用指定經銷商的擴充的指令或者事件集將BCCMD傳給HCI。這種方法對通過USB、H4、BCSP和3串線口作為物理傳輸是有效。
3、晶片命令緩衝區語義
BlueCore晶片的串口外圍裝置介面(SPI)可以給予主機直接的訪問處理器的權利。
一種訪問bccmd的方法是允許主機直接寫命令給記憶體緩衝區,並且觸發這個命令。協議的本質是允許只用一個記憶體緩衝區同時為命令和響應服務。
這種語義的主要價值是用來開發調試,也就使得變bcmgr將成為系統配置或者調試的工具之一。
Bthbcsp.dll
匯出函數
1、HCI_ReadHciParameters
讀取HCI相關變數參數值
2、HCI_StartHardware
開啟硬體並檢測是否存在藍牙裝置
3、HCI_StopHardware
關閉硬體並檢測是否有藍牙裝置串連
4、HCI_SetCallback
回呼函數,用於檢測藍牙裝置
5、HCI_OpenConnection
開啟串連,初始化硬體
6、HCI_CloseConnection
關閉串連,恢複硬體參數
7、HCI_ReadPacket
讀取資料包
8、HCI_WritePacket
寫資料包
9、BCS_Init
返回一個初始化的控制代碼
10、 BCS_Deinit 空介面
11、 BCS_Open 返回一個控制代碼
12、 BCS_Close 返回一個控制代碼
13-16空介面
13、 BCS_Read
14、 BCS_Write
15、 BCS_PowerUp
16、 BCS_PowerDown
17、 BCS_IOControl
根據相應的參數執行相應的操作(複位、擷取pskey等)
包含的原始碼檔案
1、hci_bcsp.cpp
主要是實現以HCI開頭的匯出的函數
2、hci_bcsp_driver.cpp
主要是實現以BCS開頭的匯出的函數,其他提供介面,只是實現了BCS_IOControl函數和一些進行初始化的函數
3、hci_bccmd.cxx
處理命令的相關函數
4、hci_sniffer.cpp
主要是實現檔案的初始化,寫和檔案的關閉
5、generic_debug_zones.cxx
是用來調試驅動,輸出調試的資訊。檔案內部實現了DebugOutW();
DebugOutModuleW();DebugInitialize();DebugUninitialize();函數內部主要是通過使用臨界地區實現同步訪問共用地區,輸出調試資訊。
實現流程
1、整體流程
2、讀線程
3、寫線程
總結
本文簡單地介紹了CSR_BlueTooth_Driver的實現流程以及其中用到的bcsp協議。具體細節可以參看已經注釋好的原始碼和bcsp協議文檔。