@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,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Prime Mini Wireless configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - There is **no** `prime_mini_wireless.py` (nor a wired/wireless filename
|
|
7
|
+
* pair) in rivalcfg. The Prime Mini Wireless is instead one of two models
|
|
8
|
+
* inside the shared "Prime Wireless" profile pair:
|
|
9
|
+
* `rivalcfg/devices/prime_wireless_wired.py` (USB-cabled mode) defines two
|
|
10
|
+
* `models` entries — `"SteelSeries Prime Wireless (wired mode)"`
|
|
11
|
+
* (`1038:1842`) and `"SteelSeries Prime Mini Wireless (wired mode)"`
|
|
12
|
+
* (`1038:184A`) — sharing one `settings`/`battery_level`/`save_command`
|
|
13
|
+
* dict. `rivalcfg/devices/prime_wireless_wireless.py` (2.4 GHz dongle mode)
|
|
14
|
+
* mirrors that with `1038:1840` (Prime Wireless) and `1038:1848` (Prime
|
|
15
|
+
* Mini Wireless), built by comprehending `prime_wireless_wired.py`'s
|
|
16
|
+
* `settings`/`battery_level`/`save_command` through one `_patch_command`
|
|
17
|
+
* helper — same transform this file implements as `applyPrimeMiniWirelessFlag`.
|
|
18
|
+
* Both files were read in full. This module implements only the two Prime
|
|
19
|
+
* Mini Wireless product ids (`0x184A` wired, `0x1848` 2.4 GHz) per the
|
|
20
|
+
* scope of this change — see "Scope" below for why the plain Prime
|
|
21
|
+
* Wireless PIDs (`0x1842`/`0x1840`) are deliberately not registered here
|
|
22
|
+
* even though the command set is identical.
|
|
23
|
+
* - rivalcfg `rivalcfg/devices/dpi/truemove_air.py` — same TrueMove Air
|
|
24
|
+
* sensor table as the Rival 3 Wireless and Aerox 5 Wireless — imported
|
|
25
|
+
* from `./rival3-wireless.ts`'s `TRUEMOVE_AIR_DPI_TO_BYTE`, not re-derived.
|
|
26
|
+
* - rivalcfg `rivalcfg/handlers/multidpi_range_choice.py` — `dpi_length_byte: 1`,
|
|
27
|
+
* `first_preset: 0` (same shape as `./aerox5-wireless.ts`, **not**
|
|
28
|
+
* `./rival3-wireless.ts`'s `first_preset: 1`/`dpi_length_byte` via
|
|
29
|
+
* `multidpi_range`).
|
|
30
|
+
* - rivalcfg `rivalcfg/handlers/range.py` — `sleep_timer`/`dim_timer`: the
|
|
31
|
+
* exact same linear range-to-range mapping as `./aerox5-wireless.ts`
|
|
32
|
+
* (`sleep_timer` = minutes × 60000 ms, `dim_timer` = seconds × 1000 ms,
|
|
33
|
+
* both little-endian 3 bytes, `range_length_byte: 3`). Traced by hand
|
|
34
|
+
* against `prime_wireless_wired.py`'s `output_range: [0x000000, 0x124F80, …]`
|
|
35
|
+
* values, not assumed from the Aerox 5 Wireless precedent.
|
|
36
|
+
* - rivalcfg `rivalcfg/handlers/rgbcolor.py` — LED color: `command: [0x21, 0x01, 0x00]`
|
|
37
|
+
* with the RGB triplet appended directly (no zone byte and no bitmask —
|
|
38
|
+
* this is a single-LED mouse, unlike the Aerox 5 Wireless's
|
|
39
|
+
* zone-indexed `steelseriesAerox5WirelessEncodeZoneColor`).
|
|
40
|
+
* - rivalcfg `rivalcfg/handlers/choice.py` — `polling_rate`
|
|
41
|
+
* (`{125:0x03, 250:0x02, 500:0x01, 1000:0x00}`, byte-identical mapping to
|
|
42
|
+
* `./aerox5-wireless.ts`'s table, confirmed by direct comparison — not
|
|
43
|
+
* assumed) and `default_lighting` (`{"off": 0x00, "rainbow": 0x01}`).
|
|
44
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` (inferred generic
|
|
45
|
+
* handler backing `value_type: "buttons"`) — 6 mappable buttons + scroll
|
|
46
|
+
* up/down, `button_field_length: 5`, byte-identical ids/offsets to the
|
|
47
|
+
* non-wireless `prime_mini.py`'s `buttons_mapping` block (confirmed by
|
|
48
|
+
* direct comparison of both device files).
|
|
49
|
+
*
|
|
50
|
+
* ## Why wired-cable-mode and 2.4 GHz-dongle-mode share one module
|
|
51
|
+
*
|
|
52
|
+
* Same SteelSeries wireless pattern as `./aerox5-wireless.ts` and
|
|
53
|
+
* `./rival3-wireless.ts`: one physical mouse, two USB product ids depending
|
|
54
|
+
* on transport, one command set modulo a fixed transform.
|
|
55
|
+
* `prime_wireless_wireless.py`'s `_patch_command` ORs `0b01000000` (`0x40`)
|
|
56
|
+
* into `command[0]` of every setting, `battery_level`, and `save_command`
|
|
57
|
+
* inherited from `prime_wireless_wired.py`, and adds `readback_length: 64`
|
|
58
|
+
* (an expected reply length this module does not need to model — no
|
|
59
|
+
* function here reads or validates a readback payload). Every command byte
|
|
60
|
+
* in `PRIME_MINI_WIRELESS_COMMAND` below is the wired-mode value;
|
|
61
|
+
* `applyPrimeMiniWirelessFlag` produces the 2.4 GHz-mode byte from it on demand.
|
|
62
|
+
*
|
|
63
|
+
* ## Scope: Prime Mini Wireless only, not the plain Prime Wireless
|
|
64
|
+
*
|
|
65
|
+
* `prime_wireless_wired.py`/`prime_wireless_wireless.py` document the Prime
|
|
66
|
+
* Mini Wireless and the plain (non-Mini) Prime Wireless as one shared
|
|
67
|
+
* `settings` dict — genuinely the same command bytes, same DPI table, same
|
|
68
|
+
* battery shape, differing only in physical product id. This change is
|
|
69
|
+
* scoped to the Prime Mini Wireless cluster only: `./devices.ts` registers
|
|
70
|
+
* `0x184A`/`0x1848` (Prime Mini Wireless) under family
|
|
71
|
+
* `"prime-mini-wireless"` and deliberately does **not** register
|
|
72
|
+
* `0x1842`/`0x1840` (plain Prime Wireless) — even though this module's
|
|
73
|
+
* exported functions would encode identical bytes for either PID group, the
|
|
74
|
+
* plain Prime Wireless is out of scope for this change and is left for
|
|
75
|
+
* whichever future change actually verifies and ships it.
|
|
76
|
+
*
|
|
77
|
+
* ## No corroboration beyond rivalcfg was possible in this environment
|
|
78
|
+
*
|
|
79
|
+
* No local libratbag checkout was available, and OpenRGB's SteelSeries
|
|
80
|
+
* controller files were not reachable this pass — every command byte above
|
|
81
|
+
* is sourced from rivalcfg alone, same disclosure as `./aerox5-wireless.ts`.
|
|
82
|
+
* This should be treated as unverified beyond rivalcfg until corroborated
|
|
83
|
+
* or hardware-tested.
|
|
84
|
+
*
|
|
85
|
+
* Every command is an HID output report, report id `0x00`, on the vendor
|
|
86
|
+
* configuration interface (`"endpoint": 3` for every model in both rivalcfg
|
|
87
|
+
* files). DPI presets, polling rate, LED color, sleep/dim timers, default
|
|
88
|
+
* lighting, and buttons are write-only — neither rivalcfg file defines a
|
|
89
|
+
* getter for any of them. Battery level **is** readable (see below).
|
|
90
|
+
* Settings apply immediately; the save command (`11 00` wired, `51 00`
|
|
91
|
+
* wireless) persists them to onboard flash. None of this has been verified
|
|
92
|
+
* on physical hardware by this project.
|
|
93
|
+
*
|
|
94
|
+
* ## Battery read
|
|
95
|
+
*
|
|
96
|
+
* `prime_wireless_wired.py` defines a `battery_level` block byte-identical
|
|
97
|
+
* in shape to `./aerox5-wireless.ts`'s: an output-report write of `0x92`
|
|
98
|
+
* gets a 2-byte input-report reply, where `data[1] & 0b10000000` is the
|
|
99
|
+
* charging flag and `((data[1] & ~0b10000000) - 1) * 5` is the percentage
|
|
100
|
+
* (coarse 0–100 scale in steps of 5, `- 1` because the raw byte is
|
|
101
|
+
* 1-indexed). Confirmed by reading `prime_wireless_wired.py` directly — this
|
|
102
|
+
* is **not** `./rival3-wireless.ts`'s `AA 01` / 3-byte-reply /
|
|
103
|
+
* plain-percentage-byte shape; do not conflate the two. In 2.4 GHz mode the
|
|
104
|
+
* query byte is `0x92 | 0x40 = 0xD2`, produced by `applyPrimeMiniWirelessFlag`.
|
|
105
|
+
*/
|
|
106
|
+
import { TRUEMOVE_AIR_DPI_TO_BYTE } from "./rival3-wireless.js";
|
|
107
|
+
export const PRIME_MINI_WIRELESS_REPORT_ID = 0x00;
|
|
108
|
+
/** `_WIRELESS_FLAG = 0b01000000` in `prime_wireless_wireless.py`. */
|
|
109
|
+
const WIRELESS_FLAG = 0b01000000;
|
|
110
|
+
/** Wired-cable-mode command bytes; OR `WIRELESS_FLAG` into byte 0 for 2.4 GHz mode. */
|
|
111
|
+
export const PRIME_MINI_WIRELESS_COMMAND = {
|
|
112
|
+
dpiPresets: [0x2d],
|
|
113
|
+
pollingRate: [0x2b],
|
|
114
|
+
color: [0x21, 0x01, 0x00],
|
|
115
|
+
buttonsMapping: [0x2a],
|
|
116
|
+
sleepTimer: [0x29],
|
|
117
|
+
dimTimer: [0x23, 0x0f, 0x01, 0x00, 0x00],
|
|
118
|
+
defaultLighting: [0x27],
|
|
119
|
+
batteryLevel: [0x92],
|
|
120
|
+
};
|
|
121
|
+
/** `11 00` wired-mode / `51 00` 2.4 GHz-mode — see `applyPrimeMiniWirelessFlag`. */
|
|
122
|
+
export const PRIME_MINI_WIRELESS_SAVE_COMMAND = [0x11, 0x00];
|
|
123
|
+
/**
|
|
124
|
+
* `_patch_command`: OR `0b01000000` into the command's first byte. Pass the
|
|
125
|
+
* wired-mode command bytes from `PRIME_MINI_WIRELESS_COMMAND` /
|
|
126
|
+
* `PRIME_MINI_WIRELESS_SAVE_COMMAND`; returns the 2.4 GHz-mode equivalent.
|
|
127
|
+
*/
|
|
128
|
+
export function applyPrimeMiniWirelessFlag(command) {
|
|
129
|
+
if (command.length === 0) {
|
|
130
|
+
throw new PrimeMiniWirelessProtocolError("Cannot apply the wireless flag to an empty command.");
|
|
131
|
+
}
|
|
132
|
+
return [command[0] | WIRELESS_FLAG, ...command.slice(1)];
|
|
133
|
+
}
|
|
134
|
+
export const PRIME_MINI_WIRELESS_POLLING_RATES = [125, 250, 500, 1000];
|
|
135
|
+
/** Byte-identical mapping to `./aerox5-wireless.ts`'s `POLLING_RATE_TO_BYTE` — confirmed by comparison, not assumed. */
|
|
136
|
+
const POLLING_RATE_TO_BYTE = new Map([
|
|
137
|
+
[1000, 0x00],
|
|
138
|
+
[500, 0x01],
|
|
139
|
+
[250, 0x02],
|
|
140
|
+
[125, 0x03],
|
|
141
|
+
]);
|
|
142
|
+
export const PRIME_MINI_WIRELESS_DPI_MIN = 100;
|
|
143
|
+
export const PRIME_MINI_WIRELESS_DPI_MAX = 18000;
|
|
144
|
+
export const PRIME_MINI_WIRELESS_DPI_STEP = 100;
|
|
145
|
+
export const PRIME_MINI_WIRELESS_MAX_DPI_PRESETS = 5;
|
|
146
|
+
export const PRIME_MINI_WIRELESS_BATTERY_RESPONSE_LENGTH = 2;
|
|
147
|
+
const BATTERY_CHARGING_FLAG = 0b10000000;
|
|
148
|
+
export class PrimeMiniWirelessProtocolError extends Error {
|
|
149
|
+
}
|
|
150
|
+
/** The 180 DPI values the shared TrueMove Air sensor table can express, ascending. */
|
|
151
|
+
export function steelseriesPrimeMiniWirelessDpiOptions() {
|
|
152
|
+
return [...TRUEMOVE_AIR_DPI_TO_BYTE.keys()].sort((a, b) => a - b);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* `2D <count> <selected> <v1>…<vN>` (or `6D …` in 2.4 GHz mode). One byte
|
|
156
|
+
* per DPI; `selectedIndex` is 0-based and encoded 0-based on the wire
|
|
157
|
+
* (`first_preset: 0`).
|
|
158
|
+
*/
|
|
159
|
+
export function steelseriesPrimeMiniWirelessEncodeDpiPresets(presets, selectedIndex, wireless) {
|
|
160
|
+
if (presets.length < 1 || presets.length > PRIME_MINI_WIRELESS_MAX_DPI_PRESETS) {
|
|
161
|
+
throw new PrimeMiniWirelessProtocolError(`SteelSeries Prime Mini Wireless supports 1–${PRIME_MINI_WIRELESS_MAX_DPI_PRESETS} DPI presets.`);
|
|
162
|
+
}
|
|
163
|
+
if (!Number.isInteger(selectedIndex) || selectedIndex < 0 || selectedIndex >= presets.length) {
|
|
164
|
+
throw new PrimeMiniWirelessProtocolError(`Selected DPI preset must be an index into the ${presets.length} presets being written.`);
|
|
165
|
+
}
|
|
166
|
+
const encoded = presets.map((dpi) => {
|
|
167
|
+
const byte = TRUEMOVE_AIR_DPI_TO_BYTE.get(dpi);
|
|
168
|
+
if (byte === undefined) {
|
|
169
|
+
throw new PrimeMiniWirelessProtocolError(`SteelSeries Prime Mini Wireless DPI must be ${PRIME_MINI_WIRELESS_DPI_MIN}–${PRIME_MINI_WIRELESS_DPI_MAX.toLocaleString()} in ${PRIME_MINI_WIRELESS_DPI_STEP} DPI steps.`);
|
|
170
|
+
}
|
|
171
|
+
return byte;
|
|
172
|
+
});
|
|
173
|
+
const command = wireless
|
|
174
|
+
? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.dpiPresets)
|
|
175
|
+
: PRIME_MINI_WIRELESS_COMMAND.dpiPresets;
|
|
176
|
+
return new Uint8Array([...command, presets.length, selectedIndex, ...encoded]);
|
|
177
|
+
}
|
|
178
|
+
/** `2B <v>` (`6B` wireless) with 1000→0x00, 500→0x01, 250→0x02, 125→0x03. */
|
|
179
|
+
export function steelseriesPrimeMiniWirelessEncodePollingRate(pollingRateHz, wireless) {
|
|
180
|
+
const byte = POLLING_RATE_TO_BYTE.get(pollingRateHz);
|
|
181
|
+
if (byte === undefined) {
|
|
182
|
+
throw new PrimeMiniWirelessProtocolError("SteelSeries Prime Mini Wireless supports 125, 250, 500, or 1000 Hz polling.");
|
|
183
|
+
}
|
|
184
|
+
const command = wireless
|
|
185
|
+
? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.pollingRate)
|
|
186
|
+
: PRIME_MINI_WIRELESS_COMMAND.pollingRate;
|
|
187
|
+
return new Uint8Array([...command, byte]);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* `21 01 00 <r> <g> <b>` (`61 01 00 …` wireless) — a fixed single-LED
|
|
191
|
+
* packet, no zone byte (this mouse has one LED, unlike the Aerox 5
|
|
192
|
+
* Wireless's zone-indexed color command).
|
|
193
|
+
*/
|
|
194
|
+
export function steelseriesPrimeMiniWirelessEncodeColor(r, g, b, wireless) {
|
|
195
|
+
for (const channel of [r, g, b]) {
|
|
196
|
+
if (!Number.isInteger(channel) || channel < 0 || channel > 255) {
|
|
197
|
+
throw new PrimeMiniWirelessProtocolError("RGB channels must be integers 0–255.");
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const command = wireless ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.color) : PRIME_MINI_WIRELESS_COMMAND.color;
|
|
201
|
+
return new Uint8Array([...command, r, g, b]);
|
|
202
|
+
}
|
|
203
|
+
function encodeRangeLE3(value, min, max, unit, msPerUnit) {
|
|
204
|
+
if (!Number.isInteger(value) || value < min || value > max) {
|
|
205
|
+
throw new PrimeMiniWirelessProtocolError(`SteelSeries Prime Mini Wireless ${unit} must be an integer ${min}–${max}.`);
|
|
206
|
+
}
|
|
207
|
+
const ms = value * msPerUnit;
|
|
208
|
+
return [ms & 0xff, (ms >> 8) & 0xff, (ms >> 16) & 0xff];
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* `29 <ms LE24>` (`69 …` wireless) — idle minutes before sleep, `0` disables.
|
|
212
|
+
* Encoded as `minutes * 60000` milliseconds, little-endian 3 bytes.
|
|
213
|
+
*/
|
|
214
|
+
export function steelseriesPrimeMiniWirelessEncodeSleepTimer(minutes, wireless) {
|
|
215
|
+
const bytes = encodeRangeLE3(minutes, 0, 20, "sleep timer minutes", 60_000);
|
|
216
|
+
const command = wireless
|
|
217
|
+
? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.sleepTimer)
|
|
218
|
+
: PRIME_MINI_WIRELESS_COMMAND.sleepTimer;
|
|
219
|
+
return new Uint8Array([...command, ...bytes]);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* `23 0F 01 00 00 <ms LE24>` (`63 …` wireless) — idle seconds before the LED
|
|
223
|
+
* dims, `0` disables. Encoded as `seconds * 1000` milliseconds,
|
|
224
|
+
* little-endian 3 bytes.
|
|
225
|
+
*/
|
|
226
|
+
export function steelseriesPrimeMiniWirelessEncodeDimTimer(seconds, wireless) {
|
|
227
|
+
const bytes = encodeRangeLE3(seconds, 0, 1200, "dim timer seconds", 1_000);
|
|
228
|
+
const command = wireless
|
|
229
|
+
? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.dimTimer)
|
|
230
|
+
: PRIME_MINI_WIRELESS_COMMAND.dimTimer;
|
|
231
|
+
return new Uint8Array([...command, ...bytes]);
|
|
232
|
+
}
|
|
233
|
+
/** `off`/`rainbow` LED-at-startup choice. */
|
|
234
|
+
export const PRIME_MINI_WIRELESS_DEFAULT_LIGHTING = {
|
|
235
|
+
off: 0x00,
|
|
236
|
+
rainbow: 0x01,
|
|
237
|
+
};
|
|
238
|
+
/** `27 <v>` (`67 …` wireless) — what the mouse lights up as before a host ever connects. */
|
|
239
|
+
export function steelseriesPrimeMiniWirelessEncodeDefaultLighting(mode, wireless) {
|
|
240
|
+
const byte = PRIME_MINI_WIRELESS_DEFAULT_LIGHTING[mode];
|
|
241
|
+
if (byte === undefined) {
|
|
242
|
+
throw new PrimeMiniWirelessProtocolError(`SteelSeries Prime Mini Wireless default lighting must be one of: ${Object.keys(PRIME_MINI_WIRELESS_DEFAULT_LIGHTING).join(", ")}.`);
|
|
243
|
+
}
|
|
244
|
+
const command = wireless
|
|
245
|
+
? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.defaultLighting)
|
|
246
|
+
: PRIME_MINI_WIRELESS_COMMAND.defaultLighting;
|
|
247
|
+
return new Uint8Array([...command, byte]);
|
|
248
|
+
}
|
|
249
|
+
/** `11 00` wired-mode / `51 00` 2.4 GHz-mode — commit the current settings to onboard flash. */
|
|
250
|
+
export function steelseriesPrimeMiniWirelessSaveCommand(wireless) {
|
|
251
|
+
const command = wireless ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_SAVE_COMMAND) : PRIME_MINI_WIRELESS_SAVE_COMMAND;
|
|
252
|
+
return new Uint8Array(command);
|
|
253
|
+
}
|
|
254
|
+
/** `92` wired-mode / `D2` 2.4 GHz-mode — the device answers with a two-byte input report. */
|
|
255
|
+
export function steelseriesPrimeMiniWirelessBatteryQuery(wireless) {
|
|
256
|
+
const command = wireless
|
|
257
|
+
? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.batteryLevel)
|
|
258
|
+
: PRIME_MINI_WIRELESS_COMMAND.batteryLevel;
|
|
259
|
+
return new Uint8Array(command);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Decode the two-byte battery response: `data[0]` is unused by rivalcfg's
|
|
263
|
+
* lambdas, `data[1]`'s top bit is the charging flag and the remaining 7 bits
|
|
264
|
+
* (1-indexed, hence `- 1`) scaled by 5 give the percentage.
|
|
265
|
+
*/
|
|
266
|
+
export function steelseriesPrimeMiniWirelessDecodeBattery(payload) {
|
|
267
|
+
if (payload.length < PRIME_MINI_WIRELESS_BATTERY_RESPONSE_LENGTH) {
|
|
268
|
+
throw new PrimeMiniWirelessProtocolError("SteelSeries Prime Mini Wireless battery response is shorter than two bytes.");
|
|
269
|
+
}
|
|
270
|
+
const statusByte = payload[1];
|
|
271
|
+
const isCharging = (statusByte & BATTERY_CHARGING_FLAG) !== 0;
|
|
272
|
+
const level = ((statusByte & ~BATTERY_CHARGING_FLAG) - 1) * 5;
|
|
273
|
+
return { level, isCharging };
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* `buttons_mapping.buttons` shared by `prime_wireless_wired.py` — same
|
|
277
|
+
* offsets/ids as the non-wireless `prime_mini.py`'s `buttons_mapping` block,
|
|
278
|
+
* confirmed by direct comparison of both device files, defined separately
|
|
279
|
+
* here so this family's button table stays self-contained.
|
|
280
|
+
*/
|
|
281
|
+
export const PRIME_MINI_WIRELESS_BUTTONS = {
|
|
282
|
+
button1: { id: 0x01, offset: 0x00 },
|
|
283
|
+
button2: { id: 0x02, offset: 0x05 },
|
|
284
|
+
button3: { id: 0x03, offset: 0x0a },
|
|
285
|
+
button4: { id: 0x04, offset: 0x0f },
|
|
286
|
+
button5: { id: 0x05, offset: 0x14 },
|
|
287
|
+
button6: { id: 0x06, offset: 0x19 },
|
|
288
|
+
scrollUp: { id: 0x31, offset: 0x1e },
|
|
289
|
+
scrollDown: { id: 0x32, offset: 0x23 },
|
|
290
|
+
};
|
|
291
|
+
const PRIME_MINI_WIRELESS_BUTTON_FIELD_LENGTH = 5;
|
|
292
|
+
const PRIME_MINI_WIRELESS_BUTTON_DISABLE = 0x00;
|
|
293
|
+
const PRIME_MINI_WIRELESS_BUTTON_DPI_SWITCH = 0x30;
|
|
294
|
+
const PRIME_MINI_WIRELESS_BUTTON_KEYBOARD = 0x51;
|
|
295
|
+
const PRIME_MINI_WIRELESS_BUTTON_MULTIMEDIA = 0x61;
|
|
296
|
+
/**
|
|
297
|
+
* `2A` (`6A` wireless) + one 40-byte (`8 buttons × 5-byte field length`)
|
|
298
|
+
* packet, zero-filled except where a mapping is given. Unmapped buttons are
|
|
299
|
+
* left as all-zero fields (rivalcfg instead fills in per-button defaults;
|
|
300
|
+
* this codec leaves that policy to the caller — pass every button
|
|
301
|
+
* explicitly for parity with rivalcfg's default profile).
|
|
302
|
+
*/
|
|
303
|
+
export function steelseriesPrimeMiniWirelessEncodeButtonsMapping(mapping, wireless) {
|
|
304
|
+
const names = Object.keys(PRIME_MINI_WIRELESS_BUTTONS);
|
|
305
|
+
const packet = new Array(names.length * PRIME_MINI_WIRELESS_BUTTON_FIELD_LENGTH).fill(0x00);
|
|
306
|
+
for (const [name, action] of Object.entries(mapping)) {
|
|
307
|
+
const slot = PRIME_MINI_WIRELESS_BUTTONS[name];
|
|
308
|
+
if (!slot) {
|
|
309
|
+
throw new PrimeMiniWirelessProtocolError(`Unknown SteelSeries Prime Mini Wireless button "${name}".`);
|
|
310
|
+
}
|
|
311
|
+
const { offset } = slot;
|
|
312
|
+
switch (action.type) {
|
|
313
|
+
case "button": {
|
|
314
|
+
packet[offset] = PRIME_MINI_WIRELESS_BUTTONS[action.target].id;
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
case "disabled": {
|
|
318
|
+
packet[offset] = PRIME_MINI_WIRELESS_BUTTON_DISABLE;
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
case "dpiSwitch": {
|
|
322
|
+
packet[offset] = PRIME_MINI_WIRELESS_BUTTON_DPI_SWITCH;
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
case "keyboard": {
|
|
326
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
327
|
+
throw new PrimeMiniWirelessProtocolError("Keyboard scan codes must be integers 0–255.");
|
|
328
|
+
}
|
|
329
|
+
packet[offset] = PRIME_MINI_WIRELESS_BUTTON_KEYBOARD;
|
|
330
|
+
packet[offset + 1] = action.code;
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
case "multimedia": {
|
|
334
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
335
|
+
throw new PrimeMiniWirelessProtocolError("Multimedia key codes must be integers 0–255.");
|
|
336
|
+
}
|
|
337
|
+
packet[offset] = PRIME_MINI_WIRELESS_BUTTON_MULTIMEDIA;
|
|
338
|
+
packet[offset + 1] = action.code;
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
default: {
|
|
342
|
+
throw new PrimeMiniWirelessProtocolError("Unsupported SteelSeries Prime Mini Wireless button action.");
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
const command = wireless
|
|
347
|
+
? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.buttonsMapping)
|
|
348
|
+
: PRIME_MINI_WIRELESS_COMMAND.buttonsMapping;
|
|
349
|
+
return new Uint8Array([...command, ...packet]);
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=prime-mini-wireless.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prime-mini-wireless.js","sourceRoot":"","sources":["../../src/steelseries/prime-mini-wireless.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwGG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAElD,qEAAqE;AACrE,MAAM,aAAa,GAAG,UAAU,CAAC;AAEjC,uFAAuF;AACvF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,UAAU,EAAE,CAAC,IAAI,CAAC;IAClB,WAAW,EAAE,CAAC,IAAI,CAAC;IACnB,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACzB,cAAc,EAAE,CAAC,IAAI,CAAC;IACtB,UAAU,EAAE,CAAC,IAAI,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACxC,eAAe,EAAE,CAAC,IAAI,CAAC;IACvB,YAAY,EAAE,CAAC,IAAI,CAAC;CACZ,CAAC;AAEX,oFAAoF;AACpF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAU,CAAC;AAEtE;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAA0B;IACnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,8BAA8B,CAAC,qDAAqD,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAU,CAAC;AAEhF,wHAAwH;AACxH,MAAM,oBAAoB,GAAgC,IAAI,GAAG,CAAC;IAChE,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AACjD,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAChD,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,2CAA2C,GAAG,CAAC,CAAC;AAE7D,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEzC,MAAM,OAAO,8BAA+B,SAAQ,KAAK;CAAG;AAE5D,sFAAsF;AACtF,MAAM,UAAU,sCAAsC;IACpD,OAAO,CAAC,GAAG,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4CAA4C,CAC1D,OAA0B,EAC1B,aAAqB,EACrB,QAAiB;IAEjB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,mCAAmC,EAAE,CAAC;QAC/E,MAAM,IAAI,8BAA8B,CACtC,8CAA8C,mCAAmC,eAAe,CACjG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC7F,MAAM,IAAI,8BAA8B,CACtC,iDAAiD,OAAO,CAAC,MAAM,yBAAyB,CACzF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,8BAA8B,CACtC,+CAA+C,2BAA2B,IAAI,2BAA2B,CAAC,cAAc,EAAE,OAAO,4BAA4B,aAAa,CAC3K,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,QAAQ;QACtB,CAAC,CAAC,0BAA0B,CAAC,2BAA2B,CAAC,UAAU,CAAC;QACpE,CAAC,CAAC,2BAA2B,CAAC,UAAU,CAAC;IAC3C,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,6CAA6C,CAAC,aAAqB,EAAE,QAAiB;IACpG,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,8BAA8B,CACtC,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ;QACtB,CAAC,CAAC,0BAA0B,CAAC,2BAA2B,CAAC,WAAW,CAAC;QACrE,CAAC,CAAC,2BAA2B,CAAC,WAAW,CAAC;IAC5C,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uCAAuC,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,QAAiB;IACxG,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;YAC/D,MAAM,IAAI,8BAA8B,CAAC,sCAAsC,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC;IAC7H,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,IAAY,EAAE,SAAiB;IAC9F,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAC3D,MAAM,IAAI,8BAA8B,CAAC,mCAAmC,IAAI,uBAAuB,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;IACxH,CAAC;IACD,MAAM,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4CAA4C,CAAC,OAAe,EAAE,QAAiB;IAC7F,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,QAAQ;QACtB,CAAC,CAAC,0BAA0B,CAAC,2BAA2B,CAAC,UAAU,CAAC;QACpE,CAAC,CAAC,2BAA2B,CAAC,UAAU,CAAC;IAC3C,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0CAA0C,CAAC,OAAe,EAAE,QAAiB;IAC3F,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,QAAQ;QACtB,CAAC,CAAC,0BAA0B,CAAC,2BAA2B,CAAC,QAAQ,CAAC;QAClE,CAAC,CAAC,2BAA2B,CAAC,QAAQ,CAAC;IACzC,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,MAAM,oCAAoC,GAAG;IAClD,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,IAAI;CACL,CAAC;AAIX,4FAA4F;AAC5F,MAAM,UAAU,iDAAiD,CAC/D,IAAsC,EACtC,QAAiB;IAEjB,MAAM,IAAI,GAAG,oCAAoC,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,8BAA8B,CACtC,oEAAoE,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpI,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ;QACtB,CAAC,CAAC,0BAA0B,CAAC,2BAA2B,CAAC,eAAe,CAAC;QACzE,CAAC,CAAC,2BAA2B,CAAC,eAAe,CAAC;IAChD,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,uCAAuC,CAAC,QAAiB;IACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC;IAC3H,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,wCAAwC,CAAC,QAAiB;IACxE,MAAM,OAAO,GAAG,QAAQ;QACtB,CAAC,CAAC,0BAA0B,CAAC,2BAA2B,CAAC,YAAY,CAAC;QACtE,CAAC,CAAC,2BAA2B,CAAC,YAAY,CAAC;IAC7C,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,yCAAyC,CAAC,OAAmB;IAC3E,IAAI,OAAO,CAAC,MAAM,GAAG,2CAA2C,EAAE,CAAC;QACjE,MAAM,IAAI,8BAA8B,CACtC,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,CAAC,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,CAAC;AASD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACnC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACnC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACnC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACnC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACnC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACnC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACpC,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;CACwB,CAAC;AAIjE,MAAM,uCAAuC,GAAG,CAAC,CAAC;AAClD,MAAM,kCAAkC,GAAG,IAAI,CAAC;AAChD,MAAM,qCAAqC,GAAG,IAAI,CAAC;AACnD,MAAM,mCAAmC,GAAG,IAAI,CAAC;AACjD,MAAM,qCAAqC,GAAG,IAAI,CAAC;AAcnD;;;;;;GAMG;AACH,MAAM,UAAU,gDAAgD,CAC9D,OAAoF,EACpF,QAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAkC,CAAC;IACxF,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,KAAK,CAAC,MAAM,GAAG,uCAAuC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEpG,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAwE,EAAE,CAAC;QAC5H,MAAM,IAAI,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,8BAA8B,CAAC,mDAAmD,IAAI,IAAI,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,CAAC,MAAM,CAAC,GAAG,2BAA2B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC/D,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,CAAC,MAAM,CAAC,GAAG,kCAAkC,CAAC;gBACpD,MAAM;YACR,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,CAAC,MAAM,CAAC,GAAG,qCAAqC,CAAC;gBACvD,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;oBAC3E,MAAM,IAAI,8BAA8B,CAAC,6CAA6C,CAAC,CAAC;gBAC1F,CAAC;gBACD,MAAM,CAAC,MAAM,CAAC,GAAG,mCAAmC,CAAC;gBACrD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;gBACjC,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;oBAC3E,MAAM,IAAI,8BAA8B,CAAC,8CAA8C,CAAC,CAAC;gBAC3F,CAAC;gBACD,MAAM,CAAC,MAAM,CAAC,GAAG,qCAAqC,CAAC;gBACvD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;gBACjC,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,8BAA8B,CAAC,4DAA4D,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ;QACtB,CAAC,CAAC,0BAA0B,CAAC,2BAA2B,CAAC,cAAc,CAAC;QACxE,CAAC,CAAC,2BAA2B,CAAC,cAAc,CAAC;IAC/C,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Prime+ configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/prime_plus.py` — the primary source for every
|
|
7
|
+
* command byte and default here. `1038:182C`, endpoint 0.
|
|
8
|
+
* - rivalcfg `rivalcfg/devices/prime.py` (plain Prime, `1038:182E` plus two
|
|
9
|
+
* limited-edition PIDs) was read only to confirm Prime+ genuinely warrants
|
|
10
|
+
* its own module rather than reusing Prime's. **Surprising finding: it does
|
|
11
|
+
* not, protocol-wise.** `prime.py` and `prime_plus.py` are byte-identical
|
|
12
|
+
* in every setting (sensitivity `0x61`, polling `0x5D`, color `0x62 0x01`,
|
|
13
|
+
* brightness `0x5F`, buttons `0x5B`, save `0x59`) — the only diff is the
|
|
14
|
+
* model name/PID list. **rivalcfg's Prime+ profile has no OLED/display
|
|
15
|
+
* setting**, contrary to this rollout's assumption that Prime+ has one
|
|
16
|
+
* because the physical mouse has an OLED status screen. Neither rivalcfg,
|
|
17
|
+
* libratbag, nor the OpenRGB SteelSeries controller sources reachable from
|
|
18
|
+
* this environment (see corroboration gap below) expose any command for it.
|
|
19
|
+
* Prime+ is still implemented as its own module/PID/family rather than
|
|
20
|
+
* folded into a shared "Prime" module, per this rollout's instruction to
|
|
21
|
+
* add Prime+ only and not touch plain Prime — but the wire protocol
|
|
22
|
+
* implemented here is not distinguishable from plain Prime's, and a reader
|
|
23
|
+
* should not infer an OLED command exists just because this module exists.
|
|
24
|
+
* - rivalcfg `rivalcfg/handlers/multidpi_range.py` (DPI presets: `merge_bytes(
|
|
25
|
+
* count, selected_preset, ...values)`, `count_mode: "number"`, 2-byte
|
|
26
|
+
* little-endian DPI values here vs. Aerox 3's 1-byte) and
|
|
27
|
+
* `rivalcfg/handlers/range.py` (the range→range linear rounding both
|
|
28
|
+
* `multidpi_range` and `range` build on).
|
|
29
|
+
* - rivalcfg `rivalcfg/handlers/rgbcolor.py` — RGB value encoding (`[r,g,b]`).
|
|
30
|
+
* - rivalcfg `rivalcfg/handlers/range.py` (again, for `led_brightness`: a
|
|
31
|
+
* 0–256 linear passthrough, 2-byte little-endian — note the input range's
|
|
32
|
+
* upper bound is genuinely `256`, not `255`, in `prime_plus.py`; not a typo
|
|
33
|
+
* introduced here).
|
|
34
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
|
|
35
|
+
* field layout (5 bytes/button, zero-filled, `offset`/`id` per button),
|
|
36
|
+
* same shape as Aerox 3's but only 6 buttons/slots (no scroll-wheel source
|
|
37
|
+
* entries — `prime_plus.py`'s `buttons_mapping.buttons` table lists only
|
|
38
|
+
* `Button1`..`Button6`).
|
|
39
|
+
* - rivalcfg `rivalcfg/mouse.py` (`_exec_command`) — confirms wire assembly
|
|
40
|
+
* order is `command ++ process_value(value) ++ command_suffix`, which is
|
|
41
|
+
* how the color command's 16-byte suffix (15 zero bytes then `0xFF`)
|
|
42
|
+
* attaches after the `[r,g,b]` triple.
|
|
43
|
+
*
|
|
44
|
+
* ## Corroboration gap (must read before trusting this file)
|
|
45
|
+
*
|
|
46
|
+
* libratbag's `src/driver-steelseries.c` (fetched from
|
|
47
|
+
* `libratbag/libratbag@master`) contains **no reference at all** to Prime,
|
|
48
|
+
* Prime+, PID `0x182C`, or any OLED/display command — it does not implement
|
|
49
|
+
* this device family. The OpenRGB SteelSeries controller sources could not be
|
|
50
|
+
* located at their expected path in this environment (404) and a GitHub code
|
|
51
|
+
* search for "Prime+", `0x182C`, and "SteelSeriesPrime" against
|
|
52
|
+
* `CalcProgrammer1/OpenRGB` returned zero results, so OpenRGB could not be
|
|
53
|
+
* checked either. **rivalcfg is therefore the only source this module is
|
|
54
|
+
* corroborated against.** Nothing here has been verified on physical Prime+
|
|
55
|
+
* hardware by this project.
|
|
56
|
+
*
|
|
57
|
+
* Every command is an HID **output report** with report id 0x00 (`"endpoint":
|
|
58
|
+
* 0` in `prime_plus.py`, the vendor configuration interface). The functions
|
|
59
|
+
* here build the report *payload* — the bytes after the report id — unpadded,
|
|
60
|
+
* matching rivalcfg's `usbhid.py` writes.
|
|
61
|
+
*
|
|
62
|
+
* **This device is write-only.** `prime_plus.py` defines no getter for any
|
|
63
|
+
* setting and no firmware-query command, so there is nothing to probe the
|
|
64
|
+
* mouse with beyond a successful `open()` — same honesty policy as Aerox 3:
|
|
65
|
+
* session state must be tracked client-side with `valuesVerified: false`.
|
|
66
|
+
*
|
|
67
|
+
* Settings apply immediately; the save command (`0x59`, a single byte with
|
|
68
|
+
* **no** `0x00` suffix — distinct from Aerox 3's `11 00` and Rival 3 Gen 1's
|
|
69
|
+
* `09 00`; do not confuse the three) persists them to onboard flash.
|
|
70
|
+
*
|
|
71
|
+
* ## Button mapping — deliberately reduced scope
|
|
72
|
+
*
|
|
73
|
+
* Same scope line drawn in `./aerox3.ts`: this module implements the exact
|
|
74
|
+
* 5-byte/button, zero-filled packet shape and the mouse-button/disable/
|
|
75
|
+
* DPI-switch/scroll-wheel special actions, but does not re-implement
|
|
76
|
+
* rivalcfg's QWERTY or multimedia key-name tables — keyboard and multimedia
|
|
77
|
+
* targets are taken here as raw `{ type: "keyboard" | "multimedia", code }`
|
|
78
|
+
* scan-code bytes, matching `button_keyboard: 0x51` / `button_multimedia:
|
|
79
|
+
* 0x61` verbatim. Unlike Aerox 3, Prime+'s `buttons` table has no `ScrollUp`/
|
|
80
|
+
* `ScrollDown` *source* button entries (only 6 physical buttons are mapped),
|
|
81
|
+
* but `button_scroll_up: 0x31` / `button_scroll_down: 0x32` are still valid
|
|
82
|
+
* *target* special actions for any of the 6 buttons, exposed here as
|
|
83
|
+
* `{ type: "scrollUp" }` / `{ type: "scrollDown" }`.
|
|
84
|
+
*/
|
|
85
|
+
export declare const PRIME_PLUS_REPORT_ID = 0;
|
|
86
|
+
/** One-byte command prefixes; the payload is the prefix plus its arguments. */
|
|
87
|
+
export declare const PRIME_PLUS_COMMAND: {
|
|
88
|
+
readonly sensitivity: readonly [97];
|
|
89
|
+
readonly pollingRate: readonly [93];
|
|
90
|
+
readonly color: readonly [98, 1];
|
|
91
|
+
readonly ledBrightness: readonly [95];
|
|
92
|
+
readonly buttonsMapping: readonly [91];
|
|
93
|
+
};
|
|
94
|
+
/** `0x59` — a single byte, no `0x00` suffix. Distinct from Aerox 3's `11 00`. */
|
|
95
|
+
export declare const PRIME_PLUS_SAVE_COMMAND: readonly [89];
|
|
96
|
+
export declare const PRIME_PLUS_POLLING_RATES: readonly [125, 250, 500, 1000];
|
|
97
|
+
export declare const PRIME_PLUS_DPI_MIN = 50;
|
|
98
|
+
export declare const PRIME_PLUS_DPI_MAX = 18000;
|
|
99
|
+
export declare const PRIME_PLUS_DPI_STEP = 50;
|
|
100
|
+
export declare const PRIME_PLUS_MAX_DPI_PRESETS = 5;
|
|
101
|
+
export declare const PRIME_PLUS_LED_BRIGHTNESS_MAX = 256;
|
|
102
|
+
export declare class PrimePlusProtocolError extends Error {
|
|
103
|
+
}
|
|
104
|
+
/** The 360 DPI values the linear `sensitivity` range can express, ascending. */
|
|
105
|
+
export declare function steelseriesPrimePlusDpiOptions(): number[];
|
|
106
|
+
/**
|
|
107
|
+
* `61 <count> <selectedPreset> <v1_lo> <v1_hi> … <vN_lo> <vN_hi>` — replaces
|
|
108
|
+
* the mouse's whole preset table. Two bytes per DPI, little-endian
|
|
109
|
+
* (`dpi_length_byte: 2`); `selectedIndex` is 0-based both here and on the
|
|
110
|
+
* wire (`first_preset: 0`, unlike Aerox 3's `first_preset: 1`).
|
|
111
|
+
*/
|
|
112
|
+
export declare function steelseriesPrimePlusEncodeDpiPresets(presets: readonly number[], selectedIndex: number): Uint8Array;
|
|
113
|
+
/** `5D <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04. */
|
|
114
|
+
export declare function steelseriesPrimePlusEncodePollingRate(pollingRateHz: number): Uint8Array;
|
|
115
|
+
/** `62 01 <r> <g> <b>` plus the fixed 16-byte suffix — the scroll-wheel LED color. */
|
|
116
|
+
export declare function steelseriesPrimePlusEncodeColor(r: number, g: number, b: number): Uint8Array;
|
|
117
|
+
/**
|
|
118
|
+
* `5F <v_lo> <v_hi>` — linear 0–256 passthrough, 2-byte little-endian
|
|
119
|
+
* (`range_length_byte: 2`). Note the upper bound is genuinely 256, matching
|
|
120
|
+
* `prime_plus.py`'s `input_range`/`output_range`.
|
|
121
|
+
*/
|
|
122
|
+
export declare function steelseriesPrimePlusEncodeLedBrightness(level: number): Uint8Array;
|
|
123
|
+
/** `59` — commit the current settings to onboard flash. */
|
|
124
|
+
export declare function steelseriesPrimePlusSaveCommand(): Uint8Array;
|
|
125
|
+
/** `buttons_mapping.buttons` from `prime_plus.py`, id + byte offset into the packet. */
|
|
126
|
+
export declare const PRIME_PLUS_BUTTONS: {
|
|
127
|
+
readonly button1: {
|
|
128
|
+
readonly id: 1;
|
|
129
|
+
readonly offset: 0;
|
|
130
|
+
};
|
|
131
|
+
readonly button2: {
|
|
132
|
+
readonly id: 2;
|
|
133
|
+
readonly offset: 5;
|
|
134
|
+
};
|
|
135
|
+
readonly button3: {
|
|
136
|
+
readonly id: 3;
|
|
137
|
+
readonly offset: 10;
|
|
138
|
+
};
|
|
139
|
+
readonly button4: {
|
|
140
|
+
readonly id: 4;
|
|
141
|
+
readonly offset: 15;
|
|
142
|
+
};
|
|
143
|
+
readonly button5: {
|
|
144
|
+
readonly id: 5;
|
|
145
|
+
readonly offset: 20;
|
|
146
|
+
};
|
|
147
|
+
readonly button6: {
|
|
148
|
+
readonly id: 6;
|
|
149
|
+
readonly offset: 25;
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
export type PrimePlusButtonName = keyof typeof PRIME_PLUS_BUTTONS;
|
|
153
|
+
/** One button's target. */
|
|
154
|
+
export type PrimePlusButtonAction = {
|
|
155
|
+
type: "button";
|
|
156
|
+
target: PrimePlusButtonName;
|
|
157
|
+
} | {
|
|
158
|
+
type: "disabled";
|
|
159
|
+
} | {
|
|
160
|
+
type: "dpiSwitch";
|
|
161
|
+
} | {
|
|
162
|
+
type: "scrollUp";
|
|
163
|
+
} | {
|
|
164
|
+
type: "scrollDown";
|
|
165
|
+
} | {
|
|
166
|
+
type: "keyboard";
|
|
167
|
+
code: number;
|
|
168
|
+
} | {
|
|
169
|
+
type: "multimedia";
|
|
170
|
+
code: number;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* `5B` + one 30-byte (`6 buttons × 5-byte field length`) packet, zero-filled
|
|
174
|
+
* except where a mapping is given. Unmapped buttons are left as all-zero
|
|
175
|
+
* fields — pass every button explicitly for parity with rivalcfg's default
|
|
176
|
+
* profile, same policy as `./aerox3.ts`.
|
|
177
|
+
*/
|
|
178
|
+
export declare function steelseriesPrimePlusEncodeButtonsMapping(mapping: Partial<Record<PrimePlusButtonName, PrimePlusButtonAction>>): Uint8Array;
|
|
179
|
+
//# sourceMappingURL=prime-plus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prime-plus.d.ts","sourceRoot":"","sources":["../../src/steelseries/prime-plus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAEH,eAAO,MAAM,oBAAoB,IAAO,CAAC;AAEzC,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAYX,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,eAAkB,CAAC;AAEvD,eAAO,MAAM,wBAAwB,gCAAiC,CAAC;AASvE,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAkBpD,gFAAgF;AAChF,wBAAgB,8BAA8B,IAAI,MAAM,EAAE,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,GACpB,UAAU,CAiBZ;AAED,6DAA6D;AAC7D,wBAAgB,qCAAqC,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAMvF;AAWD,sFAAsF;AACtF,wBAAgB,+BAA+B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAG3F;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAOjF;AAED,2DAA2D;AAC3D,wBAAgB,+BAA+B,IAAI,UAAU,CAE5D;AASD,wFAAwF;AACxF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;CAOyB,CAAC;AAEzD,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAUlE,2BAA2B;AAC3B,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;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;;;;;GAKG;AACH,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,GACnE,UAAU,CA0DZ"}
|