@openmouse/protocol 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +167 -0
- package/README.md +89 -0
- package/dist/asus/index.d.ts +52 -0
- package/dist/asus/index.d.ts.map +1 -0
- package/dist/asus/index.js +248 -0
- package/dist/asus/index.js.map +1 -0
- package/dist/atk/index.d.ts +200 -0
- package/dist/atk/index.d.ts.map +1 -0
- package/dist/atk/index.js +480 -0
- package/dist/atk/index.js.map +1 -0
- package/dist/bitmouse/index.d.ts +284 -0
- package/dist/bitmouse/index.d.ts.map +1 -0
- package/dist/bitmouse/index.js +396 -0
- package/dist/bitmouse/index.js.map +1 -0
- package/dist/compx/codec.d.ts +31 -0
- package/dist/compx/codec.d.ts.map +1 -0
- package/dist/compx/codec.js +50 -0
- package/dist/compx/codec.js.map +1 -0
- package/dist/corsair/index.d.ts +147 -0
- package/dist/corsair/index.d.ts.map +1 -0
- package/dist/corsair/index.js +223 -0
- package/dist/corsair/index.js.map +1 -0
- package/dist/dareu/index.d.ts +136 -0
- package/dist/dareu/index.d.ts.map +1 -0
- package/dist/dareu/index.js +344 -0
- package/dist/dareu/index.js.map +1 -0
- package/dist/drivers/asus/hid.d.ts +29 -0
- package/dist/drivers/asus/hid.d.ts.map +1 -0
- package/dist/drivers/asus/hid.js +419 -0
- package/dist/drivers/asus/hid.js.map +1 -0
- package/dist/drivers/atk/bitmouse-hid.d.ts +80 -0
- package/dist/drivers/atk/bitmouse-hid.d.ts.map +1 -0
- package/dist/drivers/atk/bitmouse-hid.js +501 -0
- package/dist/drivers/atk/bitmouse-hid.js.map +1 -0
- package/dist/drivers/atk/hid.d.ts +163 -0
- package/dist/drivers/atk/hid.d.ts.map +1 -0
- package/dist/drivers/atk/hid.js +1368 -0
- package/dist/drivers/atk/hid.js.map +1 -0
- package/dist/drivers/atk/products.d.ts +13 -0
- package/dist/drivers/atk/products.d.ts.map +1 -0
- package/dist/drivers/atk/products.js +13 -0
- package/dist/drivers/atk/products.js.map +1 -0
- package/dist/drivers/attackshark/dpi.d.ts +41 -0
- package/dist/drivers/attackshark/dpi.d.ts.map +1 -0
- package/dist/drivers/attackshark/dpi.js +215 -0
- package/dist/drivers/attackshark/dpi.js.map +1 -0
- package/dist/drivers/attackshark/hid.d.ts +124 -0
- package/dist/drivers/attackshark/hid.d.ts.map +1 -0
- package/dist/drivers/attackshark/hid.js +728 -0
- package/dist/drivers/attackshark/hid.js.map +1 -0
- package/dist/drivers/corsair/hid.d.ts +70 -0
- package/dist/drivers/corsair/hid.d.ts.map +1 -0
- package/dist/drivers/corsair/hid.js +414 -0
- package/dist/drivers/corsair/hid.js.map +1 -0
- package/dist/drivers/dareu/hid.d.ts +59 -0
- package/dist/drivers/dareu/hid.d.ts.map +1 -0
- package/dist/drivers/dareu/hid.js +478 -0
- package/dist/drivers/dareu/hid.js.map +1 -0
- package/dist/drivers/endgame/egg-op1-hid.d.ts +107 -0
- package/dist/drivers/endgame/egg-op1-hid.d.ts.map +1 -0
- package/dist/drivers/endgame/egg-op1-hid.js +605 -0
- package/dist/drivers/endgame/egg-op1-hid.js.map +1 -0
- package/dist/drivers/endgame/egg-we-control.d.ts +42 -0
- package/dist/drivers/endgame/egg-we-control.d.ts.map +1 -0
- package/dist/drivers/endgame/egg-we-control.js +87 -0
- package/dist/drivers/endgame/egg-we-control.js.map +1 -0
- package/dist/drivers/endgame/egg-we-hid.d.ts +58 -0
- package/dist/drivers/endgame/egg-we-hid.d.ts.map +1 -0
- package/dist/drivers/endgame/egg-we-hid.js +514 -0
- package/dist/drivers/endgame/egg-we-hid.js.map +1 -0
- package/dist/drivers/fantech/hid.d.ts +106 -0
- package/dist/drivers/fantech/hid.d.ts.map +1 -0
- package/dist/drivers/fantech/hid.js +295 -0
- package/dist/drivers/fantech/hid.js.map +1 -0
- package/dist/drivers/finalmouse/hid.d.ts +31 -0
- package/dist/drivers/finalmouse/hid.d.ts.map +1 -0
- package/dist/drivers/finalmouse/hid.js +181 -0
- package/dist/drivers/finalmouse/hid.js.map +1 -0
- package/dist/drivers/gearhub/hid.d.ts +191 -0
- package/dist/drivers/gearhub/hid.d.ts.map +1 -0
- package/dist/drivers/gearhub/hid.js +542 -0
- package/dist/drivers/gearhub/hid.js.map +1 -0
- package/dist/drivers/glorious/classic-hid.d.ts +62 -0
- package/dist/drivers/glorious/classic-hid.d.ts.map +1 -0
- package/dist/drivers/glorious/classic-hid.js +326 -0
- package/dist/drivers/glorious/classic-hid.js.map +1 -0
- package/dist/drivers/glorious/hid.d.ts +39 -0
- package/dist/drivers/glorious/hid.d.ts.map +1 -0
- package/dist/drivers/glorious/hid.js +203 -0
- package/dist/drivers/glorious/hid.js.map +1 -0
- package/dist/drivers/gwolves/hid.d.ts +27 -0
- package/dist/drivers/gwolves/hid.d.ts.map +1 -0
- package/dist/drivers/gwolves/hid.js +225 -0
- package/dist/drivers/gwolves/hid.js.map +1 -0
- package/dist/drivers/gwolves/products.d.ts +17 -0
- package/dist/drivers/gwolves/products.d.ts.map +1 -0
- package/dist/drivers/gwolves/products.js +58 -0
- package/dist/drivers/gwolves/products.js.map +1 -0
- package/dist/drivers/hyperx/hid.d.ts +59 -0
- package/dist/drivers/hyperx/hid.d.ts.map +1 -0
- package/dist/drivers/hyperx/hid.js +229 -0
- package/dist/drivers/hyperx/hid.js.map +1 -0
- package/dist/drivers/incott/hid.d.ts +513 -0
- package/dist/drivers/incott/hid.d.ts.map +1 -0
- package/dist/drivers/incott/hid.js +1173 -0
- package/dist/drivers/incott/hid.js.map +1 -0
- package/dist/drivers/index.d.ts +5 -0
- package/dist/drivers/index.d.ts.map +1 -0
- package/dist/drivers/index.js +5 -0
- package/dist/drivers/index.js.map +1 -0
- package/dist/drivers/keychron/m6-hid.d.ts +81 -0
- package/dist/drivers/keychron/m6-hid.d.ts.map +1 -0
- package/dist/drivers/keychron/m6-hid.js +486 -0
- package/dist/drivers/keychron/m6-hid.js.map +1 -0
- package/dist/drivers/keychron/nape-hid.d.ts +60 -0
- package/dist/drivers/keychron/nape-hid.d.ts.map +1 -0
- package/dist/drivers/keychron/nape-hid.js +432 -0
- package/dist/drivers/keychron/nape-hid.js.map +1 -0
- package/dist/drivers/ksnake/hid.d.ts +74 -0
- package/dist/drivers/ksnake/hid.d.ts.map +1 -0
- package/dist/drivers/ksnake/hid.js +368 -0
- package/dist/drivers/ksnake/hid.js.map +1 -0
- package/dist/drivers/lamzu/hid.d.ts +58 -0
- package/dist/drivers/lamzu/hid.d.ts.map +1 -0
- package/dist/drivers/lamzu/hid.js +414 -0
- package/dist/drivers/lamzu/hid.js.map +1 -0
- package/dist/drivers/lamzu-atlantis/hid.d.ts +148 -0
- package/dist/drivers/lamzu-atlantis/hid.d.ts.map +1 -0
- package/dist/drivers/lamzu-atlantis/hid.js +587 -0
- package/dist/drivers/lamzu-atlantis/hid.js.map +1 -0
- package/dist/drivers/logitech/bolt.d.ts +41 -0
- package/dist/drivers/logitech/bolt.d.ts.map +1 -0
- package/dist/drivers/logitech/bolt.js +105 -0
- package/dist/drivers/logitech/bolt.js.map +1 -0
- package/dist/drivers/logitech/hidpp.d.ts +525 -0
- package/dist/drivers/logitech/hidpp.d.ts.map +1 -0
- package/dist/drivers/logitech/hidpp.js +2774 -0
- package/dist/drivers/logitech/hidpp.js.map +1 -0
- package/dist/drivers/logitech/mode-status.d.ts +53 -0
- package/dist/drivers/logitech/mode-status.d.ts.map +1 -0
- package/dist/drivers/logitech/mode-status.js +52 -0
- package/dist/drivers/logitech/mode-status.js.map +1 -0
- package/dist/drivers/logitech/onboard-profiles.d.ts +298 -0
- package/dist/drivers/logitech/onboard-profiles.d.ts.map +1 -0
- package/dist/drivers/logitech/onboard-profiles.js +965 -0
- package/dist/drivers/logitech/onboard-profiles.js.map +1 -0
- package/dist/drivers/logitech/rgb-effects.d.ts +20 -0
- package/dist/drivers/logitech/rgb-effects.d.ts.map +1 -0
- package/dist/drivers/logitech/rgb-effects.js +93 -0
- package/dist/drivers/logitech/rgb-effects.js.map +1 -0
- package/dist/drivers/mchose/a5-gen1-hid.d.ts +36 -0
- package/dist/drivers/mchose/a5-gen1-hid.d.ts.map +1 -0
- package/dist/drivers/mchose/a5-gen1-hid.js +219 -0
- package/dist/drivers/mchose/a5-gen1-hid.js.map +1 -0
- package/dist/drivers/mchose/dock-hid.d.ts +26 -0
- package/dist/drivers/mchose/dock-hid.d.ts.map +1 -0
- package/dist/drivers/mchose/dock-hid.js +176 -0
- package/dist/drivers/mchose/dock-hid.js.map +1 -0
- package/dist/drivers/mchose/hid.d.ts +118 -0
- package/dist/drivers/mchose/hid.d.ts.map +1 -0
- package/dist/drivers/mchose/hid.js +550 -0
- package/dist/drivers/mchose/hid.js.map +1 -0
- package/dist/drivers/mchose/v3-hid.d.ts +109 -0
- package/dist/drivers/mchose/v3-hid.d.ts.map +1 -0
- package/dist/drivers/mchose/v3-hid.js +572 -0
- package/dist/drivers/mchose/v3-hid.js.map +1 -0
- package/dist/drivers/microsoft/hid.d.ts +25 -0
- package/dist/drivers/microsoft/hid.d.ts.map +1 -0
- package/dist/drivers/microsoft/hid.js +247 -0
- package/dist/drivers/microsoft/hid.js.map +1 -0
- package/dist/drivers/moddo/hid.d.ts +31 -0
- package/dist/drivers/moddo/hid.d.ts.map +1 -0
- package/dist/drivers/moddo/hid.js +154 -0
- package/dist/drivers/moddo/hid.js.map +1 -0
- package/dist/drivers/mouse-types.d.ts +388 -0
- package/dist/drivers/mouse-types.d.ts.map +1 -0
- package/dist/drivers/mouse-types.js +2 -0
- package/dist/drivers/mouse-types.js.map +1 -0
- package/dist/drivers/ninjutso/hid.d.ts +62 -0
- package/dist/drivers/ninjutso/hid.d.ts.map +1 -0
- package/dist/drivers/ninjutso/hid.js +680 -0
- package/dist/drivers/ninjutso/hid.js.map +1 -0
- package/dist/drivers/orbital/hid.d.ts +24 -0
- package/dist/drivers/orbital/hid.d.ts.map +1 -0
- package/dist/drivers/orbital/hid.js +85 -0
- package/dist/drivers/orbital/hid.js.map +1 -0
- package/dist/drivers/orbital/host-protocol.d.ts +59 -0
- package/dist/drivers/orbital/host-protocol.d.ts.map +1 -0
- package/dist/drivers/orbital/host-protocol.js +884 -0
- package/dist/drivers/orbital/host-protocol.js.map +1 -0
- package/dist/drivers/pulsar/pulsar-hid.d.ts +63 -0
- package/dist/drivers/pulsar/pulsar-hid.d.ts.map +1 -0
- package/dist/drivers/pulsar/pulsar-hid.js +381 -0
- package/dist/drivers/pulsar/pulsar-hid.js.map +1 -0
- package/dist/drivers/pulsar/pulsar-pro-hid.d.ts +46 -0
- package/dist/drivers/pulsar/pulsar-pro-hid.d.ts.map +1 -0
- package/dist/drivers/pulsar/pulsar-pro-hid.js +343 -0
- package/dist/drivers/pulsar/pulsar-pro-hid.js.map +1 -0
- package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts +40 -0
- package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts.map +1 -0
- package/dist/drivers/pulsar/pulsar-xs1-hid.js +251 -0
- package/dist/drivers/pulsar/pulsar-xs1-hid.js.map +1 -0
- package/dist/drivers/rawm/hid.d.ts +29 -0
- package/dist/drivers/rawm/hid.d.ts.map +1 -0
- package/dist/drivers/rawm/hid.js +210 -0
- package/dist/drivers/rawm/hid.js.map +1 -0
- package/dist/drivers/razer/cobra-hid.d.ts +63 -0
- package/dist/drivers/razer/cobra-hid.d.ts.map +1 -0
- package/dist/drivers/razer/cobra-hid.js +282 -0
- package/dist/drivers/razer/cobra-hid.js.map +1 -0
- package/dist/drivers/razer/hid-open.d.ts +13 -0
- package/dist/drivers/razer/hid-open.d.ts.map +1 -0
- package/dist/drivers/razer/hid-open.js +29 -0
- package/dist/drivers/razer/hid-open.js.map +1 -0
- package/dist/drivers/razer/hid.d.ts +231 -0
- package/dist/drivers/razer/hid.d.ts.map +1 -0
- package/dist/drivers/razer/hid.js +772 -0
- package/dist/drivers/razer/hid.js.map +1 -0
- package/dist/drivers/razer/viper-hid.d.ts +33 -0
- package/dist/drivers/razer/viper-hid.d.ts.map +1 -0
- package/dist/drivers/razer/viper-hid.js +177 -0
- package/dist/drivers/razer/viper-hid.js.map +1 -0
- package/dist/drivers/razer/viper-mini-hid.d.ts +58 -0
- package/dist/drivers/razer/viper-mini-hid.d.ts.map +1 -0
- package/dist/drivers/razer/viper-mini-hid.js +273 -0
- package/dist/drivers/razer/viper-mini-hid.js.map +1 -0
- package/dist/drivers/razer/viper-v4-pro-hid.d.ts +26 -0
- package/dist/drivers/razer/viper-v4-pro-hid.d.ts.map +1 -0
- package/dist/drivers/razer/viper-v4-pro-hid.js +154 -0
- package/dist/drivers/razer/viper-v4-pro-hid.js.map +1 -0
- package/dist/drivers/registry.d.ts +70 -0
- package/dist/drivers/registry.d.ts.map +1 -0
- package/dist/drivers/registry.js +146 -0
- package/dist/drivers/registry.js.map +1 -0
- package/dist/drivers/steelseries/aerox3-hid.d.ts +53 -0
- package/dist/drivers/steelseries/aerox3-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/aerox3-hid.js +172 -0
- package/dist/drivers/steelseries/aerox3-hid.js.map +1 -0
- package/dist/drivers/steelseries/aerox5-hid.d.ts +54 -0
- package/dist/drivers/steelseries/aerox5-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/aerox5-hid.js +173 -0
- package/dist/drivers/steelseries/aerox5-hid.js.map +1 -0
- package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts +69 -0
- package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/aerox5-wireless-hid.js +234 -0
- package/dist/drivers/steelseries/aerox5-wireless-hid.js.map +1 -0
- package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts +70 -0
- package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/aerox9-wireless-hid.js +227 -0
- package/dist/drivers/steelseries/aerox9-wireless-hid.js.map +1 -0
- package/dist/drivers/steelseries/hid.d.ts +48 -0
- package/dist/drivers/steelseries/hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/hid.js +157 -0
- package/dist/drivers/steelseries/hid.js.map +1 -0
- package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts +62 -0
- package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/prime-mini-wireless-hid.js +215 -0
- package/dist/drivers/steelseries/prime-mini-wireless-hid.js.map +1 -0
- package/dist/drivers/steelseries/prime-plus-hid.d.ts +51 -0
- package/dist/drivers/steelseries/prime-plus-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/prime-plus-hid.js +150 -0
- package/dist/drivers/steelseries/prime-plus-hid.js.map +1 -0
- package/dist/drivers/steelseries/rival3-wireless-hid.d.ts +61 -0
- package/dist/drivers/steelseries/rival3-wireless-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/rival3-wireless-hid.js +185 -0
- package/dist/drivers/steelseries/rival3-wireless-hid.js.map +1 -0
- package/dist/drivers/steelseries/rival310-hid.d.ts +59 -0
- package/dist/drivers/steelseries/rival310-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/rival310-hid.js +182 -0
- package/dist/drivers/steelseries/rival310-hid.js.map +1 -0
- package/dist/drivers/steelseries/rival650-hid.d.ts +68 -0
- package/dist/drivers/steelseries/rival650-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/rival650-hid.js +209 -0
- package/dist/drivers/steelseries/rival650-hid.js.map +1 -0
- package/dist/drivers/steelseries/sensei-ten-hid.d.ts +62 -0
- package/dist/drivers/steelseries/sensei-ten-hid.d.ts.map +1 -0
- package/dist/drivers/steelseries/sensei-ten-hid.js +186 -0
- package/dist/drivers/steelseries/sensei-ten-hid.js.map +1 -0
- package/dist/drivers/teevolution/hid.d.ts +82 -0
- package/dist/drivers/teevolution/hid.d.ts.map +1 -0
- package/dist/drivers/teevolution/hid.js +607 -0
- package/dist/drivers/teevolution/hid.js.map +1 -0
- package/dist/drivers/vendors.d.ts +254 -0
- package/dist/drivers/vendors.d.ts.map +1 -0
- package/dist/drivers/vendors.js +587 -0
- package/dist/drivers/vendors.js.map +1 -0
- package/dist/drivers/vgn/hid.d.ts +33 -0
- package/dist/drivers/vgn/hid.d.ts.map +1 -0
- package/dist/drivers/vgn/hid.js +213 -0
- package/dist/drivers/vgn/hid.js.map +1 -0
- package/dist/drivers/wallhack/keyboard-hid.d.ts +28 -0
- package/dist/drivers/wallhack/keyboard-hid.d.ts.map +1 -0
- package/dist/drivers/wallhack/keyboard-hid.js +80 -0
- package/dist/drivers/wallhack/keyboard-hid.js.map +1 -0
- package/dist/drivers/wallhack/mouse-hid.d.ts +45 -0
- package/dist/drivers/wallhack/mouse-hid.d.ts.map +1 -0
- package/dist/drivers/wallhack/mouse-hid.js +288 -0
- package/dist/drivers/wallhack/mouse-hid.js.map +1 -0
- package/dist/drivers/webhid.d.ts +59 -0
- package/dist/drivers/webhid.d.ts.map +1 -0
- package/dist/drivers/webhid.js +2 -0
- package/dist/drivers/webhid.js.map +1 -0
- package/dist/drivers/wlmouse/hid.d.ts +81 -0
- package/dist/drivers/wlmouse/hid.d.ts.map +1 -0
- package/dist/drivers/wlmouse/hid.js +576 -0
- package/dist/drivers/wlmouse/hid.js.map +1 -0
- package/dist/drivers/wooting/hid.d.ts +86 -0
- package/dist/drivers/wooting/hid.d.ts.map +1 -0
- package/dist/drivers/wooting/hid.js +320 -0
- package/dist/drivers/wooting/hid.js.map +1 -0
- package/dist/drivers/zaunkoenig/hid.d.ts +31 -0
- package/dist/drivers/zaunkoenig/hid.d.ts.map +1 -0
- package/dist/drivers/zaunkoenig/hid.js +162 -0
- package/dist/drivers/zaunkoenig/hid.js.map +1 -0
- package/dist/endgame-gear/op1.d.ts +165 -0
- package/dist/endgame-gear/op1.d.ts.map +1 -0
- package/dist/endgame-gear/op1.js +384 -0
- package/dist/endgame-gear/op1.js.map +1 -0
- package/dist/endgame-gear/wireless.d.ts +93 -0
- package/dist/endgame-gear/wireless.d.ts.map +1 -0
- package/dist/endgame-gear/wireless.js +242 -0
- package/dist/endgame-gear/wireless.js.map +1 -0
- package/dist/fantech/index.d.ts +9 -0
- package/dist/fantech/index.d.ts.map +1 -0
- package/dist/fantech/index.js +11 -0
- package/dist/fantech/index.js.map +1 -0
- package/dist/finalmouse/index.d.ts +41 -0
- package/dist/finalmouse/index.d.ts.map +1 -0
- package/dist/finalmouse/index.js +106 -0
- package/dist/finalmouse/index.js.map +1 -0
- package/dist/gearhub/index.d.ts +210 -0
- package/dist/gearhub/index.d.ts.map +1 -0
- package/dist/gearhub/index.js +282 -0
- package/dist/gearhub/index.js.map +1 -0
- package/dist/glorious/index.d.ts +89 -0
- package/dist/glorious/index.d.ts.map +1 -0
- package/dist/glorious/index.js +236 -0
- package/dist/glorious/index.js.map +1 -0
- package/dist/glorious-classic/index.d.ts +103 -0
- package/dist/glorious-classic/index.d.ts.map +1 -0
- package/dist/glorious-classic/index.js +304 -0
- package/dist/glorious-classic/index.js.map +1 -0
- package/dist/gwolves/index.d.ts +82 -0
- package/dist/gwolves/index.d.ts.map +1 -0
- package/dist/gwolves/index.js +197 -0
- package/dist/gwolves/index.js.map +1 -0
- package/dist/hyperx/index.d.ts +181 -0
- package/dist/hyperx/index.d.ts.map +1 -0
- package/dist/hyperx/index.js +303 -0
- package/dist/hyperx/index.js.map +1 -0
- package/dist/incott/index.d.ts +1067 -0
- package/dist/incott/index.d.ts.map +1 -0
- package/dist/incott/index.js +1482 -0
- package/dist/incott/index.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/keychron/index.d.ts +194 -0
- package/dist/keychron/index.d.ts.map +1 -0
- package/dist/keychron/index.js +341 -0
- package/dist/keychron/index.js.map +1 -0
- package/dist/ksnake/index.d.ts +157 -0
- package/dist/ksnake/index.d.ts.map +1 -0
- package/dist/ksnake/index.js +314 -0
- package/dist/ksnake/index.js.map +1 -0
- package/dist/lamzu/atlantis.d.ts +237 -0
- package/dist/lamzu/atlantis.d.ts.map +1 -0
- package/dist/lamzu/atlantis.js +263 -0
- package/dist/lamzu/atlantis.js.map +1 -0
- package/dist/lamzu/index.d.ts +60 -0
- package/dist/lamzu/index.d.ts.map +1 -0
- package/dist/lamzu/index.js +86 -0
- package/dist/lamzu/index.js.map +1 -0
- package/dist/logitech/controls.d.ts +138 -0
- package/dist/logitech/controls.d.ts.map +1 -0
- package/dist/logitech/controls.js +184 -0
- package/dist/logitech/controls.js.map +1 -0
- package/dist/logitech/friendly-name.d.ts +50 -0
- package/dist/logitech/friendly-name.d.ts.map +1 -0
- package/dist/logitech/friendly-name.js +74 -0
- package/dist/logitech/friendly-name.js.map +1 -0
- package/dist/logitech/haptics.d.ts +97 -0
- package/dist/logitech/haptics.d.ts.map +1 -0
- package/dist/logitech/haptics.js +116 -0
- package/dist/logitech/haptics.js.map +1 -0
- package/dist/logitech/hosts.d.ts +55 -0
- package/dist/logitech/hosts.d.ts.map +1 -0
- package/dist/logitech/hosts.js +80 -0
- package/dist/logitech/hosts.js.map +1 -0
- package/dist/logitech/index.d.ts +127 -0
- package/dist/logitech/index.d.ts.map +1 -0
- package/dist/logitech/index.js +233 -0
- package/dist/logitech/index.js.map +1 -0
- package/dist/logitech/wheel.d.ts +117 -0
- package/dist/logitech/wheel.d.ts.map +1 -0
- package/dist/logitech/wheel.js +133 -0
- package/dist/logitech/wheel.js.map +1 -0
- package/dist/mchose/a5-gen1.d.ts +38 -0
- package/dist/mchose/a5-gen1.d.ts.map +1 -0
- package/dist/mchose/a5-gen1.js +60 -0
- package/dist/mchose/a5-gen1.js.map +1 -0
- package/dist/mchose/buttons.d.ts +66 -0
- package/dist/mchose/buttons.d.ts.map +1 -0
- package/dist/mchose/buttons.js +184 -0
- package/dist/mchose/buttons.js.map +1 -0
- package/dist/mchose/dock.d.ts +77 -0
- package/dist/mchose/dock.d.ts.map +1 -0
- package/dist/mchose/dock.js +133 -0
- package/dist/mchose/dock.js.map +1 -0
- package/dist/mchose/index.d.ts +299 -0
- package/dist/mchose/index.d.ts.map +1 -0
- package/dist/mchose/index.js +429 -0
- package/dist/mchose/index.js.map +1 -0
- package/dist/mchose/v3-buttons.d.ts +64 -0
- package/dist/mchose/v3-buttons.d.ts.map +1 -0
- package/dist/mchose/v3-buttons.js +258 -0
- package/dist/mchose/v3-buttons.js.map +1 -0
- package/dist/mchose/v3.d.ts +380 -0
- package/dist/mchose/v3.d.ts.map +1 -0
- package/dist/mchose/v3.js +608 -0
- package/dist/mchose/v3.js.map +1 -0
- package/dist/microsoft/index.d.ts +19 -0
- package/dist/microsoft/index.d.ts.map +1 -0
- package/dist/microsoft/index.js +22 -0
- package/dist/microsoft/index.js.map +1 -0
- package/dist/moddo/index.d.ts +72 -0
- package/dist/moddo/index.d.ts.map +1 -0
- package/dist/moddo/index.js +147 -0
- package/dist/moddo/index.js.map +1 -0
- package/dist/ninjutso/index.d.ts +74 -0
- package/dist/ninjutso/index.d.ts.map +1 -0
- package/dist/ninjutso/index.js +133 -0
- package/dist/ninjutso/index.js.map +1 -0
- package/dist/orbital/index.d.ts +14 -0
- package/dist/orbital/index.d.ts.map +1 -0
- package/dist/orbital/index.js +19 -0
- package/dist/orbital/index.js.map +1 -0
- package/dist/pulsar/index.d.ts +81 -0
- package/dist/pulsar/index.d.ts.map +1 -0
- package/dist/pulsar/index.js +185 -0
- package/dist/pulsar/index.js.map +1 -0
- package/dist/rawm/index.d.ts +55 -0
- package/dist/rawm/index.d.ts.map +1 -0
- package/dist/rawm/index.js +229 -0
- package/dist/rawm/index.js.map +1 -0
- package/dist/razer/codec.d.ts +504 -0
- package/dist/razer/codec.d.ts.map +1 -0
- package/dist/razer/codec.js +648 -0
- package/dist/razer/codec.js.map +1 -0
- package/dist/razer/devices.d.ts +156 -0
- package/dist/razer/devices.d.ts.map +1 -0
- package/dist/razer/devices.js +540 -0
- package/dist/razer/devices.js.map +1 -0
- package/dist/razer/index.d.ts +2 -0
- package/dist/razer/index.d.ts.map +1 -0
- package/dist/razer/index.js +2 -0
- package/dist/razer/index.js.map +1 -0
- package/dist/razer/v4.d.ts +19 -0
- package/dist/razer/v4.d.ts.map +1 -0
- package/dist/razer/v4.js +51 -0
- package/dist/razer/v4.js.map +1 -0
- package/dist/steelseries/aerox3.d.ts +236 -0
- package/dist/steelseries/aerox3.d.ts.map +1 -0
- package/dist/steelseries/aerox3.js +311 -0
- package/dist/steelseries/aerox3.js.map +1 -0
- package/dist/steelseries/aerox5-wireless.d.ts +300 -0
- package/dist/steelseries/aerox5-wireless.d.ts.map +1 -0
- package/dist/steelseries/aerox5-wireless.js +389 -0
- package/dist/steelseries/aerox5-wireless.js.map +1 -0
- package/dist/steelseries/aerox5.d.ts +228 -0
- package/dist/steelseries/aerox5.d.ts.map +1 -0
- package/dist/steelseries/aerox5.js +294 -0
- package/dist/steelseries/aerox5.js.map +1 -0
- package/dist/steelseries/aerox9-wireless.d.ts +213 -0
- package/dist/steelseries/aerox9-wireless.d.ts.map +1 -0
- package/dist/steelseries/aerox9-wireless.js +305 -0
- package/dist/steelseries/aerox9-wireless.js.map +1 -0
- package/dist/steelseries/devices.d.ts +82 -0
- package/dist/steelseries/devices.d.ts.map +1 -0
- package/dist/steelseries/devices.js +310 -0
- package/dist/steelseries/devices.js.map +1 -0
- package/dist/steelseries/index.d.ts +13 -0
- package/dist/steelseries/index.d.ts.map +1 -0
- package/dist/steelseries/index.js +13 -0
- package/dist/steelseries/index.js.map +1 -0
- package/dist/steelseries/prime-mini-wireless.d.ts +253 -0
- package/dist/steelseries/prime-mini-wireless.d.ts.map +1 -0
- package/dist/steelseries/prime-mini-wireless.js +351 -0
- package/dist/steelseries/prime-mini-wireless.js.map +1 -0
- package/dist/steelseries/prime-plus.d.ts +179 -0
- package/dist/steelseries/prime-plus.d.ts.map +1 -0
- package/dist/steelseries/prime-plus.js +275 -0
- package/dist/steelseries/prime-plus.js.map +1 -0
- package/dist/steelseries/rival3-wireless.d.ts +222 -0
- package/dist/steelseries/rival3-wireless.d.ts.map +1 -0
- package/dist/steelseries/rival3-wireless.js +308 -0
- package/dist/steelseries/rival3-wireless.js.map +1 -0
- package/dist/steelseries/rival3.d.ts +99 -0
- package/dist/steelseries/rival3.d.ts.map +1 -0
- package/dist/steelseries/rival3.js +147 -0
- package/dist/steelseries/rival3.js.map +1 -0
- package/dist/steelseries/rival310.d.ts +230 -0
- package/dist/steelseries/rival310.d.ts.map +1 -0
- package/dist/steelseries/rival310.js +322 -0
- package/dist/steelseries/rival310.js.map +1 -0
- package/dist/steelseries/rival650.d.ts +215 -0
- package/dist/steelseries/rival650.d.ts.map +1 -0
- package/dist/steelseries/rival650.js +284 -0
- package/dist/steelseries/rival650.js.map +1 -0
- package/dist/steelseries/sensei-ten.d.ts +283 -0
- package/dist/steelseries/sensei-ten.d.ts.map +1 -0
- package/dist/steelseries/sensei-ten.js +389 -0
- package/dist/steelseries/sensei-ten.js.map +1 -0
- package/dist/teevolution/index.d.ts +211 -0
- package/dist/teevolution/index.d.ts.map +1 -0
- package/dist/teevolution/index.js +458 -0
- package/dist/teevolution/index.js.map +1 -0
- package/dist/valkyrie/index.d.ts +19 -0
- package/dist/valkyrie/index.d.ts.map +1 -0
- package/dist/valkyrie/index.js +43 -0
- package/dist/valkyrie/index.js.map +1 -0
- package/dist/valkyrie/settings.d.ts +28 -0
- package/dist/valkyrie/settings.d.ts.map +1 -0
- package/dist/valkyrie/settings.js +84 -0
- package/dist/valkyrie/settings.js.map +1 -0
- package/dist/vgn/index.d.ts +59 -0
- package/dist/vgn/index.d.ts.map +1 -0
- package/dist/vgn/index.js +165 -0
- package/dist/vgn/index.js.map +1 -0
- package/dist/wallhack/index.d.ts +165 -0
- package/dist/wallhack/index.d.ts.map +1 -0
- package/dist/wallhack/index.js +226 -0
- package/dist/wallhack/index.js.map +1 -0
- package/dist/wlmouse/index.d.ts +4 -0
- package/dist/wlmouse/index.d.ts.map +1 -0
- package/dist/wlmouse/index.js +7 -0
- package/dist/wlmouse/index.js.map +1 -0
- package/dist/wooting/index.d.ts +225 -0
- package/dist/wooting/index.d.ts.map +1 -0
- package/dist/wooting/index.js +296 -0
- package/dist/wooting/index.js.map +1 -0
- package/dist/zaunkoenig/index.d.ts +49 -0
- package/dist/zaunkoenig/index.d.ts.map +1 -0
- package/dist/zaunkoenig/index.js +127 -0
- package/dist/zaunkoenig/index.js.map +1 -0
- package/package.json +193 -0
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
import { MCHOSE_V3_BUTTONS, MCHOSE_V3_COMMAND, MCHOSE_V3_DEBOUNCE_MAX_MS, MCHOSE_V3_DPI_MIN, MCHOSE_V3_DPI_STAGES, MCHOSE_V3_DPI_STEP, MCHOSE_V3_SLEEP_OPTIONS, MCHOSE_V3_MODES, MCHOSE_V3_LINK_PRODUCT_IDS, MCHOSE_V3_REPORT_ID, MCHOSE_V3_USAGE, MCHOSE_V3_USAGE_PAGE, mchoseV3DecodeButtons, mchoseV3DecodeDeviceInfo, mchoseV3DecodeDpi, mchoseV3DecodeLiftOff, mchoseV3DecodeSensor, mchoseV3DecodeSettings, mchoseV3ButtonAction, mchoseV3ButtonActionLabels, mchoseV3ButtonActionName, mchoseV3CheckSettings, mchoseV3Encode, mchoseV3EncodeButtons, mchoseV3EncodeDpiTable, mchoseV3EncodeLiftOff, mchoseV3EncodeSensor, mchoseV3EncodeSettings, mchoseV3FindProduct, mchoseV3IsBusy, mchoseV3IsProductId, mchoseV3IsRejection, mchoseV3LiftOffLabels, mchoseV3LiftOffStop, mchoseV3Payload, mchoseV3PollingRates, mchoseV3RoundDpi, } from "@openmouse/protocol/mchose";
|
|
2
|
+
import { VENDOR_ID } from "../vendors.js";
|
|
3
|
+
/**
|
|
4
|
+
* MCHOSE A7 V3 and its siblings.
|
|
5
|
+
*
|
|
6
|
+
* This generation abandoned the A7 V2's inverted feature reports for a
|
|
7
|
+
* `0x4d`-magic output report (see `src/mchose/v3.ts`). The command set was read
|
|
8
|
+
* out of MCHOSE's own M HUB bundle, and the **reads** have since been confirmed
|
|
9
|
+
* against a real A7 V3 Ultra+ on its 2.4 GHz receiver: identity, battery and
|
|
10
|
+
* charge state, the DPI table, polling, profile, sleep, debounce, the sensor
|
|
11
|
+
* flags and the button table all came back correctly. See the capture notes in
|
|
12
|
+
* docs/mchose-protocol.md.
|
|
13
|
+
*
|
|
14
|
+
* **The writes have not been exercised on hardware.** They are built to the
|
|
15
|
+
* same shape M HUB uses, and the framing under them is proven by the reads, but
|
|
16
|
+
* no byte here has been watched going into a real V3. Three things follow:
|
|
17
|
+
*
|
|
18
|
+
* - every write is a read-modify-write of a **whole block**, because this
|
|
19
|
+
* protocol has no partial update. A setter reads, edits the decoded object,
|
|
20
|
+
* writes and reads back; a failed read aborts rather than writing defaults
|
|
21
|
+
* over a working configuration, and bytes this codec does not understand are
|
|
22
|
+
* carried through rather than zeroed;
|
|
23
|
+
* - every setter verifies, and throws when the mouse reports something other
|
|
24
|
+
* than what it was told;
|
|
25
|
+
* - the button vocabulary is M HUB's own, lifted from the vendor bundle's
|
|
26
|
+
* action tables rather than guessed at. See `src/mchose/v3-buttons.ts`; the
|
|
27
|
+
* type numbers are **not** the A7 V2's.
|
|
28
|
+
*
|
|
29
|
+
* {@link WRITE_SETTLE_MS} is the number most likely to be wrong: it is the A7
|
|
30
|
+
* V2's figure, and this generation's has never been measured.
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* How long to wait for a reply.
|
|
34
|
+
*
|
|
35
|
+
* Measured, not guessed. On a cable, `0x0900`, `0x0002`, `0x0003` and `0x0001`
|
|
36
|
+
* all answer in 1–3 ms. Everything else answers in **almost exactly 1.001 s**:
|
|
37
|
+
* `0x0901` does it on the cable, and `0x0900` does it over the receiver when
|
|
38
|
+
* the mouse is not currently reachable. That looks like a fixed deferral inside
|
|
39
|
+
* the firmware rather than a variable delay, so the budget only has to clear
|
|
40
|
+
* it — an earlier 600 ms timeout sat just underneath, which meant those replies
|
|
41
|
+
* were *always* missed and then mistaken for the next attempt's answer.
|
|
42
|
+
*/
|
|
43
|
+
const REPLY_TIMEOUT_MS = 1500;
|
|
44
|
+
const READ_ATTEMPTS = 3;
|
|
45
|
+
/**
|
|
46
|
+
* How many "ask again" replies to accept before giving up on a command. Each
|
|
47
|
+
* one costs a full second, and a receiver with no mouse behind it will keep
|
|
48
|
+
* sending them, so this stays low: the point is to ride out a mouse waking up,
|
|
49
|
+
* not to wait for one that is switched off.
|
|
50
|
+
*/
|
|
51
|
+
const BUSY_ATTEMPTS = 2;
|
|
52
|
+
/** M HUB pauses this long before re-asking a busy device. */
|
|
53
|
+
const BUSY_RETRY_MS = 30;
|
|
54
|
+
/** `0x0901`'s target byte: the mouse rather than the receiver in front of it. */
|
|
55
|
+
const VERSION_TARGET_MOUSE = 0;
|
|
56
|
+
/** The X axis of the DPI table; Y is a separate table on the models that have one. */
|
|
57
|
+
const DPI_AXIS_X = 0;
|
|
58
|
+
/**
|
|
59
|
+
* How long to let a write commit before reading it back.
|
|
60
|
+
*
|
|
61
|
+
* Untimed on this generation. The A7 V2 needed 400 ms for its ordinary config
|
|
62
|
+
* write and up to two seconds for its slowest, so this starts at the V2's
|
|
63
|
+
* figure; if a V3 write reads back stale, this is the first number to raise.
|
|
64
|
+
*/
|
|
65
|
+
const WRITE_SETTLE_MS = 400;
|
|
66
|
+
const delay = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); });
|
|
67
|
+
/** The receivers serve every model in the generation. */
|
|
68
|
+
const LINK_PRODUCT_IDS = Object.values(MCHOSE_V3_LINK_PRODUCT_IDS);
|
|
69
|
+
export class MchoseV3HidClient {
|
|
70
|
+
device;
|
|
71
|
+
queue = Promise.resolve();
|
|
72
|
+
/**
|
|
73
|
+
* Set once a command has exhausted its retries, and cleared at the top of
|
|
74
|
+
* every status read. A status is six commands, so without this a mouse that
|
|
75
|
+
* is off or out of range costs six full retry budgets — long enough to look
|
|
76
|
+
* like the app has hung. One silent command is enough to conclude nothing is
|
|
77
|
+
* listening; the next poll gets a clean try.
|
|
78
|
+
*/
|
|
79
|
+
unresponsive = false;
|
|
80
|
+
/** Resolved once per session; every range check needs the model's limits. */
|
|
81
|
+
cachedProduct = null;
|
|
82
|
+
/**
|
|
83
|
+
* Set when the device answered "ask again" rather than with data. It means
|
|
84
|
+
* the receiver is plugged in but the mouse behind it is not reachable, which
|
|
85
|
+
* is a different thing to tell the user than "nothing answered".
|
|
86
|
+
*/
|
|
87
|
+
linkBusy = false;
|
|
88
|
+
constructor(device) {
|
|
89
|
+
this.device = device;
|
|
90
|
+
}
|
|
91
|
+
static isSupported(device) {
|
|
92
|
+
const search = (collection) => (collection.usagePage === MCHOSE_V3_USAGE_PAGE && collection.usage === MCHOSE_V3_USAGE)
|
|
93
|
+
|| collection.children.some(search);
|
|
94
|
+
return device.vendorId === VENDOR_ID.mchose
|
|
95
|
+
// An allowlist, not a usage-page match: this collection is shared with
|
|
96
|
+
// the V2 protocol, so only ids known to be V3 may be claimed here.
|
|
97
|
+
&& mchoseV3IsProductId(device.productId)
|
|
98
|
+
&& device.collections.some(search);
|
|
99
|
+
}
|
|
100
|
+
async open() {
|
|
101
|
+
if (!this.device.opened)
|
|
102
|
+
await this.device.open();
|
|
103
|
+
}
|
|
104
|
+
async close() {
|
|
105
|
+
if (this.device.opened)
|
|
106
|
+
await this.device.close();
|
|
107
|
+
}
|
|
108
|
+
/** Nothing here subscribes to unsolicited state. */
|
|
109
|
+
async startNotifications() {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
displayName() {
|
|
113
|
+
return this.device.productName?.trim() || "MCHOSE";
|
|
114
|
+
}
|
|
115
|
+
/** Wired when the host is talking to the mouse rather than to a receiver. */
|
|
116
|
+
isWired() {
|
|
117
|
+
return !LINK_PRODUCT_IDS.includes(this.device.productId);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Send one command and wait for the reply carrying the same id.
|
|
121
|
+
*
|
|
122
|
+
* Replies arrive as input reports rather than as the answer to a read, so
|
|
123
|
+
* the listener goes on before the write and the id match is what pairs them
|
|
124
|
+
* up — the mouse also pushes movement and battery reports down this pipe.
|
|
125
|
+
*/
|
|
126
|
+
request(command, data = []) {
|
|
127
|
+
const run = async () => {
|
|
128
|
+
if (this.unresponsive)
|
|
129
|
+
return null;
|
|
130
|
+
const body = mchoseV3Encode(command, data);
|
|
131
|
+
let busy = 0;
|
|
132
|
+
let heardAnything = false;
|
|
133
|
+
for (let attempt = 0; attempt < READ_ATTEMPTS; attempt += 1) {
|
|
134
|
+
const reply = await this.attempt(command, body);
|
|
135
|
+
if (reply.kind === "payload")
|
|
136
|
+
return reply.payload;
|
|
137
|
+
if (reply.kind !== "timeout")
|
|
138
|
+
heardAnything = true;
|
|
139
|
+
// A refusal is final: the firmware answered, and it said no.
|
|
140
|
+
if (reply.kind === "rejected")
|
|
141
|
+
return null;
|
|
142
|
+
if (reply.kind === "busy") {
|
|
143
|
+
busy += 1;
|
|
144
|
+
this.linkBusy = true;
|
|
145
|
+
if (busy >= BUSY_ATTEMPTS)
|
|
146
|
+
return null;
|
|
147
|
+
await delay(BUSY_RETRY_MS);
|
|
148
|
+
// A busy reply does not count against the timeout budget; the device
|
|
149
|
+
// is plainly listening, it just has nothing to say yet.
|
|
150
|
+
attempt -= 1;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Only conclude nothing is listening when nothing ever arrived. A device
|
|
154
|
+
// that answered "busy" or "no" is awake, and shutting the rest of the
|
|
155
|
+
// status read down would throw away commands it would have answered.
|
|
156
|
+
if (!heardAnything)
|
|
157
|
+
this.unresponsive = true;
|
|
158
|
+
return null;
|
|
159
|
+
};
|
|
160
|
+
const next = this.queue.then(run, run);
|
|
161
|
+
this.queue = next.catch(() => undefined);
|
|
162
|
+
return next;
|
|
163
|
+
}
|
|
164
|
+
/** One send-and-wait, classifying whatever comes back. */
|
|
165
|
+
attempt(command, body) {
|
|
166
|
+
return new Promise((resolve) => {
|
|
167
|
+
const finish = (reply) => {
|
|
168
|
+
clearTimeout(timer);
|
|
169
|
+
this.device.removeEventListener("inputreport", listener);
|
|
170
|
+
resolve(reply);
|
|
171
|
+
};
|
|
172
|
+
const listener = (event) => {
|
|
173
|
+
const frame = new Uint8Array(event.data.buffer);
|
|
174
|
+
const payload = mchoseV3Payload(frame, command);
|
|
175
|
+
if (payload) {
|
|
176
|
+
finish(mchoseV3IsBusy(payload) ? { kind: "busy" } : { kind: "payload", payload });
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// A refusal carries command 0x0000, so it never matches the id above.
|
|
180
|
+
if (mchoseV3IsRejection(frame))
|
|
181
|
+
finish({ kind: "rejected" });
|
|
182
|
+
};
|
|
183
|
+
const timer = setTimeout(() => { finish({ kind: "timeout" }); }, REPLY_TIMEOUT_MS);
|
|
184
|
+
this.device.addEventListener("inputreport", listener);
|
|
185
|
+
this.device.sendReport(MCHOSE_V3_REPORT_ID, body)
|
|
186
|
+
.catch(() => { finish({ kind: "timeout" }); });
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
async readDeviceInfo() {
|
|
190
|
+
const payload = await this.request(MCHOSE_V3_COMMAND.readDeviceInfo);
|
|
191
|
+
return payload ? mchoseV3DecodeDeviceInfo(payload) : null;
|
|
192
|
+
}
|
|
193
|
+
async readSettings() {
|
|
194
|
+
const payload = await this.request(MCHOSE_V3_COMMAND.readSettings);
|
|
195
|
+
return payload ? mchoseV3DecodeSettings(payload) : null;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* `0x0901` takes a target byte: 0 for the mouse, 1 for the receiver. Sent
|
|
199
|
+
* without one it answers with an **empty** data block rather than an error,
|
|
200
|
+
* which is how the first hardware capture came back with no firmware at all.
|
|
201
|
+
*/
|
|
202
|
+
async readVersion() {
|
|
203
|
+
const payload = await this.request(MCHOSE_V3_COMMAND.readVersion, [VERSION_TARGET_MOUSE]);
|
|
204
|
+
if (!payload || payload.length < 2)
|
|
205
|
+
return null;
|
|
206
|
+
const raw = `${(payload[0] ?? 0).toString(16).padStart(2, "0")}`
|
|
207
|
+
+ `${(payload[1] ?? 0).toString(16).padStart(2, "0")}`;
|
|
208
|
+
const trimmed = raw.replace(/^0+/, "");
|
|
209
|
+
return trimmed ? trimmed : null;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Lift-off sits in two places depending on the model: the five-step ladders
|
|
213
|
+
* do not fit the sensor byte's two bits, so those models answer `0x0009`
|
|
214
|
+
* instead.
|
|
215
|
+
*/
|
|
216
|
+
async readLiftOffIndex(product, settings) {
|
|
217
|
+
if (!product?.liftOffCommand)
|
|
218
|
+
return mchoseV3DecodeSensor(settings.sensor).liftOffIndex;
|
|
219
|
+
const payload = await this.request(MCHOSE_V3_COMMAND.readLiftOff, [settings.profileIndex]);
|
|
220
|
+
return payload ? mchoseV3DecodeLiftOff(payload) : null;
|
|
221
|
+
}
|
|
222
|
+
getDpiOptions() {
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
/** Sleep timeouts this driver offers, in seconds. 0 disables the timer. */
|
|
226
|
+
getSleepOptions() {
|
|
227
|
+
return [...MCHOSE_V3_SLEEP_OPTIONS];
|
|
228
|
+
}
|
|
229
|
+
getDebounceMaxMs() {
|
|
230
|
+
return MCHOSE_V3_DEBOUNCE_MAX_MS;
|
|
231
|
+
}
|
|
232
|
+
// ── Writes ─────────────────────────────────────────────────────────────────
|
|
233
|
+
//
|
|
234
|
+
// This protocol has no partial update: every command below replaces a whole
|
|
235
|
+
// block. So each setter reads the block, edits the decoded object, sends it
|
|
236
|
+
// back and reads again to confirm — never building a block from defaults,
|
|
237
|
+
// because the bytes this codec does not understand would be invented rather
|
|
238
|
+
// than preserved. A read that fails aborts the write rather than writing a
|
|
239
|
+
// guess over a working configuration.
|
|
240
|
+
/** Send a write and give the firmware time to commit before reading back. */
|
|
241
|
+
async write(command, data) {
|
|
242
|
+
const body = mchoseV3Encode(command, data);
|
|
243
|
+
const send = async () => {
|
|
244
|
+
await this.device.sendReport(MCHOSE_V3_REPORT_ID, body);
|
|
245
|
+
await delay(WRITE_SETTLE_MS);
|
|
246
|
+
};
|
|
247
|
+
const queued = this.queue.then(send, send);
|
|
248
|
+
this.queue = queued.catch(() => undefined);
|
|
249
|
+
await queued;
|
|
250
|
+
}
|
|
251
|
+
/** The model, needed for every range check. Resolved the same way as status. */
|
|
252
|
+
async resolveProduct() {
|
|
253
|
+
if (this.cachedProduct)
|
|
254
|
+
return this.cachedProduct;
|
|
255
|
+
const info = await this.readDeviceInfo();
|
|
256
|
+
const product = mchoseV3FindProduct(info?.productId ?? null, this.device.productName);
|
|
257
|
+
if (!product)
|
|
258
|
+
throw new Error("This MCHOSE model is not recognised, so its limits are unknown.");
|
|
259
|
+
this.cachedProduct = product;
|
|
260
|
+
return product;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Read the settings block, apply `edit` to it, write it back and return what
|
|
264
|
+
* the mouse reports afterwards.
|
|
265
|
+
*/
|
|
266
|
+
async updateSettings(edit) {
|
|
267
|
+
await this.open();
|
|
268
|
+
this.unresponsive = false;
|
|
269
|
+
const before = await this.readSettings();
|
|
270
|
+
if (!before)
|
|
271
|
+
throw new Error("The mouse did not return its settings.");
|
|
272
|
+
const next = { ...before, extra: [...before.extra] };
|
|
273
|
+
edit(next);
|
|
274
|
+
mchoseV3CheckSettings(next);
|
|
275
|
+
await this.write(MCHOSE_V3_COMMAND.writeSettings, mchoseV3EncodeSettings(next));
|
|
276
|
+
const after = await this.readSettings();
|
|
277
|
+
if (!after)
|
|
278
|
+
throw new Error("The mouse did not confirm the new settings.");
|
|
279
|
+
return after;
|
|
280
|
+
}
|
|
281
|
+
async setPollingRate(hertz) {
|
|
282
|
+
const product = await this.resolveProduct();
|
|
283
|
+
const rates = mchoseV3PollingRates(product);
|
|
284
|
+
const index = rates.indexOf(hertz);
|
|
285
|
+
if (index < 0)
|
|
286
|
+
throw new Error(`This mouse does not support ${hertz} Hz.`);
|
|
287
|
+
const wired = this.isWired();
|
|
288
|
+
// Each link stores its own rate; only the one in use is touched.
|
|
289
|
+
const after = await this.updateSettings((settings) => {
|
|
290
|
+
if (wired)
|
|
291
|
+
settings.wiredRateIndex = index;
|
|
292
|
+
else
|
|
293
|
+
settings.wirelessRateIndex = index;
|
|
294
|
+
});
|
|
295
|
+
const applied = wired ? after.wiredRateIndex : after.wirelessRateIndex;
|
|
296
|
+
if (applied !== index)
|
|
297
|
+
throw new Error("The mouse did not accept the new polling rate.");
|
|
298
|
+
}
|
|
299
|
+
async setSleepTimeout(seconds) {
|
|
300
|
+
const minutes = Math.round(seconds / 60);
|
|
301
|
+
const after = await this.updateSettings((settings) => {
|
|
302
|
+
settings.sleep = minutes;
|
|
303
|
+
// Zero minutes is "never", and the firmware wants the mode byte to agree.
|
|
304
|
+
settings.sleepMode = minutes === 0 ? 1 : 0;
|
|
305
|
+
});
|
|
306
|
+
if (after.sleep !== minutes)
|
|
307
|
+
throw new Error("The mouse did not accept the new sleep timer.");
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Both primary buttons move together. The firmware keeps them separately and
|
|
311
|
+
* the shell offers one control, so writing only the left would leave the
|
|
312
|
+
* right on a value the user cannot see or change.
|
|
313
|
+
*/
|
|
314
|
+
async setDebounceTime(ms) {
|
|
315
|
+
const after = await this.updateSettings((settings) => {
|
|
316
|
+
settings.leftDebounceMs = ms;
|
|
317
|
+
settings.rightDebounceMs = ms;
|
|
318
|
+
});
|
|
319
|
+
if (after.leftDebounceMs !== ms)
|
|
320
|
+
throw new Error("The mouse did not accept the new debounce time.");
|
|
321
|
+
}
|
|
322
|
+
async setAngleTuning(degrees) {
|
|
323
|
+
const after = await this.updateSettings((settings) => { settings.angleTuning = degrees; });
|
|
324
|
+
if (after.angleTuning !== degrees)
|
|
325
|
+
throw new Error("The mouse did not accept the new angle.");
|
|
326
|
+
}
|
|
327
|
+
async setProfile(oneBased) {
|
|
328
|
+
const index = oneBased - 1;
|
|
329
|
+
const after = await this.updateSettings((settings) => { settings.profileIndex = index; });
|
|
330
|
+
if (after.profileIndex !== index)
|
|
331
|
+
throw new Error("The mouse did not switch profile.");
|
|
332
|
+
}
|
|
333
|
+
async setPowerMode(name) {
|
|
334
|
+
const modeIndex = MCHOSE_V3_MODES.indexOf(name);
|
|
335
|
+
if (modeIndex < 0)
|
|
336
|
+
throw new Error(`Unknown power mode "${name}".`);
|
|
337
|
+
const after = await this.setSensor({ modeIndex });
|
|
338
|
+
if (mchoseV3DecodeSensor(after.sensor).modeIndex !== modeIndex) {
|
|
339
|
+
throw new Error("The mouse did not accept the new power mode.");
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
setSensor(changes) {
|
|
343
|
+
return this.updateSettings((settings) => {
|
|
344
|
+
settings.sensor = mchoseV3EncodeSensor(settings.sensor, changes);
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
async setProcessing(key, enabled) {
|
|
348
|
+
const after = await this.setSensor({ [key]: enabled });
|
|
349
|
+
if (mchoseV3DecodeSensor(after.sensor)[key] !== enabled) {
|
|
350
|
+
throw new Error("The mouse did not accept the new sensor setting.");
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
setMotionSync(enabled) { return this.setProcessing("motionSync", enabled); }
|
|
354
|
+
setAngleSnapping(enabled) { return this.setProcessing("angleSnapping", enabled); }
|
|
355
|
+
setRippleControl(enabled) { return this.setProcessing("rippleControl", enabled); }
|
|
356
|
+
setGlassMode(enabled) { return this.setProcessing("glassMode", enabled); }
|
|
357
|
+
/**
|
|
358
|
+
* Lift-off lives in two places depending on the model, and the write has to
|
|
359
|
+
* follow the read: the five-step ladders do not fit the sensor byte's two
|
|
360
|
+
* bits and answer `0x0109` instead.
|
|
361
|
+
*/
|
|
362
|
+
async setLiftOffDistance(label) {
|
|
363
|
+
const product = await this.resolveProduct();
|
|
364
|
+
const index = mchoseV3LiftOffLabels(product).indexOf(label);
|
|
365
|
+
if (index < 0)
|
|
366
|
+
throw new Error(`This mouse has no ${label} lift-off step.`);
|
|
367
|
+
if (!product.liftOffCommand) {
|
|
368
|
+
const after = await this.setSensor({ liftOffIndex: index });
|
|
369
|
+
if (mchoseV3DecodeSensor(after.sensor).liftOffIndex !== index) {
|
|
370
|
+
throw new Error("The mouse did not accept the new lift-off distance.");
|
|
371
|
+
}
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
await this.open();
|
|
375
|
+
this.unresponsive = false;
|
|
376
|
+
const settings = await this.readSettings();
|
|
377
|
+
if (!settings)
|
|
378
|
+
throw new Error("The mouse did not return its settings.");
|
|
379
|
+
await this.write(MCHOSE_V3_COMMAND.writeLiftOff, mchoseV3EncodeLiftOff(settings.profileIndex, index, product));
|
|
380
|
+
const applied = await this.readLiftOffIndex(product, settings);
|
|
381
|
+
if (applied !== index)
|
|
382
|
+
throw new Error("The mouse did not accept the new lift-off distance.");
|
|
383
|
+
}
|
|
384
|
+
/** Read the DPI table for the profile in use, so a write can edit it. */
|
|
385
|
+
async readDpiTable() {
|
|
386
|
+
await this.open();
|
|
387
|
+
this.unresponsive = false;
|
|
388
|
+
const settings = await this.readSettings();
|
|
389
|
+
if (!settings)
|
|
390
|
+
throw new Error("The mouse did not return its settings.");
|
|
391
|
+
const payload = await this.request(MCHOSE_V3_COMMAND.readDpi, [settings.profileIndex, DPI_AXIS_X]);
|
|
392
|
+
const dpi = payload ? mchoseV3DecodeDpi(payload) : null;
|
|
393
|
+
if (!dpi)
|
|
394
|
+
throw new Error("The mouse did not return its DPI table.");
|
|
395
|
+
return { dpi, profileIndex: settings.profileIndex };
|
|
396
|
+
}
|
|
397
|
+
async updateDpiTable(edit) {
|
|
398
|
+
const product = await this.resolveProduct();
|
|
399
|
+
const { dpi } = await this.readDpiTable();
|
|
400
|
+
const next = { ...dpi, stages: [...dpi.stages] };
|
|
401
|
+
edit(next);
|
|
402
|
+
await this.write(MCHOSE_V3_COMMAND.writeDpi, mchoseV3EncodeDpiTable(next, product));
|
|
403
|
+
const after = (await this.readDpiTable()).dpi;
|
|
404
|
+
return after;
|
|
405
|
+
}
|
|
406
|
+
/** Change the stage currently in use, which is what the DPI box edits. */
|
|
407
|
+
async setDpi(dpi) {
|
|
408
|
+
const product = await this.resolveProduct();
|
|
409
|
+
const value = mchoseV3RoundDpi(dpi, product);
|
|
410
|
+
const after = await this.updateDpiTable((table) => { table.stages[table.activeStage] = value; });
|
|
411
|
+
if (after.stages[after.activeStage] !== value) {
|
|
412
|
+
throw new Error("The mouse did not accept the new DPI.");
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
async setDpiStageValue(stage, dpi) {
|
|
416
|
+
const product = await this.resolveProduct();
|
|
417
|
+
const value = mchoseV3RoundDpi(dpi, product);
|
|
418
|
+
const after = await this.updateDpiTable((table) => { table.stages[stage] = value; });
|
|
419
|
+
if (after.stages[stage] !== value)
|
|
420
|
+
throw new Error("The mouse did not accept the new DPI stage.");
|
|
421
|
+
}
|
|
422
|
+
async setActiveDpiStage(stage) {
|
|
423
|
+
const after = await this.updateDpiTable((table) => { table.activeStage = stage; });
|
|
424
|
+
if (after.activeStage !== stage)
|
|
425
|
+
throw new Error("The mouse did not switch DPI stage.");
|
|
426
|
+
}
|
|
427
|
+
async setDpiStageCount(count) {
|
|
428
|
+
const after = await this.updateDpiTable((table) => {
|
|
429
|
+
table.stageCount = count;
|
|
430
|
+
// The active stage cannot point past the end of the shortened list.
|
|
431
|
+
if (table.activeStage >= count)
|
|
432
|
+
table.activeStage = count - 1;
|
|
433
|
+
});
|
|
434
|
+
if (after.stageCount !== count)
|
|
435
|
+
throw new Error("The mouse did not accept the new stage count.");
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Reassign one button, leaving the other five exactly as they were read.
|
|
439
|
+
*
|
|
440
|
+
* The vocabulary comes from M HUB's own action tables — see
|
|
441
|
+
* `src/mchose/v3-buttons.ts` — so nothing here is a guess at what a value
|
|
442
|
+
* means. What has not been verified is the firmware accepting the write,
|
|
443
|
+
* which is why the read-back below decides whether it worked.
|
|
444
|
+
*/
|
|
445
|
+
async setButtonMapping(button, action) {
|
|
446
|
+
await this.open();
|
|
447
|
+
this.unresponsive = false;
|
|
448
|
+
const settings = await this.readSettings();
|
|
449
|
+
if (!settings)
|
|
450
|
+
throw new Error("The mouse did not return its settings.");
|
|
451
|
+
const payload = await this.request(MCHOSE_V3_COMMAND.readButtons, [settings.profileIndex, 0, MCHOSE_V3_BUTTONS.length]);
|
|
452
|
+
const buttons = payload ? mchoseV3DecodeButtons(payload) : null;
|
|
453
|
+
if (!buttons)
|
|
454
|
+
throw new Error("The mouse did not return its button table.");
|
|
455
|
+
if (!buttons[button])
|
|
456
|
+
throw new Error(`This mouse has no "${button}" button.`);
|
|
457
|
+
const assignment = mchoseV3ButtonAction(button, action);
|
|
458
|
+
if (!assignment)
|
|
459
|
+
throw new Error(`Unknown button action "${action}".`);
|
|
460
|
+
const next = { ...buttons, [button]: assignment };
|
|
461
|
+
await this.write(MCHOSE_V3_COMMAND.writeButtons, mchoseV3EncodeButtons(settings.profileIndex, next));
|
|
462
|
+
const confirmPayload = await this.request(MCHOSE_V3_COMMAND.readButtons, [settings.profileIndex, 0, MCHOSE_V3_BUTTONS.length]);
|
|
463
|
+
const confirmed = confirmPayload ? mchoseV3DecodeButtons(confirmPayload) : null;
|
|
464
|
+
if (!confirmed || confirmed[button]?.type !== assignment.type) {
|
|
465
|
+
throw new Error("The mouse did not accept the new button assignment.");
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
async readStatus() {
|
|
469
|
+
await this.open();
|
|
470
|
+
this.unresponsive = false;
|
|
471
|
+
this.linkBusy = false;
|
|
472
|
+
// Identity first: the host-facing product id is shared across the whole
|
|
473
|
+
// generation, so this is the only thing that says which model is on the
|
|
474
|
+
// other end, and the DPI ceiling and lift-off ladder both hang off it.
|
|
475
|
+
const info = await this.readDeviceInfo();
|
|
476
|
+
const product = mchoseV3FindProduct(info?.productId ?? null, this.device.productName);
|
|
477
|
+
const settings = await this.readSettings();
|
|
478
|
+
const dpiPayload = settings
|
|
479
|
+
? await this.request(MCHOSE_V3_COMMAND.readDpi, [settings.profileIndex, 0])
|
|
480
|
+
: null;
|
|
481
|
+
const dpi = dpiPayload ? mchoseV3DecodeDpi(dpiPayload) : null;
|
|
482
|
+
const buttonPayload = settings
|
|
483
|
+
? await this.request(MCHOSE_V3_COMMAND.readButtons, [settings.profileIndex, 0, 6])
|
|
484
|
+
: null;
|
|
485
|
+
const buttons = buttonPayload ? mchoseV3DecodeButtons(buttonPayload) : null;
|
|
486
|
+
const liftOffIndex = settings ? await this.readLiftOffIndex(product, settings) : null;
|
|
487
|
+
const version = await this.readVersion();
|
|
488
|
+
const sensor = settings ? mchoseV3DecodeSensor(settings.sensor) : null;
|
|
489
|
+
const rates = product ? mchoseV3PollingRates(product) : [];
|
|
490
|
+
const rateIndex = settings
|
|
491
|
+
? (this.isWired() ? settings.wiredRateIndex : settings.wirelessRateIndex)
|
|
492
|
+
: -1;
|
|
493
|
+
const stages = dpi?.stages.slice(0, dpi.stageCount || dpi.stages.length) ?? [];
|
|
494
|
+
const liftOffHeight = product && liftOffIndex !== null
|
|
495
|
+
? (mchoseV3LiftOffLabels(product)[liftOffIndex] ?? null)
|
|
496
|
+
: null;
|
|
497
|
+
const firmware = [];
|
|
498
|
+
if (version)
|
|
499
|
+
firmware.push(`Firmware ${version}`);
|
|
500
|
+
return {
|
|
501
|
+
brand: "MCHOSE",
|
|
502
|
+
name: product ? `MCHOSE ${product.name}` : this.displayName(),
|
|
503
|
+
batteryPercent: info?.batteryPercent ?? null,
|
|
504
|
+
batteryState: info ? (info.chargeStatus ? "Charging" : "Discharging") : "Unknown",
|
|
505
|
+
dpi: dpi ? (dpi.stages[dpi.activeStage] ?? 0) : 0,
|
|
506
|
+
dpiStages: stages.length ? stages : undefined,
|
|
507
|
+
activeDpiStage: stages.length ? dpi.activeStage : undefined,
|
|
508
|
+
supportsSeparateDpiAxes: dpi?.hasSeparateY || undefined,
|
|
509
|
+
pollingRateHz: rates[rateIndex] ?? 0,
|
|
510
|
+
supportedPollingRates: rates.length ? [...rates] : undefined,
|
|
511
|
+
// The wire index is 0-based; the shell counts profiles from one.
|
|
512
|
+
activeProfile: settings ? settings.profileIndex + 1 : null,
|
|
513
|
+
profileCount: info?.profileCount || undefined,
|
|
514
|
+
// Both switches read fine; neither can be written yet, so they are shown
|
|
515
|
+
// as state rather than offered as controls.
|
|
516
|
+
debounceMs: settings?.leftDebounceMs ?? null,
|
|
517
|
+
sleepTimeout: settings ? settings.sleep * 60 : null,
|
|
518
|
+
connectionType: this.isWired() ? "Wired" : "Wireless",
|
|
519
|
+
connectionDetail: info && info.connectStatus === 0
|
|
520
|
+
? "Receiver connected, mouse not linked"
|
|
521
|
+
: undefined,
|
|
522
|
+
// The shell's field is a three-stop scale and this family's ladders run
|
|
523
|
+
// to five, so the bucket goes here and the exact height goes in the note.
|
|
524
|
+
liftOffDistance: product && liftOffIndex !== null
|
|
525
|
+
? mchoseV3LiftOffStop(product, liftOffIndex)
|
|
526
|
+
: null,
|
|
527
|
+
motionSync: sensor?.motionSync ?? null,
|
|
528
|
+
angleSnapping: sensor?.angleSnapping ?? null,
|
|
529
|
+
rippleControl: sensor?.rippleControl ?? null,
|
|
530
|
+
angleTuning: settings?.angleTuning ?? null,
|
|
531
|
+
powerMode: sensor ? MCHOSE_V3_MODES[sensor.modeIndex] : undefined,
|
|
532
|
+
powerModes: sensor ? [...MCHOSE_V3_MODES] : undefined,
|
|
533
|
+
buttonMappings: buttons
|
|
534
|
+
? Object.fromEntries(Object.entries(buttons).map(([name, action]) => [name, mchoseV3ButtonActionName(name, action)]))
|
|
535
|
+
: undefined,
|
|
536
|
+
buttonOptions: buttons ? mchoseV3ButtonActionLabels() : undefined,
|
|
537
|
+
firmware,
|
|
538
|
+
ui: {
|
|
539
|
+
family: "mchose-v3",
|
|
540
|
+
settingsReady: Boolean(settings),
|
|
541
|
+
valuesVerified: Boolean(settings),
|
|
542
|
+
defaultDisplayName: "MCHOSE",
|
|
543
|
+
forceShowBattery: true,
|
|
544
|
+
hideSignalCard: true,
|
|
545
|
+
hideUnsupportedPollingRates: true,
|
|
546
|
+
showAdvancedSection: true,
|
|
547
|
+
// Each link stores its own polling rate, so say which one is being set.
|
|
548
|
+
pollingNote: this.isWired()
|
|
549
|
+
? "Applies to the wired connection."
|
|
550
|
+
: "Applies to the 2.4 GHz connection.",
|
|
551
|
+
statusNote: settings
|
|
552
|
+
? [
|
|
553
|
+
liftOffHeight ? `Lift-off ${liftOffHeight}.` : "",
|
|
554
|
+
"Settings for this model are written to the same commands MCHOSE's own software uses, but have not been confirmed on hardware yet.",
|
|
555
|
+
].filter(Boolean).join(" ")
|
|
556
|
+
: this.linkBusy
|
|
557
|
+
? "Receiver connected, but the mouse is not reachable. Wake it or check it is switched on."
|
|
558
|
+
: "This mouse did not answer. Please report the model and how it is connected.",
|
|
559
|
+
dpiStageEditor: product
|
|
560
|
+
? {
|
|
561
|
+
maxStages: MCHOSE_V3_DPI_STAGES,
|
|
562
|
+
countEditable: true,
|
|
563
|
+
minDpi: MCHOSE_V3_DPI_MIN,
|
|
564
|
+
maxDpi: product.dpiMax,
|
|
565
|
+
stepDpi: MCHOSE_V3_DPI_STEP,
|
|
566
|
+
}
|
|
567
|
+
: undefined,
|
|
568
|
+
},
|
|
569
|
+
};
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
//# sourceMappingURL=v3-hid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3-hid.js","sourceRoot":"","sources":["../../../src/drivers/mchose/v3-hid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MouseStatus } from "../mouse-types.ts";
|
|
2
|
+
export declare class MicrosoftHidClient {
|
|
3
|
+
readonly canDisableSleep = false;
|
|
4
|
+
readonly device: HIDDevice;
|
|
5
|
+
constructor(device: HIDDevice);
|
|
6
|
+
static isSupported(device: HIDDevice): boolean;
|
|
7
|
+
private getReadOffset;
|
|
8
|
+
private isPro;
|
|
9
|
+
private getWriteLength;
|
|
10
|
+
open(): Promise<void>;
|
|
11
|
+
close(): Promise<void>;
|
|
12
|
+
readStatus(): Promise<MouseStatus>;
|
|
13
|
+
getDpiOptions(): number[];
|
|
14
|
+
private writeProperty;
|
|
15
|
+
private readProperty;
|
|
16
|
+
readDpi(): Promise<number>;
|
|
17
|
+
setDpi(dpi: number): Promise<number>;
|
|
18
|
+
readColor(): Promise<string>;
|
|
19
|
+
setLighting(lighting?: Partial<MouseStatus["lighting"]>): Promise<void>;
|
|
20
|
+
readPollingRate(): Promise<number>;
|
|
21
|
+
setPollingRate(rate: number): Promise<number>;
|
|
22
|
+
readLiftOffDistance(): Promise<"Low" | "High" | null>;
|
|
23
|
+
setLiftOffDistance(lod: "Low" | "Medium" | "High"): Promise<"Low" | "Medium" | "High">;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=hid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hid.d.ts","sourceRoot":"","sources":["../../../src/drivers/microsoft/hid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgBrD,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,eAAe,SAAS;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;gBAEf,MAAM,EAAE,SAAS;IAI7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAY9C,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,cAAc;IAIhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IA0CxC,aAAa,IAAI,MAAM,EAAE;YAWX,aAAa;YAYb,YAAY;IA2EpB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAM1B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBpC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAS5B,WAAW,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvE,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IASlC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS7C,mBAAmB,IAAI,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IASrD,kBAAkB,CAAC,GAAG,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAO7F"}
|