主要介紹下藍牙協議棧(bluetooth stack)傳統藍牙音頻協議之藍牙人機接口設備協議(HID)概念介紹
HID協議有很多應用,比如藍牙鼠標,鍵盤,手柄,自拍桿等都會用到HID協議!
?
本專欄文章我們會以連載的方式持續更新,本專欄計劃更新內容如下:

第一篇:藍牙綜合介紹 ,主要介紹藍牙的一些概念,產生背景,發展軌跡,市面藍牙介紹,以及藍牙開發板介紹。
第二篇:Transport層介紹,主要介紹藍牙協議棧跟藍牙芯片之前的硬件傳輸協議,比如基于UART的H4,H5,BCSP,基于USB的H2等
第三篇:傳統藍牙controller介紹,主要介紹傳統藍牙芯片的介紹,包括射頻層(RF),基帶層(baseband),鏈路管理層(LMP)等
第四篇:傳統藍牙host介紹,主要介紹傳統藍牙的協議棧,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的協議吧。
第五篇:低功耗藍牙controller介紹,主要介紹低功耗藍牙芯片,包括物理層(PHY),鏈路層(LL)
第六篇:低功耗藍牙host介紹,低功耗藍牙協議棧的介紹,包括HCI,L2CAP,ATT,GATT,SM等
第七篇:藍牙芯片介紹,主要介紹一些藍牙芯片的初始化流程,基于HCI vendor command的擴展
第八篇:附錄,主要介紹以上常用名詞的介紹以及一些特殊流程的介紹等。
另外,開發板如下所示,對于想學習藍牙協議棧的最好人手一套。以便更好的學習藍牙協議棧,相信我,學完這一套視頻你將擁有修改任何協議棧的能力(比如Linux下的bluez,Android下的bluedroid)。

-------------------------------------------------------------------------------------------------------------------------
CSDN學院鏈接(進入選擇你想要學習的課程):
藍牙交流扣扣群:970324688
Github代碼:
入手開發板:
藍牙學習目錄:
--------------------------------------------------------------------------------------------------------------------------
The Human Interface Device (HID)定義了藍牙在人機接口設備中的協議、特征和使用規程。該協議改編自USB HID Protocol。
A Bluetooth HID device?is a device providing the service of human or other data input and output to and from a Bluetooth HID Host. Examples of Bluetooth HID devices are keyboards, mice, joysticks, gamepads, remote controls, and also voltmeters and temperature sensors.
A Bluetooth HID Host?is a device using or requesting the services of a Bluetooth HID device. Examples would be a personal computer, handheld computer, gaming console, industrial machine, or data-recording device.
簡單解釋下角色,bluetooth HID分為host/device兩個覺得,拿一個鼠標跟電腦(或者插在電腦的dongle)舉例,藍牙鼠標就是hid device角色,電腦(或者插在電腦的dongle)就是hid host覺得,同樣的游戲主機跟游戲手柄,那么游戲手柄是hid device角色,游戲主機是hid host角色。
藍牙HID report分為三種:
1) Input report:從hid device發送給hid host的封包
2) Output report:從hid host發送給hid device的封包
可以看出以上兩種封包的input/output的方向都是就hid host而言的,而且要求低時延
3) Feature report:特性封包,是雙向的
HID有兩條邏輯鏈路:
1) HID Control:這個通道主要用于傳輸控制封包,在這個通道傳輸的封包稱為同步封包(synchronous reports),L2CAP的psm為0x0011
2) HID Interrupt:在這個通道傳輸的封包不需要確認,所以稱為異步封包(asynchronous reports),L2CAP的psm為0x0013
HID的封包格式header field只有一個byte,4bit的message type,4bit的parameter格式如下:

其中message type如下:

其中灰色部分為舍棄掉了,以后不再使用,所以我們代碼中定義如下:
這個消息是只能從hid device的control channel發出,用于回復以下封包
1)SET_REPORT, SET_IDLE and SET_PROTOCOL requests
2)GET_REPORT, GET_PROTOCOL and GET_IDLE requests if an error is detected in
the parameters of the initial request
3)a request with an unsupported message type
具體的header參數如下:

這個是HID control封包,格式如下:

其中NOP/HARD RESET/SOFT RESET被舍棄了,不再使用,我們來介紹下SUSPEND/EXIT SUSPEND/VITUAL_CABLE_UNPLUG
1) SUSPEND/EXIT SUSPEND
這個是hid host發送給hid device進入省電模式/退出省電模式的命令,比如hid host發送給hid mouse發送SUSPEND的時候,mouse關閉LED等進入省電模式
或者hid host發送給hid keyboard SUSPEND的時候,keyboard降低掃描按鍵的頻率
2)VITUAL_CABLE_UNPLUG
這個命令是雙向命令,hid host可以發送給hid device,同樣hid device也可以發送給hid host,收到后斷開連線
這個封包是hid host發送給hid device的消息。hid device接受到這個封包后,需要在control通道上回復包含requeset信息的DATA type封包


這個封包是hid host發送給hid device的消息。

用來獲取Bluetooth HID device的Protocol Mode,然后Bluetooth HID device response一個DATA payload說明當前的Protocol Mode。


