【原创】最近做的又一个AVRUSB作品HID类----2008.09
2013-08-23 09:49
351 查看
最近为了HID类设备弄了半个把月。终于完成这个无线(红外)多媒体键盘,带鼠标功能。
难就难在描述符上,不过在近4天的资料翻阅及多次的测试下,电脑不知道重启了多少次啊,的情况下
搞定了这个东西,大家可以看看图片:
(原文件名:usb.jpg)
(原文件名:DSCI0049.JPG)
下面为键盘的电路图,仅为一个遥控器!
(原文件名:未命名.jpg)
M48接收器的电路就用USBASP的电路即可,但在PD3口加一个红外一体接收头!
遥控器大家可以自己做一个即可,NEC格式,客户码0x00ff,data从00--ff,自己定义,同时可以修改的可以自己改!以适应自己的遥控。
下面是源码:
点击此处下载
ourdev_401421.rar(文件大小:212K) (原文件名:KIE-PC KEYBOARD(M48).rar)
这是我鼠标与键盘都OK的,键盘带modifierkey的描述:
上面是最后的描述符,已经完成多媒体键盘以及鼠标,键盘的实现,虽然没有人回答我,帮我解决问题,但还是在多次的努力,及多次电脑的重启下完成了。还是那句话,努力后一定有回报。
这个键盘也是一个有线的改装的,因为他比较小巧!呵呵
难就难在描述符上,不过在近4天的资料翻阅及多次的测试下,电脑不知道重启了多少次啊,的情况下
搞定了这个东西,大家可以看看图片:
(原文件名:usb.jpg)
(原文件名:DSCI0049.JPG)
下面为键盘的电路图,仅为一个遥控器!
(原文件名:未命名.jpg)
M48接收器的电路就用USBASP的电路即可,但在PD3口加一个红外一体接收头!
遥控器大家可以自己做一个即可,NEC格式,客户码0x00ff,data从00--ff,自己定义,同时可以修改的可以自己改!以适应自己的遥控。
下面是源码:
点击此处下载
ourdev_401421.rar(文件大小:212K) (原文件名:KIE-PC KEYBOARD(M48).rar)
这是我鼠标与键盘都OK的,键盘带modifierkey的描述:
static const char hidReportDescriptor0[] PROGMEM = { 0x05, 0x01, // Usage Page (Generic Desktop), 0x09, 0x06, //Usage (Keyboard), 0xA1, 0x01, // Collection (Application), 0x85, 0x01, // Report Id (1) //报告类型为1 0x05, 0x07, // USAGE_PAGE (Keyboard) 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x08, // REPORT_COUNT (8) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x95, 0x04, // Report Count (4), // 一共4位+1 0x75, 0x08, // Report Size (8), // 每位8位 0x15, 0x00, // Logical Minimum (0), //从0--ff 0x25, 0xff, // Logical Maximum(101), 0x05, 0x07, // Usage Page (Key Codes), 0x19, 0x00, // Usage Minimum (0), 0x29, 0xff, // Usage Maximum (101), 0x81, 0x00, // Input (Data, Array), ;Key arrays (4 bytes) 0xC0, // // mouse 0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, 0xA1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x03, 0x15, 0x00, 0x25, 0x01, 0x85, 0x02, 0x95, 0x03, 0x75, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x05, 0x81, 0x01, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 0x15, 0x81, 0x25, 0x7F, 0x75, 0x08, 0x95, 0x02, 0x81, 0x06, 0xC0, 0xC0, }; 这个键盘带有鼠标功能。然后在这个基础上修改,我先仅仅实现多媒体按键,看了 computer00的代码。 static const char hidReportDescriptor0[] PROGMEM = { 0x05, 0x0c, // USAGE_PAGE (Consumer Page) 0x09, 0x01, // USAGE (Consumer Control) 0xa1, 0x01, // COLLECTION (Application) 0x09, 0xea, // USAGE (Volume Decrement) 0x09, 0xe9, // USAGE (Volume Increment) 0x09, 0xe2, // USAGE (Mute) 0x09, 0xcd, // USAGE (Play/Pause) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x95, 0x07, // REPORT_COUNT (4) 0x75, 0x01, // REPORT_SIZE (1) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x01, // REPORT_COUNT (4) 0x81, 0x03, // INPUT (Cnst,Var,Abs) 0xc0 // END_COLLECTION }; 其他地方也适当修改,没有问题,这样修改后能出现 HID 用户控制设备。这就是多媒体键盘会出现的。 static const char hidReportDescriptor0[] PROGMEM = { 0x05, 0x01, // Usage Page (Generic Desktop), 0x09, 0x06, //Usage (Keyboard), 0xA1, 0x01, // Collection (Application), 0x85, 0x01, // Report Id (1) //报告类型为1 0x05, 0x07, // USAGE_PAGE (Keyboard) 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x08, // REPORT_COUNT (8) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x95, 0x04, // Report Count (4), // 一共4位+1 0x75, 0x08, // Report Size (8), // 每位8位 0x15, 0x00, // Logical Minimum (0), //从0--ff 0x25, 0xff, // Logical Maximum(101), 0x05, 0x07, // Usage Page (Key Codes), 0x19, 0x00, // Usage Minimum (0), 0x29, 0xff, // Usage Maximum (101), 0x81, 0x00, // Input (Data, Array), ;Key arrays (4 bytes) 0xC0, // 0x05, 0x0c, // USAGE_PAGE (Consumer Page) 0x09, 0x01, // USAGE (Consumer Control) 0xa1, 0x01, // COLLECTION (Application) 0x85, 0x02, 0x09, 0xea, // USAGE (Volume Decrement) 0x09, 0xe9, // USAGE (Volume Increment) 0x09, 0xe2, // USAGE (Mute) 0x09, 0xcd, // USAGE (Play/Pause) 0x0a, 0x83, 0x01, //USAGE (Windows Media Player(0x183)) 0x0a, 0x23, 0x02, //USAGE (AC Home(0x0223)) 0x0a, 0x92, 0x01, //USAGE (AL Calculator(0x192)) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x95, 0x07, // REPORT_COUNT (7) 0x75, 0x01, // REPORT_SIZE (1) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x01, // REPORT_COUNT (1) 0x81, 0x03, // INPUT (Cnst,Var,Abs) 0xc0, // END_COLLECTION // mouse 0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, 0xA1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x03, 0x15, 0x00, 0x25, 0x01, 0x85, 0x03, 0x95, 0x03, 0x75, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x05, 0x81, 0x01, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 0x15, 0x81, 0x25, 0x7F, 0x75, 0x08, 0x95, 0x02, 0x81, 0x06, 0xC0, 0xC0 };
上面是最后的描述符,已经完成多媒体键盘以及鼠标,键盘的实现,虽然没有人回答我,帮我解决问题,但还是在多次的努力,及多次电脑的重启下完成了。还是那句话,努力后一定有回报。
这个键盘也是一个有线的改装的,因为他比较小巧!呵呵
相关文章推荐
- 【原创】谈谈我对最近的一个项目设计的想法和过程
- 【原创】基于ACE Proactor框架下高并发、大容量吞吐程序设计既最近的一个产品开发总结
- [原创]最近学习STL,在C++库中苦寻不到BigInteger类,于是自己写了一个
- 【原创】基于ACE Proactor框架下高并发、大容量吞吐程序设计既最近的一个产品开发总结
- android开发Enum (枚举)的更轻量级的替代方案 —— @IntDef的使用 原创 2017年11月28日 09:17:58 77 最近在翻看Android源码的时候,无意中看到这么一个注解,
- [置顶] 【原创】我的AVRUSB Receiver (C# And C)---2008.07
- [原创]发布一个原创作品:Mdisk 把126邮箱变网络硬盘的程序
- 【原创】最近写的一个比较hack的小爬虫
- 本人第六个练手作品 xfmpc 一个xfce4下的mpc前端[原创] 一共有两个版本
- 【原创】AVR USB开发的一款电脑遥控器------2008.07
- [原创作品]一个实用的js倒计时器 postby:zhutty.cnblogs.com
- 【原创】我的AVRUSB Receiver (C# And C)---2008.07
- 从最近租房得出的一个结论
- [Craftor原创]EZ-USB与FPGA的通信接口设计
- 为什么前端工程师很难找?(最近很火的一个话题)
- WinUSB: 在linux上创建一个Windows的可引导的U盘
- [原创]一个简单实用的rss浏览脚本,也可以打开远程RSS.
- 尊重原创,请保证您的文章为原创作品
- 最近接一个华技CMES协同系统开发对接的项目,顺利完成开发对接
- [原创]一个类似Ajax的咚咚,支持IE4,支持98