零. 概述

主要介绍下蓝牙协议栈(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学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://shop220811498.taobao.com/category-1542116976.htm?spm=a1z10.5-c-s.w4010-22329603913.7.39ca7dbe2EA0K3&search=y&catName=%C0%B6%D1%C0%BF%AA%B7%A2%B0%E5#bd

蓝牙学习目录:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

--------------------------------------------------------------------------------------------------------------------------

二. HID概念

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

1. HID角色

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角色。

2. HID report

蓝牙HID report分为三种:

1) Input report:从hid device发送给hid host的封包

2) Output report:从hid host发送给hid device的封包

可以看出以上两种封包的input/output的方向都是就hid host而言的,而且要求低时延

3) Feature report:特性封包,是双向的

3. HID逻辑链路

HID有两条逻辑链路:

1) HID Control:这个通道主要用于传输控制封包,在这个通道传输的封包称为同步封包(synchronous reports),L2CAP的psm为0x0011

2) HID Interrupt:在这个通道传输的封包不需要确认,所以称为异步封包(asynchronous reports),L2CAP的psm为0x0013

三. HID封包格式命令介绍

HID的封包格式header field只有一个byte,4bit的message type,4bit的parameter格式如下:

其中message type如下:

其中灰色部分为舍弃掉了,以后不再使用,所以我们代码中定义如下:

1. HANDSHAKE封包

这个消息是只能从hid devicecontrol 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参数如下:

2. HID_CONTROL封包

这个是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,收到后断开连线

3 .GET_REPORT封包

这个封包是hid host发送给hid device的消息。hid device接受到这个封包后,需要在control通道上回复包含requeset信息的DATA type封包

4. SET_REPORT封包

这个封包是hid host发送给hid device的消息。

5. GET_PROTOCOL封包

用来获取Bluetooth HID device的Protocol Mode,然后Bluetooth HID device response一个DATA payload说明当前的Protocol Mode。

6. SET_PROTOCOL封包

7. DATA封包

蓝牙人机接口设备协议(HID)概念以及封包格式介绍相关推荐

  1. 传统蓝牙服务问询协议SDP概念

    零.概述 本文主要介绍传统蓝牙SDP的概念,SDP在整个协议栈中的架构,SDP的UUID,服务类,以及服务类属性介绍. 服务发现协议(SDP)为应用程序提供了一种方法来发现哪些服务可用,并确定这些可用 ...

  2. 蓝牙音频协议双剑客(一)--音视频频分布传输协议(AVDTP)概念

    零. 概述 主要介绍下蓝牙协议栈(bluetooth stack)传统蓝牙音频协议之 音视频分布传输协议的概念,包含AVDTP概念,AVDTP组件,AVDTP传输服务,AVDTP的属于介绍. 一. 声 ...

  3. 人机接口设备攻击(HID Attack)

    人机接口设备攻击(HID Attack) HID Attack是最近几年流行的一类攻击方式.HID是Human Interface Device的缩写,意思是人机接口设备.它是对鼠标.键盘.游戏手柄这 ...

  4. 蓝牙音频双剑客(二)--高质量音频分布协议(A2DP) 概念介绍

    零. 概述 主要介绍下蓝牙协议栈(bluetooth stack)传统蓝牙音频协议之高质量音频分布协议(A2DP) 概念介绍,包括在协议栈中的架构,角色以及Source到Sink的发送Audio流程 ...

  5. 传统蓝牙RFCOMM协议(Bluetooth rfcomm)流程介绍

    零. 概述 本文章主要讲下蓝牙协议栈RFCOMM协议部分流控介绍 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景, ...

  6. 人机交互设备(HID)

    人机交互设备(HID)是一个设备类型,为了使用通用USB接口支持HID设备来代替PS/2接口类型的设备,例如键盘.鼠标和游戏控制器等等. 在 HID 之前,设备只能使用规定好的鼠标或键盘协议.硬件创新 ...

  7. 【转载】传统蓝牙协议栈 串口协议SPP

    零. 概述 主要介绍下蓝牙协议栈(bluetooth stack) 串口协议(bluetooth SPP)Serial Port Profile 协议概念介绍. 一. 声明 本专栏文章我们会以连载的方 ...

  8. Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络 Ⅰ—— 基础概念

    文章目录 背景 术语 Managed Flooding Models Scenes 架构 Node Features 中继节点 代理节点 友元节点和低功耗节点 示例 BLE Mesh Networki ...

  9. aac蓝牙编解码协议_蓝牙音频编码哪个音质好?今天我们来逐一解读

    家有影院致力于帮助渴望学习.热爱电影.希望通过自己双手搭建出适合自己的家庭影院的朋友.如果你是这样的人,我们和500位同样热爱家庭影院的伙伴愿意一起帮助你实现梦想.同时,我们还能帮助你找到价格优惠的靠 ...

最新文章

  1. rest_framework09:自动生成接口文档(简略)
  2. 一个不错的讲解flex 3中自定义事件的文章
  3. JavaWeb笔记:CSS总结
  4. multism中ui和uo应该怎么表示_Excel中VBA程序基本语法之强大的数组,了解数组的功能...
  5. position属性absolute(绝对定位),relatve(相对定位)
  6. 遇到相同流程时,(在流程比较复杂时)「【充分利用】 在【 之前的 作业过程中 做成的(留下的) 资源】」 ~
  7. Web表单提交之disabled问题
  8. 电影院售票系统mysql表格_电影院售票数据库系统设计.doc
  9. 目标检测(Object Detection)—— M2Det
  10. 大卫科波菲尔优秀读后感范文4000字
  11. ffmpeg 处理字幕
  12. 硬件安全模块- HSM
  13. 鸡兔同笼html语言,java 鸡兔同笼问题详解
  14. 正确的姿势很重要:该如何执笔
  15. go语言多package使用实战
  16. 东原地产的女性视角——对话罗韶颖
  17. 第三十二章 三更雪压飞狐城(三之全)
  18. 【系统分析师之路】2016年系统分析师下午案例分析真题
  19. Vue项目使用拦截器和JWT验证 完整案例
  20. 这里有一份元宇宙春节旅游攻略

热门文章

  1. 王齐老师 浅谈cache memory
  2. 三维建模----相机参数
  3. WebRTC实时通信系列教程9 数据通道图片传输
  4. Tplink服务器停止响应,新买的tp-link变砖了,修复时候没有说按p停止
  5. 关于PHP中的webshell
  6. 微信跳一跳辅助工具(Python)
  7. 基于51单片机额温枪非接触红外人体测温仪原理图PCB
  8. 区块链领域的几个著名实验室
  9. linux udev 检测u盘的插入和拔出,在Linux中C检测插入/拔出USB串行设备
  10. OSChina 周五乱弹 —— 这才是称职的老板