@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,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Rival 310 configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/rival310.py` — the primary source for every
|
|
7
|
+
* command byte, default, and PID here.
|
|
8
|
+
* - rivalcfg `rivalcfg/handlers/range.py` — the "range" handler used for both
|
|
9
|
+
* DPI presets: linear `input_range: [100, 12000, 100]` mapped onto
|
|
10
|
+
* `output_range: [0x00, 0x77, 1]`, i.e. a **plain one-byte linear encoding**
|
|
11
|
+
* (`byte = (dpi - 100) / 100`), not the TrueMove Core lookup table used by
|
|
12
|
+
* `./rival3.ts` and `./aerox3.ts`. The Rival 310 predates TrueMove Core
|
|
13
|
+
* (SteelSeries shipped it with the older PixArt PMW3360-derived "TrueMove3"
|
|
14
|
+
* sensor); rivalcfg encodes it as a bare range, so this module does too —
|
|
15
|
+
* no table is reused from the Rival 3 modules.
|
|
16
|
+
* - rivalcfg `rivalcfg/handlers/choice.py` — polling rate.
|
|
17
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
|
|
18
|
+
* field layout (5 bytes/button, zero-filled, `offset`/`id` per button,
|
|
19
|
+
* `<action byte>` then `<code byte>` for keyboard/multimedia targets).
|
|
20
|
+
* Byte-identical field mechanics to `./aerox3.ts`'s buttons handler, but a
|
|
21
|
+
* two-byte `31 00` command prefix (Rival 310) instead of one-byte `2A`
|
|
22
|
+
* (Aerox 3), and different id/offset/special-action values throughout.
|
|
23
|
+
* - rivalcfg `rivalcfg/handlers/rgbgradient.py` — LED color/effect encoding;
|
|
24
|
+
* see "RGB — deliberately reduced scope" below for what this module
|
|
25
|
+
* actually implements of it.
|
|
26
|
+
*
|
|
27
|
+
* ## Corroboration gap — explicitly flagged
|
|
28
|
+
*
|
|
29
|
+
* This module was **not** cross-checked against libratbag's
|
|
30
|
+
* `src/driver-steelseries.c` or against OpenRGB's SteelSeries controller
|
|
31
|
+
* files: both `github.com/libratbag/libratbag` and
|
|
32
|
+
* `github.com/openrgb/OpenRGB` were unreachable from this environment (no
|
|
33
|
+
* outbound network access beyond the pre-cloned `/tmp/rivalcfg` mirror), and
|
|
34
|
+
* no local clone of either was available to read instead. The task
|
|
35
|
+
* instructions called for checking libratbag "harder" for this device
|
|
36
|
+
* specifically, since the Rival 310 is old/popular enough to plausibly be
|
|
37
|
+
* supported there — that check could not be performed. Every byte in this
|
|
38
|
+
* module traces to rivalcfg alone. Treat the DPI range encoding, the button
|
|
39
|
+
* byte layout, and the RGB header/body layout as **rivalcfg-only claims,
|
|
40
|
+
* unverified against a second independent source**, until someone with
|
|
41
|
+
* network access (or a local libratbag/OpenRGB checkout) confirms or
|
|
42
|
+
* corrects them.
|
|
43
|
+
*
|
|
44
|
+
* Every command is an HID **output report** with report id 0x00 on the
|
|
45
|
+
* vendor configuration interface (hidapi `endpoint == 0`, per rivalcfg's
|
|
46
|
+
* `"endpoint": 0` model entries — note this differs from Rival 3 Gen 1's and
|
|
47
|
+
* Aerox 3's `endpoint: 3`; do not assume interface 3 for this device). The
|
|
48
|
+
* one exception is the RGB color commands, which rivalcfg sends as HID
|
|
49
|
+
* **feature** reports (`usbhid.HID_REPORT_TYPE_FEATURE`) — callers must route
|
|
50
|
+
* `steelseriesRival310EncodeLedColor`'s output through a feature-report send,
|
|
51
|
+
* not `sendReport`. The functions here build the report *payload* — the
|
|
52
|
+
* bytes after the report id — unpadded, matching rivalcfg's `usbhid.py`.
|
|
53
|
+
*
|
|
54
|
+
* **This device is write-only for settings**, like every other SteelSeries
|
|
55
|
+
* family in this package: rivalcfg defines no getter for DPI, polling,
|
|
56
|
+
* lighting, or buttons. The one readable value is the two-byte firmware
|
|
57
|
+
* version behind command `90 00` (`response_length: 2`, `report_type`
|
|
58
|
+
* output) — analogous to Rival 3 Gen 1's `10 00`, a different command byte.
|
|
59
|
+
*
|
|
60
|
+
* Settings apply immediately; the save command (`59 00`) commits them to
|
|
61
|
+
* onboard flash, matching rivalcfg's CLI default of saving after every write.
|
|
62
|
+
* None of this has been verified on physical Rival 310 hardware by this
|
|
63
|
+
* project.
|
|
64
|
+
*
|
|
65
|
+
* ## Product ids
|
|
66
|
+
*
|
|
67
|
+
* rivalcfg's `rival310.py` lists three colorway/bundle variants, all vendor
|
|
68
|
+
* `0x1038`, all sharing this exact command set (one profile, three `models`
|
|
69
|
+
* entries):
|
|
70
|
+
*
|
|
71
|
+
* - `0x1720` — SteelSeries Rival 310
|
|
72
|
+
* - `0x171E` — SteelSeries Rival 310 CS:GO Howl Edition
|
|
73
|
+
* - `0x1736` — SteelSeries Rival 310 PUBG Edition
|
|
74
|
+
*
|
|
75
|
+
* Checked against `./devices.ts` as it stood when this module was written:
|
|
76
|
+
* none of `0x1720`/`0x171E`/`0x1736` collided with any PID already claimed
|
|
77
|
+
* there (Rival 3 Gen 1 `0x1824`/`0x184C`, Aerox 3 `0x1836`, Rival 3 Wireless
|
|
78
|
+
* `0x1830`, Aerox 5 `0x1850`, Aerox 5 Wireless family `0x1852`/`0x1854`/
|
|
79
|
+
* `0x185C`/`0x185E`/`0x1860`/`0x1862`).
|
|
80
|
+
*
|
|
81
|
+
* ## RGB — deliberately reduced scope
|
|
82
|
+
*
|
|
83
|
+
* rivalcfg's `rgbgradient` handler supports up to 14 timed color stops with
|
|
84
|
+
* duration, repeat, and button-trigger fields — a small state machine. This
|
|
85
|
+
* module implements only the **single steady color** path through that
|
|
86
|
+
* handler (`is_gradient = False`, one color, `pos = 0`), which is what the
|
|
87
|
+
* handler itself produces for a plain color string or RGB tuple input (the
|
|
88
|
+
* common case; see `_handle_color_string`/`_handle_color_tuple` in
|
|
89
|
+
* `rgbgradient.py`). Traced byte-for-byte from `process_value`:
|
|
90
|
+
*
|
|
91
|
+
* - `header` is `header_length` (26) zero-filled bytes: `header[0]` = led id
|
|
92
|
+
* (`led_id_offsets: [0]`), `header[1..2]` = duration little-endian
|
|
93
|
+
* (`duration_offset: 1`, `duration_length: 2`; rivalcfg's default 1000 ms
|
|
94
|
+
* is used since a steady color does not animate), `header[17]` = repeat
|
|
95
|
+
* flag (`repeat_offset: 17`; **`0x01` for a steady, non-gradient color** —
|
|
96
|
+
* `process_value` sets `repeat = 0x01` whenever `is_gradient` is false),
|
|
97
|
+
* `header[21]` = triggers bitmask (`triggers_offset: 21`; always `0x00`
|
|
98
|
+
* here — trigger support is out of scope), `header[25]` = color count
|
|
99
|
+
* (`color_count_offset: 25`; always `1`).
|
|
100
|
+
* - `body` is the color repeated with a zero position delta:
|
|
101
|
+
* `[r, g, b, r, g, b, 0x00]` — `process_value`'s body starts as
|
|
102
|
+
* `list(gradient[0]["color"])` (first `r,g,b`), then its stop loop appends
|
|
103
|
+
* `merge_bytes(body, color, real_pos - last_real_pos)` for the same single
|
|
104
|
+
* stop, i.e. `color` again followed by the integer position delta (`0` for
|
|
105
|
+
* the only stop, at `pos = 0`) appended as its own trailing byte.
|
|
106
|
+
* - Full payload sent to the device: `5B 00` (command) + 26-byte header +
|
|
107
|
+
* 7-byte body = 35 bytes, as a **feature** report.
|
|
108
|
+
*
|
|
109
|
+
* Multi-stop gradients, custom durations, repeat-off one-shot sequences, and
|
|
110
|
+
* button-triggered color changes are not implemented — documented here so
|
|
111
|
+
* nobody re-derives them, the same scope line `./aerox3.ts` draws around its
|
|
112
|
+
* button-mapping keyboard/multimedia name tables.
|
|
113
|
+
*/
|
|
114
|
+
export declare const STEELSERIES_RIVAL310_REPORT_ID = 0;
|
|
115
|
+
/** Two-byte command prefixes; the payload is the prefix plus its arguments. */
|
|
116
|
+
export declare const RIVAL310_COMMAND: {
|
|
117
|
+
readonly sensitivity1: readonly [83, 0, 1];
|
|
118
|
+
readonly sensitivity2: readonly [83, 0, 2];
|
|
119
|
+
readonly pollingRate: readonly [84, 0];
|
|
120
|
+
readonly ledColor: readonly [91, 0];
|
|
121
|
+
readonly buttonsMapping: readonly [49, 0];
|
|
122
|
+
readonly save: readonly [89, 0];
|
|
123
|
+
readonly firmware: readonly [144, 0];
|
|
124
|
+
};
|
|
125
|
+
export declare const RIVAL310_SAVE_COMMAND: readonly [89, 0];
|
|
126
|
+
export declare const RIVAL310_FIRMWARE_RESPONSE_LENGTH = 2;
|
|
127
|
+
export declare const RIVAL310_POLLING_RATES: readonly [125, 250, 500, 1000];
|
|
128
|
+
export declare const RIVAL310_DPI_MIN = 100;
|
|
129
|
+
export declare const RIVAL310_DPI_MAX = 12000;
|
|
130
|
+
export declare const RIVAL310_DPI_STEP = 100;
|
|
131
|
+
export declare class SteelSeriesRival310ProtocolError extends Error {
|
|
132
|
+
}
|
|
133
|
+
/** The 120 DPI values the linear encoding can express, ascending. */
|
|
134
|
+
export declare function steelseriesRival310DpiOptions(): number[];
|
|
135
|
+
/** `53 00 01 <byte> 00 42` — sensitivity preset 1. */
|
|
136
|
+
export declare function steelseriesRival310EncodeSensitivity1(dpi: number): Uint8Array;
|
|
137
|
+
/** `53 00 02 <byte> 00 42` — sensitivity preset 2. */
|
|
138
|
+
export declare function steelseriesRival310EncodeSensitivity2(dpi: number): Uint8Array;
|
|
139
|
+
/** `54 00 <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04. */
|
|
140
|
+
export declare function steelseriesRival310EncodePollingRate(pollingRateHz: number): Uint8Array;
|
|
141
|
+
/** `59 00` — commit the current settings to onboard flash. */
|
|
142
|
+
export declare function steelseriesRival310SaveCommand(): Uint8Array;
|
|
143
|
+
/** `90 00` — the device answers with a two-byte input report. */
|
|
144
|
+
export declare function steelseriesRival310FirmwareQuery(): Uint8Array;
|
|
145
|
+
export interface SteelSeriesRival310Firmware {
|
|
146
|
+
/** The two raw response bytes, in the order the device sent them. */
|
|
147
|
+
bytes: [number, number];
|
|
148
|
+
/** The bytes joined in read order, e.g. "37.0". */
|
|
149
|
+
display: string;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Decode the two-byte firmware response. As with `rival3.ts`'s `10 00`
|
|
153
|
+
* response, the byte order is not settled against hardware; `display`
|
|
154
|
+
* follows the same read-order convention until a real Rival 310 unit
|
|
155
|
+
* confirms which byte is major and which is minor.
|
|
156
|
+
*/
|
|
157
|
+
export declare function steelseriesRival310DecodeFirmware(payload: Uint8Array): SteelSeriesRival310Firmware;
|
|
158
|
+
export type Rival310Led = "logo" | "wheel";
|
|
159
|
+
/**
|
|
160
|
+
* `5B 00` (feature report) + 26-byte header + 7-byte body — sets one LED to
|
|
161
|
+
* a steady color. See the module doc comment's "RGB — deliberately reduced
|
|
162
|
+
* scope" section for the byte-by-byte derivation from rivalcfg's
|
|
163
|
+
* `rgbgradient` handler. This is a **feature** report, unlike every other
|
|
164
|
+
* command in this module.
|
|
165
|
+
*/
|
|
166
|
+
export declare function steelseriesRival310EncodeLedColor(led: Rival310Led, r: number, g: number, b: number): Uint8Array;
|
|
167
|
+
/** `buttons_mapping.buttons` from `rival310.py`, id + byte offset into the packet. */
|
|
168
|
+
export declare const RIVAL310_BUTTONS: {
|
|
169
|
+
readonly button1: {
|
|
170
|
+
readonly id: 1;
|
|
171
|
+
readonly offset: 0;
|
|
172
|
+
};
|
|
173
|
+
readonly button2: {
|
|
174
|
+
readonly id: 2;
|
|
175
|
+
readonly offset: 5;
|
|
176
|
+
};
|
|
177
|
+
readonly button3: {
|
|
178
|
+
readonly id: 3;
|
|
179
|
+
readonly offset: 10;
|
|
180
|
+
};
|
|
181
|
+
readonly button4: {
|
|
182
|
+
readonly id: 4;
|
|
183
|
+
readonly offset: 15;
|
|
184
|
+
};
|
|
185
|
+
readonly button5: {
|
|
186
|
+
readonly id: 5;
|
|
187
|
+
readonly offset: 20;
|
|
188
|
+
};
|
|
189
|
+
readonly button6: {
|
|
190
|
+
readonly id: 6;
|
|
191
|
+
readonly offset: 25;
|
|
192
|
+
};
|
|
193
|
+
};
|
|
194
|
+
export type Rival310ButtonName = keyof typeof RIVAL310_BUTTONS;
|
|
195
|
+
/**
|
|
196
|
+
* One button's target. Unlike `./aerox3.ts` (where `scrollUp`/`scrollDown`
|
|
197
|
+
* are physical button *sources* that cannot be remap targets), `rival310.py`
|
|
198
|
+
* has no scroll-wheel button slots at all — `button_scroll_up`/
|
|
199
|
+
* `button_scroll_down` are special *action* bytes any of the six buttons can
|
|
200
|
+
* be assigned, alongside `disabled`/`dpiSwitch`/another mouse button/a
|
|
201
|
+
* keyboard or multimedia key.
|
|
202
|
+
*/
|
|
203
|
+
export type Rival310ButtonAction = {
|
|
204
|
+
type: "button";
|
|
205
|
+
target: Rival310ButtonName;
|
|
206
|
+
} | {
|
|
207
|
+
type: "disabled";
|
|
208
|
+
} | {
|
|
209
|
+
type: "dpiSwitch";
|
|
210
|
+
} | {
|
|
211
|
+
type: "scrollUp";
|
|
212
|
+
} | {
|
|
213
|
+
type: "scrollDown";
|
|
214
|
+
} | {
|
|
215
|
+
type: "keyboard";
|
|
216
|
+
code: number;
|
|
217
|
+
} | {
|
|
218
|
+
type: "multimedia";
|
|
219
|
+
code: number;
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* `31 00` + one 30-byte (`6 buttons × 5-byte field length`) packet,
|
|
223
|
+
* zero-filled except where a mapping is given. Unmapped buttons are left as
|
|
224
|
+
* all-zero fields, same policy as `./aerox3.ts`: pass every button
|
|
225
|
+
* explicitly for parity with rivalcfg's default profile
|
|
226
|
+
* (`button1=button1; button2=button2; button3=button3; button4=button4;
|
|
227
|
+
* button5=button5; button6=dpi`).
|
|
228
|
+
*/
|
|
229
|
+
export declare function steelseriesRival310EncodeButtonsMapping(mapping: Partial<Record<Rival310ButtonName, Rival310ButtonAction>>): Uint8Array;
|
|
230
|
+
//# sourceMappingURL=rival310.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rival310.d.ts","sourceRoot":"","sources":["../../src/steelseries/rival310.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgHG;AAEH,eAAO,MAAM,8BAA8B,IAAO,CAAC;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB;;;;;;;;CAQnB,CAAC;AAKX,eAAO,MAAM,qBAAqB,kBAAwB,CAAC;AAC3D,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,eAAO,MAAM,sBAAsB,gCAAiC,CAAC;AASrE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,qBAAa,gCAAiC,SAAQ,KAAK;CAAG;AAwB9D,qEAAqE;AACrE,wBAAgB,6BAA6B,IAAI,MAAM,EAAE,CAMxD;AAED,sDAAsD;AACtD,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAE7E;AAED,sDAAsD;AACtD,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAE7E;AAED,gEAAgE;AAChE,wBAAgB,oCAAoC,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAMtF;AAED,8DAA8D;AAC9D,wBAAgB,8BAA8B,IAAI,UAAU,CAE3D;AAED,iEAAiE;AACjE,wBAAgB,gCAAgC,IAAI,UAAU,CAE7D;AAED,MAAM,WAAW,2BAA2B;IAC1C,qEAAqE;IACrE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,UAAU,GAAG,2BAA2B,CAMlG;AAID,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAoB3C;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAkB/G;AASD,sFAAsF;AACtF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;CAO0B,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAU/D;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAC9C;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;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,GACjE,UAAU,CA0DZ"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SteelSeries Rival 310 configuration protocol — pure encode/decode helpers.
|
|
3
|
+
*
|
|
4
|
+
* Reconstructed from public open-source implementations, not vendor software:
|
|
5
|
+
*
|
|
6
|
+
* - rivalcfg `rivalcfg/devices/rival310.py` — the primary source for every
|
|
7
|
+
* command byte, default, and PID here.
|
|
8
|
+
* - rivalcfg `rivalcfg/handlers/range.py` — the "range" handler used for both
|
|
9
|
+
* DPI presets: linear `input_range: [100, 12000, 100]` mapped onto
|
|
10
|
+
* `output_range: [0x00, 0x77, 1]`, i.e. a **plain one-byte linear encoding**
|
|
11
|
+
* (`byte = (dpi - 100) / 100`), not the TrueMove Core lookup table used by
|
|
12
|
+
* `./rival3.ts` and `./aerox3.ts`. The Rival 310 predates TrueMove Core
|
|
13
|
+
* (SteelSeries shipped it with the older PixArt PMW3360-derived "TrueMove3"
|
|
14
|
+
* sensor); rivalcfg encodes it as a bare range, so this module does too —
|
|
15
|
+
* no table is reused from the Rival 3 modules.
|
|
16
|
+
* - rivalcfg `rivalcfg/handlers/choice.py` — polling rate.
|
|
17
|
+
* - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
|
|
18
|
+
* field layout (5 bytes/button, zero-filled, `offset`/`id` per button,
|
|
19
|
+
* `<action byte>` then `<code byte>` for keyboard/multimedia targets).
|
|
20
|
+
* Byte-identical field mechanics to `./aerox3.ts`'s buttons handler, but a
|
|
21
|
+
* two-byte `31 00` command prefix (Rival 310) instead of one-byte `2A`
|
|
22
|
+
* (Aerox 3), and different id/offset/special-action values throughout.
|
|
23
|
+
* - rivalcfg `rivalcfg/handlers/rgbgradient.py` — LED color/effect encoding;
|
|
24
|
+
* see "RGB — deliberately reduced scope" below for what this module
|
|
25
|
+
* actually implements of it.
|
|
26
|
+
*
|
|
27
|
+
* ## Corroboration gap — explicitly flagged
|
|
28
|
+
*
|
|
29
|
+
* This module was **not** cross-checked against libratbag's
|
|
30
|
+
* `src/driver-steelseries.c` or against OpenRGB's SteelSeries controller
|
|
31
|
+
* files: both `github.com/libratbag/libratbag` and
|
|
32
|
+
* `github.com/openrgb/OpenRGB` were unreachable from this environment (no
|
|
33
|
+
* outbound network access beyond the pre-cloned `/tmp/rivalcfg` mirror), and
|
|
34
|
+
* no local clone of either was available to read instead. The task
|
|
35
|
+
* instructions called for checking libratbag "harder" for this device
|
|
36
|
+
* specifically, since the Rival 310 is old/popular enough to plausibly be
|
|
37
|
+
* supported there — that check could not be performed. Every byte in this
|
|
38
|
+
* module traces to rivalcfg alone. Treat the DPI range encoding, the button
|
|
39
|
+
* byte layout, and the RGB header/body layout as **rivalcfg-only claims,
|
|
40
|
+
* unverified against a second independent source**, until someone with
|
|
41
|
+
* network access (or a local libratbag/OpenRGB checkout) confirms or
|
|
42
|
+
* corrects them.
|
|
43
|
+
*
|
|
44
|
+
* Every command is an HID **output report** with report id 0x00 on the
|
|
45
|
+
* vendor configuration interface (hidapi `endpoint == 0`, per rivalcfg's
|
|
46
|
+
* `"endpoint": 0` model entries — note this differs from Rival 3 Gen 1's and
|
|
47
|
+
* Aerox 3's `endpoint: 3`; do not assume interface 3 for this device). The
|
|
48
|
+
* one exception is the RGB color commands, which rivalcfg sends as HID
|
|
49
|
+
* **feature** reports (`usbhid.HID_REPORT_TYPE_FEATURE`) — callers must route
|
|
50
|
+
* `steelseriesRival310EncodeLedColor`'s output through a feature-report send,
|
|
51
|
+
* not `sendReport`. The functions here build the report *payload* — the
|
|
52
|
+
* bytes after the report id — unpadded, matching rivalcfg's `usbhid.py`.
|
|
53
|
+
*
|
|
54
|
+
* **This device is write-only for settings**, like every other SteelSeries
|
|
55
|
+
* family in this package: rivalcfg defines no getter for DPI, polling,
|
|
56
|
+
* lighting, or buttons. The one readable value is the two-byte firmware
|
|
57
|
+
* version behind command `90 00` (`response_length: 2`, `report_type`
|
|
58
|
+
* output) — analogous to Rival 3 Gen 1's `10 00`, a different command byte.
|
|
59
|
+
*
|
|
60
|
+
* Settings apply immediately; the save command (`59 00`) commits them to
|
|
61
|
+
* onboard flash, matching rivalcfg's CLI default of saving after every write.
|
|
62
|
+
* None of this has been verified on physical Rival 310 hardware by this
|
|
63
|
+
* project.
|
|
64
|
+
*
|
|
65
|
+
* ## Product ids
|
|
66
|
+
*
|
|
67
|
+
* rivalcfg's `rival310.py` lists three colorway/bundle variants, all vendor
|
|
68
|
+
* `0x1038`, all sharing this exact command set (one profile, three `models`
|
|
69
|
+
* entries):
|
|
70
|
+
*
|
|
71
|
+
* - `0x1720` — SteelSeries Rival 310
|
|
72
|
+
* - `0x171E` — SteelSeries Rival 310 CS:GO Howl Edition
|
|
73
|
+
* - `0x1736` — SteelSeries Rival 310 PUBG Edition
|
|
74
|
+
*
|
|
75
|
+
* Checked against `./devices.ts` as it stood when this module was written:
|
|
76
|
+
* none of `0x1720`/`0x171E`/`0x1736` collided with any PID already claimed
|
|
77
|
+
* there (Rival 3 Gen 1 `0x1824`/`0x184C`, Aerox 3 `0x1836`, Rival 3 Wireless
|
|
78
|
+
* `0x1830`, Aerox 5 `0x1850`, Aerox 5 Wireless family `0x1852`/`0x1854`/
|
|
79
|
+
* `0x185C`/`0x185E`/`0x1860`/`0x1862`).
|
|
80
|
+
*
|
|
81
|
+
* ## RGB — deliberately reduced scope
|
|
82
|
+
*
|
|
83
|
+
* rivalcfg's `rgbgradient` handler supports up to 14 timed color stops with
|
|
84
|
+
* duration, repeat, and button-trigger fields — a small state machine. This
|
|
85
|
+
* module implements only the **single steady color** path through that
|
|
86
|
+
* handler (`is_gradient = False`, one color, `pos = 0`), which is what the
|
|
87
|
+
* handler itself produces for a plain color string or RGB tuple input (the
|
|
88
|
+
* common case; see `_handle_color_string`/`_handle_color_tuple` in
|
|
89
|
+
* `rgbgradient.py`). Traced byte-for-byte from `process_value`:
|
|
90
|
+
*
|
|
91
|
+
* - `header` is `header_length` (26) zero-filled bytes: `header[0]` = led id
|
|
92
|
+
* (`led_id_offsets: [0]`), `header[1..2]` = duration little-endian
|
|
93
|
+
* (`duration_offset: 1`, `duration_length: 2`; rivalcfg's default 1000 ms
|
|
94
|
+
* is used since a steady color does not animate), `header[17]` = repeat
|
|
95
|
+
* flag (`repeat_offset: 17`; **`0x01` for a steady, non-gradient color** —
|
|
96
|
+
* `process_value` sets `repeat = 0x01` whenever `is_gradient` is false),
|
|
97
|
+
* `header[21]` = triggers bitmask (`triggers_offset: 21`; always `0x00`
|
|
98
|
+
* here — trigger support is out of scope), `header[25]` = color count
|
|
99
|
+
* (`color_count_offset: 25`; always `1`).
|
|
100
|
+
* - `body` is the color repeated with a zero position delta:
|
|
101
|
+
* `[r, g, b, r, g, b, 0x00]` — `process_value`'s body starts as
|
|
102
|
+
* `list(gradient[0]["color"])` (first `r,g,b`), then its stop loop appends
|
|
103
|
+
* `merge_bytes(body, color, real_pos - last_real_pos)` for the same single
|
|
104
|
+
* stop, i.e. `color` again followed by the integer position delta (`0` for
|
|
105
|
+
* the only stop, at `pos = 0`) appended as its own trailing byte.
|
|
106
|
+
* - Full payload sent to the device: `5B 00` (command) + 26-byte header +
|
|
107
|
+
* 7-byte body = 35 bytes, as a **feature** report.
|
|
108
|
+
*
|
|
109
|
+
* Multi-stop gradients, custom durations, repeat-off one-shot sequences, and
|
|
110
|
+
* button-triggered color changes are not implemented — documented here so
|
|
111
|
+
* nobody re-derives them, the same scope line `./aerox3.ts` draws around its
|
|
112
|
+
* button-mapping keyboard/multimedia name tables.
|
|
113
|
+
*/
|
|
114
|
+
export const STEELSERIES_RIVAL310_REPORT_ID = 0x00;
|
|
115
|
+
/** Two-byte command prefixes; the payload is the prefix plus its arguments. */
|
|
116
|
+
export const RIVAL310_COMMAND = {
|
|
117
|
+
sensitivity1: [0x53, 0x00, 0x01],
|
|
118
|
+
sensitivity2: [0x53, 0x00, 0x02],
|
|
119
|
+
pollingRate: [0x54, 0x00],
|
|
120
|
+
ledColor: [0x5b, 0x00],
|
|
121
|
+
buttonsMapping: [0x31, 0x00],
|
|
122
|
+
save: [0x59, 0x00],
|
|
123
|
+
firmware: [0x90, 0x00],
|
|
124
|
+
};
|
|
125
|
+
/** `command_suffix` appended after the DPI byte for both sensitivity presets. */
|
|
126
|
+
const SENSITIVITY_SUFFIX = [0x00, 0x42];
|
|
127
|
+
export const RIVAL310_SAVE_COMMAND = [0x59, 0x00];
|
|
128
|
+
export const RIVAL310_FIRMWARE_RESPONSE_LENGTH = 2;
|
|
129
|
+
export const RIVAL310_POLLING_RATES = [125, 250, 500, 1000];
|
|
130
|
+
const POLLING_RATE_TO_BYTE = new Map([
|
|
131
|
+
[1000, 0x01],
|
|
132
|
+
[500, 0x02],
|
|
133
|
+
[250, 0x03],
|
|
134
|
+
[125, 0x04],
|
|
135
|
+
]);
|
|
136
|
+
export const RIVAL310_DPI_MIN = 100;
|
|
137
|
+
export const RIVAL310_DPI_MAX = 12000;
|
|
138
|
+
export const RIVAL310_DPI_STEP = 100;
|
|
139
|
+
export class SteelSeriesRival310ProtocolError extends Error {
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* `input_range: [100, 12000, 100]` -> `output_range: [0x00, 0x77, 1]`: a
|
|
143
|
+
* plain linear one-byte encoding, `byte = (dpi - 100) / 100`, range 0x00–0x77
|
|
144
|
+
* (119). Values must land exactly on a 100 DPI step; rivalcfg's `range`
|
|
145
|
+
* handler rounds off-grid input to the nearest step instead, but this codec
|
|
146
|
+
* rejects it, matching how the rest of this package validates DPI (see
|
|
147
|
+
* `rival3.ts`'s doc comment on the same choice).
|
|
148
|
+
*/
|
|
149
|
+
function encodeDpiByte(dpi) {
|
|
150
|
+
if (!Number.isInteger(dpi) ||
|
|
151
|
+
dpi < RIVAL310_DPI_MIN ||
|
|
152
|
+
dpi > RIVAL310_DPI_MAX ||
|
|
153
|
+
(dpi - RIVAL310_DPI_MIN) % RIVAL310_DPI_STEP !== 0) {
|
|
154
|
+
throw new SteelSeriesRival310ProtocolError(`SteelSeries Rival 310 DPI must be ${RIVAL310_DPI_MIN}–${RIVAL310_DPI_MAX.toLocaleString()} in ${RIVAL310_DPI_STEP} DPI steps.`);
|
|
155
|
+
}
|
|
156
|
+
return (dpi - RIVAL310_DPI_MIN) / RIVAL310_DPI_STEP;
|
|
157
|
+
}
|
|
158
|
+
/** The 120 DPI values the linear encoding can express, ascending. */
|
|
159
|
+
export function steelseriesRival310DpiOptions() {
|
|
160
|
+
const options = [];
|
|
161
|
+
for (let dpi = RIVAL310_DPI_MIN; dpi <= RIVAL310_DPI_MAX; dpi += RIVAL310_DPI_STEP) {
|
|
162
|
+
options.push(dpi);
|
|
163
|
+
}
|
|
164
|
+
return options;
|
|
165
|
+
}
|
|
166
|
+
/** `53 00 01 <byte> 00 42` — sensitivity preset 1. */
|
|
167
|
+
export function steelseriesRival310EncodeSensitivity1(dpi) {
|
|
168
|
+
return new Uint8Array([...RIVAL310_COMMAND.sensitivity1, encodeDpiByte(dpi), ...SENSITIVITY_SUFFIX]);
|
|
169
|
+
}
|
|
170
|
+
/** `53 00 02 <byte> 00 42` — sensitivity preset 2. */
|
|
171
|
+
export function steelseriesRival310EncodeSensitivity2(dpi) {
|
|
172
|
+
return new Uint8Array([...RIVAL310_COMMAND.sensitivity2, encodeDpiByte(dpi), ...SENSITIVITY_SUFFIX]);
|
|
173
|
+
}
|
|
174
|
+
/** `54 00 <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04. */
|
|
175
|
+
export function steelseriesRival310EncodePollingRate(pollingRateHz) {
|
|
176
|
+
const byte = POLLING_RATE_TO_BYTE.get(pollingRateHz);
|
|
177
|
+
if (byte === undefined) {
|
|
178
|
+
throw new SteelSeriesRival310ProtocolError("SteelSeries Rival 310 supports 125, 250, 500, or 1000 Hz polling.");
|
|
179
|
+
}
|
|
180
|
+
return new Uint8Array([...RIVAL310_COMMAND.pollingRate, byte]);
|
|
181
|
+
}
|
|
182
|
+
/** `59 00` — commit the current settings to onboard flash. */
|
|
183
|
+
export function steelseriesRival310SaveCommand() {
|
|
184
|
+
return new Uint8Array(RIVAL310_SAVE_COMMAND);
|
|
185
|
+
}
|
|
186
|
+
/** `90 00` — the device answers with a two-byte input report. */
|
|
187
|
+
export function steelseriesRival310FirmwareQuery() {
|
|
188
|
+
return new Uint8Array(RIVAL310_COMMAND.firmware);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Decode the two-byte firmware response. As with `rival3.ts`'s `10 00`
|
|
192
|
+
* response, the byte order is not settled against hardware; `display`
|
|
193
|
+
* follows the same read-order convention until a real Rival 310 unit
|
|
194
|
+
* confirms which byte is major and which is minor.
|
|
195
|
+
*/
|
|
196
|
+
export function steelseriesRival310DecodeFirmware(payload) {
|
|
197
|
+
if (payload.length < RIVAL310_FIRMWARE_RESPONSE_LENGTH) {
|
|
198
|
+
throw new SteelSeriesRival310ProtocolError("SteelSeries Rival 310 firmware response is shorter than two bytes.");
|
|
199
|
+
}
|
|
200
|
+
const bytes = [payload[0], payload[1]];
|
|
201
|
+
return { bytes, display: `${bytes[0]}.${bytes[1]}` };
|
|
202
|
+
}
|
|
203
|
+
const LED_ID = { logo: 0x00, wheel: 0x01 };
|
|
204
|
+
const RGBGRADIENT_HEADER_LENGTH = 26;
|
|
205
|
+
const RGBGRADIENT_DURATION_OFFSET = 1;
|
|
206
|
+
const RGBGRADIENT_REPEAT_OFFSET = 17;
|
|
207
|
+
const RGBGRADIENT_TRIGGERS_OFFSET = 21;
|
|
208
|
+
const RGBGRADIENT_COLOR_COUNT_OFFSET = 25;
|
|
209
|
+
const RGBGRADIENT_DEFAULT_DURATION_MS = 1000;
|
|
210
|
+
function encodeRgb(r, g, b) {
|
|
211
|
+
for (const channel of [r, g, b]) {
|
|
212
|
+
if (!Number.isInteger(channel) || channel < 0 || channel > 255) {
|
|
213
|
+
throw new SteelSeriesRival310ProtocolError("RGB channels must be integers 0–255.");
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return [r, g, b];
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* `5B 00` (feature report) + 26-byte header + 7-byte body — sets one LED to
|
|
220
|
+
* a steady color. See the module doc comment's "RGB — deliberately reduced
|
|
221
|
+
* scope" section for the byte-by-byte derivation from rivalcfg's
|
|
222
|
+
* `rgbgradient` handler. This is a **feature** report, unlike every other
|
|
223
|
+
* command in this module.
|
|
224
|
+
*/
|
|
225
|
+
export function steelseriesRival310EncodeLedColor(led, r, g, b) {
|
|
226
|
+
const [red, green, blue] = encodeRgb(r, g, b);
|
|
227
|
+
const ledId = LED_ID[led];
|
|
228
|
+
if (ledId === undefined) {
|
|
229
|
+
throw new SteelSeriesRival310ProtocolError('SteelSeries Rival 310 LEDs are "logo" and "wheel" only.');
|
|
230
|
+
}
|
|
231
|
+
const header = new Array(RGBGRADIENT_HEADER_LENGTH).fill(0x00);
|
|
232
|
+
header[0] = ledId;
|
|
233
|
+
header[RGBGRADIENT_DURATION_OFFSET] = RGBGRADIENT_DEFAULT_DURATION_MS & 0xff;
|
|
234
|
+
header[RGBGRADIENT_DURATION_OFFSET + 1] = (RGBGRADIENT_DEFAULT_DURATION_MS >> 8) & 0xff;
|
|
235
|
+
header[RGBGRADIENT_REPEAT_OFFSET] = 0x01;
|
|
236
|
+
header[RGBGRADIENT_TRIGGERS_OFFSET] = 0x00;
|
|
237
|
+
header[RGBGRADIENT_COLOR_COUNT_OFFSET] = 0x01;
|
|
238
|
+
const body = [red, green, blue, red, green, blue, 0x00];
|
|
239
|
+
return new Uint8Array([...RIVAL310_COMMAND.ledColor, ...header, ...body]);
|
|
240
|
+
}
|
|
241
|
+
/** `buttons_mapping.buttons` from `rival310.py`, id + byte offset into the packet. */
|
|
242
|
+
export const RIVAL310_BUTTONS = {
|
|
243
|
+
button1: { id: 0x01, offset: 0x00 },
|
|
244
|
+
button2: { id: 0x02, offset: 0x05 },
|
|
245
|
+
button3: { id: 0x03, offset: 0x0a },
|
|
246
|
+
button4: { id: 0x04, offset: 0x0f },
|
|
247
|
+
button5: { id: 0x05, offset: 0x14 },
|
|
248
|
+
button6: { id: 0x06, offset: 0x19 },
|
|
249
|
+
};
|
|
250
|
+
const RIVAL310_BUTTON_FIELD_LENGTH = 5;
|
|
251
|
+
const RIVAL310_BUTTON_DISABLE = 0x00;
|
|
252
|
+
const RIVAL310_BUTTON_KEYBOARD = 0x51;
|
|
253
|
+
const RIVAL310_BUTTON_MULTIMEDIA = 0x61;
|
|
254
|
+
const RIVAL310_BUTTON_DPI_SWITCH = 0x30;
|
|
255
|
+
const RIVAL310_BUTTON_SCROLL_UP = 0x31;
|
|
256
|
+
const RIVAL310_BUTTON_SCROLL_DOWN = 0x32;
|
|
257
|
+
/**
|
|
258
|
+
* `31 00` + one 30-byte (`6 buttons × 5-byte field length`) packet,
|
|
259
|
+
* zero-filled except where a mapping is given. Unmapped buttons are left as
|
|
260
|
+
* all-zero fields, same policy as `./aerox3.ts`: pass every button
|
|
261
|
+
* explicitly for parity with rivalcfg's default profile
|
|
262
|
+
* (`button1=button1; button2=button2; button3=button3; button4=button4;
|
|
263
|
+
* button5=button5; button6=dpi`).
|
|
264
|
+
*/
|
|
265
|
+
export function steelseriesRival310EncodeButtonsMapping(mapping) {
|
|
266
|
+
const names = Object.keys(RIVAL310_BUTTONS);
|
|
267
|
+
const packet = new Array(names.length * RIVAL310_BUTTON_FIELD_LENGTH).fill(0x00);
|
|
268
|
+
for (const [name, action] of Object.entries(mapping)) {
|
|
269
|
+
const slot = RIVAL310_BUTTONS[name];
|
|
270
|
+
if (!slot) {
|
|
271
|
+
throw new SteelSeriesRival310ProtocolError(`Unknown SteelSeries Rival 310 button "${name}".`);
|
|
272
|
+
}
|
|
273
|
+
const { offset } = slot;
|
|
274
|
+
switch (action.type) {
|
|
275
|
+
case "button": {
|
|
276
|
+
const target = RIVAL310_BUTTONS[action.target];
|
|
277
|
+
if (!target) {
|
|
278
|
+
throw new SteelSeriesRival310ProtocolError(`Unknown SteelSeries Rival 310 button "${action.target}".`);
|
|
279
|
+
}
|
|
280
|
+
packet[offset] = target.id;
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
case "disabled": {
|
|
284
|
+
packet[offset] = RIVAL310_BUTTON_DISABLE;
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case "dpiSwitch": {
|
|
288
|
+
packet[offset] = RIVAL310_BUTTON_DPI_SWITCH;
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
case "scrollUp": {
|
|
292
|
+
packet[offset] = RIVAL310_BUTTON_SCROLL_UP;
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
case "scrollDown": {
|
|
296
|
+
packet[offset] = RIVAL310_BUTTON_SCROLL_DOWN;
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
case "keyboard": {
|
|
300
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
301
|
+
throw new SteelSeriesRival310ProtocolError("Keyboard scan codes must be integers 0–255.");
|
|
302
|
+
}
|
|
303
|
+
packet[offset] = RIVAL310_BUTTON_KEYBOARD;
|
|
304
|
+
packet[offset + 1] = action.code;
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
case "multimedia": {
|
|
308
|
+
if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
|
|
309
|
+
throw new SteelSeriesRival310ProtocolError("Multimedia key codes must be integers 0–255.");
|
|
310
|
+
}
|
|
311
|
+
packet[offset] = RIVAL310_BUTTON_MULTIMEDIA;
|
|
312
|
+
packet[offset + 1] = action.code;
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
default: {
|
|
316
|
+
throw new SteelSeriesRival310ProtocolError("Unsupported SteelSeries Rival 310 button action.");
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return new Uint8Array([...RIVAL310_COMMAND.buttonsMapping, ...packet]);
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=rival310.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rival310.js","sourceRoot":"","sources":["../../src/steelseries/rival310.ts"],"names":[],"mappings":"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"}
|