UHIDを使用した仮想キーボード

UHIDを使用した仮想キーボード

QMKファームウェアがキーボードに対して行うことを実装しようとしていますが、ソフトウェアを使用しています。そのため、キーフレームをオフにして、一部のキーフレームを他のキーフレーム、レイヤーなどに置き換えたいと思います。

検索すると最初に浮かぶのはこの例。問題は、バイナリを実行している端末にフォーカスがある場合にのみテスト実行が機能することです。そして、Windowsシステムを迂回したいと思います。

また、コードにこの配列が表示されますが、どのように入力するのかわかりません。

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キーボードに配列を埋める方法は?
  • Windowsシステムをバイパスする方法は?
  • UHIDに関するドキュメントはどこにありますか?

答え1

私はこれを自分で見つけようとしていますが、この記事を探しています。見つけたと思います。ここで、rdisc変数は次のとおりです。HIDレポート記述子。このカーネルのドキュメントページには、次の内容が記載されています。

HIDレポート記述子の形式は、USB実装者フォーラムHID Webページで提供されている2つの文書で説明されています。

カーネル文書は具体的には次のリンクにリンクされています。HID USBデバイスクラスの定義そしてHID使用表

これにより、最初の問題が解決されます。 3番目の質問には次のものがあります。この文書、UHIDは基本的にユーザースペースのHIDドライバー用の接着剤であり、一般的なHID文書からより多くの情報を得ることができるため、これはまれです。申し訳ありません。 2番目の質問にどのように答えるべきかわかりません。

関連情報