首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

USB接口的键盘描述符范例

  • 25-03-07 14:00
  • 2358
  • 11370
blog.csdn.net
  1. ;=========================================
  2. ; Device descriptor 设备描述符
  3. ;=========================================
  4. DEVICE_DESC_DATA:
  5. DB 0x12 ; bLength = 18,该描述符长度为18字节
  6. DB 0x01 ; bDescriptorType = 01,表明是设备描述符
  7. DB 0x10, 0x01 ; bcdUSB,USB设备版本号=1.1
  8. DB 0x00 ; DeviceClass,设备类码,HID设备为0,类别在接口描述符中定义
  9. DB 0X00 ; DeviceSubClass,设备子类码,DeviceClass为0时该字段必须为0
  10. DB 0X00 ; bDevicePortocol,协议码,DeviceClass为0时该字段必须为0
  11. DB 0x08 ; bMaxPacketSize0,端点0的最大包尺寸
  12. DB 0xFF, 0xFF ; bVendor,厂商ID,由USB实现者论坛确定的
  13. DB 0x01, 0x00 ; bProduct,产品ID
  14. DB 0x00, 0x01 ; bcdDevice,设备版本号为1.00
  15. DB 0x04 ; iManufacturer,厂商字符串的索引值,见字符串描述符
  16. DB 0x0E ; iProduct,产品字符串的索引值,见字符串描述符
  17. DB 0x30 ; iSerialNumber,产品序列号字符串的索引值,见字符串描述符
  18. DB 0X01 ; bNumConfigurations,配置数目只有1个
  1. ;=========================================
  2. ; Configuration descriptor 配置描述符
  3. ;=========================================
  4. CONFIG_DESC_DATA:
  5. DB 0x09 ; bLength=9,该描述符长度为9字节
  6. DB 0x02 ; bDescriptorType = 02,表明是配置描述符
  7. DB 0x3B, 0x00 ; wTotalLength = 59,配置、接口、端点和HID描述符的总和字节数
  8. DB 0x02 ; bNumInterfaces = 2,本配置支持的接口数目为2个
  9. DB 0x01 ; bConfigurationValue = 1,本配置描述符的标识符
  10. DB 0x00 ; iCongfiguration = 0,配置描述符说明字符串的索引值
  11. DB 0XA0 ; bmAttributes,电源及唤醒设置,USB1.1版中D7=1,D6=0表示总线供电
  12. ; D5=1表示支持远程唤醒
  13. DB 0X32 ; MaxPower = 50,本设备最大耗电为50X2mA=100mA
  1. ;=========================================
  2. ; Interface descriptor 接口描述符
  3. ;=========================================
  4. InterfaceDescriptor0:
  5. DB 0x09 ; bLength = 9,该描述符长度
  6. DB 0x04 ; bDescriptorType = 4,表明是接口描述符
  7. DB 0x00 ; bInterfaceNumber = 0,此接口的识别标识符
  8. DB 0x00 ; bAlternateSetting = 0,表示此接口无替代设置值
  9. DB 0x01 ; bNumEndpoints = 1,本接口的端点数目,HID设备使用端点1
  10. DB 0x03 ; bInterfaceClass = 3,表示该设备是HID类别
  11. DB 0x01 ; bInterfaceSubClass = 1,表示支持启动接口
  12. DB 0x01 ; bInterfaceProtocol = 1,表示支持键盘协议
  13. DB 0x00 ; iInterface = 0,接口描述符说明字符串的索引值,0表示无字符串
  1. ;=========================================
  2. ; HID descriptor HID描述符
  3. ;=========================================
  4. HIDDescriptor0:
  5. DB 0x09 ; bLength = 9,该描述符长度
  6. DB 0x21 ; bDescriptorType = 21h,表明是HID描述符
  7. DB 0x00, 0x01 ; bcdHID = 0100,HID规范版本为1.00
  8. DB 0x00 ; bCountryCode = 0,硬件设备所在国家的国家代码,0表示未指明
  9. DB 0x01 ; nNumDescriptors = 1,表示支持的描述符有1个,即一个报表描述符
  10. DB 0x22 ; bDescriptorType = 22h,描述符类别,表示支持的描述符是报表描述符
  11. DB 0x3F, 0x00 ; wDescriptorLength = 63,表示支持的报表描述符的长度
  1. ;=========================================
  2. ; EndPoint descriptor 端点描述符
  3. ;=========================================
  4. EndpointDescriptor0:
  5. DB 0x07 ; bLength = 7,该描述符长度
  6. DB 0x05 ; bDescriptorType = 5,表明是端点描述符
  7. DB 0x81 ; bEndpointAddress = 1000 0001b,表示1号输入端点
  8. DB 0X03 ; bmAttributes = 00000011b,表示中断类型端点
  9. DB 0x08, 0x00 ; wMaxPacketSize = 8,端点发送和接收的最大包尺寸为8
  10. DB 10 ; bInterval = 10,表示中断端点轮询时间间隔为10ms
  1. ;=========================================
  2. ; String descriptor 字符串描述符
  3. ;=========================================
  4. StringDescriptor0:
  5. DB 0x04 ; bLength = 4,字符串描述符0的长度为4
  6. DB 0x03 ; bDescriptorType = 3,表明是字符串描述符
  7. DB 0x09, 0x00 ; wLANGID = 0009h,表明是英语
  8. DB 0x0A ; bLength = 10,字符串描述符的长度为10
  9. DB 0x03 ; bDescriptorType = 3,表明是字符串描述符
  10. DB 0x41, 0x00, 0x43, 0x00, 0x4D, 0x00, 0x45, 0x00
  11. ; bString = “ACME“,Unicode编码的字符串
  12. DB 0x22 ; bLength = 34,字符串描述符的长度为34
  13. DB 0x03 ; bDescriptorType = 3,表明是字符串描述符
  14. DB 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00
  15. DB 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00
  16. DB 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x62, 0x00
  17. DB 0x6F, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00
  18. ; bString = “Locator Keyboard“,Unicode编码的字符串
  19. DB 0x0E ; bLength = 14,字符串描述符的长度为14
  20. DB 0x03 ; bDescriptorType = 3,表明是字符串描述符
  21. DB 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x21, 0x00
  22. DB 0x22, 0x00, 0x23, 0x00
  23. ; bString = “ABC123“,Unicode编码的字符串
  1. ;=========================================
  2. ;HID Reports Descriptor 报表描述符
  3. ;=========================================
  4. DB 0x05, 1 ; Usage Page (1: Generic Desktop)
  5. DB 0x09, 6 ; Usage (6: Keyboard) 表示报表定义的是HID键盘
  6. DB 0xA1, 1 ; Collection (1: Application) ====================集合开始
  7. ;
  8. ; 以下定义了键盘的修饰键输入报表,共有8个键,组成一个字节
  9. ; 用法见HID Usage Table中的第10节中的键盘用法定义
  10. DB 0x05, 7 ; Usage page (7: Key Codes)
  11. DB 0x19, 224 ; Usage Minimum (224)
  12. DB 0x29, 231 ; Usage Maximum (231)
  13. DB 0x15, 0 ; Logical Minimum (0)
  14. DB 0x25, 1 ; Logical Maximum (1)
  15. DB 0x75, 1 ; Report Size (1)
  16. DB 0x95, 8 ; Report Count (8)
  17. DB 0x81, 2 ; Input (Data,Variable,Absolute)
  18. ;
  19. ; 以下定义了一个保留字节的输入报表
  20. DB 0x95, 1 ; Report Count (1)
  21. DB 0x75, 8 ; Report Size (8),
  22. DB 0x81, 1 ; Input (Constant) = Reserved Byte
  23. ;
  24. ; 以下定义了键盘的LED指示灯输出报表项目,共有5个指示灯
  25. ; 用法见HID Usage Table中的第11节中的LED用法定义
  26. DB 0x95, 5 ; Report Count (5)

 

注:本文转载自blog.csdn.net的_WindChimes的文章"https://britripe.blog.csdn.net/article/details/111681135"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top