新しいものを表示

USB HIDはRawInputAPIで使えたけど、BuluetoothのHIDはどうすれば使えるのかなと思ってo4-miniに聞いたら「RawInputAPIって別にUSB専用のAPIじゃないので、そのまま使えるんですけど」って言われてマジで!?><; ってなった><

タッチパッド専用にして既存のより小さいライブラリとして作ってるはずが、むしろなぜか既存のライブラリより汎用性がある!><;
マジでUsagePageとUsageを指定するだけで使えるとは・・・><;

カチカチカチカチだと何もイベント発生しないっぽい><

カチカチって早く押すとUsageが0xB5になって、カチカチカチって早く押すと0xB6になるっぽい><

0x0Cの0xCD、Play/Pauseって書いてある!!!!><

イヤホンのボタンを押すと
DataIndex[07]: LinkCollection: 0, UsagePage: 0x0C, Usage: 0xCD, RawValue: 1
RawReport: 00-04-00

が飛んできて、ボタン離すと
DataIndex[07]: LinkCollection: 0, UsagePage: 0x0C, Usage: 0xCD, RawValue: 0
RawReport: 00-00-00
になるっぽい><

あ!><;
オレンジが書いたコードがバグってて、なぜか「変化する数値のものが1個もない」→「デバイス情報取得エラー><;」という、エラーじゃないのにエラー処理してるだけだった><;

スレッドを表示

どうやら、ボタンしかないのに変化する数値のもの(座標とか移動量とか)がないか探してる結果「無いんだけど」ってエラーになってるっぽい・・・?><

なんかGPT-4oに聞いたら、UsagePageは、0x0CのConsumer Devicesで、Usageは、0x01のConsumer Controlだよって言ってたから、言われたとおりにさっき書いたHIDのやつに書いたら、解析は失敗したけどRawなデータとしては取得できた!><;

orange さんがブースト

再生コントロールのボタン、単純にキーボードエミュレーションしてる回とかありそう

デバイスマネージャを見ると、USBイヤホンの再生ボタン(?)もRawInputAPIから扱えそうだけど、どうやったら対象にできるんだろう・・・?><

orange さんがブースト

そういえば、Windowsとかでのゲームパッドの標準ドライバのボタンの限界って32個っぽいけど、HIDの規格上は255個まで対応してるっぽい?><(ただし一度で送れない(?)だろうからハードウェア側でなんか工夫する必要がある?><)

オレンジが得たこの情報を、どこかでわかりやすく誰かが解説してくれてたら3日も試行錯誤しないで済んだ><;
例えばLinkCollectionがボタン1個とかの単位でまとめたグループみたいなのであるなんて、名前から推測できないじゃん?><;
ドキュメントの機械翻訳も意味不明だし><;(英語難しい)

取得できる情報が何であるかは、UsagePageって数値とUsageって数値の組み合わせで出てくるので、HIDの規格書で調べる必要がある><

HID Usage Tables 1.6 | USB-IF
usb.org/document-library/hid-u

nugetにある末代の人が作ったライブラリを、HidP_GetDataで検索しても出てこないから、それはオレンジのとやり方が違うっぽい><(あんまりへんてこなデバイスは考慮してないライブラリ?><)

RawInputAPIでのUSB HIDのイベント解析の仕方>< 

簡単に言うと、
HidP_GetCapsとHidP_GetValueCaps(座標とか用)とHidP_GetButtonCapsとHidP_GetUsages(ボタンとか用)を使って『UsagePageとUsage』の『DataIndex』への対応を調べて、
HidP_GetDataで、ちゃんと区切られたデータを得て、
区切られたデータはDataIndexとRawValueのペアなので、さっき調べたUsagePageとUsageとの対応を調べて、それが何の数値なのかわかる感じ><

複数のデータで成り立つもの(例えばX座標とY座標)とか同じものが複数あって区別する必要があるもの(タッチパッドなら指ごとのデータとか)は、LinkCollectionっていう値を同じにする事でまとめて、フォルダみたいな扱い(ディレクトリ構造)になってる><(規格上はツリー状になるらしいけどタッチパッドの場合は孫まではなかった(?)のでそこまでは解析してない・・・><)

スレッドを表示

やっとHIDなデバイスからWM_INPUTの情報を全部取得できるようになった><
お手本にしたサイトのやり方はあくまでタッチパッドの座標とかに特化したやり方であって、ボタンとかの情報も取得しようとするとやり方がだいぶ違うっぽい><

APIがどうのというか、USB HIDの仕様がわけがわからない・・・><

RawInputAPIでボタンの状態をちゃんと取得するの難しすぎる・・・><

古いものを表示
:realtek:

思考の /dev/null