@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,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Aerox 5 (wired-only) configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/aerox5.py` — the primary source for every
|
|
7
|
+
* command byte and default here. This profile covers only `1038:1850`
|
|
8
|
+
* ("SteelSeries Aerox 5", endpoint 3) — the plain wired mouse, **not** the
|
|
9
|
+
* separately-sold Aerox 5 Wireless. See `./aerox5-wireless.ts` for that
|
|
10
|
+
* device: it is a genuinely different command layout (different DPI
|
|
11
|
+
* command polling-rate byte values, different RGB zone packing, extra
|
|
12
|
+
* sleep/dim timers, a fixed-argument rainbow command, and a battery read),
|
|
13
|
+
* not just this module with different product ids swapped in. Do not
|
|
14
|
+
* assume the two share a codec.
|
|
15
|
+
* - rivalcfg `rivalcfg/devices/dpi/truemove_air.py` — the DPI byte table for
|
|
16
|
+
* this device's TrueMove Air sensor. **Not** `./rival3.ts`'s
|
|
17
|
+
* `TRUEMOVE_CORE_DPI_TO_BYTE` (Aerox 3's sensor) — reused verbatim here
|
|
18
|
+
* from `./rival3-wireless.ts`'s `TRUEMOVE_AIR_DPI_TO_BYTE` instead, since
|
|
19
|
+
* `aerox5.py`'s `output_choices: truemove_air.choices` is byte-for-byte
|
|
20
|
+
* the same table rivalcfg already uses for the Rival 3 Wireless (both spot
|
|
21
|
+
* checked: 400→0x04, 1600→0x12, 18000→0xD6).
|
|
22
|
+
* - rivalcfg `rivalcfg/handlers/multidpi_range_choice.py` — the DPI preset
|
|
23
|
+
* packet shape, same handler as Aerox 3/Rival 3 Wireless, `dpi_length_byte: 1`
|
|
24
|
+
* (one byte per preset, unlike Rival 3 Wireless's two). **`first_preset: 0`
|
|
25
|
+
* here** — unlike Aerox 3 and Rival 3 Wireless (both `first_preset: 1`),
|
|
26
|
+
* `aerox5.py` encodes the selected index directly with no +1 offset. This
|
|
27
|
+
* is the one place this device's DPI framing differs from Aerox 3's
|
|
28
|
+
* despite sharing the same command byte and one-byte preset width.
|
|
29
|
+
* - rivalcfg `rivalcfg/handlers/rgbcolor.py` / `reactive_rgbcolor.py` — RGB
|
|
30
|
+
* value encoding, byte-identical to `./aerox3.ts`'s usage.
|
|
31
|
+
* - rivalcfg `rivalcfg/handlers/range.py` — LED brightness (linear 0–100
|
|
32
|
+
* passthrough, `range_length_byte` omitted so 1 byte).
|
|
33
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
|
|
34
|
+
* field layout, 5 bytes/button, but **9 physical buttons plus scroll
|
|
35
|
+
* up/down** (`button1`…`button9`, `scrollup`, `scrolldown` — 11 slots, 55
|
|
36
|
+
* bytes total) instead of Aerox 3's 6 buttons plus scroll (8 slots).
|
|
37
|
+
* Offsets step by 5 for buttons 1–9 (`0x00`…`0x28`) then scroll up/down
|
|
38
|
+
* continue the same stride (`0x2D`, `0x32`).
|
|
39
|
+
*
|
|
40
|
+
* ## Why this is a separate protocol family from Aerox 3 despite similar shape
|
|
41
|
+
*
|
|
42
|
+
* Superficially close to `./aerox3.ts` (same `0x2D`/`0x2B`/`0x21`/`0x26`/
|
|
43
|
+
* `0x23`/`0x22`/`0x2A`/`0x27`/`0x11 00` command bytes, same RGB zone
|
|
44
|
+
* bitmask-and-padding packing), but genuinely different in the details that
|
|
45
|
+
* matter for correctness:
|
|
46
|
+
*
|
|
47
|
+
* - Different DPI sensor table (TrueMove Air vs. TrueMove Core) — same
|
|
48
|
+
* command byte, disjoint value bytes.
|
|
49
|
+
* - `first_preset: 0` vs. Aerox 3's `first_preset: 1` (see above).
|
|
50
|
+
* - 9 buttons + scroll vs. Aerox 3's 6 buttons + scroll — different packet
|
|
51
|
+
* length and offsets past button 5.
|
|
52
|
+
* - `aerox5.py`'s `rainbow_effect` and `default_lighting` choice tables are
|
|
53
|
+
* byte-identical to `aerox3.py`'s, confirmed by direct comparison, not
|
|
54
|
+
* assumed — reused as identical constants rather than re-derived.
|
|
55
|
+
*
|
|
56
|
+
* Given these differences, PID `0x1850` is registered under its own family
|
|
57
|
+
* (`"aerox5"`), not folded into `"aerox3"`.
|
|
58
|
+
*
|
|
59
|
+
* No corroborating libratbag or OpenRGB source for `1038:1850` specifically
|
|
60
|
+
* was available in this environment (no local libratbag checkout, and
|
|
61
|
+
* OpenRGB's SteelSeries controller files were not reachable this pass) —
|
|
62
|
+
* every command byte above is sourced from rivalcfg alone, same
|
|
63
|
+
* single-source caveat cluster 2 flagged for the Rival 3 Wireless. This
|
|
64
|
+
* should be treated as unverified beyond rivalcfg until corroborated or
|
|
65
|
+
* hardware-tested.
|
|
66
|
+
*
|
|
67
|
+
* Every command is an HID output report, report id `0x00`, on the vendor
|
|
68
|
+
* configuration interface (`"endpoint": 3`). This module is write-only —
|
|
69
|
+
* `aerox5.py` defines no getter for any setting and no firmware-query
|
|
70
|
+
* command, same as Aerox 3. Settings apply immediately; the save command
|
|
71
|
+
* (`11 00`) persists them to onboard flash. None of this has been verified
|
|
72
|
+
* on physical hardware by this project.
|
|
73
|
+
*/
|
|
74
|
+
import { TRUEMOVE_AIR_DPI_TO_BYTE } from "./rival3-wireless.js";
|
|
75
|
+
export const AEROX5_REPORT_ID = 0x00;
|
|
76
|
+
/** One-byte command prefixes; the payload is the prefix plus its arguments. */
|
|
77
|
+
export const AEROX5_COMMAND = {
|
|
78
|
+
dpiPresets: [0x2d],
|
|
79
|
+
pollingRate: [0x2b],
|
|
80
|
+
reactiveColor: [0x26],
|
|
81
|
+
ledBrightness: [0x23],
|
|
82
|
+
rainbowEffect: [0x22],
|
|
83
|
+
buttonsMapping: [0x2a],
|
|
84
|
+
defaultLighting: [0x27],
|
|
85
|
+
zoneColor: [0x21],
|
|
86
|
+
};
|
|
87
|
+
/** `11 00` — same byte-pair as Aerox 3's save command. */
|
|
88
|
+
export const AEROX5_SAVE_COMMAND = [0x11, 0x00];
|
|
89
|
+
export const AEROX5_POLLING_RATES = [125, 250, 500, 1000];
|
|
90
|
+
const POLLING_RATE_TO_BYTE = new Map([
|
|
91
|
+
[1000, 0x01],
|
|
92
|
+
[500, 0x02],
|
|
93
|
+
[250, 0x03],
|
|
94
|
+
[125, 0x04],
|
|
95
|
+
]);
|
|
96
|
+
export const AEROX5_DPI_MIN = 100;
|
|
97
|
+
export const AEROX5_DPI_MAX = 18000;
|
|
98
|
+
export const AEROX5_DPI_STEP = 100;
|
|
99
|
+
export const AEROX5_MAX_DPI_PRESETS = 5;
|
|
100
|
+
export class Aerox5ProtocolError extends Error {
|
|
101
|
+
}
|
|
102
|
+
/** The 180 DPI values the shared TrueMove Air sensor table can express, ascending. */
|
|
103
|
+
export function steelseriesAerox5DpiOptions() {
|
|
104
|
+
return [...TRUEMOVE_AIR_DPI_TO_BYTE.keys()].sort((a, b) => a - b);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* `2D <count> <selected> <v1>…<vN>` — replaces the mouse's whole preset
|
|
108
|
+
* table. One byte per DPI (`dpi_length_byte: 1`). `selectedIndex` is 0-based
|
|
109
|
+
* and encoded 0-based on the wire (`first_preset: 0` — unlike Aerox 3's
|
|
110
|
+
* `first_preset: 1`, no +1 offset here).
|
|
111
|
+
*/
|
|
112
|
+
export function steelseriesAerox5EncodeDpiPresets(presets, selectedIndex) {
|
|
113
|
+
if (presets.length < 1 || presets.length > AEROX5_MAX_DPI_PRESETS) {
|
|
114
|
+
throw new Aerox5ProtocolError(`SteelSeries Aerox 5 supports 1–${AEROX5_MAX_DPI_PRESETS} DPI presets.`);
|
|
115
|
+
}
|
|
116
|
+
if (!Number.isInteger(selectedIndex) || selectedIndex < 0 || selectedIndex >= presets.length) {
|
|
117
|
+
throw new Aerox5ProtocolError(`Selected DPI preset must be an index into the ${presets.length} presets being written.`);
|
|
118
|
+
}
|
|
119
|
+
const encoded = presets.map((dpi) => {
|
|
120
|
+
const byte = TRUEMOVE_AIR_DPI_TO_BYTE.get(dpi);
|
|
121
|
+
if (byte === undefined) {
|
|
122
|
+
throw new Aerox5ProtocolError(`SteelSeries Aerox 5 DPI must be ${AEROX5_DPI_MIN}–${AEROX5_DPI_MAX.toLocaleString()} in ${AEROX5_DPI_STEP} DPI steps.`);
|
|
123
|
+
}
|
|
124
|
+
return byte;
|
|
125
|
+
});
|
|
126
|
+
return new Uint8Array([...AEROX5_COMMAND.dpiPresets, presets.length, selectedIndex, ...encoded]);
|
|
127
|
+
}
|
|
128
|
+
/** `2B <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04 — same mapping as Aerox 3. */
|
|
129
|
+
export function steelseriesAerox5EncodePollingRate(pollingRateHz) {
|
|
130
|
+
const byte = POLLING_RATE_TO_BYTE.get(pollingRateHz);
|
|
131
|
+
if (byte === undefined) {
|
|
132
|
+
throw new Aerox5ProtocolError("SteelSeries Aerox 5 supports 125, 250, 500, or 1000 Hz polling.");
|
|
133
|
+
}
|
|
134
|
+
return new Uint8Array([...AEROX5_COMMAND.pollingRate, byte]);
|
|
135
|
+
}
|
|
136
|
+
function encodeRgb(r, g, b) {
|
|
137
|
+
for (const channel of [r, g, b]) {
|
|
138
|
+
if (!Number.isInteger(channel) || channel < 0 || channel > 255) {
|
|
139
|
+
throw new Aerox5ProtocolError("RGB channels must be integers 0–255.");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return [r, g, b];
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* `21 <bitmask> <padding for skipped zones> <r> <g> <b>` — identical packing
|
|
146
|
+
* to `./aerox3.ts`'s zone-color command: zone 1 = top LED, zone 2 = middle
|
|
147
|
+
* LED, zone 3 = bottom LED.
|
|
148
|
+
*/
|
|
149
|
+
export function steelseriesAerox5EncodeZoneColor(zone, r, g, b) {
|
|
150
|
+
const [red, green, blue] = encodeRgb(r, g, b);
|
|
151
|
+
if (zone === 1) {
|
|
152
|
+
return new Uint8Array([...AEROX5_COMMAND.zoneColor, 0x01, red, green, blue]);
|
|
153
|
+
}
|
|
154
|
+
if (zone === 2) {
|
|
155
|
+
return new Uint8Array([...AEROX5_COMMAND.zoneColor, 0x02, 0x00, 0x00, 0x00, red, green, blue]);
|
|
156
|
+
}
|
|
157
|
+
if (zone === 3) {
|
|
158
|
+
return new Uint8Array([
|
|
159
|
+
...AEROX5_COMMAND.zoneColor, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, red, green, blue,
|
|
160
|
+
]);
|
|
161
|
+
}
|
|
162
|
+
throw new Aerox5ProtocolError("SteelSeries Aerox 5 has zones 1 (top), 2 (middle), and 3 (bottom) only.");
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* `26 00 00 00 00 00` when disabled, `26 01 00 <r> <g> <b>` when enabled —
|
|
166
|
+
* byte-identical to `./aerox3.ts`'s reactive-color command.
|
|
167
|
+
*/
|
|
168
|
+
export function steelseriesAerox5EncodeReactiveColor(color) {
|
|
169
|
+
if (color === null) {
|
|
170
|
+
return new Uint8Array([...AEROX5_COMMAND.reactiveColor, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
|
171
|
+
}
|
|
172
|
+
const [r, g, b] = encodeRgb(color.r, color.g, color.b);
|
|
173
|
+
return new Uint8Array([...AEROX5_COMMAND.reactiveColor, 0x01, 0x00, r, g, b]);
|
|
174
|
+
}
|
|
175
|
+
/** `23 <v>` — linear 0–100 passthrough. */
|
|
176
|
+
export function steelseriesAerox5EncodeLedBrightness(percent) {
|
|
177
|
+
if (!Number.isInteger(percent) || percent < 0 || percent > 100) {
|
|
178
|
+
throw new Aerox5ProtocolError("SteelSeries Aerox 5 LED brightness must be an integer 0–100.");
|
|
179
|
+
}
|
|
180
|
+
return new Uint8Array([...AEROX5_COMMAND.ledBrightness, percent]);
|
|
181
|
+
}
|
|
182
|
+
/** Byte-identical to `AEROX3_RAINBOW_ZONES`, confirmed by direct comparison of the two device files. */
|
|
183
|
+
export const AEROX5_RAINBOW_ZONES = {
|
|
184
|
+
all: 0b111,
|
|
185
|
+
bottom: 0b100,
|
|
186
|
+
middle: 0b010,
|
|
187
|
+
top: 0b001,
|
|
188
|
+
"bottom-middle": 0b110,
|
|
189
|
+
"middle-top": 0b011,
|
|
190
|
+
"bottom-top": 0b101,
|
|
191
|
+
};
|
|
192
|
+
/** `22 <bitmask>` — rainbow effect on the selected zone(s); cleared by setting a color. */
|
|
193
|
+
export function steelseriesAerox5EncodeRainbowEffect(zones) {
|
|
194
|
+
const byte = AEROX5_RAINBOW_ZONES[zones];
|
|
195
|
+
if (byte === undefined) {
|
|
196
|
+
throw new Aerox5ProtocolError(`SteelSeries Aerox 5 rainbow zones must be one of: ${Object.keys(AEROX5_RAINBOW_ZONES).join(", ")}.`);
|
|
197
|
+
}
|
|
198
|
+
return new Uint8Array([...AEROX5_COMMAND.rainbowEffect, byte]);
|
|
199
|
+
}
|
|
200
|
+
/** Byte-identical to `AEROX3_DEFAULT_LIGHTING`, confirmed by direct comparison of the two device files. */
|
|
201
|
+
export const AEROX5_DEFAULT_LIGHTING = {
|
|
202
|
+
off: [0x00, 0x00],
|
|
203
|
+
reactive: [0x00, 0x01],
|
|
204
|
+
rainbow: [0x01, 0x00],
|
|
205
|
+
"reactive-rainbow": [0x01, 0x01],
|
|
206
|
+
};
|
|
207
|
+
/** `27 <v1> <v2>` — what the mouse lights up as before a host ever connects. */
|
|
208
|
+
export function steelseriesAerox5EncodeDefaultLighting(mode) {
|
|
209
|
+
const bytes = AEROX5_DEFAULT_LIGHTING[mode];
|
|
210
|
+
if (bytes === undefined) {
|
|
211
|
+
throw new Aerox5ProtocolError(`SteelSeries Aerox 5 default lighting must be one of: ${Object.keys(AEROX5_DEFAULT_LIGHTING).join(", ")}.`);
|
|
212
|
+
}
|
|
213
|
+
return new Uint8Array([...AEROX5_COMMAND.defaultLighting, ...bytes]);
|
|
214
|
+
}
|
|
215
|
+
/** `11 00` — commit the current settings to onboard flash. */
|
|
216
|
+
export function steelseriesAerox5SaveCommand() {
|
|
217
|
+
return new Uint8Array(AEROX5_SAVE_COMMAND);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* `buttons_mapping.buttons` from `aerox5.py`, id + byte offset into the
|
|
221
|
+
* packet — 9 physical buttons (this mouse's extra side-button cluster over
|
|
222
|
+
* Aerox 3's 6) plus scroll up/down, 11 slots total.
|
|
223
|
+
*/
|
|
224
|
+
export const AEROX5_BUTTONS = {
|
|
225
|
+
button1: { id: 0x01, offset: 0x00 },
|
|
226
|
+
button2: { id: 0x02, offset: 0x05 },
|
|
227
|
+
button3: { id: 0x03, offset: 0x0a },
|
|
228
|
+
button4: { id: 0x04, offset: 0x0f },
|
|
229
|
+
button5: { id: 0x05, offset: 0x14 },
|
|
230
|
+
button6: { id: 0x06, offset: 0x19 },
|
|
231
|
+
button7: { id: 0x07, offset: 0x1e },
|
|
232
|
+
button8: { id: 0x08, offset: 0x23 },
|
|
233
|
+
button9: { id: 0x09, offset: 0x28 },
|
|
234
|
+
scrollUp: { id: 0x31, offset: 0x2d },
|
|
235
|
+
scrollDown: { id: 0x32, offset: 0x32 },
|
|
236
|
+
};
|
|
237
|
+
const AEROX5_BUTTON_FIELD_LENGTH = 5;
|
|
238
|
+
const AEROX5_BUTTON_DISABLE = 0x00;
|
|
239
|
+
const AEROX5_BUTTON_DPI_SWITCH = 0x30;
|
|
240
|
+
const AEROX5_BUTTON_KEYBOARD = 0x51;
|
|
241
|
+
const AEROX5_BUTTON_MULTIMEDIA = 0x61;
|
|
242
|
+
/**
|
|
243
|
+
* `2A` + one 55-byte (`11 buttons × 5-byte field length`) packet, zero-filled
|
|
244
|
+
* except where a mapping is given. Unmapped buttons are left as all-zero
|
|
245
|
+
* fields (rivalcfg instead fills in per-button defaults; this codec leaves
|
|
246
|
+
* that policy to the caller — pass every button explicitly for parity with
|
|
247
|
+
* rivalcfg's default profile).
|
|
248
|
+
*/
|
|
249
|
+
export function steelseriesAerox5EncodeButtonsMapping(mapping) {
|
|
250
|
+
const names = Object.keys(AEROX5_BUTTONS);
|
|
251
|
+
const packet = new Array(names.length * AEROX5_BUTTON_FIELD_LENGTH).fill(0x00);
|
|
252
|
+
for (const [name, action] of Object.entries(mapping)) {
|
|
253
|
+
const slot = AEROX5_BUTTONS[name];
|
|
254
|
+
if (!slot) {
|
|
255
|
+
throw new Aerox5ProtocolError(`Unknown SteelSeries Aerox 5 button "${name}".`);
|
|
256
|
+
}
|
|
257
|
+
const { offset } = slot;
|
|
258
|
+
switch (action.type) {
|
|
259
|
+
case "button": {
|
|
260
|
+
packet[offset] = AEROX5_BUTTONS[action.target].id;
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
case "disabled": {
|
|
264
|
+
packet[offset] = AEROX5_BUTTON_DISABLE;
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
case "dpiSwitch": {
|
|
268
|
+
packet[offset] = AEROX5_BUTTON_DPI_SWITCH;
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
case "keyboard": {
|
|
272
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
273
|
+
throw new Aerox5ProtocolError("Keyboard scan codes must be integers 0–255.");
|
|
274
|
+
}
|
|
275
|
+
packet[offset] = AEROX5_BUTTON_KEYBOARD;
|
|
276
|
+
packet[offset + 1] = action.code;
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
case "multimedia": {
|
|
280
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
281
|
+
throw new Aerox5ProtocolError("Multimedia key codes must be integers 0–255.");
|
|
282
|
+
}
|
|
283
|
+
packet[offset] = AEROX5_BUTTON_MULTIMEDIA;
|
|
284
|
+
packet[offset + 1] = action.code;
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
default: {
|
|
288
|
+
throw new Aerox5ProtocolError(`Unsupported SteelSeries Aerox 5 button action.`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return new Uint8Array([...AEROX5_COMMAND.buttonsMapping, ...packet]);
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=aerox5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aerox5.js","sourceRoot":"","sources":["../../src/steelseries/aerox5.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Aerox 9 Wireless configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/aerox9_wireless_wired.py` — the primary source
|
|
7
|
+
* for every command byte, product id, and default here, for the mouse's
|
|
8
|
+
* USB-cabled mode (`1038:185A`, plus the WOW Edition `0x1876`).
|
|
9
|
+
* - rivalcfg `rivalcfg/devices/aerox9_wireless_wireless.py` — the 2.4 GHz
|
|
10
|
+
* dongle mode (`1038:1858`, WOW Edition `0x1874`). Read in full and diffed
|
|
11
|
+
* directly against the wired-mode file: it is **not** a separate command
|
|
12
|
+
* set. It is `aerox9_wireless_wired.py`'s settings dict comprehended
|
|
13
|
+
* through one `_patch_command` helper that (1) ORs `0b01000000` (`0x40`)
|
|
14
|
+
* into every command's first byte and (2) adds a 64-byte `readback_length`.
|
|
15
|
+
* This is the exact same transform cluster 3 found for the Aerox 5
|
|
16
|
+
* Wireless (`./aerox5-wireless.ts`'s `applyWirelessFlag`) — confirmed here
|
|
17
|
+
* by direct `diff` of the two device files, not assumed from precedent.
|
|
18
|
+
* This module implements that transform (`applyAerox9WirelessFlag`, named
|
|
19
|
+
* distinctly from `./aerox5-wireless.ts`'s `applyWirelessFlag` to avoid a
|
|
20
|
+
* re-export collision in `./index.ts`) rather than hand-duplicating the
|
|
21
|
+
* wired-mode byte tables.
|
|
22
|
+
* - rivalcfg `rivalcfg/devices/dpi/truemove_air.py` — same TrueMove Air
|
|
23
|
+
* sensor table as Aerox 5 / Aerox 5 Wireless / Rival 3 Wireless — imported
|
|
24
|
+
* from `./rival3-wireless.ts`'s `TRUEMOVE_AIR_DPI_TO_BYTE`, not re-derived
|
|
25
|
+
* (same `input_range`/`output_choices` reference).
|
|
26
|
+
* - rivalcfg `rivalcfg/handlers/multidpi_range_choice.py` — `dpi_length_byte: 1`,
|
|
27
|
+
* `first_preset: 0` (same as Aerox 5 and Aerox 5 Wireless — not 1, unlike
|
|
28
|
+
* Aerox 3 and Rival 3 Wireless), `max_preset_count: 5`.
|
|
29
|
+
* - rivalcfg `rivalcfg/handlers/range.py` — `sleep_timer`/`dim_timer`: same
|
|
30
|
+
* linear range-to-range mapping as Aerox 5 Wireless, same output ranges
|
|
31
|
+
* (`sleep_timer`: `[0x000000, 0x124F80, 60000]` against `[0, 20, 1]`
|
|
32
|
+
* minutes, i.e. `minutes * 60000` ms; `dim_timer`:
|
|
33
|
+
* `[0x000000, 0x124F80, 1000]` against `[0, 1200, 1]` seconds, i.e.
|
|
34
|
+
* `seconds * 1000` ms), little-endian 3 bytes (`range_length_byte: 3`).
|
|
35
|
+
* - rivalcfg `rivalcfg/handlers/rgbcolor.py` / `reactive_rgbcolor.py` — RGB
|
|
36
|
+
* value encoding, same as every other SteelSeries family in this codebase.
|
|
37
|
+
* - rivalcfg `rivalcfg/handlers/none.py` — `rainbow_effect` is a fixed
|
|
38
|
+
* no-argument enable, `22 FF` (`62 FF` wireless), same shape as Aerox 5
|
|
39
|
+
* Wireless's — **not** the plain Aerox 5's zone-bitmask choice.
|
|
40
|
+
*
|
|
41
|
+
* ## No button-mapping command in this device's rivalcfg profile
|
|
42
|
+
*
|
|
43
|
+
* Despite SteelSeries marketing the Aerox 9 (Wireless) as a 9-button
|
|
44
|
+
* "MMO-style" mouse, `aerox9_wireless_wired.py` defines **no**
|
|
45
|
+
* `buttons_mapping` setting and no button-remap command at all — confirmed
|
|
46
|
+
* by reading the full settings dict, which has exactly nine entries
|
|
47
|
+
* (`sensitivity`, `polling_rate`, `z1_color`, `z2_color`, `z3_color`,
|
|
48
|
+
* `reactive_color`, `sleep_timer`, `dim_timer`, `rainbow_effect`,
|
|
49
|
+
* `default_lighting`) plus `battery_level`/`save_command`, none of them a
|
|
50
|
+
* buttons handler. This is unlike `./aerox5.ts` and `./aerox5-wireless.ts`,
|
|
51
|
+
* both of which do define one. This module therefore exposes no button
|
|
52
|
+
* remap function — there is nothing in the reference implementation to
|
|
53
|
+
* reconstruct it from, not an oversight.
|
|
54
|
+
*
|
|
55
|
+
* ## Why wired-cable-mode and 2.4 GHz-dongle-mode share one module
|
|
56
|
+
*
|
|
57
|
+
* Same pattern as Aerox 5 Wireless: one physical mouse, two USB product-id
|
|
58
|
+
* groups depending on how the host currently sees it, driven by the same
|
|
59
|
+
* command set modulo the fixed `applyAerox9WirelessFlag` transform. Every command
|
|
60
|
+
* byte in `AEROX9_WIRELESS_COMMAND` below is the wired-mode value;
|
|
61
|
+
* `applyAerox9WirelessFlag` produces the 2.4 GHz-mode byte on demand.
|
|
62
|
+
*
|
|
63
|
+
* ## Why this is a separate protocol family from Aerox 5 / Aerox 5 Wireless
|
|
64
|
+
*
|
|
65
|
+
* Aerox 9 Wireless shares several command bytes with Aerox 5 Wireless
|
|
66
|
+
* (`0x2D`/`0x2B`/`0x29`/`0x22`/`0x27`/`0x92`/`0x11 00`, the same
|
|
67
|
+
* `_patch_command` wireless-flag transform, the same `readback_length: 64`),
|
|
68
|
+
* but is a genuinely different device profile, confirmed by direct
|
|
69
|
+
* comparison of the two rivalcfg files rather than assumed from the shared
|
|
70
|
+
* "Aerox" naming and similar wireless architecture:
|
|
71
|
+
*
|
|
72
|
+
* - RGB zone commands are `21 01 <zone> <r> <g> <b>` here, same fixed-packet
|
|
73
|
+
* shape as Aerox 5 Wireless's `steelseriesAerox5WirelessEncodeZoneColor`,
|
|
74
|
+
* confirmed byte-identical (`z1_color`/`z2_color`/`z3_color` commands
|
|
75
|
+
* `[0x21, 0x01, 0x00/0x01/0x02]` match exactly) — reused here as a
|
|
76
|
+
* structurally identical function rather than imported, so each family's
|
|
77
|
+
* codec stays self-contained.
|
|
78
|
+
* - `dim_timer`'s command is `23 0F 01 00 00`, byte-identical to Aerox 5
|
|
79
|
+
* Wireless's.
|
|
80
|
+
* - No button-mapping command at all (see above) — Aerox 5 Wireless has one.
|
|
81
|
+
* - Distinct product-id space entirely: `0x185A`/`0x1876` (wired),
|
|
82
|
+
* `0x1858`/`0x1874` (2.4 GHz) — none overlap Aerox 5 Wireless's
|
|
83
|
+
* `0x1852`/`0x1854`/`0x185C`/`0x185E`/`0x1860`/`0x1862`, or any PID
|
|
84
|
+
* claimed by clusters 1–3.
|
|
85
|
+
*
|
|
86
|
+
* PIDs are therefore registered under their own family
|
|
87
|
+
* (`"aerox9-wireless"`), never `"aerox5-wireless"`.
|
|
88
|
+
*
|
|
89
|
+
* No corroborating libratbag or OpenRGB source for any of these PIDs was
|
|
90
|
+
* available in this environment (no local libratbag checkout, and OpenRGB's
|
|
91
|
+
* SteelSeries controller files were not reachable this pass) — every command
|
|
92
|
+
* byte above is sourced from rivalcfg alone, same single-source caveat
|
|
93
|
+
* clusters 2 and 3 flagged for their devices. This should be treated as
|
|
94
|
+
* unverified beyond rivalcfg until corroborated or hardware-tested.
|
|
95
|
+
*
|
|
96
|
+
* Every command is an HID output report, report id `0x00`, on the vendor
|
|
97
|
+
* configuration interface (`"endpoint": 3` for every model in both rivalcfg
|
|
98
|
+
* files). DPI presets, polling rate, zone colors, reactive color, sleep/dim
|
|
99
|
+
* timers, rainbow, and default lighting are write-only — neither rivalcfg
|
|
100
|
+
* file defines a getter for any of them. Battery level **is** readable (see
|
|
101
|
+
* below). Settings apply immediately; the save command (`11 00`,
|
|
102
|
+
* wireless-mode `51 00`) persists them to onboard flash. None of this has
|
|
103
|
+
* been verified on physical hardware by this project.
|
|
104
|
+
*
|
|
105
|
+
* ## Battery read
|
|
106
|
+
*
|
|
107
|
+
* `aerox9_wireless_wired.py` defines a `battery_level` block identical in
|
|
108
|
+
* shape to Aerox 5 Wireless's: an output-report write of `0x92` gets a
|
|
109
|
+
* 2-byte input-report reply, where `data[1] & 0b10000000` is the charging
|
|
110
|
+
* flag and `((data[1] & ~0b10000000) - 1) * 5` is the percentage (coarse
|
|
111
|
+
* 0–100 scale in steps of 5). Confirmed byte-for-byte identical to
|
|
112
|
+
* `aerox5_wireless_wired.py`'s `battery_level` block by direct comparison —
|
|
113
|
+
* not assumed. 2.4 GHz mode additionally needs `0x92 | 0x40 = 0xD2`, produced
|
|
114
|
+
* by `applyAerox9WirelessFlag`. This is the same battery-response shape as
|
|
115
|
+
* `./aerox5-wireless.ts` and a **different** shape from
|
|
116
|
+
* `./rival3-wireless.ts`'s `AA 01` / 3-byte-reply / plain-percentage-byte
|
|
117
|
+
* battery read — do not conflate the three devices' battery decoding.
|
|
118
|
+
*/
|
|
119
|
+
export declare const AEROX9_WIRELESS_REPORT_ID = 0;
|
|
120
|
+
/** Wired-cable-mode command bytes; OR `WIRELESS_FLAG` into byte 0 for 2.4 GHz mode. */
|
|
121
|
+
export declare const AEROX9_WIRELESS_COMMAND: {
|
|
122
|
+
readonly dpiPresets: readonly [45];
|
|
123
|
+
readonly pollingRate: readonly [43];
|
|
124
|
+
readonly zoneColor: readonly [33, 1];
|
|
125
|
+
readonly reactiveColor: readonly [38];
|
|
126
|
+
readonly sleepTimer: readonly [41];
|
|
127
|
+
readonly dimTimer: readonly [35, 15, 1, 0, 0];
|
|
128
|
+
readonly rainbowEffect: readonly [34, 255];
|
|
129
|
+
readonly defaultLighting: readonly [39];
|
|
130
|
+
readonly batteryLevel: readonly [146];
|
|
131
|
+
};
|
|
132
|
+
/** `11 00` wired-mode / `51 00` 2.4 GHz-mode — see `applyAerox9WirelessFlag`. */
|
|
133
|
+
export declare const AEROX9_WIRELESS_SAVE_COMMAND: readonly [17, 0];
|
|
134
|
+
/**
|
|
135
|
+
* `_patch_command`: OR `0b01000000` into the command's first byte. Pass the
|
|
136
|
+
* wired-mode command bytes from `AEROX9_WIRELESS_COMMAND` /
|
|
137
|
+
* `AEROX9_WIRELESS_SAVE_COMMAND`; returns the 2.4 GHz-mode equivalent.
|
|
138
|
+
*/
|
|
139
|
+
export declare function applyAerox9WirelessFlag(command: readonly number[]): number[];
|
|
140
|
+
export declare const AEROX9_WIRELESS_POLLING_RATES: readonly [125, 250, 500, 1000];
|
|
141
|
+
export declare const AEROX9_WIRELESS_DPI_MIN = 100;
|
|
142
|
+
export declare const AEROX9_WIRELESS_DPI_MAX = 18000;
|
|
143
|
+
export declare const AEROX9_WIRELESS_DPI_STEP = 100;
|
|
144
|
+
export declare const AEROX9_WIRELESS_MAX_DPI_PRESETS = 5;
|
|
145
|
+
export declare const AEROX9_WIRELESS_BATTERY_RESPONSE_LENGTH = 2;
|
|
146
|
+
export declare class Aerox9WirelessProtocolError extends Error {
|
|
147
|
+
}
|
|
148
|
+
/** The 180 DPI values the shared TrueMove Air sensor table can express, ascending. */
|
|
149
|
+
export declare function steelseriesAerox9WirelessDpiOptions(): number[];
|
|
150
|
+
/**
|
|
151
|
+
* `2D <count> <selected> <v1>…<vN>` (or `6D …` in 2.4 GHz mode). One byte
|
|
152
|
+
* per DPI; `selectedIndex` is 0-based and encoded 0-based on the wire
|
|
153
|
+
* (`first_preset: 0`).
|
|
154
|
+
*/
|
|
155
|
+
export declare function steelseriesAerox9WirelessEncodeDpiPresets(presets: readonly number[], selectedIndex: number, wireless: boolean): Uint8Array;
|
|
156
|
+
/** `2B <v>` (`6B` wireless) with 1000→0x00, 500→0x01, 250→0x02, 125→0x03. */
|
|
157
|
+
export declare function steelseriesAerox9WirelessEncodePollingRate(pollingRateHz: number, wireless: boolean): Uint8Array;
|
|
158
|
+
export type Aerox9WirelessZone = 1 | 2 | 3;
|
|
159
|
+
/**
|
|
160
|
+
* `21 01 <zone-index> <r> <g> <b>` (`61 01 …` wireless) — a fixed 6-byte
|
|
161
|
+
* packet. Zone 1 = top LED, zone 2 = middle LED, zone 3 = bottom LED (strip
|
|
162
|
+
* order, per `z1_color`/`z2_color`/`z3_color`'s CLI flag labels).
|
|
163
|
+
*/
|
|
164
|
+
export declare function steelseriesAerox9WirelessEncodeZoneColor(zone: Aerox9WirelessZone, r: number, g: number, b: number, wireless: boolean): Uint8Array;
|
|
165
|
+
/**
|
|
166
|
+
* `26 00 00 00 00 00` when disabled, `26 01 00 <r> <g> <b>` when enabled
|
|
167
|
+
* (`66 …` wireless) — same shape as every other SteelSeries family here.
|
|
168
|
+
*/
|
|
169
|
+
export declare function steelseriesAerox9WirelessEncodeReactiveColor(color: {
|
|
170
|
+
r: number;
|
|
171
|
+
g: number;
|
|
172
|
+
b: number;
|
|
173
|
+
} | null, wireless: boolean): Uint8Array;
|
|
174
|
+
/**
|
|
175
|
+
* `29 <ms LE24>` (`69 …` wireless) — idle minutes before sleep, `0` disables.
|
|
176
|
+
* Encoded as `minutes * 60000` milliseconds, little-endian 3 bytes.
|
|
177
|
+
*/
|
|
178
|
+
export declare function steelseriesAerox9WirelessEncodeSleepTimer(minutes: number, wireless: boolean): Uint8Array;
|
|
179
|
+
/**
|
|
180
|
+
* `23 0F 01 00 00 <ms LE24>` (`63 …` wireless) — idle seconds before the LEDs
|
|
181
|
+
* dim, `0` disables. Encoded as `seconds * 1000` milliseconds, little-endian
|
|
182
|
+
* 3 bytes.
|
|
183
|
+
*/
|
|
184
|
+
export declare function steelseriesAerox9WirelessEncodeDimTimer(seconds: number, wireless: boolean): Uint8Array;
|
|
185
|
+
/** `22 FF` (`62 FF` wireless) — enables the rainbow effect on all zones; a color write clears it. */
|
|
186
|
+
export declare function steelseriesAerox9WirelessEncodeRainbowEffect(wireless: boolean): Uint8Array;
|
|
187
|
+
/** Byte-identical to `./aerox5-wireless.ts`'s `AEROX5_WIRELESS_DEFAULT_LIGHTING`, confirmed by direct comparison. */
|
|
188
|
+
export declare const AEROX9_WIRELESS_DEFAULT_LIGHTING: {
|
|
189
|
+
readonly off: readonly [0, 0];
|
|
190
|
+
readonly reactive: readonly [0, 1];
|
|
191
|
+
readonly rainbow: readonly [1, 0];
|
|
192
|
+
readonly "reactive-rainbow": readonly [1, 1];
|
|
193
|
+
};
|
|
194
|
+
export type Aerox9WirelessDefaultLighting = keyof typeof AEROX9_WIRELESS_DEFAULT_LIGHTING;
|
|
195
|
+
/** `27 <v1> <v2>` (`67 …` wireless) — what the mouse lights up as before a host ever connects. */
|
|
196
|
+
export declare function steelseriesAerox9WirelessEncodeDefaultLighting(mode: Aerox9WirelessDefaultLighting, wireless: boolean): Uint8Array;
|
|
197
|
+
/** `11 00` wired-mode / `51 00` 2.4 GHz-mode — commit the current settings to onboard flash. */
|
|
198
|
+
export declare function steelseriesAerox9WirelessSaveCommand(wireless: boolean): Uint8Array;
|
|
199
|
+
/** `92` wired-mode / `D2` 2.4 GHz-mode — the device answers with a two-byte input report. */
|
|
200
|
+
export declare function steelseriesAerox9WirelessBatteryQuery(wireless: boolean): Uint8Array;
|
|
201
|
+
export interface Aerox9WirelessBattery {
|
|
202
|
+
/** `((data[1] & ~0x80) - 1) * 5` in rivalcfg — a coarse 0–100 scale in steps of 5. */
|
|
203
|
+
level: number;
|
|
204
|
+
/** `bool(data[1] & 0b10000000)` in rivalcfg. */
|
|
205
|
+
isCharging: boolean;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Decode the two-byte battery response: `data[0]` is unused by rivalcfg's
|
|
209
|
+
* lambdas, `data[1]`'s top bit is the charging flag and the remaining 7 bits
|
|
210
|
+
* (1-indexed, hence `- 1`) scaled by 5 give the percentage.
|
|
211
|
+
*/
|
|
212
|
+
export declare function steelseriesAerox9WirelessDecodeBattery(payload: Uint8Array): Aerox9WirelessBattery;
|
|
213
|
+
//# sourceMappingURL=aerox9-wireless.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aerox9-wireless.d.ts","sourceRoot":"","sources":["../../src/steelseries/aerox9-wireless.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqHG;AAIH,eAAO,MAAM,yBAAyB,IAAO,CAAC;AAK9C,uFAAuF;AACvF,eAAO,MAAM,uBAAuB;;;;;;;;;;CAU1B,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,4BAA4B,kBAAwB,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAK5E;AAED,eAAO,MAAM,6BAA6B,gCAAiC,CAAC;AAU5E,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,+BAA+B,IAAI,CAAC;AACjD,eAAO,MAAM,uCAAuC,IAAI,CAAC;AAIzD,qBAAa,2BAA4B,SAAQ,KAAK;CAAG;AAEzD,sFAAsF;AACtF,wBAAgB,mCAAmC,IAAI,MAAM,EAAE,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,OAAO,GAChB,UAAU,CAsBZ;AAED,6EAA6E;AAC7E,wBAAgB,0CAA0C,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,UAAU,CAS/G;AAWD,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAI3C;;;;GAIG;AACH,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,kBAAkB,EACxB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,OAAO,GAChB,UAAU,CAUZ;AAED;;;GAGG;AACH,wBAAgB,4CAA4C,CAC1D,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACjD,QAAQ,EAAE,OAAO,GAChB,UAAU,CAOZ;AAUD;;;GAGG;AACH,wBAAgB,yCAAyC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,UAAU,CAIxG;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,UAAU,CAItG;AAED,qGAAqG;AACrG,wBAAgB,4CAA4C,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,CAG1F;AAED,qHAAqH;AACrH,eAAO,MAAM,gCAAgC;;;;;CAKnC,CAAC;AAEX,MAAM,MAAM,6BAA6B,GAAG,MAAM,OAAO,gCAAgC,CAAC;AAE1F,kGAAkG;AAClG,wBAAgB,8CAA8C,CAC5D,IAAI,EAAE,6BAA6B,EACnC,QAAQ,EAAE,OAAO,GAChB,UAAU,CASZ;AAED,gGAAgG;AAChG,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,CAGlF;AAED,6FAA6F;AAC7F,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,CAGnF;AAED,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,UAAU,GAAG,qBAAqB,CAUjG"}
|