@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
package/dist/razer/v4.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export const RAZER_V4_REPORT_ID = 0;
|
|
2
|
+
export const RAZER_V4_REPORT_LENGTH = 90;
|
|
3
|
+
export const RAZER_V4_PRODUCTS = new Map([
|
|
4
|
+
[0x00e5, { wireless: false }],
|
|
5
|
+
[0x00e6, { wireless: true }],
|
|
6
|
+
]);
|
|
7
|
+
export const RAZER_V4_MAX_DPI_STAGES = 5;
|
|
8
|
+
export const RAZER_V4_POLLING_CODES = new Map([
|
|
9
|
+
[125, 0x40], [500, 0x10], [1000, 0x08], [2000, 0x04], [4000, 0x02], [8000, 0x01],
|
|
10
|
+
]);
|
|
11
|
+
export function razerV4Crc(report) {
|
|
12
|
+
let crc = 0;
|
|
13
|
+
for (let index = 2; index <= 87; index += 1)
|
|
14
|
+
crc ^= report[index] ?? 0;
|
|
15
|
+
return crc;
|
|
16
|
+
}
|
|
17
|
+
export function buildRazerV4Report(commandClass, commandId, dataSize, args = new Uint8Array()) {
|
|
18
|
+
if (args.length > 80)
|
|
19
|
+
throw new Error("Razer command payload is too large.");
|
|
20
|
+
if (!Number.isInteger(dataSize) || dataSize < 0 || dataSize > 80)
|
|
21
|
+
throw new Error("Razer command data size is invalid.");
|
|
22
|
+
const report = new Uint8Array(RAZER_V4_REPORT_LENGTH);
|
|
23
|
+
report[1] = 0x1f;
|
|
24
|
+
report[5] = dataSize;
|
|
25
|
+
report[6] = commandClass;
|
|
26
|
+
report[7] = commandId;
|
|
27
|
+
report.set(args, 8);
|
|
28
|
+
report[88] = razerV4Crc(report);
|
|
29
|
+
return report;
|
|
30
|
+
}
|
|
31
|
+
export function decodeRazerV4DpiState(args) {
|
|
32
|
+
const count = Math.min(args[2] ?? 0, RAZER_V4_MAX_DPI_STAGES);
|
|
33
|
+
const stages = [];
|
|
34
|
+
for (let index = 0; index < count; index += 1) {
|
|
35
|
+
const offset = 3 + index * 7;
|
|
36
|
+
stages.push({
|
|
37
|
+
x: ((args[offset + 1] ?? 0) << 8) | (args[offset + 2] ?? 0),
|
|
38
|
+
y: ((args[offset + 3] ?? 0) << 8) | (args[offset + 4] ?? 0),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (!stages.length)
|
|
42
|
+
throw new Error("The Viper V4 Pro reported no DPI stages.");
|
|
43
|
+
return { activeStage: Math.min(Math.max((args[1] ?? 1) - 1, 0), stages.length - 1), stages };
|
|
44
|
+
}
|
|
45
|
+
export function decodeRazerV4PollingCode(code) {
|
|
46
|
+
const rate = [...RAZER_V4_POLLING_CODES].find(([, candidate]) => candidate === code)?.[0];
|
|
47
|
+
if (!rate)
|
|
48
|
+
throw new Error(`The Viper V4 Pro reported unknown polling code 0x${(code ?? 0).toString(16)}.`);
|
|
49
|
+
return rate;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=v4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v4.js","sourceRoot":"","sources":["../../src/razer/v4.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAgC;IACtE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CAC7B,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAiB;IAC5D,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;CACjF,CAAC,CAAC;AAGH,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC;QAAE,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,YAAoB,EACpB,SAAiB,EACjB,QAAgB,EAChB,OAAoC,IAAI,UAAU,EAAE;IAEpD,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC7E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzH,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACtD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACjB,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IACrB,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;IACzB,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAgB;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;IAC9D,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC;YACV,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAChF,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAwB;IAC/D,MAAM,IAAI,GAAG,CAAC,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5G,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Aerox 3 configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/aerox3.py` — the primary source for every
|
|
7
|
+
* command byte and default here.
|
|
8
|
+
* - rivalcfg `rivalcfg/handlers/multidpi_range_choice.py` (DPI presets, shared
|
|
9
|
+
* with Rival 3 Gen 1 but with a one-byte command prefix instead of two) and
|
|
10
|
+
* `rivalcfg/devices/dpi/truemove_core.py` (the DPI byte table — reused from
|
|
11
|
+
* `./rival3.ts`'s `TRUEMOVE_CORE_DPI_TO_BYTE`, not re-derived, since both
|
|
12
|
+
* devices use the same TrueMove Core sensor and rivalcfg quotes the same
|
|
13
|
+
* table for both).
|
|
14
|
+
* - rivalcfg `rivalcfg/handlers/rgbcolor.py` and `reactive_rgbcolor.py` — RGB
|
|
15
|
+
* value encoding (`[r,g,b]`, and `[0x01,0x00,r,g,b]` / `[0x00,0x00,0x00,0x00,0x00]`
|
|
16
|
+
* for the on/off reactive-color field).
|
|
17
|
+
* - rivalcfg `rivalcfg/handlers/range.py` and `choice.py` — LED brightness
|
|
18
|
+
* (linear 0–100 passthrough) and the rainbow-effect/default-lighting
|
|
19
|
+
* choice tables.
|
|
20
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
|
|
21
|
+
* field layout (5 bytes/button, zero-filled, `offset`/`id` per button).
|
|
22
|
+
* - rivalcfg `rivalcfg/devices/rival3_gen2.py` — corroborates that `0x1038:0x1870`
|
|
23
|
+
* (Rival 3 Gen 2) shares the Aerox 3's color/brightness/rainbow/buttons/
|
|
24
|
+
* default-lighting/save commands, but see the PR #269 note below: its DPI
|
|
25
|
+
* command differs, so this module intentionally does not claim that PID.
|
|
26
|
+
*
|
|
27
|
+
* ## PR #269 reconciliation (SteelSeries Rival 3 Gen 2, `1038:1870`)
|
|
28
|
+
*
|
|
29
|
+
* flozz/rivalcfg#269 (closed, hardware-confirmed by its author for DPI,
|
|
30
|
+
* polling, and RGB) claims the Rival 3 Gen 2 uses "the identical Aerox 3
|
|
31
|
+
* protocol" at `1038:1870`, endpoint 3. rivalcfg's own mainline
|
|
32
|
+
* `devices/rival3_gen2.py` does ship that exact vendor/product/endpoint
|
|
33
|
+
* triple, confirming the PID half of the PR's claim. **The protocols are not
|
|
34
|
+
* byte-identical, though**: Aerox 3's DPI-preset command is `0x2D` using the
|
|
35
|
+
* `multidpi_range_choice` handler (one DPI byte per preset), while mainline
|
|
36
|
+
* Rival 3 Gen 2 uses command `0x34` with the `multidpi_range_choice_xy`
|
|
37
|
+
* handler (independent X/Y DPI per preset, `"xy_mapping": "xyxy"`, two bytes
|
|
38
|
+
* per axis pair). Every other setting (polling rate `0x2B`, RGB zones `0x21`,
|
|
39
|
+
* reactive color `0x26`, brightness `0x23`, rainbow `0x22`, buttons `0x2A`,
|
|
40
|
+
* default lighting `0x27`, save `0x11 0x00`) is byte-identical between the
|
|
41
|
+
* two mainline device files. Per this rollout's instructions, rivalcfg's
|
|
42
|
+
* mainline file is treated as authoritative over the PR description, and
|
|
43
|
+
* because the DPI command genuinely differs, `1038:0x1870` is **not** added
|
|
44
|
+
* to this module's or any registry's product table here — a Rival 3 Gen 2
|
|
45
|
+
* driver needs its own DPI encoder and is out of scope for this cluster
|
|
46
|
+
* (Aerox 3 only). Nothing in this file claims or matches that PID.
|
|
47
|
+
*
|
|
48
|
+
* Every command is an HID **output report** with report id 0x00 on the
|
|
49
|
+
* vendor configuration interface (hidapi `endpoint` / `interface_number ==
|
|
50
|
+
* 3`, per the `"endpoint": 3` model entry — same interface convention as
|
|
51
|
+
* Rival 3 Gen 1). The functions here build the report *payload* — the bytes
|
|
52
|
+
* after the report id — unpadded, matching rivalcfg's `usbhid.py` writes.
|
|
53
|
+
*
|
|
54
|
+
* **This device is write-only, like Rival 3 Gen 1.** `aerox3.py` defines no
|
|
55
|
+
* getter for any setting and no firmware-query command (Rival 3 Gen 1's
|
|
56
|
+
* `10 00` has no Aerox 3 counterpart in rivalcfg, libratbag, or the OpenRGB
|
|
57
|
+
* SteelSeries controller files checked for this device). There is nothing to
|
|
58
|
+
* probe the mouse with, so the HID client cannot use a firmware read as a
|
|
59
|
+
* connectivity check the way `SteelSeriesRival3HidClient` does; it must treat
|
|
60
|
+
* a successful `open()` as the only available signal. Session state must be
|
|
61
|
+
* tracked client-side with `valuesVerified: false`, exactly as Rival 3 does.
|
|
62
|
+
*
|
|
63
|
+
* Settings apply immediately; the save command (`11 00`, distinct from Rival
|
|
64
|
+
* 3 Gen 1's `09 00` — do not confuse the two) persists them to onboard flash.
|
|
65
|
+
* None of this has been verified on physical Aerox 3 hardware by this
|
|
66
|
+
* project.
|
|
67
|
+
*
|
|
68
|
+
* ## RGB zone command layout
|
|
69
|
+
*
|
|
70
|
+
* All three zone-color settings share one underlying packet shape, visible
|
|
71
|
+
* once the escalating prefixes in `aerox3.py` are read against the LED_ID
|
|
72
|
+
* bitmask comment preserved in rivalcfg's `rival3_gen2.py` (same command
|
|
73
|
+
* family): `21 <LED_ID bitmask> <zone1 r,g,b> <zone2 r,g,b> <zone3 r,g,b>`.
|
|
74
|
+
* `LED_ID` selects which zone(s) the device should actually update; the RGB
|
|
75
|
+
* slots for zones the bitmask does not select are sent as zero padding and
|
|
76
|
+
* ignored by the device. That is why `z1_color`'s command is `[0x21,0x01]`
|
|
77
|
+
* (bitmask `0b001`, immediately followed by that zone's RGB — no padding
|
|
78
|
+
* needed, its slot is first), `z2_color`'s is `[0x21,0x02,0x00,0x00,0x00]`
|
|
79
|
+
* (bitmask `0b010`, three zero bytes filling the skipped zone-1 slot before
|
|
80
|
+
* zone 2's RGB), and `z3_color`'s is `[0x21,0x04,0x00,0x00,0x00,0x00,0x00,0x00]`
|
|
81
|
+
* (bitmask `0b100`, six zero bytes filling the skipped zone-1 and zone-2
|
|
82
|
+
* slots before zone 3's RGB). This module exposes one `steelseriesAerox3EncodeZoneColor`
|
|
83
|
+
* function parameterized on zone 1–3 rather than three near-duplicate
|
|
84
|
+
* functions, producing byte-identical output to each `aerox3.py` command.
|
|
85
|
+
*
|
|
86
|
+
* ## Button mapping — deliberately reduced scope
|
|
87
|
+
*
|
|
88
|
+
* rivalcfg's `buttons` handler supports remapping to another mouse button,
|
|
89
|
+
* a disable/DPI-switch/scroll special action, or a keyboard/multimedia key
|
|
90
|
+
* chosen from large per-layout tables (`handlers/buttons/layout_qwerty.py`,
|
|
91
|
+
* `layout_multimedia.py`). This module implements the exact 5-byte/button,
|
|
92
|
+
* zero-filled packet shape and the mouse-button/disable/DPI-switch/scroll
|
|
93
|
+
* special actions, but does not re-implement rivalcfg's QWERTY or multimedia
|
|
94
|
+
* key-name tables: keyboard and multimedia targets are taken here as raw
|
|
95
|
+
* `{ type: "keyboard" | "multimedia", code }` scan-code bytes rather than
|
|
96
|
+
* name strings, matching `button_keyboard: 0x51` / `button_multimedia: 0x61`
|
|
97
|
+
* verbatim. This is the same kind of scope line `rival3.ts` draws around
|
|
98
|
+
* lighting effects it documents but does not implement.
|
|
99
|
+
*/
|
|
100
|
+
export declare const AEROX3_REPORT_ID = 0;
|
|
101
|
+
/** One-byte command prefixes; the payload is the prefix plus its arguments. */
|
|
102
|
+
export declare const AEROX3_COMMAND: {
|
|
103
|
+
readonly dpiPresets: readonly [45];
|
|
104
|
+
readonly pollingRate: readonly [43];
|
|
105
|
+
readonly reactiveColor: readonly [38];
|
|
106
|
+
readonly ledBrightness: readonly [35];
|
|
107
|
+
readonly rainbowEffect: readonly [34];
|
|
108
|
+
readonly buttonsMapping: readonly [42];
|
|
109
|
+
readonly defaultLighting: readonly [39];
|
|
110
|
+
readonly zoneColor: readonly [33];
|
|
111
|
+
};
|
|
112
|
+
/** `11 00` — distinct from Rival 3 Gen 1's `09 00`; do not reuse across families. */
|
|
113
|
+
export declare const AEROX3_SAVE_COMMAND: readonly [17, 0];
|
|
114
|
+
export declare const AEROX3_POLLING_RATES: readonly [125, 250, 500, 1000];
|
|
115
|
+
export declare const AEROX3_DPI_MIN = 200;
|
|
116
|
+
export declare const AEROX3_DPI_MAX = 8500;
|
|
117
|
+
export declare const AEROX3_DPI_STEP = 100;
|
|
118
|
+
export declare const AEROX3_MAX_DPI_PRESETS = 5;
|
|
119
|
+
export declare class Aerox3ProtocolError extends Error {
|
|
120
|
+
}
|
|
121
|
+
/** The 84 DPI values the shared TrueMove Core sensor table can express, ascending. */
|
|
122
|
+
export declare function steelseriesAerox3DpiOptions(): number[];
|
|
123
|
+
/**
|
|
124
|
+
* `2D <count> <selected> <v1>…<vN>` — replaces the mouse's whole preset
|
|
125
|
+
* table. One byte per DPI (`dpi_length_byte: 1`); `selectedIndex` is 0-based
|
|
126
|
+
* here and encoded 1-based on the wire (`first_preset: 1`).
|
|
127
|
+
*/
|
|
128
|
+
export declare function steelseriesAerox3EncodeDpiPresets(presets: readonly number[], selectedIndex: number): Uint8Array;
|
|
129
|
+
/** `2B <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04. */
|
|
130
|
+
export declare function steelseriesAerox3EncodePollingRate(pollingRateHz: number): Uint8Array;
|
|
131
|
+
export type Aerox3Zone = 1 | 2 | 3;
|
|
132
|
+
/**
|
|
133
|
+
* `21 <bitmask> <padding for skipped zones> <r> <g> <b>` — see the module
|
|
134
|
+
* doc comment for how the zero-padding length grows with the zone number.
|
|
135
|
+
* Zone 1 = top LED, zone 2 = middle LED, zone 3 = bottom LED (strip order,
|
|
136
|
+
* per `aerox3.py`'s CLI flag labels).
|
|
137
|
+
*/
|
|
138
|
+
export declare function steelseriesAerox3EncodeZoneColor(zone: Aerox3Zone, r: number, g: number, b: number): Uint8Array;
|
|
139
|
+
/**
|
|
140
|
+
* `26 00 00 00 00 00` when disabled, `26 01 00 <r> <g> <b>` when enabled —
|
|
141
|
+
* the color the LEDs flash to in reaction to a button click.
|
|
142
|
+
*/
|
|
143
|
+
export declare function steelseriesAerox3EncodeReactiveColor(color: {
|
|
144
|
+
r: number;
|
|
145
|
+
g: number;
|
|
146
|
+
b: number;
|
|
147
|
+
} | null): Uint8Array;
|
|
148
|
+
/** `23 <v>` — linear 0–100 passthrough (`output_range` matches `input_range`). */
|
|
149
|
+
export declare function steelseriesAerox3EncodeLedBrightness(percent: number): Uint8Array;
|
|
150
|
+
export declare const AEROX3_RAINBOW_ZONES: {
|
|
151
|
+
readonly all: 7;
|
|
152
|
+
readonly bottom: 4;
|
|
153
|
+
readonly middle: 2;
|
|
154
|
+
readonly top: 1;
|
|
155
|
+
readonly "bottom-middle": 6;
|
|
156
|
+
readonly "middle-top": 3;
|
|
157
|
+
readonly "bottom-top": 5;
|
|
158
|
+
};
|
|
159
|
+
export type Aerox3RainbowZones = keyof typeof AEROX3_RAINBOW_ZONES;
|
|
160
|
+
/** `22 <bitmask>` — rainbow effect on the selected zone(s); cleared by setting a color. */
|
|
161
|
+
export declare function steelseriesAerox3EncodeRainbowEffect(zones: Aerox3RainbowZones): Uint8Array;
|
|
162
|
+
export declare const AEROX3_DEFAULT_LIGHTING: {
|
|
163
|
+
readonly off: readonly [0, 0];
|
|
164
|
+
readonly reactive: readonly [0, 1];
|
|
165
|
+
readonly rainbow: readonly [1, 0];
|
|
166
|
+
readonly "reactive-rainbow": readonly [1, 1];
|
|
167
|
+
};
|
|
168
|
+
export type Aerox3DefaultLighting = keyof typeof AEROX3_DEFAULT_LIGHTING;
|
|
169
|
+
/** `27 <v1> <v2>` — what the mouse lights up as before a host ever connects. */
|
|
170
|
+
export declare function steelseriesAerox3EncodeDefaultLighting(mode: Aerox3DefaultLighting): Uint8Array;
|
|
171
|
+
/** `11 00` — commit the current settings to onboard flash. */
|
|
172
|
+
export declare function steelseriesAerox3SaveCommand(): Uint8Array;
|
|
173
|
+
/** `buttons_mapping.buttons` from `aerox3.py`, id + byte offset into the packet. */
|
|
174
|
+
export declare const AEROX3_BUTTONS: {
|
|
175
|
+
readonly button1: {
|
|
176
|
+
readonly id: 1;
|
|
177
|
+
readonly offset: 0;
|
|
178
|
+
};
|
|
179
|
+
readonly button2: {
|
|
180
|
+
readonly id: 2;
|
|
181
|
+
readonly offset: 5;
|
|
182
|
+
};
|
|
183
|
+
readonly button3: {
|
|
184
|
+
readonly id: 3;
|
|
185
|
+
readonly offset: 10;
|
|
186
|
+
};
|
|
187
|
+
readonly button4: {
|
|
188
|
+
readonly id: 4;
|
|
189
|
+
readonly offset: 15;
|
|
190
|
+
};
|
|
191
|
+
readonly button5: {
|
|
192
|
+
readonly id: 5;
|
|
193
|
+
readonly offset: 20;
|
|
194
|
+
};
|
|
195
|
+
readonly button6: {
|
|
196
|
+
readonly id: 6;
|
|
197
|
+
readonly offset: 25;
|
|
198
|
+
};
|
|
199
|
+
readonly scrollUp: {
|
|
200
|
+
readonly id: 49;
|
|
201
|
+
readonly offset: 30;
|
|
202
|
+
};
|
|
203
|
+
readonly scrollDown: {
|
|
204
|
+
readonly id: 50;
|
|
205
|
+
readonly offset: 35;
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
export type Aerox3ButtonName = keyof typeof AEROX3_BUTTONS;
|
|
209
|
+
/**
|
|
210
|
+
* One button's target. `scrollUp`/`scrollDown` cannot be remap *targets*
|
|
211
|
+
* (`button_scroll_up`/`button_scroll_down` are `None` in `aerox3.py`) — only
|
|
212
|
+
* sources; attempting to target them is rejected.
|
|
213
|
+
*/
|
|
214
|
+
export type Aerox3ButtonAction = {
|
|
215
|
+
type: "button";
|
|
216
|
+
target: Exclude<Aerox3ButtonName, "scrollUp" | "scrollDown">;
|
|
217
|
+
} | {
|
|
218
|
+
type: "disabled";
|
|
219
|
+
} | {
|
|
220
|
+
type: "dpiSwitch";
|
|
221
|
+
} | {
|
|
222
|
+
type: "keyboard";
|
|
223
|
+
code: number;
|
|
224
|
+
} | {
|
|
225
|
+
type: "multimedia";
|
|
226
|
+
code: number;
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* `2A` + one 40-byte (`8 buttons × 5-byte field length`) packet, zero-filled
|
|
230
|
+
* except where a mapping is given. Unmapped buttons are left as all-zero
|
|
231
|
+
* fields (rivalcfg instead fills in per-button defaults; this codec leaves
|
|
232
|
+
* that policy to the caller — pass every button explicitly for parity with
|
|
233
|
+
* rivalcfg's default profile).
|
|
234
|
+
*/
|
|
235
|
+
export declare function steelseriesAerox3EncodeButtonsMapping(mapping: Partial<Record<Aerox3ButtonName, Aerox3ButtonAction>>): Uint8Array;
|
|
236
|
+
//# sourceMappingURL=aerox3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aerox3.d.ts","sourceRoot":"","sources":["../../src/steelseries/aerox3.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGG;AAIH,eAAO,MAAM,gBAAgB,IAAO,CAAC;AAErC,+EAA+E;AAC/E,eAAO,MAAM,cAAc;;;;;;;;;CASjB,CAAC;AAEX,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,kBAAwB,CAAC;AAEzD,eAAO,MAAM,oBAAoB,gCAAiC,CAAC;AASnE,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,qBAAa,mBAAoB,SAAQ,KAAK;CAAG;AAEjD,sFAAsF;AACtF,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,GACpB,UAAU,CAqBZ;AAED,6DAA6D;AAC7D,wBAAgB,kCAAkC,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAMpF;AAWD,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEnC;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,UAAU,EAChB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,UAAU,CAcZ;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAChD,UAAU,CAMZ;AAED,kFAAkF;AAClF,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAKhF;AAED,eAAO,MAAM,oBAAoB;;;;;;;;CAQvB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,oBAAoB,CAAC;AAEnE,2FAA2F;AAC3F,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,kBAAkB,GAAG,UAAU,CAQ1F;AAED,eAAO,MAAM,uBAAuB;;;;;CAK1B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAEzE,gFAAgF;AAChF,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,qBAAqB,GAAG,UAAU,CAQ9F;AAED,8DAA8D;AAC9D,wBAAgB,4BAA4B,IAAI,UAAU,CAEzD;AASD,oFAAoF;AACpF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS0B,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC;AAQ3D;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,UAAU,GAAG,YAAY,CAAC,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,GAC7D,UAAU,CA8CZ"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Aerox 3 configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/aerox3.py` — the primary source for every
|
|
7
|
+
* command byte and default here.
|
|
8
|
+
* - rivalcfg `rivalcfg/handlers/multidpi_range_choice.py` (DPI presets, shared
|
|
9
|
+
* with Rival 3 Gen 1 but with a one-byte command prefix instead of two) and
|
|
10
|
+
* `rivalcfg/devices/dpi/truemove_core.py` (the DPI byte table — reused from
|
|
11
|
+
* `./rival3.ts`'s `TRUEMOVE_CORE_DPI_TO_BYTE`, not re-derived, since both
|
|
12
|
+
* devices use the same TrueMove Core sensor and rivalcfg quotes the same
|
|
13
|
+
* table for both).
|
|
14
|
+
* - rivalcfg `rivalcfg/handlers/rgbcolor.py` and `reactive_rgbcolor.py` — RGB
|
|
15
|
+
* value encoding (`[r,g,b]`, and `[0x01,0x00,r,g,b]` / `[0x00,0x00,0x00,0x00,0x00]`
|
|
16
|
+
* for the on/off reactive-color field).
|
|
17
|
+
* - rivalcfg `rivalcfg/handlers/range.py` and `choice.py` — LED brightness
|
|
18
|
+
* (linear 0–100 passthrough) and the rainbow-effect/default-lighting
|
|
19
|
+
* choice tables.
|
|
20
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
|
|
21
|
+
* field layout (5 bytes/button, zero-filled, `offset`/`id` per button).
|
|
22
|
+
* - rivalcfg `rivalcfg/devices/rival3_gen2.py` — corroborates that `0x1038:0x1870`
|
|
23
|
+
* (Rival 3 Gen 2) shares the Aerox 3's color/brightness/rainbow/buttons/
|
|
24
|
+
* default-lighting/save commands, but see the PR #269 note below: its DPI
|
|
25
|
+
* command differs, so this module intentionally does not claim that PID.
|
|
26
|
+
*
|
|
27
|
+
* ## PR #269 reconciliation (SteelSeries Rival 3 Gen 2, `1038:1870`)
|
|
28
|
+
*
|
|
29
|
+
* flozz/rivalcfg#269 (closed, hardware-confirmed by its author for DPI,
|
|
30
|
+
* polling, and RGB) claims the Rival 3 Gen 2 uses "the identical Aerox 3
|
|
31
|
+
* protocol" at `1038:1870`, endpoint 3. rivalcfg's own mainline
|
|
32
|
+
* `devices/rival3_gen2.py` does ship that exact vendor/product/endpoint
|
|
33
|
+
* triple, confirming the PID half of the PR's claim. **The protocols are not
|
|
34
|
+
* byte-identical, though**: Aerox 3's DPI-preset command is `0x2D` using the
|
|
35
|
+
* `multidpi_range_choice` handler (one DPI byte per preset), while mainline
|
|
36
|
+
* Rival 3 Gen 2 uses command `0x34` with the `multidpi_range_choice_xy`
|
|
37
|
+
* handler (independent X/Y DPI per preset, `"xy_mapping": "xyxy"`, two bytes
|
|
38
|
+
* per axis pair). Every other setting (polling rate `0x2B`, RGB zones `0x21`,
|
|
39
|
+
* reactive color `0x26`, brightness `0x23`, rainbow `0x22`, buttons `0x2A`,
|
|
40
|
+
* default lighting `0x27`, save `0x11 0x00`) is byte-identical between the
|
|
41
|
+
* two mainline device files. Per this rollout's instructions, rivalcfg's
|
|
42
|
+
* mainline file is treated as authoritative over the PR description, and
|
|
43
|
+
* because the DPI command genuinely differs, `1038:0x1870` is **not** added
|
|
44
|
+
* to this module's or any registry's product table here — a Rival 3 Gen 2
|
|
45
|
+
* driver needs its own DPI encoder and is out of scope for this cluster
|
|
46
|
+
* (Aerox 3 only). Nothing in this file claims or matches that PID.
|
|
47
|
+
*
|
|
48
|
+
* Every command is an HID **output report** with report id 0x00 on the
|
|
49
|
+
* vendor configuration interface (hidapi `endpoint` / `interface_number ==
|
|
50
|
+
* 3`, per the `"endpoint": 3` model entry — same interface convention as
|
|
51
|
+
* Rival 3 Gen 1). The functions here build the report *payload* — the bytes
|
|
52
|
+
* after the report id — unpadded, matching rivalcfg's `usbhid.py` writes.
|
|
53
|
+
*
|
|
54
|
+
* **This device is write-only, like Rival 3 Gen 1.** `aerox3.py` defines no
|
|
55
|
+
* getter for any setting and no firmware-query command (Rival 3 Gen 1's
|
|
56
|
+
* `10 00` has no Aerox 3 counterpart in rivalcfg, libratbag, or the OpenRGB
|
|
57
|
+
* SteelSeries controller files checked for this device). There is nothing to
|
|
58
|
+
* probe the mouse with, so the HID client cannot use a firmware read as a
|
|
59
|
+
* connectivity check the way `SteelSeriesRival3HidClient` does; it must treat
|
|
60
|
+
* a successful `open()` as the only available signal. Session state must be
|
|
61
|
+
* tracked client-side with `valuesVerified: false`, exactly as Rival 3 does.
|
|
62
|
+
*
|
|
63
|
+
* Settings apply immediately; the save command (`11 00`, distinct from Rival
|
|
64
|
+
* 3 Gen 1's `09 00` — do not confuse the two) persists them to onboard flash.
|
|
65
|
+
* None of this has been verified on physical Aerox 3 hardware by this
|
|
66
|
+
* project.
|
|
67
|
+
*
|
|
68
|
+
* ## RGB zone command layout
|
|
69
|
+
*
|
|
70
|
+
* All three zone-color settings share one underlying packet shape, visible
|
|
71
|
+
* once the escalating prefixes in `aerox3.py` are read against the LED_ID
|
|
72
|
+
* bitmask comment preserved in rivalcfg's `rival3_gen2.py` (same command
|
|
73
|
+
* family): `21 <LED_ID bitmask> <zone1 r,g,b> <zone2 r,g,b> <zone3 r,g,b>`.
|
|
74
|
+
* `LED_ID` selects which zone(s) the device should actually update; the RGB
|
|
75
|
+
* slots for zones the bitmask does not select are sent as zero padding and
|
|
76
|
+
* ignored by the device. That is why `z1_color`'s command is `[0x21,0x01]`
|
|
77
|
+
* (bitmask `0b001`, immediately followed by that zone's RGB — no padding
|
|
78
|
+
* needed, its slot is first), `z2_color`'s is `[0x21,0x02,0x00,0x00,0x00]`
|
|
79
|
+
* (bitmask `0b010`, three zero bytes filling the skipped zone-1 slot before
|
|
80
|
+
* zone 2's RGB), and `z3_color`'s is `[0x21,0x04,0x00,0x00,0x00,0x00,0x00,0x00]`
|
|
81
|
+
* (bitmask `0b100`, six zero bytes filling the skipped zone-1 and zone-2
|
|
82
|
+
* slots before zone 3's RGB). This module exposes one `steelseriesAerox3EncodeZoneColor`
|
|
83
|
+
* function parameterized on zone 1–3 rather than three near-duplicate
|
|
84
|
+
* functions, producing byte-identical output to each `aerox3.py` command.
|
|
85
|
+
*
|
|
86
|
+
* ## Button mapping — deliberately reduced scope
|
|
87
|
+
*
|
|
88
|
+
* rivalcfg's `buttons` handler supports remapping to another mouse button,
|
|
89
|
+
* a disable/DPI-switch/scroll special action, or a keyboard/multimedia key
|
|
90
|
+
* chosen from large per-layout tables (`handlers/buttons/layout_qwerty.py`,
|
|
91
|
+
* `layout_multimedia.py`). This module implements the exact 5-byte/button,
|
|
92
|
+
* zero-filled packet shape and the mouse-button/disable/DPI-switch/scroll
|
|
93
|
+
* special actions, but does not re-implement rivalcfg's QWERTY or multimedia
|
|
94
|
+
* key-name tables: keyboard and multimedia targets are taken here as raw
|
|
95
|
+
* `{ type: "keyboard" | "multimedia", code }` scan-code bytes rather than
|
|
96
|
+
* name strings, matching `button_keyboard: 0x51` / `button_multimedia: 0x61`
|
|
97
|
+
* verbatim. This is the same kind of scope line `rival3.ts` draws around
|
|
98
|
+
* lighting effects it documents but does not implement.
|
|
99
|
+
*/
|
|
100
|
+
import { TRUEMOVE_CORE_DPI_TO_BYTE } from "./rival3.js";
|
|
101
|
+
export const AEROX3_REPORT_ID = 0x00;
|
|
102
|
+
/** One-byte command prefixes; the payload is the prefix plus its arguments. */
|
|
103
|
+
export const AEROX3_COMMAND = {
|
|
104
|
+
dpiPresets: [0x2d],
|
|
105
|
+
pollingRate: [0x2b],
|
|
106
|
+
reactiveColor: [0x26],
|
|
107
|
+
ledBrightness: [0x23],
|
|
108
|
+
rainbowEffect: [0x22],
|
|
109
|
+
buttonsMapping: [0x2a],
|
|
110
|
+
defaultLighting: [0x27],
|
|
111
|
+
zoneColor: [0x21],
|
|
112
|
+
};
|
|
113
|
+
/** `11 00` — distinct from Rival 3 Gen 1's `09 00`; do not reuse across families. */
|
|
114
|
+
export const AEROX3_SAVE_COMMAND = [0x11, 0x00];
|
|
115
|
+
export const AEROX3_POLLING_RATES = [125, 250, 500, 1000];
|
|
116
|
+
const POLLING_RATE_TO_BYTE = new Map([
|
|
117
|
+
[1000, 0x01],
|
|
118
|
+
[500, 0x02],
|
|
119
|
+
[250, 0x03],
|
|
120
|
+
[125, 0x04],
|
|
121
|
+
]);
|
|
122
|
+
export const AEROX3_DPI_MIN = 200;
|
|
123
|
+
export const AEROX3_DPI_MAX = 8500;
|
|
124
|
+
export const AEROX3_DPI_STEP = 100;
|
|
125
|
+
export const AEROX3_MAX_DPI_PRESETS = 5;
|
|
126
|
+
export class Aerox3ProtocolError extends Error {
|
|
127
|
+
}
|
|
128
|
+
/** The 84 DPI values the shared TrueMove Core sensor table can express, ascending. */
|
|
129
|
+
export function steelseriesAerox3DpiOptions() {
|
|
130
|
+
return [...TRUEMOVE_CORE_DPI_TO_BYTE.keys()].sort((a, b) => a - b);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* `2D <count> <selected> <v1>…<vN>` — replaces the mouse's whole preset
|
|
134
|
+
* table. One byte per DPI (`dpi_length_byte: 1`); `selectedIndex` is 0-based
|
|
135
|
+
* here and encoded 1-based on the wire (`first_preset: 1`).
|
|
136
|
+
*/
|
|
137
|
+
export function steelseriesAerox3EncodeDpiPresets(presets, selectedIndex) {
|
|
138
|
+
if (presets.length < 1 || presets.length > AEROX3_MAX_DPI_PRESETS) {
|
|
139
|
+
throw new Aerox3ProtocolError(`SteelSeries Aerox 3 supports 1–${AEROX3_MAX_DPI_PRESETS} DPI presets.`);
|
|
140
|
+
}
|
|
141
|
+
if (!Number.isInteger(selectedIndex) || selectedIndex < 0 || selectedIndex >= presets.length) {
|
|
142
|
+
throw new Aerox3ProtocolError(`Selected DPI preset must be an index into the ${presets.length} presets being written.`);
|
|
143
|
+
}
|
|
144
|
+
const encoded = presets.map((dpi) => {
|
|
145
|
+
const byte = TRUEMOVE_CORE_DPI_TO_BYTE.get(dpi);
|
|
146
|
+
if (byte === undefined) {
|
|
147
|
+
throw new Aerox3ProtocolError(`SteelSeries Aerox 3 DPI must be ${AEROX3_DPI_MIN}–${AEROX3_DPI_MAX.toLocaleString()} in ${AEROX3_DPI_STEP} DPI steps.`);
|
|
148
|
+
}
|
|
149
|
+
return byte;
|
|
150
|
+
});
|
|
151
|
+
return new Uint8Array([...AEROX3_COMMAND.dpiPresets, presets.length, selectedIndex + 1, ...encoded]);
|
|
152
|
+
}
|
|
153
|
+
/** `2B <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04. */
|
|
154
|
+
export function steelseriesAerox3EncodePollingRate(pollingRateHz) {
|
|
155
|
+
const byte = POLLING_RATE_TO_BYTE.get(pollingRateHz);
|
|
156
|
+
if (byte === undefined) {
|
|
157
|
+
throw new Aerox3ProtocolError("SteelSeries Aerox 3 supports 125, 250, 500, or 1000 Hz polling.");
|
|
158
|
+
}
|
|
159
|
+
return new Uint8Array([...AEROX3_COMMAND.pollingRate, byte]);
|
|
160
|
+
}
|
|
161
|
+
function encodeRgb(r, g, b) {
|
|
162
|
+
for (const channel of [r, g, b]) {
|
|
163
|
+
if (!Number.isInteger(channel) || channel < 0 || channel > 255) {
|
|
164
|
+
throw new Aerox3ProtocolError("RGB channels must be integers 0–255.");
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return [r, g, b];
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* `21 <bitmask> <padding for skipped zones> <r> <g> <b>` — see the module
|
|
171
|
+
* doc comment for how the zero-padding length grows with the zone number.
|
|
172
|
+
* Zone 1 = top LED, zone 2 = middle LED, zone 3 = bottom LED (strip order,
|
|
173
|
+
* per `aerox3.py`'s CLI flag labels).
|
|
174
|
+
*/
|
|
175
|
+
export function steelseriesAerox3EncodeZoneColor(zone, r, g, b) {
|
|
176
|
+
const [red, green, blue] = encodeRgb(r, g, b);
|
|
177
|
+
if (zone === 1) {
|
|
178
|
+
return new Uint8Array([...AEROX3_COMMAND.zoneColor, 0x01, red, green, blue]);
|
|
179
|
+
}
|
|
180
|
+
if (zone === 2) {
|
|
181
|
+
return new Uint8Array([...AEROX3_COMMAND.zoneColor, 0x02, 0x00, 0x00, 0x00, red, green, blue]);
|
|
182
|
+
}
|
|
183
|
+
if (zone === 3) {
|
|
184
|
+
return new Uint8Array([
|
|
185
|
+
...AEROX3_COMMAND.zoneColor, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, red, green, blue,
|
|
186
|
+
]);
|
|
187
|
+
}
|
|
188
|
+
throw new Aerox3ProtocolError("SteelSeries Aerox 3 has zones 1 (top), 2 (middle), and 3 (bottom) only.");
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* `26 00 00 00 00 00` when disabled, `26 01 00 <r> <g> <b>` when enabled —
|
|
192
|
+
* the color the LEDs flash to in reaction to a button click.
|
|
193
|
+
*/
|
|
194
|
+
export function steelseriesAerox3EncodeReactiveColor(color) {
|
|
195
|
+
if (color === null) {
|
|
196
|
+
return new Uint8Array([...AEROX3_COMMAND.reactiveColor, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
|
197
|
+
}
|
|
198
|
+
const [r, g, b] = encodeRgb(color.r, color.g, color.b);
|
|
199
|
+
return new Uint8Array([...AEROX3_COMMAND.reactiveColor, 0x01, 0x00, r, g, b]);
|
|
200
|
+
}
|
|
201
|
+
/** `23 <v>` — linear 0–100 passthrough (`output_range` matches `input_range`). */
|
|
202
|
+
export function steelseriesAerox3EncodeLedBrightness(percent) {
|
|
203
|
+
if (!Number.isInteger(percent) || percent < 0 || percent > 100) {
|
|
204
|
+
throw new Aerox3ProtocolError("SteelSeries Aerox 3 LED brightness must be an integer 0–100.");
|
|
205
|
+
}
|
|
206
|
+
return new Uint8Array([...AEROX3_COMMAND.ledBrightness, percent]);
|
|
207
|
+
}
|
|
208
|
+
export const AEROX3_RAINBOW_ZONES = {
|
|
209
|
+
all: 0b111,
|
|
210
|
+
bottom: 0b100,
|
|
211
|
+
middle: 0b010,
|
|
212
|
+
top: 0b001,
|
|
213
|
+
"bottom-middle": 0b110,
|
|
214
|
+
"middle-top": 0b011,
|
|
215
|
+
"bottom-top": 0b101,
|
|
216
|
+
};
|
|
217
|
+
/** `22 <bitmask>` — rainbow effect on the selected zone(s); cleared by setting a color. */
|
|
218
|
+
export function steelseriesAerox3EncodeRainbowEffect(zones) {
|
|
219
|
+
const byte = AEROX3_RAINBOW_ZONES[zones];
|
|
220
|
+
if (byte === undefined) {
|
|
221
|
+
throw new Aerox3ProtocolError(`SteelSeries Aerox 3 rainbow zones must be one of: ${Object.keys(AEROX3_RAINBOW_ZONES).join(", ")}.`);
|
|
222
|
+
}
|
|
223
|
+
return new Uint8Array([...AEROX3_COMMAND.rainbowEffect, byte]);
|
|
224
|
+
}
|
|
225
|
+
export const AEROX3_DEFAULT_LIGHTING = {
|
|
226
|
+
off: [0x00, 0x00],
|
|
227
|
+
reactive: [0x00, 0x01],
|
|
228
|
+
rainbow: [0x01, 0x00],
|
|
229
|
+
"reactive-rainbow": [0x01, 0x01],
|
|
230
|
+
};
|
|
231
|
+
/** `27 <v1> <v2>` — what the mouse lights up as before a host ever connects. */
|
|
232
|
+
export function steelseriesAerox3EncodeDefaultLighting(mode) {
|
|
233
|
+
const bytes = AEROX3_DEFAULT_LIGHTING[mode];
|
|
234
|
+
if (bytes === undefined) {
|
|
235
|
+
throw new Aerox3ProtocolError(`SteelSeries Aerox 3 default lighting must be one of: ${Object.keys(AEROX3_DEFAULT_LIGHTING).join(", ")}.`);
|
|
236
|
+
}
|
|
237
|
+
return new Uint8Array([...AEROX3_COMMAND.defaultLighting, ...bytes]);
|
|
238
|
+
}
|
|
239
|
+
/** `11 00` — commit the current settings to onboard flash. */
|
|
240
|
+
export function steelseriesAerox3SaveCommand() {
|
|
241
|
+
return new Uint8Array(AEROX3_SAVE_COMMAND);
|
|
242
|
+
}
|
|
243
|
+
/** `buttons_mapping.buttons` from `aerox3.py`, id + byte offset into the packet. */
|
|
244
|
+
export const AEROX3_BUTTONS = {
|
|
245
|
+
button1: { id: 0x01, offset: 0x00 },
|
|
246
|
+
button2: { id: 0x02, offset: 0x05 },
|
|
247
|
+
button3: { id: 0x03, offset: 0x0a },
|
|
248
|
+
button4: { id: 0x04, offset: 0x0f },
|
|
249
|
+
button5: { id: 0x05, offset: 0x14 },
|
|
250
|
+
button6: { id: 0x06, offset: 0x19 },
|
|
251
|
+
scrollUp: { id: 0x31, offset: 0x1e },
|
|
252
|
+
scrollDown: { id: 0x32, offset: 0x23 },
|
|
253
|
+
};
|
|
254
|
+
const AEROX3_BUTTON_FIELD_LENGTH = 5;
|
|
255
|
+
const AEROX3_BUTTON_DISABLE = 0x00;
|
|
256
|
+
const AEROX3_BUTTON_DPI_SWITCH = 0x30;
|
|
257
|
+
const AEROX3_BUTTON_KEYBOARD = 0x51;
|
|
258
|
+
const AEROX3_BUTTON_MULTIMEDIA = 0x61;
|
|
259
|
+
/**
|
|
260
|
+
* `2A` + one 40-byte (`8 buttons × 5-byte field length`) packet, zero-filled
|
|
261
|
+
* except where a mapping is given. Unmapped buttons are left as all-zero
|
|
262
|
+
* fields (rivalcfg instead fills in per-button defaults; this codec leaves
|
|
263
|
+
* that policy to the caller — pass every button explicitly for parity with
|
|
264
|
+
* rivalcfg's default profile).
|
|
265
|
+
*/
|
|
266
|
+
export function steelseriesAerox3EncodeButtonsMapping(mapping) {
|
|
267
|
+
const names = Object.keys(AEROX3_BUTTONS);
|
|
268
|
+
const packet = new Array(names.length * AEROX3_BUTTON_FIELD_LENGTH).fill(0x00);
|
|
269
|
+
for (const [name, action] of Object.entries(mapping)) {
|
|
270
|
+
const slot = AEROX3_BUTTONS[name];
|
|
271
|
+
if (!slot) {
|
|
272
|
+
throw new Aerox3ProtocolError(`Unknown SteelSeries Aerox 3 button "${name}".`);
|
|
273
|
+
}
|
|
274
|
+
const { offset } = slot;
|
|
275
|
+
switch (action.type) {
|
|
276
|
+
case "button": {
|
|
277
|
+
packet[offset] = AEROX3_BUTTONS[action.target].id;
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
case "disabled": {
|
|
281
|
+
packet[offset] = AEROX3_BUTTON_DISABLE;
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
case "dpiSwitch": {
|
|
285
|
+
packet[offset] = AEROX3_BUTTON_DPI_SWITCH;
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
case "keyboard": {
|
|
289
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
290
|
+
throw new Aerox3ProtocolError("Keyboard scan codes must be integers 0–255.");
|
|
291
|
+
}
|
|
292
|
+
packet[offset] = AEROX3_BUTTON_KEYBOARD;
|
|
293
|
+
packet[offset + 1] = action.code;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
case "multimedia": {
|
|
297
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
298
|
+
throw new Aerox3ProtocolError("Multimedia key codes must be integers 0–255.");
|
|
299
|
+
}
|
|
300
|
+
packet[offset] = AEROX3_BUTTON_MULTIMEDIA;
|
|
301
|
+
packet[offset + 1] = action.code;
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
default: {
|
|
305
|
+
throw new Aerox3ProtocolError(`Unsupported SteelSeries Aerox 3 button action.`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return new Uint8Array([...AEROX3_COMMAND.buttonsMapping, ...packet]);
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=aerox3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aerox3.js","sourceRoot":"","sources":["../../src/steelseries/aerox3.ts"],"names":[],"mappings":"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"}
|