HID设备--开发板模拟鼠标
HID
HID
鼠标裸数据
驱动:
1 | Symbol: HIDRAW [=y] |
读取数据
1 | read(uibc->hid_fd, buf, sizeof(buf)); |
鼠标数据格式
鼠标的通信格式:4个字节
1 | BYTE3 BYTE2 BYTE1 BYTE0 |
Byte | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
---|---|---|---|---|---|---|---|---|
0 | 1 表示Y坐标的变化量超出-256~255的范围, 0表示没有溢出 | 1表示X坐标的变化量超出-256~255的范围,0表示没有溢出 | Y坐标变化的符号位,1表示负数,即鼠标向下移动 | X 坐标变化的符号位,1表示负数,即鼠标向左移动 | 恒为1 | 1表示中键按下 | 1表示右键按下 | 1表示左键按下 |
1 | X坐标变化量, | 与byte的 | bit4组成 | 9位符号数, | 负数表示向左移, | 正数表右移。 | 用补码 | 表示变化量 |
2 | Y坐标变化量, | 与byte的 | bit5组成 | 9位符号数, | 负数表示向下移, | 正数表上移。 | 用补码 | 表示变化量 |
3 | 滚轮变化。 | - | - | - | - | - | - | - |
鼠标的一次点击,包含按下
和抬起
两个动作,这两个动作均会上报事件,抬起
时上报的全部为0x0
1 | uibc read device raw data[len: 6]: BIT5~BIT0 //按下左键 |
开发板模拟鼠标
以开发板作为device端,由于鼠标为HID设备,在HID驱动中添加鼠标的device
参考文档:Documentation/usb/gadget_hid.txt, 其中主要时驱动的添加和测试
Device驱动
- hid.c
1 | /*hid descriptor for a mouse*/ |
kernel: linux3.4.35, file:drivers/usb/gadget/hid.c
- f_hid.c
1 | Index: f_hid.c |
kernel: linux3.4.35, file:drivers/usb/gadget/f_hid.c
hidg_func_descriptor
1 | struct hidg_func_descriptor { |
file: include/linux/usb/g_hid.h
主要是一个设备如何填充struct hidg_func_descriptor
数据结构。
You can add as many HID functions as you want, only limited by the amount of interrupt endpoints your gadget driver supports.
添加hidg
设备的个数,受USB的endpoint的限制,如果endpoint只有一对,只能添加一个hidg0
设备。
获取USB鼠标HID Descriptor
- 工具:
USBlyzer
- 官网下载地址:http://www.usblyzer.com/download.htm
- 下载:http://bbs.armfly.com/job.php?action=download&aid=9919
Device Descriptor
1 | Device Descriptor USB OPTICAL MOUSE |
Interface Descriptor
1 | Interface Descriptor 0/0 HID, 1 Endpoint |
HID Descriptor
1 | HID Descriptor |
hidg_func_descriptor 与 HID Descriptor
hidg_func_descriptor | HID Descriptor |
---|---|
subclass | bDeviceSubClass |
protocol | bInterfaceProtocol |
report_length | wMaxPacketSize |
report_desc_length | wDescriptorLength |
report_desc[] | Item Tag (Value) Raw Data |
调试
Bus Hound
是一个超级软件总线协议分析器,用于捕捉来自设备的协议包和输入输出操作
参考
- s3c6410 linux gadget hid驱动
- DM816X 实现 USB HID Gadget 鼠标键盘功能
- linux 读取 USB HID鼠标坐标和点击 在 LCD上显示
- Linux之访问/dev/hidraw
- USB与BT HID reports描述符实践与抓包分析
- usb hid gadget模拟鼠标键盘
- USB/HID设备报告描述符详解