Mouse Testerでの検証で発見した、マウスを素早く動かすとCPIが低下する問題を改良します。
検証時に立てた仮説
マイコン側ではPMW3360から取得した16bitのマウスの移動量を8bitに丸めてレポートを作成しており、素早く移動したら移動量が-127~127を超えてしまってCPIが低くなることが直接の原因
を検証してみます。
デバッグしたところ、やはりマウスを素早く動かしたときに丸め処理が発生していました。
レポートディスクリプタの移動量の8bitの変数を16bitに変更します。
以下の通りHIDのレポートディスクリプタ定義のX, Yの移動量を16bitに変更します。
:
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // REPORT_COUNT (2)
:
:
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x16, 0x01, 0x80, // LOGICAL_MINIMUM (-32767)
0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x02, // REPORT_COUNT (2)
:
LOGICAL_MINIMUMの値は-32768(0x00, 0x80)でも問題ありません。
普通に使う範囲では±32767には到達しないので、左右対象,上下対象にしたいかどうかですね。
Mouse Testerでマウスを素早く動かしてもCPIが低くならず、1300で一定になることを確認できました。