@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,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* K-snake X11 configuration protocol, reverse-engineered from the vendor
|
|
3
|
+
* WebHID panel shipped at https://x1a11.yjx2012.com/ (Next.js `app/page` chunk).
|
|
4
|
+
*
|
|
5
|
+
* Transport: WebHID output report (`sendReport(0, 64 bytes starting with
|
|
6
|
+
* 0x55)`) with the reply arriving as a queued `inputreport` — not a feature
|
|
7
|
+
* report. Control collection is usage page 0xFF01, usage 0x10; the vendor
|
|
8
|
+
* picker requests:
|
|
9
|
+
* [{ vendorId: 0xA8A4, productId: 0x2255, usagePage: 0xFF01, usage: 0x10 },
|
|
10
|
+
* { vendorId: 0xA8A5, productId: 0x2255, usagePage: 0xFF01, usage: 0x10 }]
|
|
11
|
+
* 0xA8A4 reports "USB", 0xA8A5 is the 2.4 GHz dongle.
|
|
12
|
+
*
|
|
13
|
+
* This module is transport-independent: it only builds 64-byte report bodies
|
|
14
|
+
* and decodes reply buffers. See `src/drivers/ksnake/hid.ts` for the WebHID
|
|
15
|
+
* exchange queue.
|
|
16
|
+
*/
|
|
17
|
+
export const KSNAKE_USB_VENDOR_ID = 0xa8a4;
|
|
18
|
+
export const KSNAKE_DONGLE_VENDOR_ID = 0xa8a5;
|
|
19
|
+
export const KSNAKE_PRODUCT_ID = 0x2255;
|
|
20
|
+
export const KSNAKE_USAGE_PAGE = 0xff01;
|
|
21
|
+
export const KSNAKE_USAGE = 0x10;
|
|
22
|
+
export const KSNAKE_REPORT_ID = 0x00;
|
|
23
|
+
export const KSNAKE_MAGIC = 0x55;
|
|
24
|
+
export const KSNAKE_REPORT_SIZE = 64;
|
|
25
|
+
/** DPI range. Vendor panel slider allows 200–12000 (step 100); the manual's
|
|
26
|
+
* factory steps are 800–12000 and 600 was observed in stage 0 on retail
|
|
27
|
+
* hardware (user-customized via the vendor panel). */
|
|
28
|
+
export const KSNAKE_DPI_MIN = 200;
|
|
29
|
+
export const KSNAKE_DPI_MAX = 12000;
|
|
30
|
+
export function ksnakeIsValidDpi(dpi) {
|
|
31
|
+
return Number.isInteger(dpi) && dpi >= KSNAKE_DPI_MIN && dpi <= KSNAKE_DPI_MAX;
|
|
32
|
+
}
|
|
33
|
+
export const KSNAKE_PRODUCTS = new Map([
|
|
34
|
+
[KSNAKE_PRODUCT_ID, { model: "X11", wireless: true, verified: false }],
|
|
35
|
+
]);
|
|
36
|
+
const CMD = {
|
|
37
|
+
GET_VERSION: 0x03,
|
|
38
|
+
GET_KEYS: 0x08,
|
|
39
|
+
SET_KEYS: 0x09,
|
|
40
|
+
GET_CONFIG: 0x0e,
|
|
41
|
+
SET_CONFIG: 0x0f,
|
|
42
|
+
SET_LIGHT: 0x21,
|
|
43
|
+
GET_BATTERY: 0x30,
|
|
44
|
+
};
|
|
45
|
+
const GET_CONFIG_TAIL = [0xa5, 0x0b, 0x2f, 0x01, 0x01, 0x00, 0x00, 0x00];
|
|
46
|
+
const SET_CONFIG_HEAD = [0xae, 0x0a, 0x2f, 0x01, 0x01, 0x00, 0x00];
|
|
47
|
+
const GET_BATTERY_TAIL = [0xa5, 0x0b, 0x2e, 0x01, 0x01, 0x00, 0x00, 0x00];
|
|
48
|
+
/**
|
|
49
|
+
* Polling-rate index ↔ Hz.
|
|
50
|
+
* Endpoints confirmed by the X11 user manual: 1000 Hz in 2.4G/wired,
|
|
51
|
+
* 125 Hz in BT. Middle steps (250/500) come from the vendor panel screenshot
|
|
52
|
+
* + PAW3311 spec — keep until a hardware capture says otherwise.
|
|
53
|
+
* Default index 3 = 1000 Hz.
|
|
54
|
+
*/
|
|
55
|
+
export const KSNAKE_POLLING_RATES = [125, 250, 500, 1000];
|
|
56
|
+
export function ksnakeEncodePollingRate(hz) {
|
|
57
|
+
const index = KSNAKE_POLLING_RATES.indexOf(hz);
|
|
58
|
+
return index === -1 ? null : index;
|
|
59
|
+
}
|
|
60
|
+
export function ksnakeDecodePollingRate(index) {
|
|
61
|
+
return index >= 0 && index < KSNAKE_POLLING_RATES.length ? KSNAKE_POLLING_RATES[index] : null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Lift-off mapping. The vendor panel offers two stops (lod_value 1/2,
|
|
65
|
+
* default 1, likely 1mm/2mm on the PAW3311); they map to the Low/High stops.
|
|
66
|
+
* Medium is not offered by the hardware.
|
|
67
|
+
*/
|
|
68
|
+
export function ksnakeDecodeLiftOff(value) {
|
|
69
|
+
return value === 2 ? "High" : "Low";
|
|
70
|
+
}
|
|
71
|
+
export function ksnakeEncodeLiftOff(level) {
|
|
72
|
+
if (level === "Low")
|
|
73
|
+
return 1;
|
|
74
|
+
if (level === "High")
|
|
75
|
+
return 2;
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
export const KSNAKE_DEFAULT_CONFIG = {
|
|
79
|
+
lightMode: 2,
|
|
80
|
+
reportRate: 3,
|
|
81
|
+
dpiIndex: 2,
|
|
82
|
+
// Hardware reports 6 (retail 2.4 GHz dongle, FW 2.1.7).
|
|
83
|
+
dpiCount: 6,
|
|
84
|
+
stages: [800, 1200, 1600, 3200, 5000, 12000],
|
|
85
|
+
scrollFlag: 0,
|
|
86
|
+
lodValue: 1,
|
|
87
|
+
sensorFlag: 53,
|
|
88
|
+
keyRespond: 2,
|
|
89
|
+
sleepLight: 10,
|
|
90
|
+
highspeedMode: 0,
|
|
91
|
+
wakeupFlag: 1,
|
|
92
|
+
moveLightFlag: 1,
|
|
93
|
+
};
|
|
94
|
+
function le16(lo, hi) {
|
|
95
|
+
return ((hi & 0xff) << 8) | (lo & 0xff);
|
|
96
|
+
}
|
|
97
|
+
/** 64-byte output-report body (without the reportId prefix). */
|
|
98
|
+
export function ksnakeGetVersionRequest() {
|
|
99
|
+
const buf = new Uint8Array(KSNAKE_REPORT_SIZE);
|
|
100
|
+
buf[0] = KSNAKE_MAGIC;
|
|
101
|
+
buf[1] = CMD.GET_VERSION;
|
|
102
|
+
return buf;
|
|
103
|
+
}
|
|
104
|
+
/** Vendor reply bytes [23..25] hold ASCII "x.y.z" when present. */
|
|
105
|
+
export function ksnakeDecodeVersion(reply) {
|
|
106
|
+
if (reply.length < 26)
|
|
107
|
+
return null;
|
|
108
|
+
const digit = (b) => (b >= 48 && b <= 57 ? String.fromCharCode(b) : null);
|
|
109
|
+
const major = digit(reply[23]);
|
|
110
|
+
const minor = digit(reply[24]);
|
|
111
|
+
const patch = digit(reply[25]);
|
|
112
|
+
if (major === null || minor === null || patch === null)
|
|
113
|
+
return null;
|
|
114
|
+
return `${major}.${minor}.${patch}`;
|
|
115
|
+
}
|
|
116
|
+
export function ksnakeGetBatteryRequest() {
|
|
117
|
+
const buf = new Uint8Array(KSNAKE_REPORT_SIZE);
|
|
118
|
+
buf[0] = KSNAKE_MAGIC;
|
|
119
|
+
buf[1] = CMD.GET_BATTERY;
|
|
120
|
+
GET_BATTERY_TAIL.forEach((b, i) => {
|
|
121
|
+
buf[2 + i] = b;
|
|
122
|
+
});
|
|
123
|
+
return buf;
|
|
124
|
+
}
|
|
125
|
+
export function ksnakeDecodeBattery(reply) {
|
|
126
|
+
if (reply.length < 10)
|
|
127
|
+
return null;
|
|
128
|
+
return { percent: reply[8] & 0xff, charging: reply[9] & 0xff };
|
|
129
|
+
}
|
|
130
|
+
export function ksnakeGetConfigRequest() {
|
|
131
|
+
const buf = new Uint8Array(KSNAKE_REPORT_SIZE);
|
|
132
|
+
buf[0] = KSNAKE_MAGIC;
|
|
133
|
+
buf[1] = CMD.GET_CONFIG;
|
|
134
|
+
GET_CONFIG_TAIL.forEach((b, i) => {
|
|
135
|
+
buf[2 + i] = b;
|
|
136
|
+
});
|
|
137
|
+
return buf;
|
|
138
|
+
}
|
|
139
|
+
/** Decode a getConfig reply, mirroring the vendor `getMouseConfigInfo()`. */
|
|
140
|
+
export function ksnakeDecodeConfig(reply) {
|
|
141
|
+
if (reply.length < 56)
|
|
142
|
+
return null;
|
|
143
|
+
const blank = reply[13] === 0 && reply[14] === 0 && reply[15] === 0;
|
|
144
|
+
const erased = reply[13] === 255 && reply[14] === 255 && reply[15] === 255;
|
|
145
|
+
if (blank || erased) {
|
|
146
|
+
return { ...KSNAKE_DEFAULT_CONFIG, stages: [...KSNAKE_DEFAULT_CONFIG.stages] };
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
lightMode: reply[9],
|
|
150
|
+
reportRate: reply[10] - 1,
|
|
151
|
+
dpiIndex: reply[12] - 1,
|
|
152
|
+
dpiCount: reply[11],
|
|
153
|
+
stages: [
|
|
154
|
+
le16(reply[13], reply[14]),
|
|
155
|
+
le16(reply[15], reply[16]),
|
|
156
|
+
le16(reply[17], reply[18]),
|
|
157
|
+
le16(reply[19], reply[20]),
|
|
158
|
+
le16(reply[21], reply[22]),
|
|
159
|
+
le16(reply[23], reply[24]),
|
|
160
|
+
],
|
|
161
|
+
scrollFlag: reply[48],
|
|
162
|
+
lodValue: reply[49],
|
|
163
|
+
sensorFlag: reply[50],
|
|
164
|
+
keyRespond: reply[51],
|
|
165
|
+
sleepLight: reply[52],
|
|
166
|
+
highspeedMode: reply[53],
|
|
167
|
+
// NOTE: the vendor panel itself is asymmetric here — its decode reads
|
|
168
|
+
// wakeup from the LOW nibble (`15 & t[55]`) but its encode writes
|
|
169
|
+
// `wakeup << 4 | move`. This codec mirrors the vendor byte-for-byte, so
|
|
170
|
+
// states round-trip exactly like the vendor panel does.
|
|
171
|
+
wakeupFlag: reply[55] & 15,
|
|
172
|
+
moveLightFlag: (reply[55] >> 4) & 15,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/** Encode a setConfig request, mirroring vendor `setMouseConfigData()`. */
|
|
176
|
+
export function ksnakeEncodeSetConfig(config) {
|
|
177
|
+
const buf = new Uint8Array(KSNAKE_REPORT_SIZE);
|
|
178
|
+
buf[0] = KSNAKE_MAGIC;
|
|
179
|
+
buf[1] = CMD.SET_CONFIG;
|
|
180
|
+
SET_CONFIG_HEAD.forEach((b, i) => {
|
|
181
|
+
buf[2 + i] = b;
|
|
182
|
+
});
|
|
183
|
+
buf[9] = config.lightMode & 0xff;
|
|
184
|
+
buf[10] = (config.reportRate + 1) & 0xff;
|
|
185
|
+
buf[11] = config.dpiCount & 0xff;
|
|
186
|
+
buf[12] = (config.dpiIndex + 1) & 0xff;
|
|
187
|
+
const stages = [...config.stages];
|
|
188
|
+
while (stages.length < 6)
|
|
189
|
+
stages.push(0);
|
|
190
|
+
for (let i = 0; i < 6; i++) {
|
|
191
|
+
buf[13 + i * 2] = stages[i] & 0xff;
|
|
192
|
+
buf[14 + i * 2] = (stages[i] >> 8) & 0xff;
|
|
193
|
+
}
|
|
194
|
+
buf[48] = config.scrollFlag & 0xff;
|
|
195
|
+
buf[49] = config.lodValue & 0xff;
|
|
196
|
+
buf[50] = config.sensorFlag & 0xff;
|
|
197
|
+
buf[51] = config.keyRespond & 0xff;
|
|
198
|
+
buf[52] = config.sleepLight & 0xff;
|
|
199
|
+
buf[53] = config.highspeedMode & 0xff;
|
|
200
|
+
buf[54] = ((config.wakeupFlag << 4) | (config.moveLightFlag & 15)) & 0xff;
|
|
201
|
+
return buf;
|
|
202
|
+
}
|
|
203
|
+
/** Physical button order for the 6 remappable slots. Labels follow the factory
|
|
204
|
+
* functions; the side button ships as Forward (user-renameable to Macro1). */
|
|
205
|
+
export const KSNAKE_BUTTON_NAMES = ["Left", "Right", "Middle", "Backward", "Forward", "DPI"];
|
|
206
|
+
/** Button function types from the vendor key catalog. */
|
|
207
|
+
export const KSNAKE_KEY_TYPE = {
|
|
208
|
+
mouse: 32,
|
|
209
|
+
special: 33,
|
|
210
|
+
media: 48,
|
|
211
|
+
};
|
|
212
|
+
export function ksnakeIsKnownKeyType(type) {
|
|
213
|
+
return type === KSNAKE_KEY_TYPE.mouse || type === KSNAKE_KEY_TYPE.special || type === KSNAKE_KEY_TYPE.media;
|
|
214
|
+
}
|
|
215
|
+
/** Remappable actions from the vendor key catalog (display label + bytes). */
|
|
216
|
+
export const KSNAKE_BUTTON_ACTIONS = [
|
|
217
|
+
{ label: "Left click", type: 32, code1: 1, code2: 0, code3: 0 },
|
|
218
|
+
{ label: "Right click", type: 32, code1: 2, code2: 0, code3: 0 },
|
|
219
|
+
{ label: "Middle click", type: 32, code1: 4, code2: 0, code3: 0 },
|
|
220
|
+
{ label: "Backward", type: 32, code1: 8, code2: 0, code3: 0 },
|
|
221
|
+
{ label: "Forward", type: 32, code1: 16, code2: 0, code3: 0 },
|
|
222
|
+
{ label: "Disabled", type: 32, code1: 0, code2: 0, code3: 0 },
|
|
223
|
+
{ label: "DPI loop", type: 33, code1: 85, code2: 0, code3: 0 },
|
|
224
|
+
{ label: "Scroll up", type: 33, code1: 56, code2: 1, code3: 0 },
|
|
225
|
+
{ label: "Scroll down", type: 33, code1: 56, code2: 255, code3: 0 },
|
|
226
|
+
{ label: "Volume +", type: 48, code1: 233, code2: 0, code3: 0 },
|
|
227
|
+
{ label: "Volume −", type: 48, code1: 234, code2: 0, code3: 0 },
|
|
228
|
+
{ label: "Mute", type: 48, code1: 226, code2: 0, code3: 0 },
|
|
229
|
+
{ label: "Play/Pause", type: 48, code1: 205, code2: 0, code3: 0 },
|
|
230
|
+
{ label: "Prev track", type: 48, code1: 182, code2: 0, code3: 0 },
|
|
231
|
+
{ label: "Next track", type: 48, code1: 181, code2: 0, code3: 0 },
|
|
232
|
+
];
|
|
233
|
+
/** Display label for a binding, or null when the catalog cannot name it. */
|
|
234
|
+
export function ksnakeBindingLabel(binding) {
|
|
235
|
+
return KSNAKE_BUTTON_ACTIONS.find((action) => action.type === binding.type &&
|
|
236
|
+
action.code1 === binding.code1 &&
|
|
237
|
+
action.code2 === binding.code2 &&
|
|
238
|
+
action.code3 === binding.code3)?.label ?? null;
|
|
239
|
+
}
|
|
240
|
+
/** Catalog binding for a display label, or null for unknown labels. */
|
|
241
|
+
export function ksnakeFindButtonAction(label) {
|
|
242
|
+
const action = KSNAKE_BUTTON_ACTIONS.find((entry) => entry.label === label);
|
|
243
|
+
return action ? { type: action.type, code1: action.code1, code2: action.code2, code3: action.code3 } : null;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Plausibility gate for decoded key maps. `exchange()` resolves with the next
|
|
247
|
+
* input report, so a stray report from another command can land here; those
|
|
248
|
+
* decode to zeroed/garbage slot types. Real maps always carry nonzero types
|
|
249
|
+
* (32/33/48 catalog, plus opaque refs like macro 112).
|
|
250
|
+
*/
|
|
251
|
+
export function ksnakeKeysLookPlausible(keys) {
|
|
252
|
+
return keys.length === 7 && keys.every((key) => key.type !== 0);
|
|
253
|
+
}
|
|
254
|
+
/** GET_KEYS request tail observed in vendor JS: [0x55, 0x08, 0xA5, 0x0B, 0x20]. */
|
|
255
|
+
export function ksnakeGetKeysRequest() {
|
|
256
|
+
const buf = new Uint8Array(KSNAKE_REPORT_SIZE);
|
|
257
|
+
buf[0] = KSNAKE_MAGIC;
|
|
258
|
+
buf[1] = CMD.GET_KEYS;
|
|
259
|
+
buf[2] = 0xa5;
|
|
260
|
+
buf[3] = 0x0b;
|
|
261
|
+
buf[4] = 0x20;
|
|
262
|
+
return buf;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Decode a getKeys reply: 7 slots of 4 bytes at reply[8..35] (the vendor
|
|
266
|
+
* slices 8). Slot 6 is a fixed scroll-up entry; slots 0-5 are remappable.
|
|
267
|
+
* Verified against a retail dongle (factory map decodes to
|
|
268
|
+
* Left/Right/Middle/Backward + DPI loop in order).
|
|
269
|
+
*/
|
|
270
|
+
export function ksnakeDecodeKeys(reply) {
|
|
271
|
+
if (reply.length < 36)
|
|
272
|
+
return null;
|
|
273
|
+
const bindings = [];
|
|
274
|
+
for (let i = 0; i < 7; i++) {
|
|
275
|
+
bindings.push({
|
|
276
|
+
type: reply[8 + i * 4],
|
|
277
|
+
code1: reply[9 + i * 4],
|
|
278
|
+
code2: reply[10 + i * 4],
|
|
279
|
+
code3: reply[11 + i * 4],
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
return bindings;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Encode a setKeys request, mirroring vendor `setMouseKeys()`: head
|
|
286
|
+
* [0x55, 0x09, 0xA5, 0x22, 0x20], slots 0-5 at body[9..32], fixed tail
|
|
287
|
+
* [33,56,1,0, 33,56,255,0] at body[33..40].
|
|
288
|
+
*/
|
|
289
|
+
export function ksnakeEncodeSetKeys(keys) {
|
|
290
|
+
const buf = new Uint8Array(KSNAKE_REPORT_SIZE);
|
|
291
|
+
buf[0] = KSNAKE_MAGIC;
|
|
292
|
+
buf[1] = CMD.SET_KEYS;
|
|
293
|
+
buf[2] = 0xa5;
|
|
294
|
+
buf[3] = 0x22;
|
|
295
|
+
buf[4] = 0x20;
|
|
296
|
+
const slots = [...keys].slice(0, 6);
|
|
297
|
+
while (slots.length < 6)
|
|
298
|
+
slots.push({ type: 32, code1: 0, code2: 0, code3: 0 });
|
|
299
|
+
// Wire offsets, NOT vendor-JS t[] indices: t[0] is the report id, so the
|
|
300
|
+
// request slots at t[9..32] land at data[8..31]. (buf[9..] bricked buttons.)
|
|
301
|
+
for (let n = 0; n < 6; n++) {
|
|
302
|
+
const key = slots[n];
|
|
303
|
+
buf[8 + n * 4] = key.type & 0xff;
|
|
304
|
+
buf[9 + n * 4] = key.code1 & 0xff;
|
|
305
|
+
buf[10 + n * 4] = key.code2 & 0xff;
|
|
306
|
+
buf[11 + n * 4] = key.code3 & 0xff;
|
|
307
|
+
}
|
|
308
|
+
const tail = [33, 56, 1, 0, 33, 56, 255, 0];
|
|
309
|
+
tail.forEach((b, i) => {
|
|
310
|
+
buf[32 + i] = b;
|
|
311
|
+
});
|
|
312
|
+
return buf;
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ksnake/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lamzu's "Atlantis" generation — CompX vendor id 0x3554.
|
|
3
|
+
*
|
|
4
|
+
* These mice do not speak the page/command feature-report protocol in
|
|
5
|
+
* `../compx/codec.ts` that the 0x373e and 0x37b0 Lamzu models use. They speak
|
|
6
|
+
* the *other* CompX stack: report 8, 16-byte interrupt reports, settings in a
|
|
7
|
+
* flash image addressed by byte offset — the same wire protocol this package
|
|
8
|
+
* already implements for the Pulsar 4K receiver and the VGN and Teevolution
|
|
9
|
+
* mice that share vendor id 0x3554. CompX is the ODM for all of them; the
|
|
10
|
+
* user's own device reports `manufacturer: "compx"`.
|
|
11
|
+
*
|
|
12
|
+
* So the framing, command ids, checksum and 50-step DPI encoding are imported
|
|
13
|
+
* from the Pulsar entry point rather than restated here. What this module adds
|
|
14
|
+
* is only what is genuinely Lamzu: the product catalog, the flash fields
|
|
15
|
+
* Lamzu's firmware uses that the Pulsar driver never reads, the lift-off
|
|
16
|
+
* encoding (which differs), and the polling-rate table (which differs).
|
|
17
|
+
*
|
|
18
|
+
* Verified on a Lamzu Atlantis Mini 4K, firmware 1.24, wired 0x3554:0xf50f —
|
|
19
|
+
* see docs/lamzu-atlantis-testing.md. Protocol groundwork: LeadSun/lamzu-cfg
|
|
20
|
+
* (Apache-2.0/MIT), reverse-engineered from an Atlantis Mini Pro.
|
|
21
|
+
*/
|
|
22
|
+
export declare const LAMZU_ATLANTIS_VENDOR_ID = 13652;
|
|
23
|
+
/** The one collection that answers: interface 1, usage page 0xff02, usage 2. */
|
|
24
|
+
export declare const LAMZU_ATLANTIS_USAGE_PAGE = 65282;
|
|
25
|
+
export declare const LAMZU_ATLANTIS_USAGE = 2;
|
|
26
|
+
/** Shared CompX report-8 framing, re-stated under Lamzu names for callers. */
|
|
27
|
+
export declare const LAMZU_ATLANTIS_REPORT_ID = 8;
|
|
28
|
+
export declare const LAMZU_ATLANTIS_PACKET_LENGTH = 16;
|
|
29
|
+
export declare const LAMZU_ATLANTIS_PAYLOAD_OFFSET = 5;
|
|
30
|
+
export declare const LAMZU_ATLANTIS_MAX_PAYLOAD = 10;
|
|
31
|
+
/**
|
|
32
|
+
* The commands are CompX's, not Lamzu's, so the whole Pulsar set is aliased
|
|
33
|
+
* here rather than a Lamzu-specific subset. Only six have been exercised on
|
|
34
|
+
* Atlantis hardware: 0x04 battery, 0x07/0x08 flash write/read, 0x0e active
|
|
35
|
+
* profile, 0x0f set active profile, and 0x12 firmware version (returned
|
|
36
|
+
* 0x01 0x24 — v1.24, matching both the USB bcdDevice and the version Lamzu's
|
|
37
|
+
* download page lists for this model). The dongle-only commands (0x15, 0x1d,
|
|
38
|
+
* 0x2b) answer status 1 over the cable; the rest — `encryptionData`,
|
|
39
|
+
* `deviceOnline`, `setDongleRgb` — are inherited names this driver never
|
|
40
|
+
* sends and are unverified on this family.
|
|
41
|
+
*/
|
|
42
|
+
export declare const LAMZU_ATLANTIS_COMMAND: {
|
|
43
|
+
readonly encryptionData: 1;
|
|
44
|
+
readonly deviceOnline: 3;
|
|
45
|
+
readonly batteryLevel: 4;
|
|
46
|
+
readonly writeFlashData: 7;
|
|
47
|
+
readonly readFlashData: 8;
|
|
48
|
+
readonly getCurrentConfig: 14;
|
|
49
|
+
readonly readVersionId: 18;
|
|
50
|
+
readonly setDongleRgb: 20;
|
|
51
|
+
readonly getDongleRgb: 21;
|
|
52
|
+
readonly getDongleVersion: 29;
|
|
53
|
+
readonly getRssi: 43;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Switching the active onboard profile. It is the write counterpart of
|
|
57
|
+
* `getCurrentConfig` (0x0e) and is absent from `PULSAR_COMMAND` because the
|
|
58
|
+
* Pulsar driver only reads the profile. Documented by lamzu-cfg as
|
|
59
|
+
* `WriteActiveProfile` and exercised here on an Atlantis Mini 4K.
|
|
60
|
+
*/
|
|
61
|
+
export declare const LAMZU_ATLANTIS_WRITE_ACTIVE_PROFILE = 15;
|
|
62
|
+
/**
|
|
63
|
+
* Flash offsets. Everything in `PULSAR_FLASH` matched byte for byte on Lamzu
|
|
64
|
+
* hardware — same firmware family, same layout — so those are inherited rather
|
|
65
|
+
* than re-typed, and only the fields Lamzu's configurator exposes that the
|
|
66
|
+
* Pulsar driver never reads are added here.
|
|
67
|
+
*
|
|
68
|
+
* `sleepTime` deserves a note: the byte is a count of ten-second units, not
|
|
69
|
+
* seconds. Lamzu's configurator showed a 1-minute timeout while address 173
|
|
70
|
+
* held 0x06, and 10 seconds while it held 0x01.
|
|
71
|
+
*/
|
|
72
|
+
export declare const LAMZU_ATLANTIS_FLASH: {
|
|
73
|
+
readonly dpiStageCount: 2;
|
|
74
|
+
readonly dpiStageColors: 44;
|
|
75
|
+
readonly buttonActions: 96;
|
|
76
|
+
readonly highPerformance: 185;
|
|
77
|
+
readonly reportRate: 0;
|
|
78
|
+
readonly currentDpi: 4;
|
|
79
|
+
readonly liftOffDistance: 10;
|
|
80
|
+
readonly dpiValues: 12;
|
|
81
|
+
readonly debounceTime: 169;
|
|
82
|
+
readonly motionSync: 171;
|
|
83
|
+
readonly sleepTime: 173;
|
|
84
|
+
readonly angleSnapping: 175;
|
|
85
|
+
readonly rippleControl: 177;
|
|
86
|
+
readonly performanceState: 181;
|
|
87
|
+
readonly performanceTime: 183;
|
|
88
|
+
};
|
|
89
|
+
export declare const LAMZU_ATLANTIS_STAGE_STRIDE = 4;
|
|
90
|
+
export declare const LAMZU_ATLANTIS_MAX_DPI_STAGES = 8;
|
|
91
|
+
/**
|
|
92
|
+
* Onboard profiles, 1-based in Lamzu's UI and 0-based on the wire. Probed on
|
|
93
|
+
* hardware: writing indices 0-3 is accepted and reads back, while 4 and above
|
|
94
|
+
* are rejected with status 1 and leave the mouse on its previous profile.
|
|
95
|
+
*/
|
|
96
|
+
export declare const LAMZU_ATLANTIS_PROFILE_COUNT = 4;
|
|
97
|
+
/** PAW3395: 50-26,000 DPI in 50 DPI steps, per Lamzu's own device table. */
|
|
98
|
+
export declare const LAMZU_ATLANTIS_DPI_STEP = 50;
|
|
99
|
+
export declare const LAMZU_ATLANTIS_MIN_DPI = 50;
|
|
100
|
+
export declare const LAMZU_ATLANTIS_MAX_DPI = 26000;
|
|
101
|
+
/**
|
|
102
|
+
* Both timers this firmware stores — the peak-performance window and the sleep
|
|
103
|
+
* timeout — count ten-second units in a single byte.
|
|
104
|
+
*/
|
|
105
|
+
export declare const LAMZU_ATLANTIS_TIMER_STEP_SECONDS = 10;
|
|
106
|
+
export declare const LAMZU_ATLANTIS_MAX_TIMER_SECONDS: number;
|
|
107
|
+
/** Sleep timeouts Lamzu's own configurator offers, in seconds. */
|
|
108
|
+
export declare const LAMZU_ATLANTIS_SLEEP_OPTIONS: readonly [10, 30, 60, 300, 600, 1800];
|
|
109
|
+
/**
|
|
110
|
+
* Which of the two encodings of 1,000 Hz a transport wants. Stored per product
|
|
111
|
+
* rather than derived from the rate ceiling: the 1K receiver tops out at
|
|
112
|
+
* 1,000 Hz like the cable does, so a ceiling test would silently decide its
|
|
113
|
+
* encoding for it, and no 1K receiver has been on hand to check.
|
|
114
|
+
*/
|
|
115
|
+
export type LamzuAtlantisRateFamily = "wired" | "receiver";
|
|
116
|
+
export interface LamzuAtlantisProduct {
|
|
117
|
+
model: string;
|
|
118
|
+
wireless: boolean;
|
|
119
|
+
pollingRates: readonly number[];
|
|
120
|
+
rateFamily: LamzuAtlantisRateFamily;
|
|
121
|
+
/** False until this exact product id has been exercised on hardware. */
|
|
122
|
+
verified: boolean;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Six models share these ids — Atlantis OG V2, Atlantis Mini, Atlantis Mini
|
|
126
|
+
* Pro, Thorn, Maya and Paro of this generation — and nothing on the wire
|
|
127
|
+
* separates them: same product id, same USB product string ("LAMZU Atlantis
|
|
128
|
+
* Pro" on the cable, "LAMZU 4K Receiver" on the dongle), same firmware
|
|
129
|
+
* version. Lamzu's own Windows configurator has the same problem and solves it
|
|
130
|
+
* by making the user pick the model from a list, so this catalog names the
|
|
131
|
+
* family rather than pretending to identify one model.
|
|
132
|
+
*
|
|
133
|
+
* 0xf50f (the mouse on its cable) is confirmed on hardware. The three receiver
|
|
134
|
+
* ids come from Lamzu's shipped device table and nothing more: no receiver has
|
|
135
|
+
* been exercised, so neither their rate lists nor the transport itself is
|
|
136
|
+
* established, and they stay `verified: false` until one is.
|
|
137
|
+
*/
|
|
138
|
+
export declare const LAMZU_ATLANTIS_PRODUCTS: ReadonlyMap<number, LamzuAtlantisProduct>;
|
|
139
|
+
/**
|
|
140
|
+
* The rate byte uses the encoding the other Lamzu generations use, where
|
|
141
|
+
* 1,000 Hz appears twice: 0x01 in the wired 125-1000 family and 0x10 in the
|
|
142
|
+
* receiver family. Both were read from the same mouse — 0x10 before Lamzu's
|
|
143
|
+
* configurator touched the profile and 0x01 after it wrote 1,000 Hz over the
|
|
144
|
+
* cable, with the vendor UI reading "1000Hz" both times — and selecting
|
|
145
|
+
* 500 Hz in that UI wrote 0x02.
|
|
146
|
+
*
|
|
147
|
+
* This is why the Lamzu units need their own table rather than
|
|
148
|
+
* `pulsarDecodePollingRate`, which reads 0x10 as 2,000 Hz.
|
|
149
|
+
*/
|
|
150
|
+
export declare const LAMZU_ATLANTIS_POLLING_RATES: readonly [readonly [8, 125], readonly [4, 250], readonly [2, 500], readonly [1, 1000], readonly [16, 1000], readonly [32, 2000], readonly [64, 4000], readonly [128, 8000]];
|
|
151
|
+
export type LamzuAtlantisLiftOffDistance = "Low" | "Medium";
|
|
152
|
+
/**
|
|
153
|
+
* Only two lift-off heights exist on this generation, 1 mm and 2 mm, and they
|
|
154
|
+
* encode as 1 and 2. The Pulsar driver's 3/1/2 → Low/Medium/High mapping would
|
|
155
|
+
* report a Lamzu's 1 mm as "Medium".
|
|
156
|
+
*/
|
|
157
|
+
export declare const LAMZU_ATLANTIS_LIFT_OFF_DISTANCES: readonly [readonly [1, "Low"], readonly [2, "Medium"]];
|
|
158
|
+
export interface LamzuAtlantisRequest {
|
|
159
|
+
command: number;
|
|
160
|
+
address?: number;
|
|
161
|
+
payload?: readonly number[];
|
|
162
|
+
}
|
|
163
|
+
export interface LamzuAtlantisReply {
|
|
164
|
+
command: number;
|
|
165
|
+
error: number;
|
|
166
|
+
address: number;
|
|
167
|
+
/**
|
|
168
|
+
* The full payload window, not a slice of `declaredLength` bytes: the
|
|
169
|
+
* battery reply declares 2 while carrying 4 meaningful bytes (percent,
|
|
170
|
+
* charging, then the millivolts), so trusting the length byte would drop the
|
|
171
|
+
* voltage. Callers slice to what they asked for.
|
|
172
|
+
*/
|
|
173
|
+
payload: Uint8Array;
|
|
174
|
+
declaredLength: number;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Builds the 16 bytes WebHID sends for report 8. The report id is excluded
|
|
178
|
+
* from the buffer but included in the checksum, which is what
|
|
179
|
+
* `pulsarPacketChecksum` accounts for.
|
|
180
|
+
*/
|
|
181
|
+
export declare function lamzuAtlantisEncodeRequest(spec: LamzuAtlantisRequest): Uint8Array<ArrayBuffer>;
|
|
182
|
+
/**
|
|
183
|
+
* Decodes an input report body (the 16 bytes WebHID delivers, report id
|
|
184
|
+
* excluded). Returns null for a truncated frame or a failed checksum so a
|
|
185
|
+
* caller waiting on a reply can skip the unsolicited reports this firmware
|
|
186
|
+
* emits rather than throwing on them.
|
|
187
|
+
*/
|
|
188
|
+
export declare function lamzuAtlantisDecodeReply(body: Uint8Array): LamzuAtlantisReply | null;
|
|
189
|
+
/**
|
|
190
|
+
* A flash field is stored with a trailing checksum byte, so the value bytes
|
|
191
|
+
* and that byte together must sum to 0x55.
|
|
192
|
+
*/
|
|
193
|
+
export declare function lamzuAtlantisFieldIsIntact(field: Uint8Array): boolean;
|
|
194
|
+
/** Appends the trailing checksum a flash field is stored with. */
|
|
195
|
+
export declare function lamzuAtlantisSealField(values: readonly number[]): number[];
|
|
196
|
+
export interface LamzuAtlantisDpiStage {
|
|
197
|
+
x: number;
|
|
198
|
+
y: number;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Decodes a DPI stage field: `[x, y, flags, checksum]`, where the flags byte
|
|
202
|
+
* carries each axis's ninth and tenth bits — bits 2-3 for x, bits 6-7 for y,
|
|
203
|
+
* which is how `pulsarVgnEncodeDpi` lays them out.
|
|
204
|
+
*
|
|
205
|
+
* `pulsarVgnDecodeDpi` cannot be used for reads here: it returns null unless
|
|
206
|
+
* the two axis bytes are identical, because the Pulsar driver only ever
|
|
207
|
+
* writes them in lockstep. A Lamzu configured with separate axes stores a
|
|
208
|
+
* perfectly valid field that would then read as corrupt.
|
|
209
|
+
*/
|
|
210
|
+
export declare function lamzuAtlantisDecodeDpiStage(field: Uint8Array): LamzuAtlantisDpiStage | null;
|
|
211
|
+
export declare function lamzuAtlantisDecodePollingRate(raw: number): number | null;
|
|
212
|
+
/**
|
|
213
|
+
* Picks the byte for a rate. Only 1,000 Hz is ambiguous, and the transport's
|
|
214
|
+
* declared family decides it rather than anything inferred from the rate list.
|
|
215
|
+
*/
|
|
216
|
+
export declare function lamzuAtlantisEncodePollingRate(hertz: number, family: LamzuAtlantisRateFamily): number | null;
|
|
217
|
+
export declare function lamzuAtlantisDecodeLiftOffDistance(raw: number): LamzuAtlantisLiftOffDistance | null;
|
|
218
|
+
export declare function lamzuAtlantisEncodeLiftOffDistance(value: string): number | null;
|
|
219
|
+
export interface LamzuAtlantisBattery {
|
|
220
|
+
percent: number | null;
|
|
221
|
+
millivolts: number | null;
|
|
222
|
+
charging: boolean;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Battery reply payload: [percent, charging, millivolts high, millivolts low].
|
|
226
|
+
*
|
|
227
|
+
* lamzu-cfg reads only the millivolts and derives a percentage linearly
|
|
228
|
+
* between 3,050 and 4,200 mV, which disagrees with the mouse while it charges:
|
|
229
|
+
* at 4,239 mV that estimate says 100%, where both the reported byte and
|
|
230
|
+
* Lamzu's configurator said 95%. The reported byte wins; the voltage is kept
|
|
231
|
+
* for display.
|
|
232
|
+
*/
|
|
233
|
+
export declare function lamzuAtlantisDecodeBattery(payload: Uint8Array): LamzuAtlantisBattery;
|
|
234
|
+
/** Formats the 0x12 firmware reply the same way the Pulsar driver does. */
|
|
235
|
+
export declare function lamzuAtlantisDecodeFirmware(label: string, payload: Uint8Array): string | null;
|
|
236
|
+
export declare function lamzuAtlantisProduct(vendorId: number, productId: number): LamzuAtlantisProduct | undefined;
|
|
237
|
+
//# sourceMappingURL=atlantis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atlantis.d.ts","sourceRoot":"","sources":["../../src/lamzu/atlantis.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAChD,eAAO,MAAM,oBAAoB,IAAO,CAAC;AAEzC,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,IAA0B,CAAC;AAChE,eAAO,MAAM,4BAA4B,KAA8B,CAAC;AACxE,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;CAAiB,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,KAAO,CAAC;AAExD;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;CAMvB,CAAC;AAEX,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,iCAAiC,KAAK,CAAC;AACpD,eAAO,MAAM,gCAAgC,QAA2C,CAAC;AAEzF,kEAAkE;AAClE,eAAO,MAAM,4BAA4B,uCAAwC,CAAC;AAElF;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,UAAU,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,UAAU,EAAE,uBAAuB,CAAC;IACpC,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAKD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAK5E,CAAC;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,6KAG/B,CAAC;AAEX,MAAM,MAAM,4BAA4B,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,wDAEqC,CAAC;AAEpF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,OAAO,EAAE,UAAU,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,oBAAoB,GAAG,UAAU,CAAC,WAAW,CAAC,CAc9F;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,GAAG,IAAI,CAcpF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAIrE;AAED,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAI1E;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,UAAU,GAAG,qBAAqB,GAAG,IAAI,CAQ3F;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzE;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,uBAAuB,GAC9B,MAAM,GAAG,IAAI,CAOf;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,GAAG,4BAA4B,GAAG,IAAI,CAEnG;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE/E;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,UAAU,GAAG,oBAAoB,CASpF;AAED,2EAA2E;AAC3E,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAG7F;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAG1G"}
|