使用UHID的虚拟键盘

使用UHID的虚拟键盘

我正在尝试实现 QMK 固件对键盘的作用,但使用软件。所以,我想关闭关键帧,用一些关键帧替换其他关键帧、图层等。

搜索时出现在我面前的第一件事是这个例子。问题是,运行测试仅当执行二进制文件的终端具有焦点时才有效,并且我想绕过窗口系统。

此外,代码还显示了这个数组,我不知道如何填充。

static unsigned char rdesc[] = {
    0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
    0x09, 0x02, /* USAGE (Mouse) */
    0xa1, 0x01, /* COLLECTION (Application) */
    0x09, 0x01,     /* USAGE (Pointer) */
    0xa1, 0x00,     /* COLLECTION (Physical) */
    0x85, 0x01,         /* REPORT_ID (1) */
    0x05, 0x09,         /* USAGE_PAGE (Button) */
    0x19, 0x01,         /* USAGE_MINIMUM (Button 1) */
    0x29, 0x03,         /* USAGE_MAXIMUM (Button 3) */
    0x15, 0x00,         /* LOGICAL_MINIMUM (0) */
    0x25, 0x01,         /* LOGICAL_MAXIMUM (1) */
    0x95, 0x03,         /* REPORT_COUNT (3) */
    0x75, 0x01,         /* REPORT_SIZE (1) */
    0x81, 0x02,         /* INPUT (Data,Var,Abs) */
    0x95, 0x01,         /* REPORT_COUNT (1) */
    0x75, 0x05,         /* REPORT_SIZE (5) */
    0x81, 0x01,         /* INPUT (Cnst,Var,Abs) */
    0x05, 0x01,         /* USAGE_PAGE (Generic Desktop) */
    0x09, 0x30,         /* USAGE (X) */
    0x09, 0x31,         /* USAGE (Y) */
    0x09, 0x38,         /* USAGE (WHEEL) */
    0x15, 0x81,         /* LOGICAL_MINIMUM (-127) */
    0x25, 0x7f,         /* LOGICAL_MAXIMUM (127) */
    0x75, 0x08,         /* REPORT_SIZE (8) */
    0x95, 0x03,         /* REPORT_COUNT (3) */
    0x81, 0x06,         /* INPUT (Data,Var,Rel) */
    0xc0,           /* END_COLLECTION */
    0xc0,       /* END_COLLECTION */
    0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
    0x09, 0x06, /* USAGE (Keyboard) */
    0xa1, 0x01, /* COLLECTION (Application) */
    0x85, 0x02,     /* REPORT_ID (2) */
    0x05, 0x08,     /* USAGE_PAGE (Led) */
    0x19, 0x01,     /* USAGE_MINIMUM (1) */
    0x29, 0x03,     /* USAGE_MAXIMUM (3) */
    0x15, 0x00,     /* LOGICAL_MINIMUM (0) */
    0x25, 0x01,     /* LOGICAL_MAXIMUM (1) */
    0x95, 0x03,     /* REPORT_COUNT (3) */
    0x75, 0x01,     /* REPORT_SIZE (1) */
    0x91, 0x02,     /* Output (Data,Var,Abs) */
    0x95, 0x01,     /* REPORT_COUNT (1) */
    0x75, 0x05,     /* REPORT_SIZE (5) */
    0x91, 0x01,     /* Output (Cnst,Var,Abs) */
    0xc0,       /* END_COLLECTION */
};

我找不到关于此事的更多文件。此时,我什至不确定是否可以做我想做的事。我见过类似的东西克莫纳德我无法去上班。

最后,我的问题是:

  • 如何将rdesc数组填充到键盘?
  • 如何越过窗口系统?
  • 在哪里可以找到有关 UHID 的文档?

答案1

我试图自己解决这个问题,并不断浏览这篇文章。我想我找到了,这里的 rdisc 变量是HID 报告描述符。该内核文档页面指出:

HID 报告描述符的格式由两个文档描述,可从 USB Implementers Forum HID 网页获取...

然后内核文档专门链接到HID USB 设备类定义HID 使用表

这应该可以解决你的第一个问题。对于你的第三个问题有本文档,这是稀疏的,因为 UHID 基本上只是用户空间 HID 驱动程序的粘合剂,并且您将从常规 HID 文档中获得更多信息。抱歉,我实在不知道如何回答你的第二个问题。

相关内容