@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,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Rival 650 Wireless configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/rival650.py` — the primary source for every
|
|
7
|
+
* command byte, product id, and default here. Read in full for this
|
|
8
|
+
* cluster; not assumed from any sibling SteelSeries device file.
|
|
9
|
+
* - rivalcfg `rivalcfg/handlers/range.py` — `sensitivity1`/`sensitivity2`:
|
|
10
|
+
* linear range-to-range mapping. `input_range` `[100, 12000, 100]` against
|
|
11
|
+
* `output_range` `[0x00, 0x77, 1]` — 120 steps each side, so the wire byte
|
|
12
|
+
* is simply `(dpi - 100) / 100`, `range_length_byte` defaulting to 1 (not
|
|
13
|
+
* set in the profile).
|
|
14
|
+
* - rivalcfg `rivalcfg/handlers/range_choice.py` — `lift_off_distance`: a
|
|
15
|
+
* *scalar* range-choice (unlike `./rival3-wireless.ts`'s per-preset DPI
|
|
16
|
+
* table use of the *multi*-DPI handler), `input_range` `[1, 8, 1]` matched
|
|
17
|
+
* exactly (every step has its own `output_choices` entry, so no rounding
|
|
18
|
+
* is exercised in practice) against a two-byte little-endian output value
|
|
19
|
+
* (`range_length_byte: 2` — the output values themselves, e.g. `0x7874`,
|
|
20
|
+
* are already 16-bit quantities, not indices).
|
|
21
|
+
* - rivalcfg `rivalcfg/handlers/range.py` again — `sleep_timer`: `input_range`
|
|
22
|
+
* `[1, 20, 1]` (minutes) against `output_range` `[0x003C, 0x04B0, 60]`
|
|
23
|
+
* (seconds, `range_length_byte: 2`) — 60 and 1200 are `1*60` and `20*60`,
|
|
24
|
+
* so the wire value is simply `minutes * 60` seconds, little-endian 2
|
|
25
|
+
* bytes.
|
|
26
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
|
|
27
|
+
* field layout, 7 buttons, `button_field_length: 5`. Button 7 has
|
|
28
|
+
* `"id": 0x00` in the source (colliding with `button_disable`'s `0x00`) and
|
|
29
|
+
* defaults to the `dpi` special action — like `./aerox5-wireless.ts`'s
|
|
30
|
+
* `scrollUp`/`scrollDown`, this means Button 7 is a valid remap *source*
|
|
31
|
+
* (it has an `offset`) but not a valid remap *target* (writing its `id`
|
|
32
|
+
* into another button's field would be indistinguishable from disabling
|
|
33
|
+
* that button), so `RivalSixFiftyButtonAction`'s `"button"` variant
|
|
34
|
+
* excludes it.
|
|
35
|
+
* - rivalcfg's `usbhid.py` / `mouse.py` framing — unnumbered HID output
|
|
36
|
+
* reports on the vendor configuration interface (`"endpoint": 0` for both
|
|
37
|
+
* models, unlike `./rival3-wireless.ts`/`./aerox5-wireless.ts`'s
|
|
38
|
+
* `endpoint: 3`).
|
|
39
|
+
*
|
|
40
|
+
* ## Why this is a separate protocol family from every other SteelSeries device here
|
|
41
|
+
*
|
|
42
|
+
* `rival650.py` shares no command byte with `./rival3.ts`, `./aerox3.ts`,
|
|
43
|
+
* `./rival3-wireless.ts`, `./aerox5.ts`, or `./aerox5-wireless.ts`:
|
|
44
|
+
* sensitivity `0x15 0x01`/`0x15 0x02` (two separate single-value commands,
|
|
45
|
+
* not a shared multi-preset table like Rival 3 Wireless's `0x20` or Aerox 5
|
|
46
|
+
* Wireless's `0x2D`), polling `0x17` with `{125:0x04, 250:0x03, 500:0x02,
|
|
47
|
+
* 1000:0x01}` (Rival 3 Wireless also uses command byte `0x17` but a
|
|
48
|
+
* *different* value mapping — do not conflate the two), lift-off distance
|
|
49
|
+
* `0x20 0x01` (a setting neither Rival 3 Wireless nor Aerox 5 Wireless
|
|
50
|
+
* expose), buttons `0x19` (byte-identical to Rival 3 Wireless's buttons
|
|
51
|
+
* command, but a different field layout: 7 buttons here vs. 6 there), sleep
|
|
52
|
+
* timer `0x2B 0x01 0x01 0x00 0x00 0x00` (a 6-byte prefix, longer than any
|
|
53
|
+
* sibling's), battery `0xAA 0x01` (**byte-identical** to
|
|
54
|
+
* `./rival3-wireless.ts`'s battery command and response shape — see below),
|
|
55
|
+
* save `0x09` (one byte, same as Rival 3 Wireless's, different from Rival 3
|
|
56
|
+
* Gen 1's two-byte `0x09 0x00`). No firmware-query command is defined in
|
|
57
|
+
* `rival650.py` at all (unlike Rival 3 Wireless's `0x90 0x00`), so this
|
|
58
|
+
* family has no firmware probe.
|
|
59
|
+
*
|
|
60
|
+
* Product ids: `1038:172B` (wired/USB-cabled mode) and `1038:1726` (2.4 GHz
|
|
61
|
+
* wireless mode), both `"endpoint": 0`. Neither collides with any PID
|
|
62
|
+
* claimed by the Rival 3 / Aerox 3 / Rival 3 Wireless / Aerox 5 / Aerox 5
|
|
63
|
+
* Wireless families already registered in `./devices.ts`. Unlike
|
|
64
|
+
* `./aerox5-wireless.ts`, `rival650.py` uses the **same** command bytes for
|
|
65
|
+
* both PIDs — there is no `_patch_command`-style wireless-flag transform to
|
|
66
|
+
* model here.
|
|
67
|
+
*
|
|
68
|
+
* No corroborating libratbag or OpenRGB source for this exact device/PID was
|
|
69
|
+
* available in this environment (no local libratbag checkout, and OpenRGB's
|
|
70
|
+
* SteelSeries controller files were not reachable this pass) — every command
|
|
71
|
+
* byte above is sourced from rivalcfg alone. This should be treated as a
|
|
72
|
+
* single-source reconstruction until corroborated or hardware-verified.
|
|
73
|
+
*
|
|
74
|
+
* ## Battery / charging read — byte-identical shape to Rival 3 Wireless
|
|
75
|
+
*
|
|
76
|
+
* `rival650.py`'s top-level `battery_level` block is byte-for-byte the same
|
|
77
|
+
* shape as `./rival3-wireless.ts`'s: command `0xAA 0x01`, 3-byte input-report
|
|
78
|
+
* reply, `level = int(data[0])`, `is_charging = bool(data[2])`, `data[1]`
|
|
79
|
+
* unused by either lambda. This module defines its own
|
|
80
|
+
* `steelseriesRival650BatteryQuery` / `steelseriesRival650DecodeBattery`
|
|
81
|
+
* rather than importing Rival 3 Wireless's, so each family's codec stays
|
|
82
|
+
* self-contained (matching `./aerox5-wireless.ts`'s precedent of not sharing
|
|
83
|
+
* command/decode functions across families even when bytes happen to match).
|
|
84
|
+
*
|
|
85
|
+
* DPI presets, polling rate, lift-off distance, buttons, and sleep timer
|
|
86
|
+
* remain write-only: `rival650.py` defines no getter for any of them, same
|
|
87
|
+
* as every other SteelSeries profile in rivalcfg. Settings apply
|
|
88
|
+
* immediately; the save command (`0x09`) persists them to onboard flash.
|
|
89
|
+
* None of this has been verified on physical hardware by this project.
|
|
90
|
+
*/
|
|
91
|
+
export declare const RIVAL650_REPORT_ID = 0;
|
|
92
|
+
/** Command prefixes; length varies by command, matching rivalcfg exactly. */
|
|
93
|
+
export declare const RIVAL650_COMMAND: {
|
|
94
|
+
readonly sensitivity1: readonly [21, 1];
|
|
95
|
+
readonly sensitivity2: readonly [21, 2];
|
|
96
|
+
readonly pollingRate: readonly [23];
|
|
97
|
+
readonly liftOffDistance: readonly [32, 1];
|
|
98
|
+
readonly buttonsMapping: readonly [25];
|
|
99
|
+
readonly sleepTimer: readonly [43, 1, 1, 0, 0, 0];
|
|
100
|
+
/** `AA 01` — battery percentage + charging state, 3-byte input-report reply. */
|
|
101
|
+
readonly batteryLevel: readonly [170, 1];
|
|
102
|
+
/** One byte, same as Rival 3 Wireless's, unlike Rival 3 Gen 1's two-byte `09 00`. */
|
|
103
|
+
readonly save: readonly [9];
|
|
104
|
+
};
|
|
105
|
+
export declare const RIVAL650_POLLING_RATES: readonly [125, 250, 500, 1000];
|
|
106
|
+
export declare const RIVAL650_DPI_MIN = 100;
|
|
107
|
+
export declare const RIVAL650_DPI_MAX = 12000;
|
|
108
|
+
export declare const RIVAL650_DPI_STEP = 100;
|
|
109
|
+
export declare const RIVAL650_BATTERY_RESPONSE_LENGTH = 3;
|
|
110
|
+
export declare const RIVAL650_LIFT_OFF_DISTANCE_MIN = 1;
|
|
111
|
+
export declare const RIVAL650_LIFT_OFF_DISTANCE_MAX = 8;
|
|
112
|
+
export declare const RIVAL650_SLEEP_TIMER_MIN_MINUTES = 1;
|
|
113
|
+
export declare const RIVAL650_SLEEP_TIMER_MAX_MINUTES = 20;
|
|
114
|
+
export declare class Rival650ProtocolError extends Error {
|
|
115
|
+
}
|
|
116
|
+
/** DPI values expressible by the linear `range` table, ascending: 100, 200, …, 12000. */
|
|
117
|
+
export declare function steelseriesRival650DpiOptions(): number[];
|
|
118
|
+
/** `15 01 <v>` — sensitivity preset 1, `v = (dpi - 100) / 100` per rivalcfg's `range` table. */
|
|
119
|
+
export declare function steelseriesRival650EncodeSensitivity1(dpi: number): Uint8Array;
|
|
120
|
+
/** `15 02 <v>` — sensitivity preset 2, same encoding as preset 1. */
|
|
121
|
+
export declare function steelseriesRival650EncodeSensitivity2(dpi: number): Uint8Array;
|
|
122
|
+
/** `17 <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04 (different mapping than Rival 3 Wireless's same-byte command). */
|
|
123
|
+
export declare function steelseriesRival650EncodePollingRate(pollingRateHz: number): Uint8Array;
|
|
124
|
+
/** `20 01 <v_lo> <v_hi>` — lift-off distance 1–8 mm, exact per-step output value, little-endian 2 bytes. */
|
|
125
|
+
export declare function steelseriesRival650EncodeLiftOffDistance(millimeters: number): Uint8Array;
|
|
126
|
+
/** `2B 01 01 00 00 00 <v_lo> <v_hi>` — idle minutes before sleep, encoded as `minutes * 60` seconds, little-endian 2 bytes. */
|
|
127
|
+
export declare function steelseriesRival650EncodeSleepTimer(minutes: number): Uint8Array;
|
|
128
|
+
/** `09` — commit the current settings to onboard flash. */
|
|
129
|
+
export declare function steelseriesRival650SaveCommand(): Uint8Array;
|
|
130
|
+
/** `AA 01` — the device answers with a three-byte input report. */
|
|
131
|
+
export declare function steelseriesRival650BatteryQuery(): Uint8Array;
|
|
132
|
+
export interface Rival650Battery {
|
|
133
|
+
/** Battery percentage, `data[0]` verbatim (rivalcfg does not clamp it). */
|
|
134
|
+
level: number;
|
|
135
|
+
/** `bool(data[2])` in rivalcfg — `data[1]` is not used by either lambda. */
|
|
136
|
+
isCharging: boolean;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Decode the three-byte battery response: `data[0]` is the percentage
|
|
140
|
+
* (rivalcfg's `level` lambda, `int(data[0])`), `data[2]` is charging state
|
|
141
|
+
* (rivalcfg's `is_charging` lambda, `bool(data[2])`). `data[1]` is present in
|
|
142
|
+
* the response but unused by either rivalcfg lambda. Byte-identical shape to
|
|
143
|
+
* `./rival3-wireless.ts`'s battery decode.
|
|
144
|
+
*/
|
|
145
|
+
export declare function steelseriesRival650DecodeBattery(payload: Uint8Array): Rival650Battery;
|
|
146
|
+
/** `buttons_mapping.buttons` from `rival650.py`, id + byte offset into the packet. */
|
|
147
|
+
export declare const RIVAL650_BUTTONS: {
|
|
148
|
+
readonly button1: {
|
|
149
|
+
readonly id: 1;
|
|
150
|
+
readonly offset: 0;
|
|
151
|
+
};
|
|
152
|
+
readonly button2: {
|
|
153
|
+
readonly id: 2;
|
|
154
|
+
readonly offset: 5;
|
|
155
|
+
};
|
|
156
|
+
readonly button3: {
|
|
157
|
+
readonly id: 3;
|
|
158
|
+
readonly offset: 10;
|
|
159
|
+
};
|
|
160
|
+
readonly button4: {
|
|
161
|
+
readonly id: 4;
|
|
162
|
+
readonly offset: 15;
|
|
163
|
+
};
|
|
164
|
+
readonly button5: {
|
|
165
|
+
readonly id: 5;
|
|
166
|
+
readonly offset: 20;
|
|
167
|
+
};
|
|
168
|
+
readonly button6: {
|
|
169
|
+
readonly id: 6;
|
|
170
|
+
readonly offset: 25;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* `"id": 0x00` in the source — collides with `button_disable`, so this
|
|
174
|
+
* button cannot be a valid remap *target* (see module doc comment). It
|
|
175
|
+
* still has its own `offset` and defaults to the `dpi` special action.
|
|
176
|
+
*/
|
|
177
|
+
readonly button7: {
|
|
178
|
+
readonly id: 0;
|
|
179
|
+
readonly offset: 30;
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
export type Rival650ButtonName = keyof typeof RIVAL650_BUTTONS;
|
|
183
|
+
/**
|
|
184
|
+
* One button's target. `button7`'s `id` (`0x00`) collides with `disabled`,
|
|
185
|
+
* so — like `./aerox5-wireless.ts`'s `scrollUp`/`scrollDown` — it is a valid
|
|
186
|
+
* remap *source* (it has an `offset` and can be assigned any action) but
|
|
187
|
+
* excluded from `"button"` as a remap *target*.
|
|
188
|
+
*/
|
|
189
|
+
export type Rival650ButtonAction = {
|
|
190
|
+
type: "button";
|
|
191
|
+
target: Exclude<Rival650ButtonName, "button7">;
|
|
192
|
+
} | {
|
|
193
|
+
type: "disabled";
|
|
194
|
+
} | {
|
|
195
|
+
type: "dpiSwitch";
|
|
196
|
+
} | {
|
|
197
|
+
type: "scrollUp";
|
|
198
|
+
} | {
|
|
199
|
+
type: "scrollDown";
|
|
200
|
+
} | {
|
|
201
|
+
type: "keyboard";
|
|
202
|
+
code: number;
|
|
203
|
+
} | {
|
|
204
|
+
type: "multimedia";
|
|
205
|
+
code: number;
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* `19` + one 35-byte (`7 buttons × 5-byte field length`) packet, zero-filled
|
|
209
|
+
* except where a mapping is given. Unmapped buttons are left as all-zero
|
|
210
|
+
* fields (rivalcfg instead fills in per-button defaults; this codec leaves
|
|
211
|
+
* that policy to the caller — pass every button explicitly for parity with
|
|
212
|
+
* rivalcfg's default profile).
|
|
213
|
+
*/
|
|
214
|
+
export declare function steelseriesRival650EncodeButtonsMapping(mapping: Partial<Record<Rival650ButtonName, Rival650ButtonAction>>): Uint8Array;
|
|
215
|
+
//# sourceMappingURL=rival650.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rival650.d.ts","sourceRoot":"","sources":["../../src/steelseries/rival650.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyFG;AAEH,eAAO,MAAM,kBAAkB,IAAO,CAAC;AAEvC,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB;;;;;;;IAO3B,gFAAgF;;IAEhF,qFAAqF;;CAE7E,CAAC;AAEX,eAAO,MAAM,sBAAsB,gCAAiC,CAAC;AASrE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAchD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,qBAAa,qBAAsB,SAAQ,KAAK;CAAG;AAEnD,yFAAyF;AACzF,wBAAgB,6BAA6B,IAAI,MAAM,EAAE,CAMxD;AAWD,gGAAgG;AAChG,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAE7E;AAED,qEAAqE;AACrE,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAE7E;AAED,2HAA2H;AAC3H,wBAAgB,oCAAoC,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAMtF;AAED,4GAA4G;AAC5G,wBAAgB,wCAAwC,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAQxF;AAED,+HAA+H;AAC/H,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAY/E;AAED,2DAA2D;AAC3D,wBAAgB,8BAA8B,IAAI,UAAU,CAE3D;AAED,mEAAmE;AACnE,wBAAgB,+BAA+B,IAAI,UAAU,CAE5D;AAED,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,UAAU,GAAG,eAAe,CAKrF;AASD,sFAAsF;AACtF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;IAO3B;;;;OAIG;;;;;CAEkD,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAU/D;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;CAAE,GAClE;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,uCAAuC,CACrD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,GACjE,UAAU,CAsDZ"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Rival 650 Wireless configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/rival650.py` — the primary source for every
|
|
7
|
+
* command byte, product id, and default here. Read in full for this
|
|
8
|
+
* cluster; not assumed from any sibling SteelSeries device file.
|
|
9
|
+
* - rivalcfg `rivalcfg/handlers/range.py` — `sensitivity1`/`sensitivity2`:
|
|
10
|
+
* linear range-to-range mapping. `input_range` `[100, 12000, 100]` against
|
|
11
|
+
* `output_range` `[0x00, 0x77, 1]` — 120 steps each side, so the wire byte
|
|
12
|
+
* is simply `(dpi - 100) / 100`, `range_length_byte` defaulting to 1 (not
|
|
13
|
+
* set in the profile).
|
|
14
|
+
* - rivalcfg `rivalcfg/handlers/range_choice.py` — `lift_off_distance`: a
|
|
15
|
+
* *scalar* range-choice (unlike `./rival3-wireless.ts`'s per-preset DPI
|
|
16
|
+
* table use of the *multi*-DPI handler), `input_range` `[1, 8, 1]` matched
|
|
17
|
+
* exactly (every step has its own `output_choices` entry, so no rounding
|
|
18
|
+
* is exercised in practice) against a two-byte little-endian output value
|
|
19
|
+
* (`range_length_byte: 2` — the output values themselves, e.g. `0x7874`,
|
|
20
|
+
* are already 16-bit quantities, not indices).
|
|
21
|
+
* - rivalcfg `rivalcfg/handlers/range.py` again — `sleep_timer`: `input_range`
|
|
22
|
+
* `[1, 20, 1]` (minutes) against `output_range` `[0x003C, 0x04B0, 60]`
|
|
23
|
+
* (seconds, `range_length_byte: 2`) — 60 and 1200 are `1*60` and `20*60`,
|
|
24
|
+
* so the wire value is simply `minutes * 60` seconds, little-endian 2
|
|
25
|
+
* bytes.
|
|
26
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
|
|
27
|
+
* field layout, 7 buttons, `button_field_length: 5`. Button 7 has
|
|
28
|
+
* `"id": 0x00` in the source (colliding with `button_disable`'s `0x00`) and
|
|
29
|
+
* defaults to the `dpi` special action — like `./aerox5-wireless.ts`'s
|
|
30
|
+
* `scrollUp`/`scrollDown`, this means Button 7 is a valid remap *source*
|
|
31
|
+
* (it has an `offset`) but not a valid remap *target* (writing its `id`
|
|
32
|
+
* into another button's field would be indistinguishable from disabling
|
|
33
|
+
* that button), so `RivalSixFiftyButtonAction`'s `"button"` variant
|
|
34
|
+
* excludes it.
|
|
35
|
+
* - rivalcfg's `usbhid.py` / `mouse.py` framing — unnumbered HID output
|
|
36
|
+
* reports on the vendor configuration interface (`"endpoint": 0` for both
|
|
37
|
+
* models, unlike `./rival3-wireless.ts`/`./aerox5-wireless.ts`'s
|
|
38
|
+
* `endpoint: 3`).
|
|
39
|
+
*
|
|
40
|
+
* ## Why this is a separate protocol family from every other SteelSeries device here
|
|
41
|
+
*
|
|
42
|
+
* `rival650.py` shares no command byte with `./rival3.ts`, `./aerox3.ts`,
|
|
43
|
+
* `./rival3-wireless.ts`, `./aerox5.ts`, or `./aerox5-wireless.ts`:
|
|
44
|
+
* sensitivity `0x15 0x01`/`0x15 0x02` (two separate single-value commands,
|
|
45
|
+
* not a shared multi-preset table like Rival 3 Wireless's `0x20` or Aerox 5
|
|
46
|
+
* Wireless's `0x2D`), polling `0x17` with `{125:0x04, 250:0x03, 500:0x02,
|
|
47
|
+
* 1000:0x01}` (Rival 3 Wireless also uses command byte `0x17` but a
|
|
48
|
+
* *different* value mapping — do not conflate the two), lift-off distance
|
|
49
|
+
* `0x20 0x01` (a setting neither Rival 3 Wireless nor Aerox 5 Wireless
|
|
50
|
+
* expose), buttons `0x19` (byte-identical to Rival 3 Wireless's buttons
|
|
51
|
+
* command, but a different field layout: 7 buttons here vs. 6 there), sleep
|
|
52
|
+
* timer `0x2B 0x01 0x01 0x00 0x00 0x00` (a 6-byte prefix, longer than any
|
|
53
|
+
* sibling's), battery `0xAA 0x01` (**byte-identical** to
|
|
54
|
+
* `./rival3-wireless.ts`'s battery command and response shape — see below),
|
|
55
|
+
* save `0x09` (one byte, same as Rival 3 Wireless's, different from Rival 3
|
|
56
|
+
* Gen 1's two-byte `0x09 0x00`). No firmware-query command is defined in
|
|
57
|
+
* `rival650.py` at all (unlike Rival 3 Wireless's `0x90 0x00`), so this
|
|
58
|
+
* family has no firmware probe.
|
|
59
|
+
*
|
|
60
|
+
* Product ids: `1038:172B` (wired/USB-cabled mode) and `1038:1726` (2.4 GHz
|
|
61
|
+
* wireless mode), both `"endpoint": 0`. Neither collides with any PID
|
|
62
|
+
* claimed by the Rival 3 / Aerox 3 / Rival 3 Wireless / Aerox 5 / Aerox 5
|
|
63
|
+
* Wireless families already registered in `./devices.ts`. Unlike
|
|
64
|
+
* `./aerox5-wireless.ts`, `rival650.py` uses the **same** command bytes for
|
|
65
|
+
* both PIDs — there is no `_patch_command`-style wireless-flag transform to
|
|
66
|
+
* model here.
|
|
67
|
+
*
|
|
68
|
+
* No corroborating libratbag or OpenRGB source for this exact device/PID was
|
|
69
|
+
* available in this environment (no local libratbag checkout, and OpenRGB's
|
|
70
|
+
* SteelSeries controller files were not reachable this pass) — every command
|
|
71
|
+
* byte above is sourced from rivalcfg alone. This should be treated as a
|
|
72
|
+
* single-source reconstruction until corroborated or hardware-verified.
|
|
73
|
+
*
|
|
74
|
+
* ## Battery / charging read — byte-identical shape to Rival 3 Wireless
|
|
75
|
+
*
|
|
76
|
+
* `rival650.py`'s top-level `battery_level` block is byte-for-byte the same
|
|
77
|
+
* shape as `./rival3-wireless.ts`'s: command `0xAA 0x01`, 3-byte input-report
|
|
78
|
+
* reply, `level = int(data[0])`, `is_charging = bool(data[2])`, `data[1]`
|
|
79
|
+
* unused by either lambda. This module defines its own
|
|
80
|
+
* `steelseriesRival650BatteryQuery` / `steelseriesRival650DecodeBattery`
|
|
81
|
+
* rather than importing Rival 3 Wireless's, so each family's codec stays
|
|
82
|
+
* self-contained (matching `./aerox5-wireless.ts`'s precedent of not sharing
|
|
83
|
+
* command/decode functions across families even when bytes happen to match).
|
|
84
|
+
*
|
|
85
|
+
* DPI presets, polling rate, lift-off distance, buttons, and sleep timer
|
|
86
|
+
* remain write-only: `rival650.py` defines no getter for any of them, same
|
|
87
|
+
* as every other SteelSeries profile in rivalcfg. Settings apply
|
|
88
|
+
* immediately; the save command (`0x09`) persists them to onboard flash.
|
|
89
|
+
* None of this has been verified on physical hardware by this project.
|
|
90
|
+
*/
|
|
91
|
+
export const RIVAL650_REPORT_ID = 0x00;
|
|
92
|
+
/** Command prefixes; length varies by command, matching rivalcfg exactly. */
|
|
93
|
+
export const RIVAL650_COMMAND = {
|
|
94
|
+
sensitivity1: [0x15, 0x01],
|
|
95
|
+
sensitivity2: [0x15, 0x02],
|
|
96
|
+
pollingRate: [0x17],
|
|
97
|
+
liftOffDistance: [0x20, 0x01],
|
|
98
|
+
buttonsMapping: [0x19],
|
|
99
|
+
sleepTimer: [0x2b, 0x01, 0x01, 0x00, 0x00, 0x00],
|
|
100
|
+
/** `AA 01` — battery percentage + charging state, 3-byte input-report reply. */
|
|
101
|
+
batteryLevel: [0xaa, 0x01],
|
|
102
|
+
/** One byte, same as Rival 3 Wireless's, unlike Rival 3 Gen 1's two-byte `09 00`. */
|
|
103
|
+
save: [0x09],
|
|
104
|
+
};
|
|
105
|
+
export const RIVAL650_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 RIVAL650_DPI_MIN = 100;
|
|
113
|
+
export const RIVAL650_DPI_MAX = 12000;
|
|
114
|
+
export const RIVAL650_DPI_STEP = 100;
|
|
115
|
+
export const RIVAL650_BATTERY_RESPONSE_LENGTH = 3;
|
|
116
|
+
export const RIVAL650_LIFT_OFF_DISTANCE_MIN = 1;
|
|
117
|
+
export const RIVAL650_LIFT_OFF_DISTANCE_MAX = 8;
|
|
118
|
+
/** `lift_off_distance.output_choices` from `rival650.py`, exact per-mm values, no rounding needed. */
|
|
119
|
+
const LIFT_OFF_DISTANCE_TO_VALUE = new Map([
|
|
120
|
+
[1, 0x7874],
|
|
121
|
+
[2, 0x736f],
|
|
122
|
+
[3, 0x6e6a],
|
|
123
|
+
[4, 0x6965],
|
|
124
|
+
[5, 0x6460],
|
|
125
|
+
[6, 0x5f5b],
|
|
126
|
+
[7, 0x5a56],
|
|
127
|
+
[8, 0x5551],
|
|
128
|
+
]);
|
|
129
|
+
export const RIVAL650_SLEEP_TIMER_MIN_MINUTES = 1;
|
|
130
|
+
export const RIVAL650_SLEEP_TIMER_MAX_MINUTES = 20;
|
|
131
|
+
export class Rival650ProtocolError extends Error {
|
|
132
|
+
}
|
|
133
|
+
/** DPI values expressible by the linear `range` table, ascending: 100, 200, …, 12000. */
|
|
134
|
+
export function steelseriesRival650DpiOptions() {
|
|
135
|
+
const options = [];
|
|
136
|
+
for (let dpi = RIVAL650_DPI_MIN; dpi <= RIVAL650_DPI_MAX; dpi += RIVAL650_DPI_STEP) {
|
|
137
|
+
options.push(dpi);
|
|
138
|
+
}
|
|
139
|
+
return options;
|
|
140
|
+
}
|
|
141
|
+
function encodeDpiByte(dpi) {
|
|
142
|
+
if (!Number.isInteger(dpi) || dpi < RIVAL650_DPI_MIN || dpi > RIVAL650_DPI_MAX || (dpi - RIVAL650_DPI_MIN) % RIVAL650_DPI_STEP !== 0) {
|
|
143
|
+
throw new Rival650ProtocolError(`SteelSeries Rival 650 Wireless DPI must be ${RIVAL650_DPI_MIN}–${RIVAL650_DPI_MAX.toLocaleString()} in ${RIVAL650_DPI_STEP} DPI steps.`);
|
|
144
|
+
}
|
|
145
|
+
return (dpi - RIVAL650_DPI_MIN) / RIVAL650_DPI_STEP;
|
|
146
|
+
}
|
|
147
|
+
/** `15 01 <v>` — sensitivity preset 1, `v = (dpi - 100) / 100` per rivalcfg's `range` table. */
|
|
148
|
+
export function steelseriesRival650EncodeSensitivity1(dpi) {
|
|
149
|
+
return new Uint8Array([...RIVAL650_COMMAND.sensitivity1, encodeDpiByte(dpi)]);
|
|
150
|
+
}
|
|
151
|
+
/** `15 02 <v>` — sensitivity preset 2, same encoding as preset 1. */
|
|
152
|
+
export function steelseriesRival650EncodeSensitivity2(dpi) {
|
|
153
|
+
return new Uint8Array([...RIVAL650_COMMAND.sensitivity2, encodeDpiByte(dpi)]);
|
|
154
|
+
}
|
|
155
|
+
/** `17 <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04 (different mapping than Rival 3 Wireless's same-byte command). */
|
|
156
|
+
export function steelseriesRival650EncodePollingRate(pollingRateHz) {
|
|
157
|
+
const byte = POLLING_RATE_TO_BYTE.get(pollingRateHz);
|
|
158
|
+
if (byte === undefined) {
|
|
159
|
+
throw new Rival650ProtocolError("SteelSeries Rival 650 Wireless supports 125, 250, 500, or 1000 Hz polling.");
|
|
160
|
+
}
|
|
161
|
+
return new Uint8Array([...RIVAL650_COMMAND.pollingRate, byte]);
|
|
162
|
+
}
|
|
163
|
+
/** `20 01 <v_lo> <v_hi>` — lift-off distance 1–8 mm, exact per-step output value, little-endian 2 bytes. */
|
|
164
|
+
export function steelseriesRival650EncodeLiftOffDistance(millimeters) {
|
|
165
|
+
const value = LIFT_OFF_DISTANCE_TO_VALUE.get(millimeters);
|
|
166
|
+
if (value === undefined) {
|
|
167
|
+
throw new Rival650ProtocolError(`SteelSeries Rival 650 Wireless lift-off distance must be an integer ${RIVAL650_LIFT_OFF_DISTANCE_MIN}–${RIVAL650_LIFT_OFF_DISTANCE_MAX}.`);
|
|
168
|
+
}
|
|
169
|
+
return new Uint8Array([...RIVAL650_COMMAND.liftOffDistance, value & 0xff, (value >> 8) & 0xff]);
|
|
170
|
+
}
|
|
171
|
+
/** `2B 01 01 00 00 00 <v_lo> <v_hi>` — idle minutes before sleep, encoded as `minutes * 60` seconds, little-endian 2 bytes. */
|
|
172
|
+
export function steelseriesRival650EncodeSleepTimer(minutes) {
|
|
173
|
+
if (!Number.isInteger(minutes) ||
|
|
174
|
+
minutes < RIVAL650_SLEEP_TIMER_MIN_MINUTES ||
|
|
175
|
+
minutes > RIVAL650_SLEEP_TIMER_MAX_MINUTES) {
|
|
176
|
+
throw new Rival650ProtocolError(`SteelSeries Rival 650 Wireless sleep timer must be an integer ${RIVAL650_SLEEP_TIMER_MIN_MINUTES}–${RIVAL650_SLEEP_TIMER_MAX_MINUTES} minutes.`);
|
|
177
|
+
}
|
|
178
|
+
const seconds = minutes * 60;
|
|
179
|
+
return new Uint8Array([...RIVAL650_COMMAND.sleepTimer, seconds & 0xff, (seconds >> 8) & 0xff]);
|
|
180
|
+
}
|
|
181
|
+
/** `09` — commit the current settings to onboard flash. */
|
|
182
|
+
export function steelseriesRival650SaveCommand() {
|
|
183
|
+
return new Uint8Array(RIVAL650_COMMAND.save);
|
|
184
|
+
}
|
|
185
|
+
/** `AA 01` — the device answers with a three-byte input report. */
|
|
186
|
+
export function steelseriesRival650BatteryQuery() {
|
|
187
|
+
return new Uint8Array(RIVAL650_COMMAND.batteryLevel);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Decode the three-byte battery response: `data[0]` is the percentage
|
|
191
|
+
* (rivalcfg's `level` lambda, `int(data[0])`), `data[2]` is charging state
|
|
192
|
+
* (rivalcfg's `is_charging` lambda, `bool(data[2])`). `data[1]` is present in
|
|
193
|
+
* the response but unused by either rivalcfg lambda. Byte-identical shape to
|
|
194
|
+
* `./rival3-wireless.ts`'s battery decode.
|
|
195
|
+
*/
|
|
196
|
+
export function steelseriesRival650DecodeBattery(payload) {
|
|
197
|
+
if (payload.length < RIVAL650_BATTERY_RESPONSE_LENGTH) {
|
|
198
|
+
throw new Rival650ProtocolError("SteelSeries Rival 650 Wireless battery response is shorter than three bytes.");
|
|
199
|
+
}
|
|
200
|
+
return { level: payload[0], isCharging: payload[2] !== 0 };
|
|
201
|
+
}
|
|
202
|
+
/** `buttons_mapping.buttons` from `rival650.py`, id + byte offset into the packet. */
|
|
203
|
+
export const RIVAL650_BUTTONS = {
|
|
204
|
+
button1: { id: 0x01, offset: 0x00 },
|
|
205
|
+
button2: { id: 0x02, offset: 0x05 },
|
|
206
|
+
button3: { id: 0x03, offset: 0x0a },
|
|
207
|
+
button4: { id: 0x04, offset: 0x0f },
|
|
208
|
+
button5: { id: 0x05, offset: 0x14 },
|
|
209
|
+
button6: { id: 0x06, offset: 0x19 },
|
|
210
|
+
/**
|
|
211
|
+
* `"id": 0x00` in the source — collides with `button_disable`, so this
|
|
212
|
+
* button cannot be a valid remap *target* (see module doc comment). It
|
|
213
|
+
* still has its own `offset` and defaults to the `dpi` special action.
|
|
214
|
+
*/
|
|
215
|
+
button7: { id: 0x00, offset: 0x1e },
|
|
216
|
+
};
|
|
217
|
+
const RIVAL650_BUTTON_FIELD_LENGTH = 5;
|
|
218
|
+
const RIVAL650_BUTTON_DISABLE = 0x00;
|
|
219
|
+
const RIVAL650_BUTTON_DPI_SWITCH = 0x30;
|
|
220
|
+
const RIVAL650_BUTTON_SCROLL_UP = 0x31;
|
|
221
|
+
const RIVAL650_BUTTON_SCROLL_DOWN = 0x32;
|
|
222
|
+
const RIVAL650_BUTTON_KEYBOARD = 0x51;
|
|
223
|
+
const RIVAL650_BUTTON_MULTIMEDIA = 0x61;
|
|
224
|
+
/**
|
|
225
|
+
* `19` + one 35-byte (`7 buttons × 5-byte field length`) packet, zero-filled
|
|
226
|
+
* except where a mapping is given. Unmapped buttons are left as all-zero
|
|
227
|
+
* fields (rivalcfg instead fills in per-button defaults; this codec leaves
|
|
228
|
+
* that policy to the caller — pass every button explicitly for parity with
|
|
229
|
+
* rivalcfg's default profile).
|
|
230
|
+
*/
|
|
231
|
+
export function steelseriesRival650EncodeButtonsMapping(mapping) {
|
|
232
|
+
const names = Object.keys(RIVAL650_BUTTONS);
|
|
233
|
+
const packet = new Array(names.length * RIVAL650_BUTTON_FIELD_LENGTH).fill(0x00);
|
|
234
|
+
for (const [name, action] of Object.entries(mapping)) {
|
|
235
|
+
const slot = RIVAL650_BUTTONS[name];
|
|
236
|
+
if (!slot) {
|
|
237
|
+
throw new Rival650ProtocolError(`Unknown SteelSeries Rival 650 Wireless button "${name}".`);
|
|
238
|
+
}
|
|
239
|
+
const { offset } = slot;
|
|
240
|
+
switch (action.type) {
|
|
241
|
+
case "button": {
|
|
242
|
+
packet[offset] = RIVAL650_BUTTONS[action.target].id;
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
case "disabled": {
|
|
246
|
+
packet[offset] = RIVAL650_BUTTON_DISABLE;
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
case "dpiSwitch": {
|
|
250
|
+
packet[offset] = RIVAL650_BUTTON_DPI_SWITCH;
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
case "scrollUp": {
|
|
254
|
+
packet[offset] = RIVAL650_BUTTON_SCROLL_UP;
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
case "scrollDown": {
|
|
258
|
+
packet[offset] = RIVAL650_BUTTON_SCROLL_DOWN;
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
case "keyboard": {
|
|
262
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
263
|
+
throw new Rival650ProtocolError("Keyboard scan codes must be integers 0–255.");
|
|
264
|
+
}
|
|
265
|
+
packet[offset] = RIVAL650_BUTTON_KEYBOARD;
|
|
266
|
+
packet[offset + 1] = action.code;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
case "multimedia": {
|
|
270
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
271
|
+
throw new Rival650ProtocolError("Multimedia key codes must be integers 0–255.");
|
|
272
|
+
}
|
|
273
|
+
packet[offset] = RIVAL650_BUTTON_MULTIMEDIA;
|
|
274
|
+
packet[offset + 1] = action.code;
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
default: {
|
|
278
|
+
throw new Rival650ProtocolError("Unsupported SteelSeries Rival 650 Wireless button action.");
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return new Uint8Array([...RIVAL650_COMMAND.buttonsMapping, ...packet]);
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=rival650.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rival650.js","sourceRoot":"","sources":["../../src/steelseries/rival650.ts"],"names":[],"mappings":"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"}
|