CH552G做键盘的问题

请问管理员。如何知道笔记本电脑的FN键码?我拿CH552G做模拟键盘。

你们的DEMO中:

HIDKey[0] = buf[1];    // Modifier keys

HIDKey[1] = 0;         // Reserved

HIDKey[2] = buf[2];    // Keycode 1

HIDKey[3] = buf[3];         // Keycode 2

HIDKey[4] = buf[4];         // Keycode 3

HIDKey[5] = buf[5];         // Keycode 4

HIDKey[6] = buf[6];         // Keycode 5

HIDKey[7] = buf[7];         // Keycode 6   

Enp1IntIn();

也没有提及FN键的办法。

您好,

一些键盘或者部分笔记本键盘上的FN键其实并不是一个真正具有功能的按键,只是该键盘程序中设计好了当这两个键同时按下时会上传一些特殊的HID报告。如某些键盘的调高调低音量功能,是使用了HID Usage中的Consumer Paged,并使用了该Usage中的Volume Decrement 和Volume Increment用途。实现方式可以拿一个实际的有您需要功能的键盘抓包并模拟该设备的相关描述符实现。


好的,谢谢提供思路,不错,我去试试。


管理员在吗?我抓到苹果的USB键盘的报表描述符了,但看了后不知道代码怎么发送带FN键的键值啊?麻烦帮我看看。

十六进制是:

05,01,09,06,a1,01,85,01,05,07,19,e0,29,e7,15,00

25,01,75,01,95,08,81,02,95,01,75,08,81,01,95,05

75,01,05,08,19,01,29,05,91,02,95,01,75,03,91,01

95,06,75,08,15,00,26,ff,00,05,07,19,00,29,ff,81

00,05,0c,75,01,95,01,09,b8,15,00,25,01,81,02,05

ff,09,03,75,07,95,01,81,02,c0,05,0c,09,01,a1,01

85,52,15,00,25,01,75,01,95,01,09,cd,81,02,09,b3

81,02,09,b4,81,02,09,b5,81,02,09,b6,81,02,81,01

81,01,81,01,85,09,15,00,25,01,75,08,95,01,06,01

ff,09,0b,b1,02,75,08,95,02,b1,01,c0,06,00,ff,09

06,a1,01,06,00,ff,09,06,15,00,26,ff,00,75,08,95

40,85,3f,81,22,c0


转换出来是:

0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)

0x09, 0x06,        // Usage (Keyboard)

0xA1, 0x01,        // Collection (Application)

0x85, 0x01,        //   Report ID (1)

0x05, 0x07,        //   Usage Page (Kbrd/Keypad)

0x19, 0xE0,        //   Usage Minimum (0xE0)

0x29, 0xE7,        //   Usage Maximum (0xE7)

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,No Wrap,Linear,Preferred State,No Null Position)

0x95, 0x01,        //   Report Count (1)

0x75, 0x08,        //   Report Size (8)

0x81, 0x01,        //   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x95, 0x05,        //   Report Count (5)

0x75, 0x01,        //   Report Size (1)

0x05, 0x08,        //   Usage Page (LEDs)

0x19, 0x01,        //   Usage Minimum (Num Lock)

0x29, 0x05,        //   Usage Maximum (Kana)

0x91, 0x02,        //   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)

0x95, 0x01,        //   Report Count (1)

0x75, 0x03,        //   Report Size (3)

0x91, 0x01,        //   Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)

0x95, 0x06,        //   Report Count (6)

0x75, 0x08,        //   Report Size (8)

0x15, 0x00,        //   Logical Minimum (0)

0x26, 0xFF, 0x00,  //   Logical Maximum (255)

0x05, 0x07,        //   Usage Page (Kbrd/Keypad)

0x19, 0x00,        //   Usage Minimum (0x00)

0x29, 0xFF,        //   Usage Maximum (0xFF)

0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x05, 0x0C,        //   Usage Page (Consumer)

0x75, 0x01,        //   Report Size (1)

0x95, 0x01,        //   Report Count (1)

0x09, 0xB8,        //   Usage (Eject)

0x15, 0x00,        //   Logical Minimum (0)

0x25, 0x01,        //   Logical Maximum (1)

0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x05, 0xFF,        //   Usage Page (Reserved 0xFF)

0x09, 0x03,        //   Usage (0x03)

0x75, 0x07,        //   Report Size (7)

0x95, 0x01,        //   Report Count (1)

0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0xC0,              // End Collection

0x05, 0x0C,        // Usage Page (Consumer)

0x09, 0x01,        // Usage (Consumer Control)

0xA1, 0x01,        // Collection (Application)

0x85, 0x52,        //   Report ID (82)

0x15, 0x00,        //   Logical Minimum (0)

0x25, 0x01,        //   Logical Maximum (1)

0x75, 0x01,        //   Report Size (1)

0x95, 0x01,        //   Report Count (1)

0x09, 0xCD,        //   Usage (Play/Pause)

0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x09, 0xB3,        //   Usage (Fast Forward)

0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x09, 0xB4,        //   Usage (Rewind)

0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x09, 0xB5,        //   Usage (Scan Next Track)

0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x09, 0xB6,        //   Usage (Scan Previous Track)

0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x81, 0x01,        //   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x81, 0x01,        //   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x81, 0x01,        //   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x85, 0x09,        //   Report ID (9)

0x15, 0x00,        //   Logical Minimum (0)

0x25, 0x01,        //   Logical Maximum (1)

0x75, 0x08,        //   Report Size (8)

0x95, 0x01,        //   Report Count (1)

0x06, 0x01, 0xFF,  //   Usage Page (Vendor Defined 0xFF01)

0x09, 0x0B,        //   Usage (0x0B)

0xB1, 0x02,        //   Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)

0x75, 0x08,        //   Report Size (8)

0x95, 0x02,        //   Report Count (2)

0xB1, 0x01,        //   Feature (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)

0xC0,              // End Collection

0x06, 0x00, 0xFF,  // Usage Page (Vendor Defined 0xFF00)

0x09, 0x06,        // Usage (0x06)

0xA1, 0x01,        // Collection (Application)

0x06, 0x00, 0xFF,  //   Usage Page (Vendor Defined 0xFF00)

0x09, 0x06,        //   Usage (0x06)

0x15, 0x00,        //   Logical Minimum (0)

0x26, 0xFF, 0x00,  //   Logical Maximum (255)

0x75, 0x08,        //   Report Size (8)

0x95, 0x40,        //   Report Count (64)

0x85, 0x3F,        //   Report ID (63)

0x81, 0x22,        //   Input (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position)

0xC0,              // End Collection


// 182 bytes



您好,

建议您看一些有关HID报告描述详细解释的相关资料,再结合前面2#提到的方式帮助理解

上面贴出的HID报告描述符中,比如报告ID为1的最后一个字节为EJect和该设备自定义的功能,报告ID为82的第一个字节每一位分别实现了播放,快进,回退等功能。


好的,谢谢,我研究下


FN键搞定


只有登录才能回复,可以选择微信账号登录