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的格式如下:

  • HANDSHAKE

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

Parameter部分定义如下:

  • HID_CONTROL

控制Bluetooth HID Device改变状态

Parameter部分定义如下:

  • GET_REPORT

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

Parameter部分定义如下:

  • SET_REPORT

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

格式如下:

  • GET_PROTOCOL

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

GET_PROTOCOL Data Definition格式如下:

  • SET_PROTOCOL

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

DATA

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

 Transfers

以HID Protocol message的形式传输。

  • Control Channel Transfers

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

  • Interrupt Channel Transfers

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

其余各层对于HID的要求

HID与L2CAP的交互如下:

参考文献

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

ESP32学习笔记之蓝牙HID相关推荐

  1. 关于esp32蓝牙模块的使用——esp32学习笔记

    关于esp32蓝牙模块的使用--esp32学习笔记 关于esp32蓝牙模块的使用--esp32学习笔记 关于esp32蓝牙模块的使用--esp32学习笔记 零.前言 一.经典蓝牙BT 二.低功耗蓝牙B ...

  2. ESP32学习笔记(27)——BLE GAP主机端扫描

    一.背景 1.1 低功耗蓝牙(BLE)协议栈 链路层(LL) 控制设备的射频状态,有五个设备状态:待机.广播.扫描.初始化和连接. 广播 为广播数据包,而 扫描 则是监听广播. GAP通信中角色,中心 ...

  3. ESP32学习笔记(一) 芯片型号介绍

    ESP32学习笔记(一) 芯片型号介绍 目录: ESP32学习笔记(一) 芯片型号介绍 ESP32学习笔记(二) 开发环境搭建 VSCode+platformio ESP32学习笔记(三) 硬件资源介 ...

  4. ESP32学习笔记(30)——BLE GATT服务端自定义服务和特征

    一.简介 1.1 低功耗蓝牙(BLE)协议栈 链路层(LL) 控制设备的射频状态,有五个设备状态:待机.广播.扫描.初始化和连接. 广播 为广播数据包,而 扫描 则是监听广播. GAP通信中角色,中心 ...

  5. ESP32学习笔记(1)——搭建环境、编译烧写(Windows+VS Code)

    Espressif-IDE 环境搭建参看 ESP32学习笔记(50)--搭建环境.编译烧写(Windows+Espressif-IDE) 一.搭建环境 1.1 官方资料 ESP-IDF 编程指南 1. ...

  6. ESP32学习笔记(七) 复位和时钟

    ESP32学习笔记(七) 复位和时钟 目录: ESP32学习笔记(一) 芯片型号介绍 ESP32学习笔记(二) 开发环境搭建 VSCode+platformio ESP32学习笔记(三) 硬件资源介绍 ...

  7. ESP32学习笔记(49)——RFID RC522使用

    一.简介 MF RC522 是应用于 13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员.是 NXP 公司针对"三表"应用推出的一款低电压.低成本.体积小的非接触式读写 ...

  8. ESP32学习笔记(20)——SPI(从机)接口使用

    一.SPI简介 SPI(Serial Peripheral Interface) 协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线.它被广泛地使用在 ADC.LCD ...

  9. ESP32学习笔记(19)——SPI(主机)接口使用

    一.SPI简介 SPI(Serial Peripheral Interface) 协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线.它被广泛地使用在 ADC.LCD ...

最新文章

  1. java当前月份减一个月_在java编程中怎样用%表示当前月份的上一个月和下一个月...
  2. 【ABAP】Native SQL
  3. 怎么在服务器中修改sql权限设置密码,SQL server数据库的权限设置
  4. D. Anton and Chess 模拟题 + 读题
  5. 如何为VMware创建的虚拟PC机安装Linux操作系统
  6. Android高手进阶:Adapter深入理解与优化
  7. XMLHttpRequest 学习(二)——封装一个ajax
  8. CCNA学习指南记录
  9. php ksc歌词,KSC字幕制作方法 KSC歌词编辑教程
  10. Cloudera Manager5.15.0安装教程,每步附图,超详细
  11. 转载:一字千金 句句受用
  12. 阿里云服务器从购买到配置全攻略
  13. Excel 常用技巧目录
  14. Google地图删除marker标点
  15. DevExpress之XtraReport 学习笔记
  16. element导航菜单添加搜索功能
  17. java jcmd,JVM工具_jcmd
  18. word打开文件出错怎么办?
  19. 手机PDF如何转成PPT?操作方法如何?
  20. 地方性自媒体如何运营?微信公众号可以做地方性自媒体吗?

热门文章

  1. 【逗老师带你学IT】PRTG自定义脚本获取H3C Loadbalance负载均衡链路状态
  2. 中华万年历大数据平台演进
  3. Linux 从零开始学习笔记
  4. 科研 | Link16数据链——信息化战争的神经中枢
  5. Redis如何实现分布式锁延时队列以及限流应用丨Redis源码原理|跳表|B+树|分布式锁|中间件|主从同步|存储原理
  6. perf-网络协议栈性能分析
  7. RxJava常用的操作
  8. Java购物车前端代码_java web实现购物车功能的java购物车代码示例代码
  9. 精密压接之曲柄连杆模型计算(含MATLAB仿真+博途SCL源代码)
  10. c语言中printf%12d,C语言系列之printf和%12d的用法(三)