@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,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure encoding rules of the Glorious Model O 2 / I 2 family (Pixart firmware,
|
|
3
|
+
* VID 0x093a). The configuration interface is write-only: the firmware accepts
|
|
4
|
+
* a 256-byte settings payload assembled from four 64-byte feature reports
|
|
5
|
+
* (report ID 0x03) on USB interface 1, but never echoes settings back.
|
|
6
|
+
* Reverse-engineered layout: https://github.com/zeppybabe/gloriousctl-linux.
|
|
7
|
+
*/
|
|
8
|
+
export const GLORIOUS_CONFIG_REPORT_ID = 0x03;
|
|
9
|
+
export const GLORIOUS_PACKET_LENGTH = 64;
|
|
10
|
+
const SETTINGS_FRAGMENTS = 4;
|
|
11
|
+
const SETTINGS_CMD = [0x04, 0xfb];
|
|
12
|
+
export const GLORIOUS_DPI_UNIT = 50;
|
|
13
|
+
export const GLORIOUS_DPI_MIN = 100;
|
|
14
|
+
export const GLORIOUS_DPI_MAX = 26000;
|
|
15
|
+
/** Payload byte [9]: 0x01(1k), 0x02(125), 0x03(250), 0x04(500). */
|
|
16
|
+
export const GLORIOUS_POLLING_RATES = [
|
|
17
|
+
[0x02, 125],
|
|
18
|
+
[0x03, 250],
|
|
19
|
+
[0x04, 500],
|
|
20
|
+
[0x01, 1000],
|
|
21
|
+
];
|
|
22
|
+
/** Payload byte [7]: 0x01 (1 mm) or 0x02 (2 mm); 0.7 mm is not exposed. */
|
|
23
|
+
export const GLORIOUS_LOD_MEDIUM_MM = 1;
|
|
24
|
+
export const GLORIOUS_LOD_HIGH_MM = 2;
|
|
25
|
+
/** Payload byte [8]: debounce in milliseconds, even numbers, 0x00-0x10. */
|
|
26
|
+
export const GLORIOUS_DEBOUNCE_MAX_MS = 16;
|
|
27
|
+
export const GLORIOUS_MAX_STAGES = 6;
|
|
28
|
+
/** Lighting payload (cmd 02 fb) RGB effect ids ([5]). */
|
|
29
|
+
export const GLORIOUS_RGB_EFFECTS = {
|
|
30
|
+
off: 0x00,
|
|
31
|
+
glorious: 0x01,
|
|
32
|
+
seamlessBreathing: 0x02,
|
|
33
|
+
breathing: 0x03,
|
|
34
|
+
normallyOn: 0x04,
|
|
35
|
+
breathingSingle: 0x05,
|
|
36
|
+
tail: 0x06,
|
|
37
|
+
rave: 0x07,
|
|
38
|
+
wave: 0x08,
|
|
39
|
+
};
|
|
40
|
+
export const GLORIOUS_EFFECT_OPTIONS = [
|
|
41
|
+
["glorious", "Glorious"],
|
|
42
|
+
["off", "LEDs off"],
|
|
43
|
+
["seamlessBreathing", "Seamless breathing"],
|
|
44
|
+
["breathing", "Breathing (rainbow)"],
|
|
45
|
+
["normallyOn", "Solid color"],
|
|
46
|
+
["breathingSingle", "Breathing (solid)"],
|
|
47
|
+
["tail", "Tail"],
|
|
48
|
+
["rave", "Rave"],
|
|
49
|
+
["wave", "Wave"],
|
|
50
|
+
];
|
|
51
|
+
/** Brightness ([6]/[7]) and speed ([9]) map onto five/four CORE levels. */
|
|
52
|
+
export const GLORIOUS_BRIGHTNESS_LEVELS = [0x00, 0x05, 0x0a, 0x0f, 0x14];
|
|
53
|
+
export const GLORIOUS_SPEED_LEVELS = [0x05, 0x0a, 0x0f, 0x14];
|
|
54
|
+
export const GLORIOUS_DEFAULT_LIGHTING = {
|
|
55
|
+
effect: GLORIOUS_RGB_EFFECTS.glorious,
|
|
56
|
+
brightnessWired: 0x14,
|
|
57
|
+
brightnessWireless: 0x14,
|
|
58
|
+
speed: 0x0a,
|
|
59
|
+
colors: ["#ff0000", "#ff7f00", "#ffff00", "#00ff00", "#0000ff", "#4b0082", "#9400d3"],
|
|
60
|
+
};
|
|
61
|
+
const LIGHTING_CMD = [0x02, 0xfb];
|
|
62
|
+
const LIGHTING_FRAGMENTS = 3;
|
|
63
|
+
const LIGHTING_MODIFIER = 0x14;
|
|
64
|
+
/** Number of palette slots an effect consumes ([8]): solid 1, rave 2, rainbow 7. */
|
|
65
|
+
export function gloriousLightingColorCount(effect) {
|
|
66
|
+
if (effect === GLORIOUS_RGB_EFFECTS.rave)
|
|
67
|
+
return 2;
|
|
68
|
+
if (effect === GLORIOUS_RGB_EFFECTS.off
|
|
69
|
+
|| effect === GLORIOUS_RGB_EFFECTS.normallyOn
|
|
70
|
+
|| effect === GLORIOUS_RGB_EFFECTS.breathingSingle)
|
|
71
|
+
return 1;
|
|
72
|
+
return 7;
|
|
73
|
+
}
|
|
74
|
+
function hexToRgb(hex) {
|
|
75
|
+
return [
|
|
76
|
+
parseInt(hex.slice(1, 3), 16) || 0,
|
|
77
|
+
parseInt(hex.slice(3, 5), 16) || 0,
|
|
78
|
+
parseInt(hex.slice(5, 7), 16) || 0,
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Builds the three 64-byte feature-report fragments of the lighting payload:
|
|
83
|
+
* fragment 0 carries effect, wireless/wired brightness, color count, speed,
|
|
84
|
+
* modifier, and the primary color; fragment 1 echoes the effect and holds the
|
|
85
|
+
* six-cycle palette; fragment 2 echoes the effect again.
|
|
86
|
+
*/
|
|
87
|
+
export function buildGloriousLightingPayload(lighting) {
|
|
88
|
+
const fragments = Array.from({ length: LIGHTING_FRAGMENTS }, () => new Uint8Array(GLORIOUS_PACKET_LENGTH));
|
|
89
|
+
fragments.forEach((fragment, index) => {
|
|
90
|
+
fragment[0] = GLORIOUS_CONFIG_REPORT_ID;
|
|
91
|
+
fragment[1] = LIGHTING_CMD[0];
|
|
92
|
+
fragment[2] = LIGHTING_CMD[1];
|
|
93
|
+
fragment[3] = index;
|
|
94
|
+
fragment[4] = 0x01;
|
|
95
|
+
});
|
|
96
|
+
const first = fragments[0];
|
|
97
|
+
first[5] = lighting.effect;
|
|
98
|
+
first[6] = lighting.brightnessWireless;
|
|
99
|
+
first[7] = lighting.brightnessWired;
|
|
100
|
+
first[8] = gloriousLightingColorCount(lighting.effect);
|
|
101
|
+
first[9] = lighting.speed;
|
|
102
|
+
first[10] = LIGHTING_MODIFIER;
|
|
103
|
+
first.set(hexToRgb(lighting.colors[0] ?? GLORIOUS_DEFAULT_LIGHTING.colors[0]), 11);
|
|
104
|
+
const second = fragments[1];
|
|
105
|
+
second[5] = lighting.effect;
|
|
106
|
+
for (let index = 1; index <= 6; index += 1) {
|
|
107
|
+
second.set(hexToRgb(lighting.colors[index] ?? "#000000"), 3 + index * 3);
|
|
108
|
+
}
|
|
109
|
+
fragments[2][5] = lighting.effect;
|
|
110
|
+
return fragments;
|
|
111
|
+
}
|
|
112
|
+
/** Repairs untrusted persisted lighting state into a payload-safe object. */
|
|
113
|
+
export function gloriousNormalizeLighting(value) {
|
|
114
|
+
const parsed = typeof value === "object" && value !== null ? value : {};
|
|
115
|
+
const validEffects = new Set(Object.values(GLORIOUS_RGB_EFFECTS));
|
|
116
|
+
const nearestLevel = (levels, candidate) => {
|
|
117
|
+
if (typeof candidate !== "number")
|
|
118
|
+
return levels.at(-1);
|
|
119
|
+
return levels.reduce((best, level) => Math.abs(level - candidate) < Math.abs(best - candidate) ? level : best);
|
|
120
|
+
};
|
|
121
|
+
const colorPattern = /^#[0-9a-f]{6}$/i;
|
|
122
|
+
return {
|
|
123
|
+
effect: validEffects.has(Number(parsed.effect)) ? Number(parsed.effect) : GLORIOUS_DEFAULT_LIGHTING.effect,
|
|
124
|
+
brightnessWired: nearestLevel(GLORIOUS_BRIGHTNESS_LEVELS, parsed.brightnessWired),
|
|
125
|
+
brightnessWireless: nearestLevel(GLORIOUS_BRIGHTNESS_LEVELS, parsed.brightnessWireless),
|
|
126
|
+
speed: nearestLevel(GLORIOUS_SPEED_LEVELS, parsed.speed),
|
|
127
|
+
colors: GLORIOUS_DEFAULT_LIGHTING.colors.map((fallback, index) => {
|
|
128
|
+
const stored = Array.isArray(parsed.colors) ? parsed.colors[index] : undefined;
|
|
129
|
+
return typeof stored === "string" && colorPattern.test(stored) ? stored.toLowerCase() : fallback;
|
|
130
|
+
}),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/** Factory per-stage indicator colors (red, blue, green, yellow), then unset. */
|
|
134
|
+
export const GLORIOUS_DEFAULT_STAGE_COLORS = [
|
|
135
|
+
"#ff0000",
|
|
136
|
+
"#0000ff",
|
|
137
|
+
"#00ff00",
|
|
138
|
+
"#ffff00",
|
|
139
|
+
"#000000",
|
|
140
|
+
"#000000",
|
|
141
|
+
];
|
|
142
|
+
export const GLORIOUS_DEFAULT_SETTINGS = {
|
|
143
|
+
activeStage: 0,
|
|
144
|
+
stageCount: 4,
|
|
145
|
+
stageDpis: [400, 800, 1600, 3200, 0, 0],
|
|
146
|
+
stageColors: [...GLORIOUS_DEFAULT_STAGE_COLORS],
|
|
147
|
+
lodMm: GLORIOUS_LOD_MEDIUM_MM,
|
|
148
|
+
debounceMs: 10,
|
|
149
|
+
pollingCode: 0x01,
|
|
150
|
+
};
|
|
151
|
+
// Stage 1 lives in fragment 0 after the global bytes; stages 2-3 share
|
|
152
|
+
// fragment 1, stages 4-5 fragment 2, and stage 6 fragment 3.
|
|
153
|
+
const STAGE_OFFSETS = [
|
|
154
|
+
[0, 11],
|
|
155
|
+
[1, 5],
|
|
156
|
+
[1, 10],
|
|
157
|
+
[2, 5],
|
|
158
|
+
[2, 10],
|
|
159
|
+
[3, 5],
|
|
160
|
+
];
|
|
161
|
+
export function gloriousEncodeDpi(dpi) {
|
|
162
|
+
return Math.round(dpi / GLORIOUS_DPI_UNIT);
|
|
163
|
+
}
|
|
164
|
+
export function gloriousIsSupportedDpi(dpi) {
|
|
165
|
+
return Number.isInteger(dpi)
|
|
166
|
+
&& dpi >= GLORIOUS_DPI_MIN
|
|
167
|
+
&& dpi <= GLORIOUS_DPI_MAX
|
|
168
|
+
&& dpi % GLORIOUS_DPI_UNIT === 0;
|
|
169
|
+
}
|
|
170
|
+
export function gloriousEncodePolling(hertz) {
|
|
171
|
+
return GLORIOUS_POLLING_RATES.find(([, value]) => value === hertz)?.[0] ?? null;
|
|
172
|
+
}
|
|
173
|
+
export function gloriousDecodePolling(code) {
|
|
174
|
+
return GLORIOUS_POLLING_RATES.find(([value]) => value === code)?.[1] ?? null;
|
|
175
|
+
}
|
|
176
|
+
export function gloriousSanitizeDebounce(milliseconds) {
|
|
177
|
+
const clamped = Math.min(Math.max(Math.round(milliseconds), 0), GLORIOUS_DEBOUNCE_MAX_MS);
|
|
178
|
+
return clamped % 2 === 0 ? clamped : clamped - 1;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Builds the four 64-byte feature-report fragments of the settings payload:
|
|
182
|
+
* header (report ID 0x03, cmd 04 fb, sequence, pad 0x01), then the global
|
|
183
|
+
* bytes ([5] active stage, [6] total stages, [7] LOD, [8] debounce, [9]
|
|
184
|
+
* polling) followed by little-endian DPI u16 divided by 50 plus RGB per stage.
|
|
185
|
+
*/
|
|
186
|
+
export function buildGloriousSettingsPayload(settings) {
|
|
187
|
+
const fragments = Array.from({ length: SETTINGS_FRAGMENTS }, () => new Uint8Array(GLORIOUS_PACKET_LENGTH));
|
|
188
|
+
fragments.forEach((fragment, index) => {
|
|
189
|
+
fragment[0] = GLORIOUS_CONFIG_REPORT_ID;
|
|
190
|
+
fragment[1] = SETTINGS_CMD[0];
|
|
191
|
+
fragment[2] = SETTINGS_CMD[1];
|
|
192
|
+
fragment[3] = index;
|
|
193
|
+
fragment[4] = 0x01;
|
|
194
|
+
});
|
|
195
|
+
const first = fragments[0];
|
|
196
|
+
first[5] = settings.activeStage;
|
|
197
|
+
first[6] = settings.stageCount;
|
|
198
|
+
first[7] = settings.lodMm;
|
|
199
|
+
first[8] = settings.debounceMs;
|
|
200
|
+
first[9] = settings.pollingCode;
|
|
201
|
+
first[10] = 0x00;
|
|
202
|
+
STAGE_OFFSETS.forEach(([fragmentIndex, offset], stageIndex) => {
|
|
203
|
+
const encoded = gloriousEncodeDpi(settings.stageDpis[stageIndex] ?? 0);
|
|
204
|
+
const fragment = fragments[fragmentIndex];
|
|
205
|
+
fragment[offset] = encoded & 0xff;
|
|
206
|
+
fragment[offset + 1] = encoded >> 8 & 0xff;
|
|
207
|
+
fragment.set(hexToRgb(settings.stageColors?.[stageIndex] ?? GLORIOUS_DEFAULT_STAGE_COLORS[stageIndex]), offset + 2);
|
|
208
|
+
});
|
|
209
|
+
return fragments;
|
|
210
|
+
}
|
|
211
|
+
/** Repairs untrusted persisted state into a payload-safe settings object. */
|
|
212
|
+
export function gloriousNormalizeSettings(value) {
|
|
213
|
+
const parsed = typeof value === "object" && value !== null ? value : {};
|
|
214
|
+
const stageDpis = GLORIOUS_DEFAULT_SETTINGS.stageDpis.map((fallback, index) => {
|
|
215
|
+
const stored = Array.isArray(parsed.stageDpis) ? parsed.stageDpis[index] : undefined;
|
|
216
|
+
return typeof stored === "number" && gloriousIsSupportedDpi(stored) ? stored : fallback;
|
|
217
|
+
});
|
|
218
|
+
const pollingCode = Number(parsed.pollingCode);
|
|
219
|
+
const colorPattern = /^#[0-9a-f]{6}$/i;
|
|
220
|
+
return {
|
|
221
|
+
activeStage: sanitizeIndex(parsed.activeStage),
|
|
222
|
+
stageCount: Math.min(Math.max(sanitizeIndex(parsed.stageCount, GLORIOUS_MAX_STAGES), GLORIOUS_DEFAULT_SETTINGS.stageCount), GLORIOUS_MAX_STAGES),
|
|
223
|
+
stageDpis,
|
|
224
|
+
stageColors: GLORIOUS_DEFAULT_STAGE_COLORS.map((fallback, index) => {
|
|
225
|
+
const stored = Array.isArray(parsed.stageColors) ? parsed.stageColors[index] : undefined;
|
|
226
|
+
return typeof stored === "string" && colorPattern.test(stored) ? stored.toLowerCase() : fallback;
|
|
227
|
+
}),
|
|
228
|
+
lodMm: parsed.lodMm === GLORIOUS_LOD_HIGH_MM ? GLORIOUS_LOD_HIGH_MM : GLORIOUS_LOD_MEDIUM_MM,
|
|
229
|
+
debounceMs: gloriousSanitizeDebounce(typeof parsed.debounceMs === "number" ? parsed.debounceMs : GLORIOUS_DEFAULT_SETTINGS.debounceMs),
|
|
230
|
+
pollingCode: gloriousDecodePolling(pollingCode) ? pollingCode : GLORIOUS_DEFAULT_SETTINGS.pollingCode,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
function sanitizeIndex(value, max = GLORIOUS_MAX_STAGES - 1) {
|
|
234
|
+
return typeof value === "number" && Number.isInteger(value) && value >= 0 && value <= max ? value : 0;
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/glorious/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure encoding rules for Glorious's "classic" HID feature-report protocol,
|
|
3
|
+
* used by the pre-Pixart Model O / Model D / Model I lines (VIDs 0x258a,
|
|
4
|
+
* 0x22d4, 0x320f, 0x3794) — the same wire format the official Windows
|
|
5
|
+
* software, and community tools glorious-ctl and mxw, use. Distinct from the
|
|
6
|
+
* Pixart Model O 2 / I 2 protocol in ../glorious/index.ts, which is
|
|
7
|
+
* write-only in a different way and has a different report layout.
|
|
8
|
+
*
|
|
9
|
+
* RGB, debounce, and battery are reverse-engineered from
|
|
10
|
+
* https://github.com/louis4craft/glorious-ctl (mouse.py). DPI, polling rate,
|
|
11
|
+
* and lift-off distance are reverse-engineered from
|
|
12
|
+
* https://github.com/korkje/mxw (Rust; src/config/*.rs). Neither tool reads
|
|
13
|
+
* DPI/polling/LOD back from the mouse — both are write-only for those three,
|
|
14
|
+
* so this module is too; the driver keeps its own cache of the last-applied
|
|
15
|
+
* values (see ../drivers/glorious/classic-hid.ts).
|
|
16
|
+
*
|
|
17
|
+
* Reports are unnumbered 64-byte feature reports (report id 0). Both source
|
|
18
|
+
* tools build a 65-byte buffer with byte [0] as the hidapi report-id slot
|
|
19
|
+
* (always 0) followed by the 64-byte body; WebHID takes the report id
|
|
20
|
+
* separately, so every offset below is the source's buffer index minus 1.
|
|
21
|
+
* `bfr()` documents that shift at each call site with the source's own index.
|
|
22
|
+
*/
|
|
23
|
+
export declare const GLORIOUS_CLASSIC_REPORT_ID = 0;
|
|
24
|
+
export declare const GLORIOUS_CLASSIC_PACKET_LENGTH = 64;
|
|
25
|
+
export declare const GLORIOUS_CLASSIC_PROFILE_DEFAULT = 1;
|
|
26
|
+
export declare const GLORIOUS_CLASSIC_DEBOUNCE_MAX_MS = 32;
|
|
27
|
+
export type GloriousClassicRgbEffect = "off" | "glorious" | "cycle" | "pulse" | "solid" | "pulseOne" | "tail" | "rave" | "wave";
|
|
28
|
+
export declare const GLORIOUS_CLASSIC_RGB_EFFECT_OPTIONS: ReadonlyArray<readonly [GloriousClassicRgbEffect, string]>;
|
|
29
|
+
export interface GloriousClassicRgb {
|
|
30
|
+
effect: GloriousClassicRgbEffect;
|
|
31
|
+
/** 0-100, ignored by effects that don't take a rate. */
|
|
32
|
+
rate: number;
|
|
33
|
+
/** "#rrggbb" strings, meaning depends on effect (see buildGloriousClassicRgbPayload). */
|
|
34
|
+
colors: string[];
|
|
35
|
+
profileId?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare const GLORIOUS_CLASSIC_DEFAULT_RGB: GloriousClassicRgb;
|
|
38
|
+
/**
|
|
39
|
+
* `rate_check()` from mouse.py: 0-100 input, clamped, mapped onto the
|
|
40
|
+
* hardware's inverted byte scale. Effects 7/8 (rave/wave) use a finer step.
|
|
41
|
+
*/
|
|
42
|
+
export declare function gloriousClassicRateByte(rate: number, effect: GloriousClassicRgbEffect): number;
|
|
43
|
+
/**
|
|
44
|
+
* Builds the single 64-byte feature-report body for an RGB write. Mirrors
|
|
45
|
+
* `set_rgb()` in mouse.py exactly, including its per-effect payload length
|
|
46
|
+
* and color-slot layout:
|
|
47
|
+
* bfr[3]=0x02 (class), bfr[4]=<length, effect-dependent>, bfr[5]=0x02,
|
|
48
|
+
* bfr[7]=profile, bfr[8]=0xFF, bfr[9]=<effect id>, bfr[11]=<rate>,
|
|
49
|
+
* bfr[12..]=color triplets.
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildGloriousClassicRgbPayload(rgb: GloriousClassicRgb): Uint8Array<ArrayBuffer>;
|
|
52
|
+
export declare function buildGloriousClassicDebouncePayload(milliseconds: number, profileId?: number): Uint8Array<ArrayBuffer>;
|
|
53
|
+
export declare function buildGloriousClassicBatteryRequestPayload(): Uint8Array<ArrayBuffer>;
|
|
54
|
+
export type GloriousClassicBatteryState = "Normal" | "Asleep" | "WakingUp" | "Unknown";
|
|
55
|
+
export interface GloriousClassicBattery {
|
|
56
|
+
state: GloriousClassicBatteryState;
|
|
57
|
+
/** 1-100, or null when the state has no meaningful percentage. */
|
|
58
|
+
percent: number | null;
|
|
59
|
+
/**
|
|
60
|
+
* bfr[7], independently confirmed by a second, unrelated implementation
|
|
61
|
+
* (AwesomeTy18/GloriousBatteryMonitor's MouseV2ProBatteryChecker.cs, C#)
|
|
62
|
+
* that reads this same command's response for the whole 0x258a device
|
|
63
|
+
* range (both core1 and core2/"V2 Pro" generations) — `inputReport[7] == 1`
|
|
64
|
+
* there is this same byte, byte-for-byte.
|
|
65
|
+
*/
|
|
66
|
+
charging: boolean;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Mirrors `get_battery_status()`'s response parsing. `body` is the 64-byte
|
|
70
|
+
* feature-report body (bfr[1] is body[0], i.e. `bfr[n]` is `body[n-1]`).
|
|
71
|
+
*/
|
|
72
|
+
export declare function parseGloriousClassicBatteryResponse(body: Uint8Array): GloriousClassicBattery;
|
|
73
|
+
export declare const GLORIOUS_CLASSIC_DPI_MIN = 100;
|
|
74
|
+
export declare const GLORIOUS_CLASSIC_DPI_MAX = 19000;
|
|
75
|
+
export declare const GLORIOUS_CLASSIC_DPI_STAGE_COUNT = 4;
|
|
76
|
+
/**
|
|
77
|
+
* DPI stages (mxw src/config/dpi_stages.rs): bfr[3]=0x02, bfr[4]=0x12,
|
|
78
|
+
* bfr[5]=0x01, bfr[6]=0x01, bfr[7]=profile, bfr[8]=stage count, then per
|
|
79
|
+
* stage a 4-byte big-endian u16 value written twice (X and Y, always equal
|
|
80
|
+
* in mxw): bfr[9+4i]=hi, bfr[10+4i]=lo, bfr[11+4i]=hi, bfr[12+4i]=lo.
|
|
81
|
+
*/
|
|
82
|
+
export declare function buildGloriousClassicDpiStagesPayload(stages: readonly number[], profileId?: number): Uint8Array<ArrayBuffer>;
|
|
83
|
+
/** Active DPI stage (mxw src/config/dpi_stage.rs), stageId is 1-based (1-4). */
|
|
84
|
+
export declare function buildGloriousClassicActiveStagePayload(stageId: number, profileId?: number): Uint8Array<ArrayBuffer>;
|
|
85
|
+
/**
|
|
86
|
+
* Polling rate (mxw src/config/polling_rate.rs): bfr[3]=0x02, bfr[4]=0x01,
|
|
87
|
+
* bfr[5]=0x01, bfr[7]=poll interval in milliseconds. mxw only offers
|
|
88
|
+
* {1,2,4,8} ms, i.e. {1000,500,250,125} Hz — this generation has no 2K/4K/8K
|
|
89
|
+
* mode.
|
|
90
|
+
*/
|
|
91
|
+
export declare const GLORIOUS_CLASSIC_POLLING_RATES: ReadonlyArray<readonly [ms: number, hertz: number]>;
|
|
92
|
+
export declare function gloriousClassicEncodePollingRate(hertz: number): number | null;
|
|
93
|
+
export declare function gloriousClassicDecodePollingRate(ms: number): number | null;
|
|
94
|
+
export declare function buildGloriousClassicPollingRatePayload(intervalMs: number): Uint8Array<ArrayBuffer>;
|
|
95
|
+
/**
|
|
96
|
+
* Lift-off distance (mxw src/config/lift_off.rs): bfr[3]=0x02, bfr[4]=0x01,
|
|
97
|
+
* bfr[5]=0x01, bfr[6]=0x07, bfr[7]=millimetres-1 (0=1mm, 1=2mm — only those
|
|
98
|
+
* two are valid on this generation).
|
|
99
|
+
*/
|
|
100
|
+
export declare const GLORIOUS_CLASSIC_LOD_MEDIUM_MM = 1;
|
|
101
|
+
export declare const GLORIOUS_CLASSIC_LOD_HIGH_MM = 2;
|
|
102
|
+
export declare function buildGloriousClassicLiftOffPayload(millimetres: number): Uint8Array<ArrayBuffer>;
|
|
103
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/glorious-classic/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAkBnD,MAAM,MAAM,wBAAwB,GAChC,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAc7F,eAAO,MAAM,mCAAmC,EAAE,aAAa,CAAC,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAU1G,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,wBAAwB,CAAC;IACjC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,4BAA4B,EAAE,kBAK1C,CAAC;AAYF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAM9F;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,kBAAkB,GAAG,UAAU,CAAC,WAAW,CAAC,CA4E/F;AAOD,wBAAgB,mCAAmC,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,SAAmC,GAAG,UAAU,CAAC,WAAW,CAAC,CAS/I;AAOD,wBAAgB,yCAAyC,IAAI,UAAU,CAAC,WAAW,CAAC,CAMnF;AAED,MAAM,MAAM,2BAA2B,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAEvF,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,2BAA2B,CAAC;IACnC,kEAAkE;IAClE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAWD;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,UAAU,GAAG,sBAAsB,CAa5F;AAQD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAC9C,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,SAAS,SAAmC,GAC3C,UAAU,CAAC,WAAW,CAAC,CAmBzB;AAED,gFAAgF;AAChF,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,MAAM,EACf,SAAS,SAAmC,GAC3C,UAAU,CAAC,WAAW,CAAC,CASzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAK9F,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,sCAAsC,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAOlG;AAED;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAQ/F"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure encoding rules for Glorious's "classic" HID feature-report protocol,
|
|
3
|
+
* used by the pre-Pixart Model O / Model D / Model I lines (VIDs 0x258a,
|
|
4
|
+
* 0x22d4, 0x320f, 0x3794) — the same wire format the official Windows
|
|
5
|
+
* software, and community tools glorious-ctl and mxw, use. Distinct from the
|
|
6
|
+
* Pixart Model O 2 / I 2 protocol in ../glorious/index.ts, which is
|
|
7
|
+
* write-only in a different way and has a different report layout.
|
|
8
|
+
*
|
|
9
|
+
* RGB, debounce, and battery are reverse-engineered from
|
|
10
|
+
* https://github.com/louis4craft/glorious-ctl (mouse.py). DPI, polling rate,
|
|
11
|
+
* and lift-off distance are reverse-engineered from
|
|
12
|
+
* https://github.com/korkje/mxw (Rust; src/config/*.rs). Neither tool reads
|
|
13
|
+
* DPI/polling/LOD back from the mouse — both are write-only for those three,
|
|
14
|
+
* so this module is too; the driver keeps its own cache of the last-applied
|
|
15
|
+
* values (see ../drivers/glorious/classic-hid.ts).
|
|
16
|
+
*
|
|
17
|
+
* Reports are unnumbered 64-byte feature reports (report id 0). Both source
|
|
18
|
+
* tools build a 65-byte buffer with byte [0] as the hidapi report-id slot
|
|
19
|
+
* (always 0) followed by the 64-byte body; WebHID takes the report id
|
|
20
|
+
* separately, so every offset below is the source's buffer index minus 1.
|
|
21
|
+
* `bfr()` documents that shift at each call site with the source's own index.
|
|
22
|
+
*/
|
|
23
|
+
export const GLORIOUS_CLASSIC_REPORT_ID = 0;
|
|
24
|
+
export const GLORIOUS_CLASSIC_PACKET_LENGTH = 64;
|
|
25
|
+
export const GLORIOUS_CLASSIC_PROFILE_DEFAULT = 1;
|
|
26
|
+
export const GLORIOUS_CLASSIC_DEBOUNCE_MAX_MS = 32;
|
|
27
|
+
function packet() {
|
|
28
|
+
return new Uint8Array(GLORIOUS_CLASSIC_PACKET_LENGTH);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sets `body[bufferIndex - 1]`, i.e. the byte the source (mouse.py / mxw)
|
|
32
|
+
* calls `bfr[bufferIndex]` in its 65-byte, report-id-prefixed buffer.
|
|
33
|
+
*/
|
|
34
|
+
function bfr(body, bufferIndex, value) {
|
|
35
|
+
body[bufferIndex - 1] = value & 0xff;
|
|
36
|
+
}
|
|
37
|
+
const EFFECT_IDS = {
|
|
38
|
+
off: 0x00,
|
|
39
|
+
glorious: 0x01,
|
|
40
|
+
cycle: 0x02,
|
|
41
|
+
pulse: 0x03,
|
|
42
|
+
solid: 0x04,
|
|
43
|
+
pulseOne: 0x05,
|
|
44
|
+
tail: 0x06,
|
|
45
|
+
rave: 0x07,
|
|
46
|
+
wave: 0x08,
|
|
47
|
+
};
|
|
48
|
+
export const GLORIOUS_CLASSIC_RGB_EFFECT_OPTIONS = [
|
|
49
|
+
["glorious", "Glorious"],
|
|
50
|
+
["off", "LEDs off"],
|
|
51
|
+
["cycle", "Cycle"],
|
|
52
|
+
["pulse", "Pulse"],
|
|
53
|
+
["solid", "Solid color"],
|
|
54
|
+
["pulseOne", "Pulse (solid)"],
|
|
55
|
+
["tail", "Tail"],
|
|
56
|
+
["rave", "Rave"],
|
|
57
|
+
["wave", "Wave"],
|
|
58
|
+
];
|
|
59
|
+
export const GLORIOUS_CLASSIC_DEFAULT_RGB = {
|
|
60
|
+
effect: "glorious",
|
|
61
|
+
rate: 50,
|
|
62
|
+
colors: ["#ff0000"],
|
|
63
|
+
profileId: GLORIOUS_CLASSIC_PROFILE_DEFAULT,
|
|
64
|
+
};
|
|
65
|
+
function hexToRgb(hex) {
|
|
66
|
+
const match = /^#?([0-9a-f]{6})$/i.exec(hex.trim());
|
|
67
|
+
const value = match ? match[1] : "ff0000";
|
|
68
|
+
return [
|
|
69
|
+
Number.parseInt(value.slice(0, 2), 16),
|
|
70
|
+
Number.parseInt(value.slice(2, 4), 16),
|
|
71
|
+
Number.parseInt(value.slice(4, 6), 16),
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* `rate_check()` from mouse.py: 0-100 input, clamped, mapped onto the
|
|
76
|
+
* hardware's inverted byte scale. Effects 7/8 (rave/wave) use a finer step.
|
|
77
|
+
*/
|
|
78
|
+
export function gloriousClassicRateByte(rate, effect) {
|
|
79
|
+
const clamped = Math.max(0, Math.min(100, Math.round(rate)));
|
|
80
|
+
const id = EFFECT_IDS[effect];
|
|
81
|
+
return id === EFFECT_IDS.rave || id === EFFECT_IDS.wave
|
|
82
|
+
? (105 - clamped) * 2
|
|
83
|
+
: Math.floor((105 - clamped) / 5);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Builds the single 64-byte feature-report body for an RGB write. Mirrors
|
|
87
|
+
* `set_rgb()` in mouse.py exactly, including its per-effect payload length
|
|
88
|
+
* and color-slot layout:
|
|
89
|
+
* bfr[3]=0x02 (class), bfr[4]=<length, effect-dependent>, bfr[5]=0x02,
|
|
90
|
+
* bfr[7]=profile, bfr[8]=0xFF, bfr[9]=<effect id>, bfr[11]=<rate>,
|
|
91
|
+
* bfr[12..]=color triplets.
|
|
92
|
+
*/
|
|
93
|
+
export function buildGloriousClassicRgbPayload(rgb) {
|
|
94
|
+
const body = packet();
|
|
95
|
+
const profileId = rgb.profileId ?? GLORIOUS_CLASSIC_PROFILE_DEFAULT;
|
|
96
|
+
const id = EFFECT_IDS[rgb.effect];
|
|
97
|
+
const rateByte = gloriousClassicRateByte(rgb.rate, rgb.effect);
|
|
98
|
+
const rgbColors = rgb.colors.map(hexToRgb);
|
|
99
|
+
bfr(body, 3, 0x02);
|
|
100
|
+
bfr(body, 5, 0x02);
|
|
101
|
+
bfr(body, 7, profileId);
|
|
102
|
+
bfr(body, 8, 0xff);
|
|
103
|
+
bfr(body, 9, id);
|
|
104
|
+
switch (rgb.effect) {
|
|
105
|
+
case "off":
|
|
106
|
+
bfr(body, 4, 0x05);
|
|
107
|
+
break;
|
|
108
|
+
case "glorious":
|
|
109
|
+
bfr(body, 4, 0x05);
|
|
110
|
+
bfr(body, 11, rateByte);
|
|
111
|
+
break;
|
|
112
|
+
case "cycle":
|
|
113
|
+
bfr(body, 4, 0x05);
|
|
114
|
+
bfr(body, 11, rateByte);
|
|
115
|
+
bfr(body, 12, 0xff);
|
|
116
|
+
break;
|
|
117
|
+
case "pulse": {
|
|
118
|
+
const colors = rgbColors.slice(0, 6);
|
|
119
|
+
bfr(body, 4, colors.length * 3 + 5);
|
|
120
|
+
bfr(body, 11, rateByte);
|
|
121
|
+
colors.forEach(([r, g, b], index) => {
|
|
122
|
+
bfr(body, 12 + index * 3, r);
|
|
123
|
+
bfr(body, 13 + index * 3, g);
|
|
124
|
+
bfr(body, 14 + index * 3, b);
|
|
125
|
+
});
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
case "solid": {
|
|
129
|
+
bfr(body, 4, 0x08);
|
|
130
|
+
const [r, g, b] = rgbColors[0] ?? [255, 0, 0];
|
|
131
|
+
bfr(body, 12, r);
|
|
132
|
+
bfr(body, 13, g);
|
|
133
|
+
bfr(body, 14, b);
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
case "pulseOne": {
|
|
137
|
+
bfr(body, 4, 0x08);
|
|
138
|
+
bfr(body, 11, rateByte);
|
|
139
|
+
const [r, g, b] = rgbColors[0] ?? [255, 0, 0];
|
|
140
|
+
bfr(body, 12, r);
|
|
141
|
+
bfr(body, 13, g);
|
|
142
|
+
bfr(body, 14, b);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
case "tail":
|
|
146
|
+
bfr(body, 4, 0x05);
|
|
147
|
+
bfr(body, 11, rateByte);
|
|
148
|
+
break;
|
|
149
|
+
case "rave": {
|
|
150
|
+
const colors = rgbColors.slice(0, 2);
|
|
151
|
+
bfr(body, 4, colors.length * 3 + 5);
|
|
152
|
+
bfr(body, 11, rateByte);
|
|
153
|
+
colors.forEach(([r, g, b], index) => {
|
|
154
|
+
bfr(body, 12 + index * 3, r);
|
|
155
|
+
bfr(body, 13 + index * 3, g);
|
|
156
|
+
bfr(body, 14 + index * 3, b);
|
|
157
|
+
});
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
case "wave":
|
|
161
|
+
bfr(body, 4, 0x05);
|
|
162
|
+
bfr(body, 11, rateByte);
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
return body;
|
|
166
|
+
}
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
// Debounce (mouse.py set_debounce_time): bfr[3]=0x02, bfr[4]=0x01, bfr[6]=0x08,
|
|
169
|
+
// bfr[7]=profile, bfr[8]=ms.
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
export function buildGloriousClassicDebouncePayload(milliseconds, profileId = GLORIOUS_CLASSIC_PROFILE_DEFAULT) {
|
|
172
|
+
const clamped = Math.max(0, Math.min(GLORIOUS_CLASSIC_DEBOUNCE_MAX_MS, Math.round(milliseconds)));
|
|
173
|
+
const body = packet();
|
|
174
|
+
bfr(body, 3, 0x02);
|
|
175
|
+
bfr(body, 4, 0x01);
|
|
176
|
+
bfr(body, 6, 0x08);
|
|
177
|
+
bfr(body, 7, profileId);
|
|
178
|
+
bfr(body, 8, clamped);
|
|
179
|
+
return body;
|
|
180
|
+
}
|
|
181
|
+
// ---------------------------------------------------------------------------
|
|
182
|
+
// Battery (mouse.py get_battery_status). Request: bfr[3]=0x02, bfr[4]=0x02,
|
|
183
|
+
// bfr[6]=0x83. Response: bfr[1]=status, bfr[6]=echo, bfr[8]=percent.
|
|
184
|
+
// ---------------------------------------------------------------------------
|
|
185
|
+
export function buildGloriousClassicBatteryRequestPayload() {
|
|
186
|
+
const body = packet();
|
|
187
|
+
bfr(body, 3, 0x02);
|
|
188
|
+
bfr(body, 4, 0x02);
|
|
189
|
+
bfr(body, 6, 0x83);
|
|
190
|
+
return body;
|
|
191
|
+
}
|
|
192
|
+
/** Raw status byte -> meaning, per `status_map.index(bfr_r[1])` in mouse.py. */
|
|
193
|
+
const STATUS_BYTE_TO_STATE = new Map([
|
|
194
|
+
[0xa1, "Normal"],
|
|
195
|
+
[0xa4, "Asleep"],
|
|
196
|
+
[0xa2, "Unknown"],
|
|
197
|
+
[0xa0, "WakingUp"],
|
|
198
|
+
[0xa3, "Unknown"],
|
|
199
|
+
]);
|
|
200
|
+
/**
|
|
201
|
+
* Mirrors `get_battery_status()`'s response parsing. `body` is the 64-byte
|
|
202
|
+
* feature-report body (bfr[1] is body[0], i.e. `bfr[n]` is `body[n-1]`).
|
|
203
|
+
*/
|
|
204
|
+
export function parseGloriousClassicBatteryResponse(body) {
|
|
205
|
+
const statusByte = body[0]; // bfr[1]
|
|
206
|
+
const echo = body[5]; // bfr[6]
|
|
207
|
+
const charging = body[6] === 1; // bfr[7]
|
|
208
|
+
const rawPercent = body[7]; // bfr[8]
|
|
209
|
+
if (echo !== 0x83)
|
|
210
|
+
return { state: "Unknown", percent: null, charging: false };
|
|
211
|
+
const state = STATUS_BYTE_TO_STATE.get(statusByte) ?? "Unknown";
|
|
212
|
+
if (state !== "Normal")
|
|
213
|
+
return { state, percent: null, charging: false };
|
|
214
|
+
const percent = rawPercent === 0 ? 1 : rawPercent;
|
|
215
|
+
return { state, percent: percent > 0 && percent <= 100 ? percent : null, charging };
|
|
216
|
+
}
|
|
217
|
+
// ---------------------------------------------------------------------------
|
|
218
|
+
// DPI, polling rate, lift-off distance (korkje/mxw). None of these three has
|
|
219
|
+
// a read command in mxw either — every write below is fire-and-forget, same
|
|
220
|
+
// as the RGB/debounce commands above.
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
export const GLORIOUS_CLASSIC_DPI_MIN = 100;
|
|
223
|
+
export const GLORIOUS_CLASSIC_DPI_MAX = 19000;
|
|
224
|
+
export const GLORIOUS_CLASSIC_DPI_STAGE_COUNT = 4;
|
|
225
|
+
/**
|
|
226
|
+
* DPI stages (mxw src/config/dpi_stages.rs): bfr[3]=0x02, bfr[4]=0x12,
|
|
227
|
+
* bfr[5]=0x01, bfr[6]=0x01, bfr[7]=profile, bfr[8]=stage count, then per
|
|
228
|
+
* stage a 4-byte big-endian u16 value written twice (X and Y, always equal
|
|
229
|
+
* in mxw): bfr[9+4i]=hi, bfr[10+4i]=lo, bfr[11+4i]=hi, bfr[12+4i]=lo.
|
|
230
|
+
*/
|
|
231
|
+
export function buildGloriousClassicDpiStagesPayload(stages, profileId = GLORIOUS_CLASSIC_PROFILE_DEFAULT) {
|
|
232
|
+
const clamped = stages.map((dpi) => Math.max(GLORIOUS_CLASSIC_DPI_MIN, Math.min(GLORIOUS_CLASSIC_DPI_MAX, Math.round(dpi))));
|
|
233
|
+
const body = packet();
|
|
234
|
+
bfr(body, 3, 0x02);
|
|
235
|
+
bfr(body, 4, 0x12);
|
|
236
|
+
bfr(body, 5, 0x01);
|
|
237
|
+
bfr(body, 6, 0x01);
|
|
238
|
+
bfr(body, 7, profileId);
|
|
239
|
+
bfr(body, 8, clamped.length);
|
|
240
|
+
clamped.forEach((dpi, index) => {
|
|
241
|
+
const hi = (dpi >> 8) & 0xff;
|
|
242
|
+
const lo = dpi & 0xff;
|
|
243
|
+
const base = 9 + 4 * index;
|
|
244
|
+
bfr(body, base, hi);
|
|
245
|
+
bfr(body, base + 1, lo);
|
|
246
|
+
bfr(body, base + 2, hi);
|
|
247
|
+
bfr(body, base + 3, lo);
|
|
248
|
+
});
|
|
249
|
+
return body;
|
|
250
|
+
}
|
|
251
|
+
/** Active DPI stage (mxw src/config/dpi_stage.rs), stageId is 1-based (1-4). */
|
|
252
|
+
export function buildGloriousClassicActiveStagePayload(stageId, profileId = GLORIOUS_CLASSIC_PROFILE_DEFAULT) {
|
|
253
|
+
const body = packet();
|
|
254
|
+
bfr(body, 3, 0x02);
|
|
255
|
+
bfr(body, 4, 0x02);
|
|
256
|
+
bfr(body, 5, 0x01);
|
|
257
|
+
bfr(body, 6, 0x02);
|
|
258
|
+
bfr(body, 7, profileId);
|
|
259
|
+
bfr(body, 8, stageId);
|
|
260
|
+
return body;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Polling rate (mxw src/config/polling_rate.rs): bfr[3]=0x02, bfr[4]=0x01,
|
|
264
|
+
* bfr[5]=0x01, bfr[7]=poll interval in milliseconds. mxw only offers
|
|
265
|
+
* {1,2,4,8} ms, i.e. {1000,500,250,125} Hz — this generation has no 2K/4K/8K
|
|
266
|
+
* mode.
|
|
267
|
+
*/
|
|
268
|
+
export const GLORIOUS_CLASSIC_POLLING_RATES = [
|
|
269
|
+
[1, 1000],
|
|
270
|
+
[2, 500],
|
|
271
|
+
[4, 250],
|
|
272
|
+
[8, 125],
|
|
273
|
+
];
|
|
274
|
+
export function gloriousClassicEncodePollingRate(hertz) {
|
|
275
|
+
return GLORIOUS_CLASSIC_POLLING_RATES.find(([, hz]) => hz === hertz)?.[0] ?? null;
|
|
276
|
+
}
|
|
277
|
+
export function gloriousClassicDecodePollingRate(ms) {
|
|
278
|
+
return GLORIOUS_CLASSIC_POLLING_RATES.find(([interval]) => interval === ms)?.[1] ?? null;
|
|
279
|
+
}
|
|
280
|
+
export function buildGloriousClassicPollingRatePayload(intervalMs) {
|
|
281
|
+
const body = packet();
|
|
282
|
+
bfr(body, 3, 0x02);
|
|
283
|
+
bfr(body, 4, 0x01);
|
|
284
|
+
bfr(body, 5, 0x01);
|
|
285
|
+
bfr(body, 7, intervalMs);
|
|
286
|
+
return body;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Lift-off distance (mxw src/config/lift_off.rs): bfr[3]=0x02, bfr[4]=0x01,
|
|
290
|
+
* bfr[5]=0x01, bfr[6]=0x07, bfr[7]=millimetres-1 (0=1mm, 1=2mm — only those
|
|
291
|
+
* two are valid on this generation).
|
|
292
|
+
*/
|
|
293
|
+
export const GLORIOUS_CLASSIC_LOD_MEDIUM_MM = 1;
|
|
294
|
+
export const GLORIOUS_CLASSIC_LOD_HIGH_MM = 2;
|
|
295
|
+
export function buildGloriousClassicLiftOffPayload(millimetres) {
|
|
296
|
+
const body = packet();
|
|
297
|
+
bfr(body, 3, 0x02);
|
|
298
|
+
bfr(body, 4, 0x01);
|
|
299
|
+
bfr(body, 5, 0x01);
|
|
300
|
+
bfr(body, 6, 0x07);
|
|
301
|
+
bfr(body, 7, millimetres - 1);
|
|
302
|
+
return body;
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=index.js.map
|