HID报表描述符大全及实例分析
+ -

USB键盘的数据结构

2022-07-08 664 0
struct options { 
    const char    *opt;
    unsigned char val; 
};

static struct options kmod[] = { 
    {.opt = "--left-ctrl",        .val = 0x01},
    {.opt = "--right-ctrl",        .val = 0x10},
    {.opt = "--left-shift",        .val = 0x02},
    {.opt = "--right-shift",    .val = 0x20},
    {.opt = "--left-alt",        .val = 0x04},
    {.opt = "--right-alt",        .val = 0x40},
    {.opt = "--left-meta",        .val = 0x08},
    {.opt = "--right-meta",        .val = 0x80},
    {.opt = NULL} 
};

static struct options kval[] = { 
    {.opt = "--return",    .val = 0x28},
    {.opt = "--esc",    .val = 0x29},
    {.opt = "--bckspc",    .val = 0x2a},
    {.opt = "--tab",    .val = 0x2b},
    {.opt = "--spacebar",    .val = 0x2c},
    {.opt = "--caps-lock",    .val = 0x39},
    {.opt = "--f1",        .val = 0x3a},
    {.opt = "--f2",        .val = 0x3b},
    {.opt = "--f3",        .val = 0x3c},
    {.opt = "--f4",        .val = 0x3d},
    {.opt = "--f5",        .val = 0x3e},
    {.opt = "--f6",        .val = 0x3f},
    {.opt = "--f7",        .val = 0x40},
    {.opt = "--f8",        .val = 0x41},
    {.opt = "--f9",        .val = 0x42},
    {.opt = "--f10",    .val = 0x43},
    {.opt = "--f11",    .val = 0x44},
    {.opt = "--f12",    .val = 0x45},
    {.opt = "--insert",    .val = 0x49},
    {.opt = "--home",    .val = 0x4a},
    {.opt = "--pageup",    .val = 0x4b},
    {.opt = "--del",    .val = 0x4c},
    {.opt = "--end",    .val = 0x4d},
    {.opt = "--pagedown",    .val = 0x4e},
    {.opt = "--right",    .val = 0x4f},
    {.opt = "--left",    .val = 0x50},
    {.opt = "--down",    .val = 0x51},
    {.opt = "--kp-enter",    .val = 0x58},
    {.opt = "--up",        .val = 0x52},
    {.opt = "--num-lock",    .val = 0x53},
    {.opt = NULL} 
};
//键盘,report_usage的部分字节对应的ASCII字符,如有更多需要,可自行谷歌搜索,
struct KBD_USAGE_2_CHAR{
    unsigned char usageCode;
    unsigned char lowerCase;
    unsigned char upperCase;
};
static struct KBD_USAGE_2_CHAR kbdUsage2Char[] = {
        {0x04,'a','A'}, // a A
        {0x05,'b','B'}, // b B
        {0x06,'c','C'}, // c C
        {0x07,'d','D'}, // d D
        {0x08,'e','E'}, // e E
        {0x09,'f','F'}, // f F
        {0x0A,'g','G'}, // g G
        {0x0B,'h','H'}, // h H
        {0x0C,'i','I'}, // i I
        {0x0D,'j','J'}, // j J
        {0x0E,'k','K'}, // k K
        {0x0F,'l','L'}, // l L
        {0x10,'m','M'}, // m M
        {0x11,'n','N'}, // n N
        {0x12,'o','O'}, // o O
        {0x13,'p','P'}, // p P
        {0x14,'q','Q'}, // q Q
        {0x15,'r','R'}, // r R
        {0x16,'s','S'}, // s S
        {0x17,'t','T'}, // t T
        {0x18,'u','U'}, // u U
        {0x19,'v','V'}, // v V
        {0x1A,'w','W'}, // w W
        {0x1B,'x','X'}, // x X
        {0x1C,'y','Y'}, // y Y
        {0x1D,'z','Z'}, // z Z
        {0x1E,'1','!'}, // 1 !
        {0x1F,'2','@'}, // 2 @
        {0x20,'3','#'}, // 3 #
        {0x21,'4','$'}, // 4 $
        {0x22,'5','%'}, // 5 %
        {0x23,'6','^'}, // 6 ^
        {0x24,'7','&'}, // 7 &
        {0x25,'8','*'}, // 8 *
        {0x26,'9','('}, // 9 (
        {0x27,'0',')'}, // 0 )
        {0x28,0x0A,0x0A}, // Enter
        {0x2A,0x08,0x08}, // Backspace
        {0x2B,'\t','\t'}, // Tab
        {0x2C,' ',' '}, // Space
        {0x2D,'-','_'}, // - _
        {0x2E,'=','+'}, // = +
        {0x2F,'[','{'}, // [ {
        {0x30,']','}'}, // ] }
        {0x31,'\\','|'}, // \ |
        {0x33,';',':'}, // ; :
        {0x34,'\'','\"'}, // ' "
        {0x35,'`','~'}, // ` ~
        {0x36,',','<'}, // , <
        {0x37,'.','>'}, // . >
        {0x38,'/','?'}, // / ?
        {0x54,'/','/'}, // Keypad / (Note 1)
        {0x55,'*','*'}, // Keypad *
        {0x56,'-','-'}, // Keypad -
        {0x57,'+','+'}, // Keypad +
        {0x58,0x0A,0x0A}, // Keypad Enter
        {0x59,'1','1'}, // Keypad 1 End
        {0x5A,'2','2'}, // Keypad 2 Down
        {0x5B,'3','3'}, // Keypad 3 PageDn
        {0x5C,'4','4'}, // Keypad 4 Left
        {0x5D,'5','5'}, // Keypad 5
        {0x5E,'6','6'}, // Keypad 6 Right
        {0x5F,'7','7'}, // Keypad 7 Home
        {0x60,'8','8'}, // Keypad 8 Up
        {0x61,'9','9'}, // Keypad 9 PageUp
        {0x62,'0','0'}, // Keypad 0 Insert
        {0x63,'.','.'}, // Keypad . Delete
};
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

HID键盘设备数据抓包分析实践
本文使用 Bus Hound 工具对 USB HID 设备数据包进行分析,并结合官方手册及网上文章进行整理。在进行数据分析前,我们先回顾一下USB相关的基础知识。USB描述符USB 主机是通过各种描述符来识别设备的,有设备描述符,接口描述符,端点描述符,字符描述符,报告描述符(HID)等。和普通的......
USB键盘报告描述符数据格式分析
USB键盘的HID报表描述符的内容参见下表。数据的输入端点为中断方式,当有键盘敲击事件时,会上报数据长度为8字节的数据报告。0x05,0x01,// Global Generic Desktop0x09,0x06,// Local KeyBoard 0xA1,0x01,// Main app col......
HID 报表描述符键盘实例
通过下面的报告描述符的定义,我们根据上面的注释可知,包含一个中断输入报表描述符和一个中断输出报告描述符。其中断输入报告描述符用于USB HID键盘中断输入端点,输出报表描述符用于USB HID键盘中断输出端点。USB HID键盘的中断输入报告对于中断输入端点,数据格式定义如下:BYTE0:该字......
BIOS下识别USB键盘
在BIOS下要识别一个USB键盘和在操作系统下识别一个USB键盘其实是有一些区别的:首先接口描述符中bInterfaceClass的值必须为0x03,bInterfaceSubClass的值为0或1,为1表示HID设备符是一个启动设备(Boot Device,一般对PC机而言才有意义,意思是BIO......
为什么Windows7重新安装系统后插在USB3.0端口的鼠标不能使用?
在 Windows 7 及更早版本的操作系统中,USB 3.0 驱动程序堆栈由第三方提供,操作系统不提供USB3.0驱动栈。 因此,Windows7重新安装系统后插在USB3.0端口上的所有设备都无法工作,需要安装第三方提供的USB控制器和集线器驱动,这样才能识别出挂接在该USB总线下的设备。从Wi......
USB键盘与HID报表描述符关系
报告描述符确实非常复杂,要看懂协议真得比较难(因为只有英文的),我见到的国内教材也没有对这部分写得很详细的,有的也只是部分内容的翻译而已。一般建议用示例报告描述符修改一下就可以了,《Hid Usage Table》里给出了一些常见应用的报告描述符。对于键盘类应用,通常用已有的示例已经够用了。“如果是......
HID复合设备(键盘、鼠标)的实现
在使用一些USB键盘或鼠标的时候,特别是一些电竟高档HID设备时,经常发现这些设备会额外定义一些特别的快捷键,使得这些设备不仅有基础设备(如键盘,鼠标)的功能,也有一些特别的快捷功能(如系统声音的放大放小)。甚至更有一些复杂的设备,只需要一个USB接口,就同时支持鼠标键盘功能或在键盘的额外区域支持触......
USB HID键盘设备树及设备枚举过程分析
今天在本站USB中文网微信技术交流群有一个同学在问关于HID设备的报表描述符的东东。但是在问的过程中发现一个很严重的问题,那就是它的它设备是一个复合设备,导致设备树比较复杂,关于报表描述符与接口描述符等之间的相关对应关系不是很清楚。为此,本人手中刚好有一个本人认为USB HID设备中相对比较复杂的设......
Windows下通过USB虚拟的键盘鼠标总结
产品级详见:https://www.usbzh.com/article/detail-1182.html哐哐铛铛的,终于把以前搞的虚拟键盘、鼠标的驱动代码重新整理完成,并且在此基础上将USB虚拟的键盘和鼠标整合到一个驱动中。将键盘和鼠标的代码合并在一起的原因很简单:第一是为了验证自己写的这个虚......
USB键盘在Linux环境下一直返回NAK的输入端点和一直OUT数据的输出端点
群里有同学反馈,自己做的USB键盘在Windows下正常,但在Linux下就失败,想让帮忙分析一下原因。一个比较好的消息是他那边有USB总线分析仪,所以只需要抓包就可以进行分析了。最好开他给的抓包截图是样子的:从它的截图可以看到,USB键盘在获取了该键盘的HID报告描述符后,紧跟着一下发Report......
USB键盘HID设备示例
键盘是一个比较复杂的复合设备,其中接口0实现的是键盘功能,接口1又因为报告描述符分为三个HID设备。BUSHOUND下的设备ID关系:在BUSHOUND抓取该USB键盘的枚举过程:Device Length Phase Data ......
USB键盘鼠标芯片选型
型号协议功能时钟工作温度封装 CH93292.0 全速 Device串口转HID键盘/鼠标/自定义HID芯片,支持多种工作模式和串口通讯模式内置-40~+85℃SOP16 CH93282.0 全速 Device串口转HID键盘芯片,实现串口数据转US......
USB键盘定义HID报告描述符一键关机、唤醒和睡眠功能
这是本人电脑的USB键盘复合设备中的一个HID功能,用于实现一键关机,唤醒机器和一键进入睡眠状态。使用USB标准请求及描述符在线分析工具http://www.usbzh.com/tool/usb.html 分析该报告描述符0x05, 0x01, // Usage Page (Gene......
HID键盘鼠标复位报告描述符
0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse) 0xa1, 0x01, ......
HID键盘报告描述符
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)0x09, 0x06, // Usage (Keyboard)0xA1, 0x01, // Collection (Application)0x05, 0......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!