AVRUSB无线(红外)多媒体键盘的实现(已完成)
时间:2019-12-23
大小:355.53KB
阅读数:127
查看他发布的资源
资料介绍
AVRUSB 无线(红外)多媒体键盘的实现(已完成)键盘+鼠标+多媒体---附源码 下面为键盘的电路图,仅为一个遥控器! M48接收器的电路就用USBASP的电路即可,但在PD3口加一个红外一体接收头! 遥控器大家可以自己做一个即可,NEC格式,客户码0x00ff,data从00--ff,自己定义,同时可以修改的可以自己改!以适应自己的遥控。 这是我鼠标与键盘都OK的,键盘带modifierkey的描述: static const char hidReportDescriptor0[] PROGMEM = { /* partial keyboard */ 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, /* Usage Page (Generic Desktop), */ 0x09, 0x02, /* Usage (Mouse), */ 0xA1, 0x01, /* Collection (Application), */ 0x09, 0x01, /* Usage (Pointer), */ 0xA1, 0x00, /* Collection (Physical), */ 0x05, 0x09, /* Usage Page (Buttons), */ 0x19, 0x01, /* Usage Minimum (01), */ 0x29, 0x03, /* Usage Maximun (03), */ 0x15, 0x00, /* Logical Minimum (0), */ 0x25, 0x01, /* Logical Maximum (1), */ 0x85, 0x02, /* Report Id (2) */ 0x95, 0x03, /* Report Count (3), */ 0x75, 0x01, /* Report Size (1), */ 0x81, 0x02, /* Input (Data, Variable, Absolute), ;3 button bits */ 0x95, 0x01, /* Report Count (1), */ 0x75, 0x05, /* Report Size (5), */ 0x81, 0x01, /* Input (Constant), ;5 bit padding */ 0x05, 0x01, /* Usage Page (Generic Desktop), */ 0x09, 0x30, /* Usage (X), */ 0x09, 0x31, /* Usage (Y), */ 0x15, 0x81, /* Logical Minimum (-127), */ 0x25, 0x7F, /* Logical Maximum (127), */ 0x75, 0x08, /* Report Size (8), */ 0x95, 0x02, /* Report Count (2), */ 0x81, 0x06, /* Input (Data, Variable, Relative), ;2 position bytes (X Y) */ 0xC0, /* End Collection, */ 0xC0, /* End Collection */ }; 这个键盘带有鼠标功能。然后在这个基础上修改,我先仅仅实现多媒体按键,看了 computer00的代码。 static const char hidReportDescriptor0[] PROGMEM = { /* partial keyboard */ 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 = { /* partial keyboard */ 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, /* Report Id (3) */ 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, /* Usage Page (Generic Desktop), */ 0x09, 0x02, /* Usage (Mouse), */ 0xA1, 0x01, /* Collection (Application), */ 0x09, 0x01, /* Usage (Pointer), */ 0xA1, 0x00, /* Collection (Physical), */ 0x05, 0x09, /* Usage Page (Buttons), */ 0x19, 0x01, /* Usage Minimum (01), */ 0x29, 0x03, /* Usage Maximun (03), */ 0x15, 0x00, /* Logical Minimum (0), */ 0x25, 0x01, /* Logical Maximum (1), */ 0x85, 0x03, /* Report Id (2) */ 0x95, 0x03, /* Report Count (3), */ 0x75, 0x01, /* Report Size (1), */ 0x81, 0x02, /* Input (Data, Variable, Absolute), ;3 button bits */ 0x95, 0x01, /* Report Count (1), */ 0x75, 0x05, /* Report Size (5), */ 0x81, 0x01, /* Input (Constant), ;5 bit padding */ 0x05, 0x01, /* Usage Page (Generic Desktop), */ 0x09, 0x30, /* Usage (X), */ 0x09, 0x31, /* Usage (Y), */ 0x15, 0x81, /* Logical Minimum (-127), */ 0x25, 0x7F, /* Logical Maximum (127), */ 0x75, 0x08, /* Report Size (8), */ 0x95, 0x02, /* Report Count (2), */ 0x81, 0x06, /* Input (Data, Variable, Relative), ;2 position bytes (X Y) */ 0xC0, /* End Collection, */ 0xC0 /* End Collection */ }; 上面是最好的描述符,已经完成多媒体键盘以及鼠标,键盘的实现,虽然没有人回答我,帮我解决问题,但还是在多次的努力,及多次电脑的重启下完成了。还是那句话,努力后一定有回报。 ……
版权说明:本资料由用户提供并上传,仅用于学习交流;若内容存在侵权,请进行举报,或
联系我们 删除。