藍芽HCI驅動學習筆記

來源:互聯網
上載者:User
  資料結構1、HCI_EVENT

表示藍芽控制器硬體的狀態。

enum HCI_EVENT {

  DEVICE_UP,           裝置開啟

  DEVICE_DOWN,                  裝置關閉

  DEVICE_ERROR                  裝置出現錯誤

};

標頭檔:bt_hcip.h

2、HCI_TYPE

表示資料包的類型

enum HCI_TYPE {
  COMMAND_PACKET = 1,           命令包
  DATA_PACKET_ACL = 2,          存取控制清單資料
  DATA_PACKET_SCO = 3,          連線導向同步資料
  EVENT_PACKET = 4,             事件
  ETYPE_FINISH = 5              包的結束標誌
};

標頭檔:bt_hcip.h

3、HCI_PARAMETERS

表示HCI傳輸的介面

typedef struct __hci_parameters {
  unsigned int uiSize;
  unsigned int fInterfaceVersion;       傳輸層驅動的版本號碼
  int iMaxSizeRead;                     緩衝區大小,不包含頭和尾
  int iMaxSizeWrite;
  int iReadBufferHeader;                預設值
  int iReadBufferTrailer;               
  int iWriteBufferHeader;               0到start間的位元組數
  int iWriteBufferTrailer;              end到size間的位元組數
  int uiFlags;                                   取非有效,否則無效
  int fHardwareVersion;                 0/1/2
  unsigned int uiResetDelay;            reset命令發出到下一命令執行之前的時間間隔
  unsigned int uiWriteTimeout;          寫逾時時間
  unsigned int uiDriftFactor;           時間
  int iScoWriteLowNumPackets;           0
  int iScoWriteNumPackets;              0
  int iScoWritePacketSize;              0/-1
  int iScoSampleSize;                   8/16
} HCI_PARAMETERS;               

標頭檔:bt_hcip.h

 
 API函數1、HCI_CloseConnection
void HCI_CloseConnection(void);

功能:關閉棧和HCI傳輸之間的串連

注意:調用這個函數將會解鎖讀和寫,硬體未初始化,釋放所有資源空間包括緩衝區。如果驅動在DLL中,當函數返回時會被卸載。

2、HCI_OpenConnection(void);
int HCI_OpenConnection(void);

功能:在棧中的HCI層和藍芽硬體建立串連,返回成功代表傳輸啟動,這種情況發生時,棧會調用HCI_ReadHciParamerters函數。

注意:這個函數是用來開啟硬體,初始化硬體,和硬體建立串連。返回true代表成功建立串連。這是個阻塞函數

3、HCI_ReadHciParameters
int HCI_ReadHciParameters(
  HCI_PARAMETERS* pParms
);
功能:擷取藍芽控制器的硬體特徵,返回true表示成功完成,false表示發生錯誤。如果返回false,棧介面立即調用HCI_CloseConnection。
注意:這個函數可以先於開啟一個串連被調用。
4、HCI_ReadPacket
int HCI_ReadPacket(
  HCI_TYPE* peType, 
  BD_BUFFER* pInBuffer
);
功能:從串連的裝置上讀包,返回true表示成功完成,false表示發生錯誤。如果返回false,棧介面立即調用HCI_CloseConnection。
注意:只有包被讀或者發生錯誤才會返回,讀的時候函數被阻塞,如果錯誤發生,藍芽協議棧將會關閉。這個函數必須解鎖並返回錯誤在調用HCI_CloseConnection後。
5、HCI_WritePacket
int HCI_WritePacket(
  HCI_TYPE eType, 
  BD_BUFFER* pOutBuffer
);
功能:向串連的裝置發送包,返回true表示成功完成,false表示發生錯誤。如果返回false,棧介面立即調用HCI_CloseConnection。
注意:這個函數要申請一個空的緩衝區為包頭和包尾預留足夠的空間,這個空間是HCI_ReadHciParameters中要求的。發送的時候函數被阻塞,如果錯誤發生,藍芽協議棧將會關閉。這個函數必須解鎖並返回錯誤在調用HCI_CloseConnection後。

6、HCI_StartHardware

int HCI_StartHardware(void);

功能:初始化藍芽硬體

注意:為了確保硬體開啟,藍芽棧可以調用此函數。驅動可能會重新嘗試初始化硬體。這個函數必須調用回呼函數HCI_TransportCallback來確認裝置開啟狀態並且解除臨時標誌標識硬體能用性。

7、HCI_StopHardware
int HCI_StopHardware(void);

功能:釋放藍芽硬體

注意:這個函數被調用是用來解除存在的硬體串連,並且暫時地不提示硬體裝置的到來。這個函數必須調用回呼函數HCI_TransportCallback來確認裝置關閉狀態並且直到HCI_StartHardware被調用豎起臨時標誌標識硬體能用性。

8、HCI_SetCallback
typedef int (*HCI_TransportCallback)(HCI_EVENT eEvent, void* pEvent);
  int HCI_SetCallback(
  HCI_TransportCallback pfCallback
);
功能:擷取HCI參數
注意:如果pfCallback是空,驅動必須準備卸載。這個函數只有棧當前的串連被關閉的時候才被調用並且設定pfCallback為空白。如果這個參數不為空白,就代表有硬體插入或者拔出。如果檢測到硬體的插入或者拔出,傳輸層就會調用此函數為上層提供服務。
 

          標頭檔:bt_hcip.h

        包:Btd.lib

 

藍芽傳輸管理器首先搜尋pnp裝置,像:pcmcia,usb等。如果沒有發現pnp裝置,它會搜尋註冊表中已有的裝置。

  預設寄存器設定

HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\Transports BuiltIn\1 這個註冊鍵指示了內建的傳輸驅動的設定,1代表優先順序

HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\Transports\PnP\<GUID>這個指出pnp傳輸驅動的設定

guid鍵代表了傳輸驅動IClass註冊索引值。這個值是BthUniv關於傳輸的寄存器的設定。在開啟一個裝置串連前,這些設定將會被拷貝到HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\HCI目錄下。

如果通過設定合適的編譯變數來指定傳輸驅動,如SYSGEN_BTH_USB_ONLY,那麼在os設計中,BthUniv就用不到了。在這種情況下,那個合適的傳輸驅動的註冊器設定將會自動地拷貝到HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\HCI。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.