主要介绍下蓝牙协议栈(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。