読者です 読者をやめる 読者になる 読者になる

HID ゲームコントローラ 10bitアナログ軸

mla の HID joystickデモ ではアナログ軸として8ビット値を送信しているが
18F14K50 は10bitADCを持っているんで10bitで送ってみたい

各アナログ軸をuint16_t で宣言
レポートディスクリプタ変更点
    LOGICAL_MAXIMUM(1023)
    PHYSICAL_MAXIMUM(1023)
    REPORT_SIZE(16)

3軸だけテストしてみたところSliderはうまくいったがXとDialがうまくいかない
POTが 0x0~0xFFFF出力してて ゲームコントローラのプロパティに反映されるのは 0x0~0xFF みたいな感じで指示値が変化する

うまくいく奴といかない奴がいるのがよくわからん(Windowsのせい?)
Effective Resolutiuon Multiplier とかが怪しい?
Usbhid-dumpとか使ってちゃんと調べる必要ありかな

-追記1-
16bit変数に10bitを入れるので 6回左シフトして代入するようにして、LOGICAL_MAX(65535)、PHYSICAL_MAX(65535)にしてみたけど状況は変わらず

-追記2-
ほいほい堂 さん のブログに「軸構成をレジストリが覚えているから変更が反映されない場合がある」との記述
プロダクトIDを変更するか
下記の2箇所のレジストリを削除すると良いらしい
HKEY_CURRENT_USER/System/CurrentControlSet/Control/MediaProperties/PrivateProperties/DirectInput 以下
HKEY_CURRENT_USER/System/CurrentControlSet/Control/MediaProperties/PrivateProperties/Joystick/OEM 以下

自分の環境でもプロダクトIDを変更することですべての軸が正常に動作した