ESP32学习笔记之蓝牙HID

The Human Interface Device(HID)定义了蓝牙在人机接口设备中的协议、特征和使用规程。

典型的应用包括:蓝牙鼠标、蓝牙键盘、蓝牙游戏手柄等;该协议改编自USB HID Protocol。

蓝牙4.0以上的HID是基于HID-over-GATT,如果蓝牙IC支持GATT,那么就可以通过修改固件来实现作为蓝牙HID设备。

蓝牙HID的一些概念

  • HID Reports:Bluetooth HID devices支持三种Report:Input,Output,and Feature
  • HID建立Control Channel和Interrupt Channel两个通道,report可以在这两条channel上传输,在Control channel上传输的report称为synchronous reports;在Interrupt channel上传输的report称为asynchronous reports
  • Feature Protocol总是通过通过同步的方式使用GET_REPORT和SET_REPORT的请求
  • Report Protocol Mode和Boot Protocol Mode。Bluetooth HID Hosts至少支持一种,Bluetooth HID Device则需要支持Report Protocol Mode,并且Report Protocol Mode是Bluetooth HID Device的默认Mode。 

Bluetooth HID Protocol Messages

消息的长度不能超过L2CAP的MTU,大小超过MTU的message将被忽略。

Message Header的格式如下:

ESP32学习笔记之蓝牙HID_第1张图片

ESP32学习笔记之蓝牙HID_第2张图片

  • HANDSHAKE

该Message用来acknowledge应答SET_REPORT,SET_IDLE and  SET_PROTOCOL等request。只在Control Channel上传输,只由Bluetooth HID device。

Parameter部分定义如下:

ESP32学习笔记之蓝牙HID_第3张图片

  • HID_CONTROL

控制Bluetooth HID Device改变状态

 Parameter部分定义如下:

ESP32学习笔记之蓝牙HID_第4张图片

  • GET_REPORT

Bluetooth HID Host用来请求Bluetooth HID device的传输

Parameter部分定义如下:

ESP32学习笔记之蓝牙HID_第5张图片

  • SET_REPORT

Bluetooth HID Host用来向Bluetooth HID device发起传输。

格式如下:

ESP32学习笔记之蓝牙HID_第6张图片

  •  GET_PROTOCOL

用来获取Bluetooth HID device的Protocol Mode,然后Bluetooth HID device response一个DATA payload说明当前的Protocol Mode,格式如下:

ESP32学习笔记之蓝牙HID_第7张图片

GET_PROTOCOL Data Definition格式如下: 

ESP32学习笔记之蓝牙HID_第8张图片

  • SET_PROTOCOL

用来设置Bluetooth HID device的Bluetooth HID device。格式如下:

 ESP32学习笔记之蓝牙HID_第9张图片ESP32学习笔记之蓝牙HID_第10张图片

DATA

代表一个HID payload。格式如下:

 ESP32学习笔记之蓝牙HID_第11张图片ESP32学习笔记之蓝牙HID_第12张图片

 Transfers

以HID Protocol message的形式传输。

  • Control Channel Transfers

分为Acknowledged和Unacknowledged两种,格式如下:

ESP32学习笔记之蓝牙HID_第13张图片

  • Interrupt Channel Transfers

 Interrupt IN和Interrupt OUT两种,可以在任意时刻发送。【中断嘛】

其余各层对于HID的要求

HID与L2CAP的交互如下:

ESP32学习笔记之蓝牙HID_第14张图片

参考文献

https://www.cnblogs.com/senior-engineer/p/9842251.html

你可能感兴趣的:(ESP32学习笔记之蓝牙HID)