zhp 发表于 2023-11-17 14:54:52

一个USB端点即可实现多媒体键盘@STC8H8K64U,@STC32G12K128单片机实现

STC-USB, 一个USB端点即可实现多媒体键盘
===@STC8H8K64U, @STC32G12K128源代码开源
USB-HID 键盘的按键大致可分为3类:
1、101/104个标准按键,包括普通的数字、字母、标点符号等常用按键
2、系统控制按键,包括睡眠、唤醒、关机等功能键
3、多媒体按键,包括音乐的播放、停止、音量控制以及互联网功能按键
之前STC官方给的USB键盘的范例程序中只能发送标准按键
系统控制按键和多媒体按键都无法发送,主要原因是在HID规范中
将标准按键、系统控制按键、多媒体按键分别定义到了不同的UsagePage
在原USB键盘的范例程序的基础上,对HID报告进行了一下修改
实现对系统控制按键和多媒体按键的支持
char code HIDREPORTDESC =
{
    0x05,0x01,            //USAGE_PAGE(Generic Desktop);
    0x09,0x06,            //USAGE(Keyboard);
    0xa1,0x01,            //COLLECTION(Application);
    0x85,0x01,            //REPORT_ID(1)
    0x05,0x07,            //USAGE_PAGE(Key Codes);
    0x19,0xe0,            //USAGE_MINIMUM(224);
    0x29,0xe7,            //USAGE_MAXIMUM(231);
    0x15,0x00,            //LOGICAL_MINIMUM(0);
    0x25,0x01,            //LOGICAL_MAXIMUM(1);
    0x75,0x01,            //REPORT_SIZE(1);
    0x95,0x08,            //REPORT_COUNT(8);
    0x81,0x02,            //INPUT(Data,Variable);
    0x75,0x08,            //REPORT_SIZE(8);
    0x95,0x01,            //REPORT_COUNT(1);
    0x81,0x01,            //INPUT(Constant);
    0x19,0x00,            //USAGE_MINIMUM(0);
    0x29,0x65,            //USAGE_MAXIMUM(101);
    0x15,0x00,            //LOGICAL_MINIMUM(0);
    0x25,0x65,            //LOGICAL_MAXIMUM(101);
    0x75,0x08,            //REPORT_SIZE(8);
    0x95,0x06,            //REPORT_COUNT(6);
    0x81,0x00,            //INPUT(Data,Array);
    0x05,0x08,            //USAGE_PAGE(LEDs);
    0x19,0x01,            //USAGE_MINIMUM(1);
    0x29,0x03,            //USAGE_MAXIMUM(3);
    0x15,0x00,            //LOGICAL_MINIMUM(0);
    0x25,0x01,            //LOGICAL_MAXIMUM(1);
    0x75,0x01,            //REPORT_SIZE(1);
    0x95,0x03,            //REPORT_COUNT(3);
    0x91,0x02,            //OUTPUT(Data,Variable);
    0x75,0x05,            //REPORT_SIZE(5);
    0x95,0x01,            //REPORT_COUNT(1);
    0x91,0x01,            //OUTPUT(Constant);
    0xc0,               //END_COLLECTION;
   
    0x05,0x0c,            //USAGE_PAGE(Consumer Devices)
    0x09,0x01,            //USAGE(Consumer Control)
    0xa1,0x01,            //COLLECTION(Application)
    0x85,0x02,            //REPORT_ID(2)
    0x19,0x00,            //USAGE_MINIMUM(0)
    0x2a,0x3c,0x02,         //USAGE_MAXIMUM(572)
    0x15,0x00,            //LOGICAL_MINIMUM(0)
    0x26,0x3c,0x02,         //LOGICAL_MAXIMUM(572)
    0x95,0x01,            //REPORT_COUNT(1)
    0x75,0x10,            //REPORT_SIZE(16)
    0x81,0x00,            //INPUT(Data,Aryay)
    0x75,0x08,            //REPORT_SIZE(8);
    0x95,0x06,            //REPORT_COUNT(6);
    0x81,0x01,            //INPUT(Constant);
    0xc0,               //END_COLLECTION
   
    0x05,0x01,            //USAGE_PAGE(Generic Desktop)
    0x09,0x80,            //USAGE(System Control)
    0xa1,0x01,            //COLLECTION(Application)
    0x85,0x03,            //REPORT_ID(3)
    0x19,0x81,            //USAGE_MINIMUM(System Power Down)
    0x29,0x83,            //USAGE_MAXIMUM(System Wake Up)
    0x15,0x00,            //LOGICAL_MINIMUM(0)
    0x25,0x01,            //LOGICAL_MAXIMUM(1)
    0x75,0x01,            //REPORT_SIZE(1)
    0x95,0x03,            //REPORT_COUNT(3)
    0x81,0x02,            //INPUT(Data,Variable)
    0x95,0x05,            //REPORT_COUNT(5)
    0x81,0x01,            //INPUT(Constant)
    0x75,0x08,            //REPORT_SIZE(8);
    0x95,0x07,            //REPORT_COUNT(7);
    0x81,0x01,            //INPUT(Constant);
    0xc0,               //END_COLLECTION
};

IN报告1
报告字节功能
1ID (1)
2变更键(MAP)
RGUIRAltRShiftRCtrlLGUILAltLShiftLCtrl

3保留
4键码1
5键码2
6键码3
7键码4
8键码5
9键码6

IN报告2
报告字节功能
1ID (2)
2多媒体键码(低字节)

3多媒体键码(高字节)

4保留

5保留

6保留

7保留

8保留

9保留


IN报告3
报告字节功能
1ID (3)
2系统控制键(MAP)
保留
保留
保留
保留
保留
唤醒睡眠关机

3保留

4保留

5保留

6保留

7保留

8保留

9保留


OUT报告1
报告字节功能
1ID (1)
2指示灯状态(MAP)
保留
保留
保留
保留
保留
ScrollLockCapLockNumLock


测试代码在实验箱9.62上测试通过
矩阵按键0:标准按键-数字1
矩阵按键1:标准按键-数字2

矩阵按键2:标准按键-字母a
矩阵按键3:标准按键-字母b

矩阵按键4:多媒体键-音量+
矩阵按键5:多媒体键-音量-

矩阵按键6:系统控制-睡眠
矩阵按键7:系统控制-唤醒

神农鼎 发表于 2023-11-18 12:27:22

USB视频教学

https://www.stcaimcu.com/forum.p ... 4526&extra=page%3D1



https://www.stcaimcu.com/forum.p ... 3899&extra=page%3D1

qq675032915 发表于 2023-11-17 15:43:30

{:4_250:}

神农鼎 发表于 2023-11-17 15:47:54

啥都不说了,就是 一路碾过,人民公仆为人民,孺子牛{:4_196:}

hu_jia168 发表于 2023-11-17 16:31:05

如果有空时,出一个STC8H的版本就更好了。

电子DIY小家 发表于 2023-11-17 16:37:25

{:cry:}早知道我在等等了,不久之前我才辛苦的改完这个功能,没想到这也出来了{:cry:}

神农鼎 发表于 2023-11-17 19:54:21

hu_jia168 发表于 2023-11-17 16:31
如果有空时,出一个STC8H的版本就更好了。



顶楼已经上传了STC8H8K64U的版本,也有STC32G12K128的版本

神农鼎 发表于 2023-11-17 19:56:14

电子DIY小家 发表于 2023-11-17 16:37
早知道我在等等了,不久之前我才辛苦的改完这个功能,没想到这也出来了

UAC, 冲哥带领大家前行

电子DIY小家 发表于 2023-11-18 21:35:39

所以zhp哥,你后面要搞啥了先透个底,我和你错开研究方向~{:lol:}

神农鼎 发表于 2023-11-18 21:39:21

电子DIY小家 发表于 2023-11-18 21:35
所以zhp哥,你后面要搞啥了先透个底,我和你错开研究方向~

{:4_196:}UAC开个头
页: [1] 2 3
查看完整版本: 一个USB端点即可实现多媒体键盘@STC8H8K64U,@STC32G12K128单片机实现