3.1. HID
3.1.1. hid概述
引用度娘:HID(Human Interface Device)是指人机接口设备,是一种输入输出设备,例如:鼠标、键盘、游戏手柄、摇杆、触摸板、扫描仪、数字化板等等。HID设备可以通过USB、蓝牙等接口连接到计算机或其他设备上,并且可以通过操作系统提供的驱动程序进行控制和使用。
3.1.2. hid协议概述
HID(Human Interface Device)协议是一种用于描述计算机与人机交互设备之间通信协议的标准。它定义了计算机与键盘、鼠标、游戏手柄等设备之间的通信规则,使得这些设备可以被计算机正确地识别和使用。
HID协议的实现基于USB(Universal Serial Bus)接口,因此HID设备通常都是通过USB接口与计算机相连的。在HID协议中,设备会向计算机发送一系列的报告,描述设备的状态和用户的操作。计算机则可以根据这些报告来识别设备,并对用户的操作做出相应的响应。
HID协议支持的设备种类非常广泛,包括但不限于键盘、鼠标、游戏手柄、摄像头、扫描仪等等。这些设备都可以通过HID协议与计算机进行通信,从而实现与用户的交互。
3.1.3. hid协议的描述符
HID协议具体表现即一串描述符,用来解析双方设备交互的数据;有了这个描述符才能进行通信。
下列是一个简易的hid的描述符(开发者可使用 USB描述符解析 去解析):
static const u8 hidkey_report_map[] = { 0x05, 0x0C, // Usage Page (Consumer) --------头码 0x09, 0x01, // Usage (Consumer Control) --------控制型hid 0xA1, 0x01, // Collection (Application) --------为Application使用的集合,下列End Collection为集合结束 0x85, 0x01, // Report ID (1) --------Reprot ID,usb唯一识别的ID号,用于标记下列协议属于ID 1 0x09, 0xE9, // Usage (Volume Increment)-------音量加 0x09, 0xEA, // Usage (Volume Decrement)-------音量减 0x09, 0xCD, // Usage (Play/Pause) --------播放/暂停 0x09, 0xE2, // Usage (Mute) --------mute按键 0x09, 0xB6, // Usage (Scan Previous Track)----上一曲 0x09, 0xB5, // Usage (Scan Next Track) -------下一曲 0x09, 0xB3, // Usage (Fast Forward) --------快进 0x09, 0xB4, // Usage (Rewind) --------倒退 0x15, 0x00, // Logical Minimum (0) --------上面的Usage类型取值最小值 0x25, 0x01, // Logical Maximum (1) --------上面的usage类型取值最大值 0x75, 0x01, // Report Size (1) --------每个usage占用的size 0x95, 0x10, // Report Count (16) --------有多少个usage 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection // 35 bytes };
Reprot ID,在一个描述符中是不能重复的。
Usage (Volume Increment)这种是标准的hid协议,即它就是音量加的功能
比如发送一个 {0x00, 0x01}的数据给usb,具体表现出来就是 音量加的功能。为什么?首先发送数据之前得知道需要发多少Bytes(发送多少Bytes = (Report Size * Report Count)/ 8);其次每一个Usage的值只能取0(Logical Minimum)或者1(Logical Maximum);那就可以知道如果要发送音量加就需要设置为{0x00, 0x01}。
如果需要添加或者修改report map,需要开发者熟悉hid描述符再去修改。