@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,275 @@
|
|
|
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 const PRIME_PLUS_REPORT_ID = 0x00;
|
|
86
|
+
/** One-byte command prefixes; the payload is the prefix plus its arguments. */
|
|
87
|
+
export const PRIME_PLUS_COMMAND = {
|
|
88
|
+
sensitivity: [0x61],
|
|
89
|
+
pollingRate: [0x5d],
|
|
90
|
+
color: [0x62, 0x01],
|
|
91
|
+
ledBrightness: [0x5f],
|
|
92
|
+
buttonsMapping: [0x5b],
|
|
93
|
+
};
|
|
94
|
+
/** `0x62 0x01 <r> <g> <b>` followed by this fixed 16-byte suffix (`command_suffix` in `prime_plus.py`). */
|
|
95
|
+
const COLOR_SUFFIX = [
|
|
96
|
+
0x00, 0x00, 0x00,
|
|
97
|
+
0x00, 0x00, 0x00,
|
|
98
|
+
0x00, 0x00, 0x00,
|
|
99
|
+
0x00, 0x00, 0x00,
|
|
100
|
+
0x00, 0x00, 0x00,
|
|
101
|
+
0xff,
|
|
102
|
+
];
|
|
103
|
+
/** `0x59` — a single byte, no `0x00` suffix. Distinct from Aerox 3's `11 00`. */
|
|
104
|
+
export const PRIME_PLUS_SAVE_COMMAND = [0x59];
|
|
105
|
+
export const PRIME_PLUS_POLLING_RATES = [125, 250, 500, 1000];
|
|
106
|
+
const POLLING_RATE_TO_BYTE = new Map([
|
|
107
|
+
[1000, 0x01],
|
|
108
|
+
[500, 0x02],
|
|
109
|
+
[250, 0x03],
|
|
110
|
+
[125, 0x04],
|
|
111
|
+
]);
|
|
112
|
+
export const PRIME_PLUS_DPI_MIN = 50;
|
|
113
|
+
export const PRIME_PLUS_DPI_MAX = 18000;
|
|
114
|
+
export const PRIME_PLUS_DPI_STEP = 50;
|
|
115
|
+
export const PRIME_PLUS_MAX_DPI_PRESETS = 5;
|
|
116
|
+
export const PRIME_PLUS_LED_BRIGHTNESS_MAX = 256;
|
|
117
|
+
export class PrimePlusProtocolError extends Error {
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* `prime_plus.py`'s `input_range`/`output_range` for `sensitivity` are both
|
|
121
|
+
* `[50, 18000, 50]` / `[1, 0x0168, 1]` — 360 steps mapped 1:1 in ascending
|
|
122
|
+
* order, so the output byte is simply `(dpi - 50) / 50 + 1`. Unlike Aerox 3's
|
|
123
|
+
* TrueMove Core table, no lookup table is needed or possible to corroborate
|
|
124
|
+
* from `range.py`'s generic range-to-range formula.
|
|
125
|
+
*/
|
|
126
|
+
function dpiToWireValue(dpi) {
|
|
127
|
+
if (!Number.isInteger(dpi) || dpi < PRIME_PLUS_DPI_MIN || dpi > PRIME_PLUS_DPI_MAX || (dpi - PRIME_PLUS_DPI_MIN) % PRIME_PLUS_DPI_STEP !== 0) {
|
|
128
|
+
throw new PrimePlusProtocolError(`SteelSeries Prime+ DPI must be ${PRIME_PLUS_DPI_MIN}–${PRIME_PLUS_DPI_MAX.toLocaleString()} in ${PRIME_PLUS_DPI_STEP} DPI steps.`);
|
|
129
|
+
}
|
|
130
|
+
return (dpi - PRIME_PLUS_DPI_MIN) / PRIME_PLUS_DPI_STEP + 1;
|
|
131
|
+
}
|
|
132
|
+
/** The 360 DPI values the linear `sensitivity` range can express, ascending. */
|
|
133
|
+
export function steelseriesPrimePlusDpiOptions() {
|
|
134
|
+
const options = [];
|
|
135
|
+
for (let dpi = PRIME_PLUS_DPI_MIN; dpi <= PRIME_PLUS_DPI_MAX; dpi += PRIME_PLUS_DPI_STEP) {
|
|
136
|
+
options.push(dpi);
|
|
137
|
+
}
|
|
138
|
+
return options;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* `61 <count> <selectedPreset> <v1_lo> <v1_hi> … <vN_lo> <vN_hi>` — replaces
|
|
142
|
+
* the mouse's whole preset table. Two bytes per DPI, little-endian
|
|
143
|
+
* (`dpi_length_byte: 2`); `selectedIndex` is 0-based both here and on the
|
|
144
|
+
* wire (`first_preset: 0`, unlike Aerox 3's `first_preset: 1`).
|
|
145
|
+
*/
|
|
146
|
+
export function steelseriesPrimePlusEncodeDpiPresets(presets, selectedIndex) {
|
|
147
|
+
if (presets.length < 1 || presets.length > PRIME_PLUS_MAX_DPI_PRESETS) {
|
|
148
|
+
throw new PrimePlusProtocolError(`SteelSeries Prime+ supports 1–${PRIME_PLUS_MAX_DPI_PRESETS} DPI presets.`);
|
|
149
|
+
}
|
|
150
|
+
if (!Number.isInteger(selectedIndex) || selectedIndex < 0 || selectedIndex >= presets.length) {
|
|
151
|
+
throw new PrimePlusProtocolError(`Selected DPI preset must be an index into the ${presets.length} presets being written.`);
|
|
152
|
+
}
|
|
153
|
+
const encoded = [];
|
|
154
|
+
for (const dpi of presets) {
|
|
155
|
+
const value = dpiToWireValue(dpi);
|
|
156
|
+
encoded.push(value & 0xff, (value >> 8) & 0xff);
|
|
157
|
+
}
|
|
158
|
+
return new Uint8Array([...PRIME_PLUS_COMMAND.sensitivity, presets.length, selectedIndex, ...encoded]);
|
|
159
|
+
}
|
|
160
|
+
/** `5D <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04. */
|
|
161
|
+
export function steelseriesPrimePlusEncodePollingRate(pollingRateHz) {
|
|
162
|
+
const byte = POLLING_RATE_TO_BYTE.get(pollingRateHz);
|
|
163
|
+
if (byte === undefined) {
|
|
164
|
+
throw new PrimePlusProtocolError("SteelSeries Prime+ supports 125, 250, 500, or 1000 Hz polling.");
|
|
165
|
+
}
|
|
166
|
+
return new Uint8Array([...PRIME_PLUS_COMMAND.pollingRate, byte]);
|
|
167
|
+
}
|
|
168
|
+
function encodeRgb(r, g, b) {
|
|
169
|
+
for (const channel of [r, g, b]) {
|
|
170
|
+
if (!Number.isInteger(channel) || channel < 0 || channel > 255) {
|
|
171
|
+
throw new PrimePlusProtocolError("RGB channels must be integers 0–255.");
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return [r, g, b];
|
|
175
|
+
}
|
|
176
|
+
/** `62 01 <r> <g> <b>` plus the fixed 16-byte suffix — the scroll-wheel LED color. */
|
|
177
|
+
export function steelseriesPrimePlusEncodeColor(r, g, b) {
|
|
178
|
+
const [red, green, blue] = encodeRgb(r, g, b);
|
|
179
|
+
return new Uint8Array([...PRIME_PLUS_COMMAND.color, red, green, blue, ...COLOR_SUFFIX]);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* `5F <v_lo> <v_hi>` — linear 0–256 passthrough, 2-byte little-endian
|
|
183
|
+
* (`range_length_byte: 2`). Note the upper bound is genuinely 256, matching
|
|
184
|
+
* `prime_plus.py`'s `input_range`/`output_range`.
|
|
185
|
+
*/
|
|
186
|
+
export function steelseriesPrimePlusEncodeLedBrightness(level) {
|
|
187
|
+
if (!Number.isInteger(level) || level < 0 || level > PRIME_PLUS_LED_BRIGHTNESS_MAX) {
|
|
188
|
+
throw new PrimePlusProtocolError(`SteelSeries Prime+ LED brightness must be an integer 0–${PRIME_PLUS_LED_BRIGHTNESS_MAX}.`);
|
|
189
|
+
}
|
|
190
|
+
return new Uint8Array([...PRIME_PLUS_COMMAND.ledBrightness, level & 0xff, (level >> 8) & 0xff]);
|
|
191
|
+
}
|
|
192
|
+
/** `59` — commit the current settings to onboard flash. */
|
|
193
|
+
export function steelseriesPrimePlusSaveCommand() {
|
|
194
|
+
return new Uint8Array(PRIME_PLUS_SAVE_COMMAND);
|
|
195
|
+
}
|
|
196
|
+
/** `buttons_mapping.buttons` from `prime_plus.py`, id + byte offset into the packet. */
|
|
197
|
+
export const PRIME_PLUS_BUTTONS = {
|
|
198
|
+
button1: { id: 0x01, offset: 0x00 },
|
|
199
|
+
button2: { id: 0x02, offset: 0x05 },
|
|
200
|
+
button3: { id: 0x03, offset: 0x0a },
|
|
201
|
+
button4: { id: 0x04, offset: 0x0f },
|
|
202
|
+
button5: { id: 0x05, offset: 0x14 },
|
|
203
|
+
button6: { id: 0x06, offset: 0x19 },
|
|
204
|
+
};
|
|
205
|
+
const PRIME_PLUS_BUTTON_FIELD_LENGTH = 5;
|
|
206
|
+
const PRIME_PLUS_BUTTON_DISABLE = 0x00;
|
|
207
|
+
const PRIME_PLUS_BUTTON_DPI_SWITCH = 0x30;
|
|
208
|
+
const PRIME_PLUS_BUTTON_SCROLL_UP = 0x31;
|
|
209
|
+
const PRIME_PLUS_BUTTON_SCROLL_DOWN = 0x32;
|
|
210
|
+
const PRIME_PLUS_BUTTON_KEYBOARD = 0x51;
|
|
211
|
+
const PRIME_PLUS_BUTTON_MULTIMEDIA = 0x61;
|
|
212
|
+
/**
|
|
213
|
+
* `5B` + one 30-byte (`6 buttons × 5-byte field length`) packet, zero-filled
|
|
214
|
+
* except where a mapping is given. Unmapped buttons are left as all-zero
|
|
215
|
+
* fields — pass every button explicitly for parity with rivalcfg's default
|
|
216
|
+
* profile, same policy as `./aerox3.ts`.
|
|
217
|
+
*/
|
|
218
|
+
export function steelseriesPrimePlusEncodeButtonsMapping(mapping) {
|
|
219
|
+
const names = Object.keys(PRIME_PLUS_BUTTONS);
|
|
220
|
+
const packet = new Array(names.length * PRIME_PLUS_BUTTON_FIELD_LENGTH).fill(0x00);
|
|
221
|
+
for (const [name, action] of Object.entries(mapping)) {
|
|
222
|
+
const slot = PRIME_PLUS_BUTTONS[name];
|
|
223
|
+
if (!slot) {
|
|
224
|
+
throw new PrimePlusProtocolError(`Unknown SteelSeries Prime+ button "${name}".`);
|
|
225
|
+
}
|
|
226
|
+
const { offset } = slot;
|
|
227
|
+
switch (action.type) {
|
|
228
|
+
case "button": {
|
|
229
|
+
const target = PRIME_PLUS_BUTTONS[action.target];
|
|
230
|
+
if (!target) {
|
|
231
|
+
throw new PrimePlusProtocolError(`Unknown SteelSeries Prime+ button target "${action.target}".`);
|
|
232
|
+
}
|
|
233
|
+
packet[offset] = target.id;
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case "disabled": {
|
|
237
|
+
packet[offset] = PRIME_PLUS_BUTTON_DISABLE;
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
case "dpiSwitch": {
|
|
241
|
+
packet[offset] = PRIME_PLUS_BUTTON_DPI_SWITCH;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
case "scrollUp": {
|
|
245
|
+
packet[offset] = PRIME_PLUS_BUTTON_SCROLL_UP;
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
case "scrollDown": {
|
|
249
|
+
packet[offset] = PRIME_PLUS_BUTTON_SCROLL_DOWN;
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
case "keyboard": {
|
|
253
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
254
|
+
throw new PrimePlusProtocolError("Keyboard scan codes must be integers 0–255.");
|
|
255
|
+
}
|
|
256
|
+
packet[offset] = PRIME_PLUS_BUTTON_KEYBOARD;
|
|
257
|
+
packet[offset + 1] = action.code;
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
case "multimedia": {
|
|
261
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
262
|
+
throw new PrimePlusProtocolError("Multimedia key codes must be integers 0–255.");
|
|
263
|
+
}
|
|
264
|
+
packet[offset] = PRIME_PLUS_BUTTON_MULTIMEDIA;
|
|
265
|
+
packet[offset + 1] = action.code;
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
default: {
|
|
269
|
+
throw new PrimePlusProtocolError(`Unsupported SteelSeries Prime+ button action.`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return new Uint8Array([...PRIME_PLUS_COMMAND.buttonsMapping, ...packet]);
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=prime-plus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prime-plus.js","sourceRoot":"","sources":["../../src/steelseries/prime-plus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Rival 3 Wireless configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/rival3_wireless.py` — the primary source for
|
|
7
|
+
* every command byte, product id, and default here. Read in full for this
|
|
8
|
+
* cluster; not assumed from any other SteelSeries device file.
|
|
9
|
+
* - rivalcfg `rivalcfg/devices/dpi/truemove_air.py` — the DPI byte table for
|
|
10
|
+
* this device's TrueMove Air sensor. **This is a distinct table from
|
|
11
|
+
* `./rival3.ts`'s `TRUEMOVE_CORE_DPI_TO_BYTE`** (used by Rival 3 Gen 1 and
|
|
12
|
+
* Aerox 3): TrueMove Air starts at 100 DPI (Core starts at 200), covers
|
|
13
|
+
* 100–18000 in 100 DPI steps (180 entries; Core tops out at 8500 in 84
|
|
14
|
+
* entries), and the byte values at shared DPI numbers differ (e.g.
|
|
15
|
+
* 400 DPI is `0x04` here vs. `0x08` for Core; 1600 DPI is `0x12` here vs.
|
|
16
|
+
* `0x24` for Core). Reusing Core's table for this device would silently
|
|
17
|
+
* set the wrong sensitivity, so this module defines its own
|
|
18
|
+
* `TRUEMOVE_AIR_DPI_TO_BYTE` and does not import Core's.
|
|
19
|
+
* - rivalcfg `rivalcfg/handlers/multidpi_range_choice.py` — the DPI preset
|
|
20
|
+
* packet shape, same handler as Rival 3 Gen 1/Aerox 3 but with
|
|
21
|
+
* `dpi_length_byte: 2` (little-endian two bytes per preset — Rival 3 Gen 1
|
|
22
|
+
* and Aerox 3 both use one byte per preset, so a preset list here is twice
|
|
23
|
+
* as long as an equivalent list for those families).
|
|
24
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
|
|
25
|
+
* field layout, 6 buttons only (no `scrollUp`/`scrollDown` remap *slots* —
|
|
26
|
+
* this device profile has no such button entries — though `ScrollUp`
|
|
27
|
+
* (`0x31`) and `ScrollDown` (`0x32`) remain valid remap *targets*, same as
|
|
28
|
+
* `dpi` (`0x30`)).
|
|
29
|
+
* - rivalcfg's `usbhid.py` / `mouse.py` framing conventions, shared with
|
|
30
|
+
* `./rival3.ts` and `./aerox3.ts` (unnumbered HID output reports on the
|
|
31
|
+
* vendor configuration interface, `"endpoint": 3`).
|
|
32
|
+
*
|
|
33
|
+
* ## Why this is a separate protocol family from Rival 3 Gen 1 and Aerox 3
|
|
34
|
+
*
|
|
35
|
+
* Despite the shared "Rival 3" name, `rival3_wireless.py` is confirmed as a
|
|
36
|
+
* genuinely separate command set from both siblings, verified directly from
|
|
37
|
+
* the source rather than assumed from the family name:
|
|
38
|
+
*
|
|
39
|
+
* - Product id `1038:1830` ("2.4 GHz mode", endpoint 3) — distinct from Rival
|
|
40
|
+
* 3 Gen 1's `1038:1824`/`184C` and Aerox 3's `1038:1836`.
|
|
41
|
+
* - Sensitivity command `0x20` (single-byte prefix, like Aerox 3's `0x2D` but
|
|
42
|
+
* a different byte) vs. Rival 3 Gen 1's two-byte `0x0B 0x00`.
|
|
43
|
+
* - Polling command `0x17` with choices `{125:0x03, 250:0x02, 500:0x01,
|
|
44
|
+
* 1000:0x00}` — the same four rates as Gen 1/Aerox 3 but a **different
|
|
45
|
+
* command byte** (`0x17` here vs. `0x04 0x00` / `0x2B`); the value mapping
|
|
46
|
+
* is byte-identical, only the command prefix differs.
|
|
47
|
+
* - Buttons command `0x19` vs. Gen 1's undocumented `0x07 0x00` and Aerox 3's
|
|
48
|
+
* `0x2A`.
|
|
49
|
+
* - Save command `0x09` (**one byte**) — distinct from Rival 3 Gen 1's
|
|
50
|
+
* `0x09 0x00` (two bytes, same leading byte, easy to confuse) and Aerox 3's
|
|
51
|
+
* `0x11 0x00`.
|
|
52
|
+
* - Firmware query `0x90 0x00` — distinct from Rival 3 Gen 1's `0x10 0x00`.
|
|
53
|
+
* Aerox 3 has no firmware query at all.
|
|
54
|
+
* - A `battery_level` read (`0xAA 0x01`, three-byte response) that neither
|
|
55
|
+
* Rival 3 Gen 1 nor Aerox 3 profile defines at all — see below.
|
|
56
|
+
*
|
|
57
|
+
* `rivalcfg/devices/devices.py`'s `SUPPORTED_DEVICES` lists `rival3_wireless`
|
|
58
|
+
* and `rival3_wireless_gen2` (`1038:1872`) as separate profile modules from
|
|
59
|
+
* each other and from `rival3.py`/`aerox3.py`; nothing here claims `0x1872`
|
|
60
|
+
* — the Wireless Gen 2 is a different device with its own (unread) command
|
|
61
|
+
* set and is out of scope for this cluster.
|
|
62
|
+
*
|
|
63
|
+
* No corroborating libratbag or OpenRGB source for this exact device/PID was
|
|
64
|
+
* available in this environment (no local libratbag checkout, and OpenRGB's
|
|
65
|
+
* SteelSeries controllers were not searched for a Rival 3 Wireless-specific
|
|
66
|
+
* file this pass) — every command byte above is sourced from rivalcfg alone.
|
|
67
|
+
* This should be treated as a single-source reconstruction until corroborated
|
|
68
|
+
* or hardware-verified.
|
|
69
|
+
*
|
|
70
|
+
* ## Battery / charging read — this device IS partially readable
|
|
71
|
+
*
|
|
72
|
+
* Unlike the wired Rival 3 Gen 1 and Aerox 3 (write-only, no getters at
|
|
73
|
+
* all), `rival3_wireless.py` defines a top-level `battery_level` block: an
|
|
74
|
+
* output-report write of `0xAA 0x01` gets a 3-byte input-report reply, where
|
|
75
|
+
* `data[0]` is the battery percentage (`level`) and `data[2]` is a
|
|
76
|
+
* charging boolean (`is_charging`, `bool(data[2])`) — `data[1]` is unused by
|
|
77
|
+
* rivalcfg's lambdas. This module exposes `steelseriesRival3WirelessBatteryQuery`
|
|
78
|
+
* / `steelseriesRival3WirelessDecodeBattery` so the HID client can wire a real
|
|
79
|
+
* `readStatus` battery read instead of reporting `batteryState: "Unknown"`.
|
|
80
|
+
* The firmware query (`0x90 0x00`, 2-byte reply) is also readable, following
|
|
81
|
+
* the same pattern as `./rival3.ts`'s `10 00`.
|
|
82
|
+
*
|
|
83
|
+
* DPI presets, polling rate, and buttons remain write-only: `rival3_wireless.py`
|
|
84
|
+
* defines no getter for any of the three, same as every other SteelSeries
|
|
85
|
+
* profile in rivalcfg.
|
|
86
|
+
*
|
|
87
|
+
* Settings apply immediately; the save command (`09`) persists them to
|
|
88
|
+
* onboard flash, mirroring the other two families' CLI default. None of this
|
|
89
|
+
* has been verified on physical hardware by this project.
|
|
90
|
+
*/
|
|
91
|
+
export declare const RIVAL3_WIRELESS_REPORT_ID = 0;
|
|
92
|
+
/** Command prefixes; length varies by command, matching rivalcfg exactly. */
|
|
93
|
+
export declare const RIVAL3_WIRELESS_COMMAND: {
|
|
94
|
+
readonly sensitivity: readonly [32];
|
|
95
|
+
readonly pollingRate: readonly [23];
|
|
96
|
+
readonly buttonsMapping: readonly [25];
|
|
97
|
+
/** `AA 01` — battery percentage + charging state, 3-byte input-report reply. */
|
|
98
|
+
readonly batteryLevel: readonly [170, 1];
|
|
99
|
+
/** One byte — distinct from Rival 3 Gen 1's two-byte `09 00`. */
|
|
100
|
+
readonly save: readonly [9];
|
|
101
|
+
/** `90 00` — distinct from Rival 3 Gen 1's `10 00`. */
|
|
102
|
+
readonly firmware: readonly [144, 0];
|
|
103
|
+
};
|
|
104
|
+
export declare const RIVAL3_WIRELESS_POLLING_RATES: readonly [125, 250, 500, 1000];
|
|
105
|
+
export declare const RIVAL3_WIRELESS_DPI_MIN = 100;
|
|
106
|
+
export declare const RIVAL3_WIRELESS_DPI_MAX = 18000;
|
|
107
|
+
export declare const RIVAL3_WIRELESS_DPI_STEP = 100;
|
|
108
|
+
export declare const RIVAL3_WIRELESS_MAX_DPI_PRESETS = 5;
|
|
109
|
+
export declare const RIVAL3_WIRELESS_FIRMWARE_RESPONSE_LENGTH = 2;
|
|
110
|
+
export declare const RIVAL3_WIRELESS_BATTERY_RESPONSE_LENGTH = 3;
|
|
111
|
+
/**
|
|
112
|
+
* rivalcfg's TrueMove Air sensor table (`devices/dpi/truemove_air.py`), the
|
|
113
|
+
* sensor used by the Rival 3 Wireless — **not** the TrueMove Core table
|
|
114
|
+
* `./rival3.ts` exports. Values pinned in `rival3-wireless.test.ts` against
|
|
115
|
+
* the source file: 100→0x00, 400→0x04, 1600→0x12, 18000→0xD6.
|
|
116
|
+
*/
|
|
117
|
+
export declare const TRUEMOVE_AIR_DPI_TO_BYTE: ReadonlyMap<number, number>;
|
|
118
|
+
export declare class Rival3WirelessProtocolError extends Error {
|
|
119
|
+
}
|
|
120
|
+
/** The 180 DPI values the TrueMove Air sensor table can express, ascending. */
|
|
121
|
+
export declare function steelseriesRival3WirelessDpiOptions(): number[];
|
|
122
|
+
/**
|
|
123
|
+
* `20 <count> <selected> <v1_lo> <v1_hi>…<vN_lo> <vN_hi>` — replaces the
|
|
124
|
+
* mouse's whole preset table. Two little-endian bytes per DPI
|
|
125
|
+
* (`dpi_length_byte: 2`, unlike Rival 3 Gen 1/Aerox 3's one byte); the high
|
|
126
|
+
* byte is always `0x00` since the TrueMove Air table only produces values up
|
|
127
|
+
* to `0xD6`, but both bytes are always sent to match the wire format exactly.
|
|
128
|
+
* `selectedIndex` is 0-based here and encoded 1-based on the wire
|
|
129
|
+
* (`first_preset: 1`).
|
|
130
|
+
*/
|
|
131
|
+
export declare function steelseriesRival3WirelessEncodeDpiPresets(presets: readonly number[], selectedIndex: number): Uint8Array;
|
|
132
|
+
/** `17 <v>` with 1000→0x00, 500→0x01, 250→0x02, 125→0x03 (different byte order than Rival 3 Gen 1/Aerox 3). */
|
|
133
|
+
export declare function steelseriesRival3WirelessEncodePollingRate(pollingRateHz: number): Uint8Array;
|
|
134
|
+
/** `09` — commit the current settings to onboard flash. One byte, unlike Rival 3 Gen 1's `09 00`. */
|
|
135
|
+
export declare function steelseriesRival3WirelessSaveCommand(): Uint8Array;
|
|
136
|
+
/** `90 00` — the device answers with a two-byte input report. */
|
|
137
|
+
export declare function steelseriesRival3WirelessFirmwareQuery(): Uint8Array;
|
|
138
|
+
export interface Rival3WirelessFirmware {
|
|
139
|
+
/** The two raw response bytes, in the order the device sent them. */
|
|
140
|
+
bytes: [number, number];
|
|
141
|
+
/** The bytes joined in read order, e.g. "37.0". */
|
|
142
|
+
display: string;
|
|
143
|
+
}
|
|
144
|
+
/** Decode the two-byte firmware response, same read-order convention as `./rival3.ts`. */
|
|
145
|
+
export declare function steelseriesRival3WirelessDecodeFirmware(payload: Uint8Array): Rival3WirelessFirmware;
|
|
146
|
+
/** `AA 01` — the device answers with a three-byte input report (level, unused, charging). */
|
|
147
|
+
export declare function steelseriesRival3WirelessBatteryQuery(): Uint8Array;
|
|
148
|
+
export interface Rival3WirelessBattery {
|
|
149
|
+
/** Battery percentage, `data[0]` verbatim (rivalcfg does not clamp it). */
|
|
150
|
+
level: number;
|
|
151
|
+
/** `bool(data[2])` in rivalcfg — `data[1]` is not used by either lambda. */
|
|
152
|
+
isCharging: boolean;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Decode the three-byte battery response: `data[0]` is the percentage
|
|
156
|
+
* (rivalcfg's `level` lambda, `int(data[0])`), `data[2]` is charging state
|
|
157
|
+
* (rivalcfg's `is_charging` lambda, `bool(data[2])`). `data[1]` is present in
|
|
158
|
+
* the response but unused by either rivalcfg lambda.
|
|
159
|
+
*/
|
|
160
|
+
export declare function steelseriesRival3WirelessDecodeBattery(payload: Uint8Array): Rival3WirelessBattery;
|
|
161
|
+
/** `buttons_mapping.buttons` from `rival3_wireless.py`, id + byte offset into the packet. */
|
|
162
|
+
export declare const RIVAL3_WIRELESS_BUTTONS: {
|
|
163
|
+
readonly button1: {
|
|
164
|
+
readonly id: 1;
|
|
165
|
+
readonly offset: 0;
|
|
166
|
+
};
|
|
167
|
+
readonly button2: {
|
|
168
|
+
readonly id: 2;
|
|
169
|
+
readonly offset: 5;
|
|
170
|
+
};
|
|
171
|
+
readonly button3: {
|
|
172
|
+
readonly id: 3;
|
|
173
|
+
readonly offset: 10;
|
|
174
|
+
};
|
|
175
|
+
readonly button4: {
|
|
176
|
+
readonly id: 4;
|
|
177
|
+
readonly offset: 15;
|
|
178
|
+
};
|
|
179
|
+
readonly button5: {
|
|
180
|
+
readonly id: 5;
|
|
181
|
+
readonly offset: 20;
|
|
182
|
+
};
|
|
183
|
+
readonly button6: {
|
|
184
|
+
readonly id: 6;
|
|
185
|
+
readonly offset: 25;
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
export type Rival3WirelessButtonName = keyof typeof RIVAL3_WIRELESS_BUTTONS;
|
|
189
|
+
/**
|
|
190
|
+
* One button's target. Unlike `./aerox3.ts`, this device profile has no
|
|
191
|
+
* `scrollUp`/`scrollDown` button *slots* to remap from — only 6 physical
|
|
192
|
+
* buttons — but `scrollUp`/`scrollDown` remain valid remap *targets*
|
|
193
|
+
* (`button_scroll_up: 0x31`, `button_scroll_down: 0x32` in the source), same
|
|
194
|
+
* as `dpiSwitch`.
|
|
195
|
+
*/
|
|
196
|
+
export type Rival3WirelessButtonAction = {
|
|
197
|
+
type: "button";
|
|
198
|
+
target: Rival3WirelessButtonName;
|
|
199
|
+
} | {
|
|
200
|
+
type: "disabled";
|
|
201
|
+
} | {
|
|
202
|
+
type: "dpiSwitch";
|
|
203
|
+
} | {
|
|
204
|
+
type: "scrollUp";
|
|
205
|
+
} | {
|
|
206
|
+
type: "scrollDown";
|
|
207
|
+
} | {
|
|
208
|
+
type: "keyboard";
|
|
209
|
+
code: number;
|
|
210
|
+
} | {
|
|
211
|
+
type: "multimedia";
|
|
212
|
+
code: number;
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* `19` + one 30-byte (`6 buttons × 5-byte field length`) packet, zero-filled
|
|
216
|
+
* except where a mapping is given. Unmapped buttons are left as all-zero
|
|
217
|
+
* fields (rivalcfg instead fills in per-button defaults; this codec leaves
|
|
218
|
+
* that policy to the caller — pass every button explicitly for parity with
|
|
219
|
+
* rivalcfg's default profile).
|
|
220
|
+
*/
|
|
221
|
+
export declare function steelseriesRival3WirelessEncodeButtonsMapping(mapping: Partial<Record<Rival3WirelessButtonName, Rival3WirelessButtonAction>>): Uint8Array;
|
|
222
|
+
//# sourceMappingURL=rival3-wireless.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rival3-wireless.d.ts","sourceRoot":"","sources":["../../src/steelseries/rival3-wireless.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyFG;AAEH,eAAO,MAAM,yBAAyB,IAAO,CAAC;AAE9C,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB;;;;IAIlC,gFAAgF;;IAEhF,iEAAiE;;IAEjE,uDAAuD;;CAE/C,CAAC;AAEX,eAAO,MAAM,6BAA6B,gCAAiC,CAAC;AAS5E,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,+BAA+B,IAAI,CAAC;AACjD,eAAO,MAAM,wCAAwC,IAAI,CAAC;AAC1D,eAAO,MAAM,uCAAuC,IAAI,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CA+B/D,CAAC;AAEH,qBAAa,2BAA4B,SAAQ,KAAK;CAAG;AAEzD,+EAA+E;AAC/E,wBAAgB,mCAAmC,IAAI,MAAM,EAAE,CAE9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,GACpB,UAAU,CA2BZ;AAED,+GAA+G;AAC/G,wBAAgB,0CAA0C,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAQ5F;AAED,qGAAqG;AACrG,wBAAgB,oCAAoC,IAAI,UAAU,CAEjE;AAED,iEAAiE;AACjE,wBAAgB,sCAAsC,IAAI,UAAU,CAEnE;AAED,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,0FAA0F;AAC1F,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,UAAU,GAAG,sBAAsB,CAQnG;AAED,6FAA6F;AAC7F,wBAAgB,qCAAqC,IAAI,UAAU,CAElE;AAED,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,UAAU,GAAG,qBAAqB,CAOjG;AASD,6FAA6F;AAC7F,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;CAOyB,CAAC;AAE9D,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAU5E;;;;;;GAMG;AACH,MAAM,MAAM,0BAA0B,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,GACpD;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;;;;;;GAMG;AACH,wBAAgB,6CAA6C,CAC3D,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,0BAA0B,CAAC,CAAC,GAC7E,UAAU,CAsDZ"}
|