キーボードから追加キーを読み取る方法 (Steelseries APEX 300)

キーボードから追加キーを読み取る方法 (Steelseries APEX 300)

Steelseries APEX 300の追加ボタンを操作しようとしています。主キーと標準特殊キーが正しく機能します。

最後に、これらのキーにいくつかのコマンドを割り当てる小さなアプリケーション(C / C ++ Qt)を作成したいと思います。

私はこれについていくつかの調査をしました。

  1. 機器を探す:

    $ lsusb
    Bus 003 Device 004: ID 1038:1208 SteelSeries ApS 
    
  2. カーネルログを確認してください。

    [ 1173.630363] usb 3-1.1: new full-speed USB device number 13 using xhci_hcd
    [ 1173.748310] usb 3-1.1: New USB device found, idVendor=1038, idProduct=1208
    [ 1173.748314] usb 3-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [ 1173.748316] usb 3-1.1: Product: SteelSeries Apex 300 Gaming Keyboard
    [ 1173.748317] usb 3-1.1: Manufacturer: SteelSeries
    [ 1173.750546]  0003:1038:1208.000D: hiddev0,hidraw0: USB HID v1.11 Device [SteelSeries SteelSeries Apex 300 Gaming Keyboard] on usb-0000:00:14.0-1.1/input0
    [ 1173.751418] input: SteelSeries SteelSeries Apex 300 Gaming Keyboard as /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1.1/3-1.1:1.1/0003:1038:1208.000E/input/input32
    [ 1173.810811] hid-generic 0003:1038:1208.000E: input,hidraw2: USB HID v1.11 Keyboard [SteelSeries SteelSeries Apex 300 Gaming Keyboard] on usb-0000:00:14.0-1.1/input1
    [ 1173.812405] input: SteelSeries SteelSeries Apex 300 Gaming Keyboard as /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1.1/3-1.1:1.2/0003:1038:1208.000F/input/input33
    [ 1173.870645] hid-generic 0003:1038:1208.000F: input,hidraw3: USB HID v1.11 Device [SteelSeries SteelSeries Apex 300 Gaming Keyboard] on usb-0000:00:14.0-1.1/input2
    
  3. 見て追加しましたhidraw0。だから私はすべての出力を見て、次を使って見つけました。hidraw2hidraw3hidraw*sudo cat

    • hidraw0=?
    • hidraw1=ラット
    • hidraw2=標準キーボードキー
    • hidraw3=特殊機能キー(ボリューム...)
    • hidraw4=ラット
    • hidraw5=?

たぶんそれがhidraw0コアかもしれません。

  1. 存在する/dev/input/by-id/APEXの2つの適切な項目が見つかりました。

    $ls /dev/input/by-id/usb-SteelSeries_SteelSeries_Apex_300_*
    usb-SteelSeries_SteelSeries_Apex_300_Gaming_Keyboard-event-if02
    usb-SteelSeries_SteelSeries_Apex_300_Gaming_Keyboard-if01-event-kbd
    

    ここでは、次を使用してもう一度やり直してくださいcat

    • *-event-if02:何もない
    • *-if01-event-kbd: 標準キーボード入力

投稿を見つけました(追加のキーボードキー認識: Steelseries Apex)このキーボードを扱おうとしているのに、Haskellの知識が足りません。私が知っているのは、APEXがキーを有効にするためにコマンドを受け取る必要があるということだけです。

どこから始めるのか、いくつかのヒントを教えてください。

ベストアンサー1

リンクされたHaskellコードを見つけてください:

put (CmdEnableExtraKeys) = do
  put32 [0x02, 0x00, 0x02]

送信するレポートです(3バイト)。

withDevice 0x1038 [0x1200, 0x1202, 0x1208] $ \dev -> do
  withDeviceHandle dev $ \devHndl ->
  withDetachedKernelDriver devHndl 0 $
  withClaimedInterface devHndl 0 $ do ...

1038Vendor ID と Device ID が 、12001202であるデバイスを探して1208カーネルドライバを分離して作業します。

apexCtl :: DeviceHandle -> ByteString -> IO ()
apexCtl devHndl d = do
  putStrLn "WRITING SET_REPORT"
  writeControlExact devHndl controlSetup d noTimeout

実際の書き込みをしてみてください。正確な書き込み制御System.USBUSBコントロールから出てくるので、HIDレイヤーがバイパスされているようです。この図書館に慣れていないので、これは推測です。

だから私はHaskellプログラムを実行するか(指針はリンクされたgit readmeにあります)、より使い慣れたものを使用してUSB制御書き込みを実行します。

ちなみに、evtest入力レイヤーで何が起こっているのかをよりよく理解し、HIDレポートを見てHIDレイヤーを理解することができます。

mount -t debugfs none /sys/kernel/debug
cat /sys/kernel/debug/hid/YOUR_DEVICE/rdesc

おすすめ記事