Steelseries APEX 300の追加ボタンを操作しようとしています。主キーと標準特殊キーが正しく機能します。
最後に、これらのキーにいくつかのコマンドを割り当てる小さなアプリケーション(C / C ++ Qt)を作成したいと思います。
私はこれについていくつかの調査をしました。
機器を探す:
$ lsusb Bus 003 Device 004: ID 1038:1208 SteelSeries ApS
カーネルログを確認してください。
[ 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
見て追加しました
hidraw0
。だから私はすべての出力を見て、次を使って見つけました。hidraw2
hidraw3
hidraw*
sudo cat
hidraw0
=?hidraw1
=ラットhidraw2
=標準キーボードキーhidraw3
=特殊機能キー(ボリューム...)hidraw4
=ラットhidraw5
=?
たぶんそれがhidraw0
コアかもしれません。
存在する/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 ...
1038
Vendor ID と Device ID が 、1200
、1202
であるデバイスを探して1208
カーネルドライバを分離して作業します。
apexCtl :: DeviceHandle -> ByteString -> IO ()
apexCtl devHndl d = do
putStrLn "WRITING SET_REPORT"
writeControlExact devHndl controlSetup d noTimeout
実際の書き込みをしてみてください。正確な書き込み制御System.USB
USBコントロールから出てくるので、HIDレイヤーがバイパスされているようです。この図書館に慣れていないので、これは推測です。
だから私はHaskellプログラムを実行するか(指針はリンクされたgit readmeにあります)、より使い慣れたものを使用してUSB制御書き込みを実行します。
ちなみに、evtest
入力レイヤーで何が起こっているのかをよりよく理解し、HIDレポートを見てHIDレイヤーを理解することができます。
mount -t debugfs none /sys/kernel/debug
cat /sys/kernel/debug/hid/YOUR_DEVICE/rdesc