@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.
Files changed (547) hide show
  1. package/CONTRIBUTING.md +167 -0
  2. package/README.md +89 -0
  3. package/dist/asus/index.d.ts +52 -0
  4. package/dist/asus/index.d.ts.map +1 -0
  5. package/dist/asus/index.js +248 -0
  6. package/dist/asus/index.js.map +1 -0
  7. package/dist/atk/index.d.ts +200 -0
  8. package/dist/atk/index.d.ts.map +1 -0
  9. package/dist/atk/index.js +480 -0
  10. package/dist/atk/index.js.map +1 -0
  11. package/dist/bitmouse/index.d.ts +284 -0
  12. package/dist/bitmouse/index.d.ts.map +1 -0
  13. package/dist/bitmouse/index.js +396 -0
  14. package/dist/bitmouse/index.js.map +1 -0
  15. package/dist/compx/codec.d.ts +31 -0
  16. package/dist/compx/codec.d.ts.map +1 -0
  17. package/dist/compx/codec.js +50 -0
  18. package/dist/compx/codec.js.map +1 -0
  19. package/dist/corsair/index.d.ts +147 -0
  20. package/dist/corsair/index.d.ts.map +1 -0
  21. package/dist/corsair/index.js +223 -0
  22. package/dist/corsair/index.js.map +1 -0
  23. package/dist/dareu/index.d.ts +136 -0
  24. package/dist/dareu/index.d.ts.map +1 -0
  25. package/dist/dareu/index.js +344 -0
  26. package/dist/dareu/index.js.map +1 -0
  27. package/dist/drivers/asus/hid.d.ts +29 -0
  28. package/dist/drivers/asus/hid.d.ts.map +1 -0
  29. package/dist/drivers/asus/hid.js +419 -0
  30. package/dist/drivers/asus/hid.js.map +1 -0
  31. package/dist/drivers/atk/bitmouse-hid.d.ts +80 -0
  32. package/dist/drivers/atk/bitmouse-hid.d.ts.map +1 -0
  33. package/dist/drivers/atk/bitmouse-hid.js +501 -0
  34. package/dist/drivers/atk/bitmouse-hid.js.map +1 -0
  35. package/dist/drivers/atk/hid.d.ts +163 -0
  36. package/dist/drivers/atk/hid.d.ts.map +1 -0
  37. package/dist/drivers/atk/hid.js +1368 -0
  38. package/dist/drivers/atk/hid.js.map +1 -0
  39. package/dist/drivers/atk/products.d.ts +13 -0
  40. package/dist/drivers/atk/products.d.ts.map +1 -0
  41. package/dist/drivers/atk/products.js +13 -0
  42. package/dist/drivers/atk/products.js.map +1 -0
  43. package/dist/drivers/attackshark/dpi.d.ts +41 -0
  44. package/dist/drivers/attackshark/dpi.d.ts.map +1 -0
  45. package/dist/drivers/attackshark/dpi.js +215 -0
  46. package/dist/drivers/attackshark/dpi.js.map +1 -0
  47. package/dist/drivers/attackshark/hid.d.ts +124 -0
  48. package/dist/drivers/attackshark/hid.d.ts.map +1 -0
  49. package/dist/drivers/attackshark/hid.js +728 -0
  50. package/dist/drivers/attackshark/hid.js.map +1 -0
  51. package/dist/drivers/corsair/hid.d.ts +70 -0
  52. package/dist/drivers/corsair/hid.d.ts.map +1 -0
  53. package/dist/drivers/corsair/hid.js +414 -0
  54. package/dist/drivers/corsair/hid.js.map +1 -0
  55. package/dist/drivers/dareu/hid.d.ts +59 -0
  56. package/dist/drivers/dareu/hid.d.ts.map +1 -0
  57. package/dist/drivers/dareu/hid.js +478 -0
  58. package/dist/drivers/dareu/hid.js.map +1 -0
  59. package/dist/drivers/endgame/egg-op1-hid.d.ts +107 -0
  60. package/dist/drivers/endgame/egg-op1-hid.d.ts.map +1 -0
  61. package/dist/drivers/endgame/egg-op1-hid.js +605 -0
  62. package/dist/drivers/endgame/egg-op1-hid.js.map +1 -0
  63. package/dist/drivers/endgame/egg-we-control.d.ts +42 -0
  64. package/dist/drivers/endgame/egg-we-control.d.ts.map +1 -0
  65. package/dist/drivers/endgame/egg-we-control.js +87 -0
  66. package/dist/drivers/endgame/egg-we-control.js.map +1 -0
  67. package/dist/drivers/endgame/egg-we-hid.d.ts +58 -0
  68. package/dist/drivers/endgame/egg-we-hid.d.ts.map +1 -0
  69. package/dist/drivers/endgame/egg-we-hid.js +514 -0
  70. package/dist/drivers/endgame/egg-we-hid.js.map +1 -0
  71. package/dist/drivers/fantech/hid.d.ts +106 -0
  72. package/dist/drivers/fantech/hid.d.ts.map +1 -0
  73. package/dist/drivers/fantech/hid.js +295 -0
  74. package/dist/drivers/fantech/hid.js.map +1 -0
  75. package/dist/drivers/finalmouse/hid.d.ts +31 -0
  76. package/dist/drivers/finalmouse/hid.d.ts.map +1 -0
  77. package/dist/drivers/finalmouse/hid.js +181 -0
  78. package/dist/drivers/finalmouse/hid.js.map +1 -0
  79. package/dist/drivers/gearhub/hid.d.ts +191 -0
  80. package/dist/drivers/gearhub/hid.d.ts.map +1 -0
  81. package/dist/drivers/gearhub/hid.js +542 -0
  82. package/dist/drivers/gearhub/hid.js.map +1 -0
  83. package/dist/drivers/glorious/classic-hid.d.ts +62 -0
  84. package/dist/drivers/glorious/classic-hid.d.ts.map +1 -0
  85. package/dist/drivers/glorious/classic-hid.js +326 -0
  86. package/dist/drivers/glorious/classic-hid.js.map +1 -0
  87. package/dist/drivers/glorious/hid.d.ts +39 -0
  88. package/dist/drivers/glorious/hid.d.ts.map +1 -0
  89. package/dist/drivers/glorious/hid.js +203 -0
  90. package/dist/drivers/glorious/hid.js.map +1 -0
  91. package/dist/drivers/gwolves/hid.d.ts +27 -0
  92. package/dist/drivers/gwolves/hid.d.ts.map +1 -0
  93. package/dist/drivers/gwolves/hid.js +225 -0
  94. package/dist/drivers/gwolves/hid.js.map +1 -0
  95. package/dist/drivers/gwolves/products.d.ts +17 -0
  96. package/dist/drivers/gwolves/products.d.ts.map +1 -0
  97. package/dist/drivers/gwolves/products.js +58 -0
  98. package/dist/drivers/gwolves/products.js.map +1 -0
  99. package/dist/drivers/hyperx/hid.d.ts +59 -0
  100. package/dist/drivers/hyperx/hid.d.ts.map +1 -0
  101. package/dist/drivers/hyperx/hid.js +229 -0
  102. package/dist/drivers/hyperx/hid.js.map +1 -0
  103. package/dist/drivers/incott/hid.d.ts +513 -0
  104. package/dist/drivers/incott/hid.d.ts.map +1 -0
  105. package/dist/drivers/incott/hid.js +1173 -0
  106. package/dist/drivers/incott/hid.js.map +1 -0
  107. package/dist/drivers/index.d.ts +5 -0
  108. package/dist/drivers/index.d.ts.map +1 -0
  109. package/dist/drivers/index.js +5 -0
  110. package/dist/drivers/index.js.map +1 -0
  111. package/dist/drivers/keychron/m6-hid.d.ts +81 -0
  112. package/dist/drivers/keychron/m6-hid.d.ts.map +1 -0
  113. package/dist/drivers/keychron/m6-hid.js +486 -0
  114. package/dist/drivers/keychron/m6-hid.js.map +1 -0
  115. package/dist/drivers/keychron/nape-hid.d.ts +60 -0
  116. package/dist/drivers/keychron/nape-hid.d.ts.map +1 -0
  117. package/dist/drivers/keychron/nape-hid.js +432 -0
  118. package/dist/drivers/keychron/nape-hid.js.map +1 -0
  119. package/dist/drivers/ksnake/hid.d.ts +74 -0
  120. package/dist/drivers/ksnake/hid.d.ts.map +1 -0
  121. package/dist/drivers/ksnake/hid.js +368 -0
  122. package/dist/drivers/ksnake/hid.js.map +1 -0
  123. package/dist/drivers/lamzu/hid.d.ts +58 -0
  124. package/dist/drivers/lamzu/hid.d.ts.map +1 -0
  125. package/dist/drivers/lamzu/hid.js +414 -0
  126. package/dist/drivers/lamzu/hid.js.map +1 -0
  127. package/dist/drivers/lamzu-atlantis/hid.d.ts +148 -0
  128. package/dist/drivers/lamzu-atlantis/hid.d.ts.map +1 -0
  129. package/dist/drivers/lamzu-atlantis/hid.js +587 -0
  130. package/dist/drivers/lamzu-atlantis/hid.js.map +1 -0
  131. package/dist/drivers/logitech/bolt.d.ts +41 -0
  132. package/dist/drivers/logitech/bolt.d.ts.map +1 -0
  133. package/dist/drivers/logitech/bolt.js +105 -0
  134. package/dist/drivers/logitech/bolt.js.map +1 -0
  135. package/dist/drivers/logitech/hidpp.d.ts +525 -0
  136. package/dist/drivers/logitech/hidpp.d.ts.map +1 -0
  137. package/dist/drivers/logitech/hidpp.js +2774 -0
  138. package/dist/drivers/logitech/hidpp.js.map +1 -0
  139. package/dist/drivers/logitech/mode-status.d.ts +53 -0
  140. package/dist/drivers/logitech/mode-status.d.ts.map +1 -0
  141. package/dist/drivers/logitech/mode-status.js +52 -0
  142. package/dist/drivers/logitech/mode-status.js.map +1 -0
  143. package/dist/drivers/logitech/onboard-profiles.d.ts +298 -0
  144. package/dist/drivers/logitech/onboard-profiles.d.ts.map +1 -0
  145. package/dist/drivers/logitech/onboard-profiles.js +965 -0
  146. package/dist/drivers/logitech/onboard-profiles.js.map +1 -0
  147. package/dist/drivers/logitech/rgb-effects.d.ts +20 -0
  148. package/dist/drivers/logitech/rgb-effects.d.ts.map +1 -0
  149. package/dist/drivers/logitech/rgb-effects.js +93 -0
  150. package/dist/drivers/logitech/rgb-effects.js.map +1 -0
  151. package/dist/drivers/mchose/a5-gen1-hid.d.ts +36 -0
  152. package/dist/drivers/mchose/a5-gen1-hid.d.ts.map +1 -0
  153. package/dist/drivers/mchose/a5-gen1-hid.js +219 -0
  154. package/dist/drivers/mchose/a5-gen1-hid.js.map +1 -0
  155. package/dist/drivers/mchose/dock-hid.d.ts +26 -0
  156. package/dist/drivers/mchose/dock-hid.d.ts.map +1 -0
  157. package/dist/drivers/mchose/dock-hid.js +176 -0
  158. package/dist/drivers/mchose/dock-hid.js.map +1 -0
  159. package/dist/drivers/mchose/hid.d.ts +118 -0
  160. package/dist/drivers/mchose/hid.d.ts.map +1 -0
  161. package/dist/drivers/mchose/hid.js +550 -0
  162. package/dist/drivers/mchose/hid.js.map +1 -0
  163. package/dist/drivers/mchose/v3-hid.d.ts +109 -0
  164. package/dist/drivers/mchose/v3-hid.d.ts.map +1 -0
  165. package/dist/drivers/mchose/v3-hid.js +572 -0
  166. package/dist/drivers/mchose/v3-hid.js.map +1 -0
  167. package/dist/drivers/microsoft/hid.d.ts +25 -0
  168. package/dist/drivers/microsoft/hid.d.ts.map +1 -0
  169. package/dist/drivers/microsoft/hid.js +247 -0
  170. package/dist/drivers/microsoft/hid.js.map +1 -0
  171. package/dist/drivers/moddo/hid.d.ts +31 -0
  172. package/dist/drivers/moddo/hid.d.ts.map +1 -0
  173. package/dist/drivers/moddo/hid.js +154 -0
  174. package/dist/drivers/moddo/hid.js.map +1 -0
  175. package/dist/drivers/mouse-types.d.ts +388 -0
  176. package/dist/drivers/mouse-types.d.ts.map +1 -0
  177. package/dist/drivers/mouse-types.js +2 -0
  178. package/dist/drivers/mouse-types.js.map +1 -0
  179. package/dist/drivers/ninjutso/hid.d.ts +62 -0
  180. package/dist/drivers/ninjutso/hid.d.ts.map +1 -0
  181. package/dist/drivers/ninjutso/hid.js +680 -0
  182. package/dist/drivers/ninjutso/hid.js.map +1 -0
  183. package/dist/drivers/orbital/hid.d.ts +24 -0
  184. package/dist/drivers/orbital/hid.d.ts.map +1 -0
  185. package/dist/drivers/orbital/hid.js +85 -0
  186. package/dist/drivers/orbital/hid.js.map +1 -0
  187. package/dist/drivers/orbital/host-protocol.d.ts +59 -0
  188. package/dist/drivers/orbital/host-protocol.d.ts.map +1 -0
  189. package/dist/drivers/orbital/host-protocol.js +884 -0
  190. package/dist/drivers/orbital/host-protocol.js.map +1 -0
  191. package/dist/drivers/pulsar/pulsar-hid.d.ts +63 -0
  192. package/dist/drivers/pulsar/pulsar-hid.d.ts.map +1 -0
  193. package/dist/drivers/pulsar/pulsar-hid.js +381 -0
  194. package/dist/drivers/pulsar/pulsar-hid.js.map +1 -0
  195. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts +46 -0
  196. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts.map +1 -0
  197. package/dist/drivers/pulsar/pulsar-pro-hid.js +343 -0
  198. package/dist/drivers/pulsar/pulsar-pro-hid.js.map +1 -0
  199. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts +40 -0
  200. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts.map +1 -0
  201. package/dist/drivers/pulsar/pulsar-xs1-hid.js +251 -0
  202. package/dist/drivers/pulsar/pulsar-xs1-hid.js.map +1 -0
  203. package/dist/drivers/rawm/hid.d.ts +29 -0
  204. package/dist/drivers/rawm/hid.d.ts.map +1 -0
  205. package/dist/drivers/rawm/hid.js +210 -0
  206. package/dist/drivers/rawm/hid.js.map +1 -0
  207. package/dist/drivers/razer/cobra-hid.d.ts +63 -0
  208. package/dist/drivers/razer/cobra-hid.d.ts.map +1 -0
  209. package/dist/drivers/razer/cobra-hid.js +282 -0
  210. package/dist/drivers/razer/cobra-hid.js.map +1 -0
  211. package/dist/drivers/razer/hid-open.d.ts +13 -0
  212. package/dist/drivers/razer/hid-open.d.ts.map +1 -0
  213. package/dist/drivers/razer/hid-open.js +29 -0
  214. package/dist/drivers/razer/hid-open.js.map +1 -0
  215. package/dist/drivers/razer/hid.d.ts +231 -0
  216. package/dist/drivers/razer/hid.d.ts.map +1 -0
  217. package/dist/drivers/razer/hid.js +772 -0
  218. package/dist/drivers/razer/hid.js.map +1 -0
  219. package/dist/drivers/razer/viper-hid.d.ts +33 -0
  220. package/dist/drivers/razer/viper-hid.d.ts.map +1 -0
  221. package/dist/drivers/razer/viper-hid.js +177 -0
  222. package/dist/drivers/razer/viper-hid.js.map +1 -0
  223. package/dist/drivers/razer/viper-mini-hid.d.ts +58 -0
  224. package/dist/drivers/razer/viper-mini-hid.d.ts.map +1 -0
  225. package/dist/drivers/razer/viper-mini-hid.js +273 -0
  226. package/dist/drivers/razer/viper-mini-hid.js.map +1 -0
  227. package/dist/drivers/razer/viper-v4-pro-hid.d.ts +26 -0
  228. package/dist/drivers/razer/viper-v4-pro-hid.d.ts.map +1 -0
  229. package/dist/drivers/razer/viper-v4-pro-hid.js +154 -0
  230. package/dist/drivers/razer/viper-v4-pro-hid.js.map +1 -0
  231. package/dist/drivers/registry.d.ts +70 -0
  232. package/dist/drivers/registry.d.ts.map +1 -0
  233. package/dist/drivers/registry.js +146 -0
  234. package/dist/drivers/registry.js.map +1 -0
  235. package/dist/drivers/steelseries/aerox3-hid.d.ts +53 -0
  236. package/dist/drivers/steelseries/aerox3-hid.d.ts.map +1 -0
  237. package/dist/drivers/steelseries/aerox3-hid.js +172 -0
  238. package/dist/drivers/steelseries/aerox3-hid.js.map +1 -0
  239. package/dist/drivers/steelseries/aerox5-hid.d.ts +54 -0
  240. package/dist/drivers/steelseries/aerox5-hid.d.ts.map +1 -0
  241. package/dist/drivers/steelseries/aerox5-hid.js +173 -0
  242. package/dist/drivers/steelseries/aerox5-hid.js.map +1 -0
  243. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts +69 -0
  244. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts.map +1 -0
  245. package/dist/drivers/steelseries/aerox5-wireless-hid.js +234 -0
  246. package/dist/drivers/steelseries/aerox5-wireless-hid.js.map +1 -0
  247. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts +70 -0
  248. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts.map +1 -0
  249. package/dist/drivers/steelseries/aerox9-wireless-hid.js +227 -0
  250. package/dist/drivers/steelseries/aerox9-wireless-hid.js.map +1 -0
  251. package/dist/drivers/steelseries/hid.d.ts +48 -0
  252. package/dist/drivers/steelseries/hid.d.ts.map +1 -0
  253. package/dist/drivers/steelseries/hid.js +157 -0
  254. package/dist/drivers/steelseries/hid.js.map +1 -0
  255. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts +62 -0
  256. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts.map +1 -0
  257. package/dist/drivers/steelseries/prime-mini-wireless-hid.js +215 -0
  258. package/dist/drivers/steelseries/prime-mini-wireless-hid.js.map +1 -0
  259. package/dist/drivers/steelseries/prime-plus-hid.d.ts +51 -0
  260. package/dist/drivers/steelseries/prime-plus-hid.d.ts.map +1 -0
  261. package/dist/drivers/steelseries/prime-plus-hid.js +150 -0
  262. package/dist/drivers/steelseries/prime-plus-hid.js.map +1 -0
  263. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts +61 -0
  264. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts.map +1 -0
  265. package/dist/drivers/steelseries/rival3-wireless-hid.js +185 -0
  266. package/dist/drivers/steelseries/rival3-wireless-hid.js.map +1 -0
  267. package/dist/drivers/steelseries/rival310-hid.d.ts +59 -0
  268. package/dist/drivers/steelseries/rival310-hid.d.ts.map +1 -0
  269. package/dist/drivers/steelseries/rival310-hid.js +182 -0
  270. package/dist/drivers/steelseries/rival310-hid.js.map +1 -0
  271. package/dist/drivers/steelseries/rival650-hid.d.ts +68 -0
  272. package/dist/drivers/steelseries/rival650-hid.d.ts.map +1 -0
  273. package/dist/drivers/steelseries/rival650-hid.js +209 -0
  274. package/dist/drivers/steelseries/rival650-hid.js.map +1 -0
  275. package/dist/drivers/steelseries/sensei-ten-hid.d.ts +62 -0
  276. package/dist/drivers/steelseries/sensei-ten-hid.d.ts.map +1 -0
  277. package/dist/drivers/steelseries/sensei-ten-hid.js +186 -0
  278. package/dist/drivers/steelseries/sensei-ten-hid.js.map +1 -0
  279. package/dist/drivers/teevolution/hid.d.ts +82 -0
  280. package/dist/drivers/teevolution/hid.d.ts.map +1 -0
  281. package/dist/drivers/teevolution/hid.js +607 -0
  282. package/dist/drivers/teevolution/hid.js.map +1 -0
  283. package/dist/drivers/vendors.d.ts +254 -0
  284. package/dist/drivers/vendors.d.ts.map +1 -0
  285. package/dist/drivers/vendors.js +587 -0
  286. package/dist/drivers/vendors.js.map +1 -0
  287. package/dist/drivers/vgn/hid.d.ts +33 -0
  288. package/dist/drivers/vgn/hid.d.ts.map +1 -0
  289. package/dist/drivers/vgn/hid.js +213 -0
  290. package/dist/drivers/vgn/hid.js.map +1 -0
  291. package/dist/drivers/wallhack/keyboard-hid.d.ts +28 -0
  292. package/dist/drivers/wallhack/keyboard-hid.d.ts.map +1 -0
  293. package/dist/drivers/wallhack/keyboard-hid.js +80 -0
  294. package/dist/drivers/wallhack/keyboard-hid.js.map +1 -0
  295. package/dist/drivers/wallhack/mouse-hid.d.ts +45 -0
  296. package/dist/drivers/wallhack/mouse-hid.d.ts.map +1 -0
  297. package/dist/drivers/wallhack/mouse-hid.js +288 -0
  298. package/dist/drivers/wallhack/mouse-hid.js.map +1 -0
  299. package/dist/drivers/webhid.d.ts +59 -0
  300. package/dist/drivers/webhid.d.ts.map +1 -0
  301. package/dist/drivers/webhid.js +2 -0
  302. package/dist/drivers/webhid.js.map +1 -0
  303. package/dist/drivers/wlmouse/hid.d.ts +81 -0
  304. package/dist/drivers/wlmouse/hid.d.ts.map +1 -0
  305. package/dist/drivers/wlmouse/hid.js +576 -0
  306. package/dist/drivers/wlmouse/hid.js.map +1 -0
  307. package/dist/drivers/wooting/hid.d.ts +86 -0
  308. package/dist/drivers/wooting/hid.d.ts.map +1 -0
  309. package/dist/drivers/wooting/hid.js +320 -0
  310. package/dist/drivers/wooting/hid.js.map +1 -0
  311. package/dist/drivers/zaunkoenig/hid.d.ts +31 -0
  312. package/dist/drivers/zaunkoenig/hid.d.ts.map +1 -0
  313. package/dist/drivers/zaunkoenig/hid.js +162 -0
  314. package/dist/drivers/zaunkoenig/hid.js.map +1 -0
  315. package/dist/endgame-gear/op1.d.ts +165 -0
  316. package/dist/endgame-gear/op1.d.ts.map +1 -0
  317. package/dist/endgame-gear/op1.js +384 -0
  318. package/dist/endgame-gear/op1.js.map +1 -0
  319. package/dist/endgame-gear/wireless.d.ts +93 -0
  320. package/dist/endgame-gear/wireless.d.ts.map +1 -0
  321. package/dist/endgame-gear/wireless.js +242 -0
  322. package/dist/endgame-gear/wireless.js.map +1 -0
  323. package/dist/fantech/index.d.ts +9 -0
  324. package/dist/fantech/index.d.ts.map +1 -0
  325. package/dist/fantech/index.js +11 -0
  326. package/dist/fantech/index.js.map +1 -0
  327. package/dist/finalmouse/index.d.ts +41 -0
  328. package/dist/finalmouse/index.d.ts.map +1 -0
  329. package/dist/finalmouse/index.js +106 -0
  330. package/dist/finalmouse/index.js.map +1 -0
  331. package/dist/gearhub/index.d.ts +210 -0
  332. package/dist/gearhub/index.d.ts.map +1 -0
  333. package/dist/gearhub/index.js +282 -0
  334. package/dist/gearhub/index.js.map +1 -0
  335. package/dist/glorious/index.d.ts +89 -0
  336. package/dist/glorious/index.d.ts.map +1 -0
  337. package/dist/glorious/index.js +236 -0
  338. package/dist/glorious/index.js.map +1 -0
  339. package/dist/glorious-classic/index.d.ts +103 -0
  340. package/dist/glorious-classic/index.d.ts.map +1 -0
  341. package/dist/glorious-classic/index.js +304 -0
  342. package/dist/glorious-classic/index.js.map +1 -0
  343. package/dist/gwolves/index.d.ts +82 -0
  344. package/dist/gwolves/index.d.ts.map +1 -0
  345. package/dist/gwolves/index.js +197 -0
  346. package/dist/gwolves/index.js.map +1 -0
  347. package/dist/hyperx/index.d.ts +181 -0
  348. package/dist/hyperx/index.d.ts.map +1 -0
  349. package/dist/hyperx/index.js +303 -0
  350. package/dist/hyperx/index.js.map +1 -0
  351. package/dist/incott/index.d.ts +1067 -0
  352. package/dist/incott/index.d.ts.map +1 -0
  353. package/dist/incott/index.js +1482 -0
  354. package/dist/incott/index.js.map +1 -0
  355. package/dist/index.d.ts +30 -0
  356. package/dist/index.d.ts.map +1 -0
  357. package/dist/index.js +30 -0
  358. package/dist/index.js.map +1 -0
  359. package/dist/keychron/index.d.ts +194 -0
  360. package/dist/keychron/index.d.ts.map +1 -0
  361. package/dist/keychron/index.js +341 -0
  362. package/dist/keychron/index.js.map +1 -0
  363. package/dist/ksnake/index.d.ts +157 -0
  364. package/dist/ksnake/index.d.ts.map +1 -0
  365. package/dist/ksnake/index.js +314 -0
  366. package/dist/ksnake/index.js.map +1 -0
  367. package/dist/lamzu/atlantis.d.ts +237 -0
  368. package/dist/lamzu/atlantis.d.ts.map +1 -0
  369. package/dist/lamzu/atlantis.js +263 -0
  370. package/dist/lamzu/atlantis.js.map +1 -0
  371. package/dist/lamzu/index.d.ts +60 -0
  372. package/dist/lamzu/index.d.ts.map +1 -0
  373. package/dist/lamzu/index.js +86 -0
  374. package/dist/lamzu/index.js.map +1 -0
  375. package/dist/logitech/controls.d.ts +138 -0
  376. package/dist/logitech/controls.d.ts.map +1 -0
  377. package/dist/logitech/controls.js +184 -0
  378. package/dist/logitech/controls.js.map +1 -0
  379. package/dist/logitech/friendly-name.d.ts +50 -0
  380. package/dist/logitech/friendly-name.d.ts.map +1 -0
  381. package/dist/logitech/friendly-name.js +74 -0
  382. package/dist/logitech/friendly-name.js.map +1 -0
  383. package/dist/logitech/haptics.d.ts +97 -0
  384. package/dist/logitech/haptics.d.ts.map +1 -0
  385. package/dist/logitech/haptics.js +116 -0
  386. package/dist/logitech/haptics.js.map +1 -0
  387. package/dist/logitech/hosts.d.ts +55 -0
  388. package/dist/logitech/hosts.d.ts.map +1 -0
  389. package/dist/logitech/hosts.js +80 -0
  390. package/dist/logitech/hosts.js.map +1 -0
  391. package/dist/logitech/index.d.ts +127 -0
  392. package/dist/logitech/index.d.ts.map +1 -0
  393. package/dist/logitech/index.js +233 -0
  394. package/dist/logitech/index.js.map +1 -0
  395. package/dist/logitech/wheel.d.ts +117 -0
  396. package/dist/logitech/wheel.d.ts.map +1 -0
  397. package/dist/logitech/wheel.js +133 -0
  398. package/dist/logitech/wheel.js.map +1 -0
  399. package/dist/mchose/a5-gen1.d.ts +38 -0
  400. package/dist/mchose/a5-gen1.d.ts.map +1 -0
  401. package/dist/mchose/a5-gen1.js +60 -0
  402. package/dist/mchose/a5-gen1.js.map +1 -0
  403. package/dist/mchose/buttons.d.ts +66 -0
  404. package/dist/mchose/buttons.d.ts.map +1 -0
  405. package/dist/mchose/buttons.js +184 -0
  406. package/dist/mchose/buttons.js.map +1 -0
  407. package/dist/mchose/dock.d.ts +77 -0
  408. package/dist/mchose/dock.d.ts.map +1 -0
  409. package/dist/mchose/dock.js +133 -0
  410. package/dist/mchose/dock.js.map +1 -0
  411. package/dist/mchose/index.d.ts +299 -0
  412. package/dist/mchose/index.d.ts.map +1 -0
  413. package/dist/mchose/index.js +429 -0
  414. package/dist/mchose/index.js.map +1 -0
  415. package/dist/mchose/v3-buttons.d.ts +64 -0
  416. package/dist/mchose/v3-buttons.d.ts.map +1 -0
  417. package/dist/mchose/v3-buttons.js +258 -0
  418. package/dist/mchose/v3-buttons.js.map +1 -0
  419. package/dist/mchose/v3.d.ts +380 -0
  420. package/dist/mchose/v3.d.ts.map +1 -0
  421. package/dist/mchose/v3.js +608 -0
  422. package/dist/mchose/v3.js.map +1 -0
  423. package/dist/microsoft/index.d.ts +19 -0
  424. package/dist/microsoft/index.d.ts.map +1 -0
  425. package/dist/microsoft/index.js +22 -0
  426. package/dist/microsoft/index.js.map +1 -0
  427. package/dist/moddo/index.d.ts +72 -0
  428. package/dist/moddo/index.d.ts.map +1 -0
  429. package/dist/moddo/index.js +147 -0
  430. package/dist/moddo/index.js.map +1 -0
  431. package/dist/ninjutso/index.d.ts +74 -0
  432. package/dist/ninjutso/index.d.ts.map +1 -0
  433. package/dist/ninjutso/index.js +133 -0
  434. package/dist/ninjutso/index.js.map +1 -0
  435. package/dist/orbital/index.d.ts +14 -0
  436. package/dist/orbital/index.d.ts.map +1 -0
  437. package/dist/orbital/index.js +19 -0
  438. package/dist/orbital/index.js.map +1 -0
  439. package/dist/pulsar/index.d.ts +81 -0
  440. package/dist/pulsar/index.d.ts.map +1 -0
  441. package/dist/pulsar/index.js +185 -0
  442. package/dist/pulsar/index.js.map +1 -0
  443. package/dist/rawm/index.d.ts +55 -0
  444. package/dist/rawm/index.d.ts.map +1 -0
  445. package/dist/rawm/index.js +229 -0
  446. package/dist/rawm/index.js.map +1 -0
  447. package/dist/razer/codec.d.ts +504 -0
  448. package/dist/razer/codec.d.ts.map +1 -0
  449. package/dist/razer/codec.js +648 -0
  450. package/dist/razer/codec.js.map +1 -0
  451. package/dist/razer/devices.d.ts +156 -0
  452. package/dist/razer/devices.d.ts.map +1 -0
  453. package/dist/razer/devices.js +540 -0
  454. package/dist/razer/devices.js.map +1 -0
  455. package/dist/razer/index.d.ts +2 -0
  456. package/dist/razer/index.d.ts.map +1 -0
  457. package/dist/razer/index.js +2 -0
  458. package/dist/razer/index.js.map +1 -0
  459. package/dist/razer/v4.d.ts +19 -0
  460. package/dist/razer/v4.d.ts.map +1 -0
  461. package/dist/razer/v4.js +51 -0
  462. package/dist/razer/v4.js.map +1 -0
  463. package/dist/steelseries/aerox3.d.ts +236 -0
  464. package/dist/steelseries/aerox3.d.ts.map +1 -0
  465. package/dist/steelseries/aerox3.js +311 -0
  466. package/dist/steelseries/aerox3.js.map +1 -0
  467. package/dist/steelseries/aerox5-wireless.d.ts +300 -0
  468. package/dist/steelseries/aerox5-wireless.d.ts.map +1 -0
  469. package/dist/steelseries/aerox5-wireless.js +389 -0
  470. package/dist/steelseries/aerox5-wireless.js.map +1 -0
  471. package/dist/steelseries/aerox5.d.ts +228 -0
  472. package/dist/steelseries/aerox5.d.ts.map +1 -0
  473. package/dist/steelseries/aerox5.js +294 -0
  474. package/dist/steelseries/aerox5.js.map +1 -0
  475. package/dist/steelseries/aerox9-wireless.d.ts +213 -0
  476. package/dist/steelseries/aerox9-wireless.d.ts.map +1 -0
  477. package/dist/steelseries/aerox9-wireless.js +305 -0
  478. package/dist/steelseries/aerox9-wireless.js.map +1 -0
  479. package/dist/steelseries/devices.d.ts +82 -0
  480. package/dist/steelseries/devices.d.ts.map +1 -0
  481. package/dist/steelseries/devices.js +310 -0
  482. package/dist/steelseries/devices.js.map +1 -0
  483. package/dist/steelseries/index.d.ts +13 -0
  484. package/dist/steelseries/index.d.ts.map +1 -0
  485. package/dist/steelseries/index.js +13 -0
  486. package/dist/steelseries/index.js.map +1 -0
  487. package/dist/steelseries/prime-mini-wireless.d.ts +253 -0
  488. package/dist/steelseries/prime-mini-wireless.d.ts.map +1 -0
  489. package/dist/steelseries/prime-mini-wireless.js +351 -0
  490. package/dist/steelseries/prime-mini-wireless.js.map +1 -0
  491. package/dist/steelseries/prime-plus.d.ts +179 -0
  492. package/dist/steelseries/prime-plus.d.ts.map +1 -0
  493. package/dist/steelseries/prime-plus.js +275 -0
  494. package/dist/steelseries/prime-plus.js.map +1 -0
  495. package/dist/steelseries/rival3-wireless.d.ts +222 -0
  496. package/dist/steelseries/rival3-wireless.d.ts.map +1 -0
  497. package/dist/steelseries/rival3-wireless.js +308 -0
  498. package/dist/steelseries/rival3-wireless.js.map +1 -0
  499. package/dist/steelseries/rival3.d.ts +99 -0
  500. package/dist/steelseries/rival3.d.ts.map +1 -0
  501. package/dist/steelseries/rival3.js +147 -0
  502. package/dist/steelseries/rival3.js.map +1 -0
  503. package/dist/steelseries/rival310.d.ts +230 -0
  504. package/dist/steelseries/rival310.d.ts.map +1 -0
  505. package/dist/steelseries/rival310.js +322 -0
  506. package/dist/steelseries/rival310.js.map +1 -0
  507. package/dist/steelseries/rival650.d.ts +215 -0
  508. package/dist/steelseries/rival650.d.ts.map +1 -0
  509. package/dist/steelseries/rival650.js +284 -0
  510. package/dist/steelseries/rival650.js.map +1 -0
  511. package/dist/steelseries/sensei-ten.d.ts +283 -0
  512. package/dist/steelseries/sensei-ten.d.ts.map +1 -0
  513. package/dist/steelseries/sensei-ten.js +389 -0
  514. package/dist/steelseries/sensei-ten.js.map +1 -0
  515. package/dist/teevolution/index.d.ts +211 -0
  516. package/dist/teevolution/index.d.ts.map +1 -0
  517. package/dist/teevolution/index.js +458 -0
  518. package/dist/teevolution/index.js.map +1 -0
  519. package/dist/valkyrie/index.d.ts +19 -0
  520. package/dist/valkyrie/index.d.ts.map +1 -0
  521. package/dist/valkyrie/index.js +43 -0
  522. package/dist/valkyrie/index.js.map +1 -0
  523. package/dist/valkyrie/settings.d.ts +28 -0
  524. package/dist/valkyrie/settings.d.ts.map +1 -0
  525. package/dist/valkyrie/settings.js +84 -0
  526. package/dist/valkyrie/settings.js.map +1 -0
  527. package/dist/vgn/index.d.ts +59 -0
  528. package/dist/vgn/index.d.ts.map +1 -0
  529. package/dist/vgn/index.js +165 -0
  530. package/dist/vgn/index.js.map +1 -0
  531. package/dist/wallhack/index.d.ts +165 -0
  532. package/dist/wallhack/index.d.ts.map +1 -0
  533. package/dist/wallhack/index.js +226 -0
  534. package/dist/wallhack/index.js.map +1 -0
  535. package/dist/wlmouse/index.d.ts +4 -0
  536. package/dist/wlmouse/index.d.ts.map +1 -0
  537. package/dist/wlmouse/index.js +7 -0
  538. package/dist/wlmouse/index.js.map +1 -0
  539. package/dist/wooting/index.d.ts +225 -0
  540. package/dist/wooting/index.d.ts.map +1 -0
  541. package/dist/wooting/index.js +296 -0
  542. package/dist/wooting/index.js.map +1 -0
  543. package/dist/zaunkoenig/index.d.ts +49 -0
  544. package/dist/zaunkoenig/index.d.ts.map +1 -0
  545. package/dist/zaunkoenig/index.js +127 -0
  546. package/dist/zaunkoenig/index.js.map +1 -0
  547. package/package.json +193 -0
@@ -0,0 +1,587 @@
1
+ import { LAMZU_ATLANTIS_COMMAND as COMMAND, LAMZU_ATLANTIS_FLASH as FLASH, LAMZU_ATLANTIS_MAX_DPI as DPI_MAX, LAMZU_ATLANTIS_MAX_DPI_STAGES as MAX_STAGES, LAMZU_ATLANTIS_MAX_PAYLOAD as MAX_PAYLOAD, LAMZU_ATLANTIS_MAX_TIMER_SECONDS as MAX_TIMER_SECONDS, LAMZU_ATLANTIS_MIN_DPI as DPI_MIN, LAMZU_ATLANTIS_PROFILE_COUNT as PROFILE_COUNT, LAMZU_ATLANTIS_REPORT_ID as REPORT_ID, LAMZU_ATLANTIS_SLEEP_OPTIONS as SLEEP_OPTIONS, LAMZU_ATLANTIS_STAGE_STRIDE as STAGE_STRIDE, LAMZU_ATLANTIS_DPI_STEP as DPI_STEP, LAMZU_ATLANTIS_TIMER_STEP_SECONDS as TIMER_STEP_SECONDS, LAMZU_ATLANTIS_USAGE as CONFIG_USAGE, LAMZU_ATLANTIS_USAGE_PAGE as CONFIG_USAGE_PAGE, LAMZU_ATLANTIS_WRITE_ACTIVE_PROFILE as WRITE_ACTIVE_PROFILE, lamzuAtlantisDecodeBattery, lamzuAtlantisDecodeDpiStage, lamzuAtlantisDecodeFirmware, lamzuAtlantisDecodeLiftOffDistance, lamzuAtlantisDecodePollingRate, lamzuAtlantisDecodeReply, lamzuAtlantisEncodeLiftOffDistance, lamzuAtlantisEncodePollingRate, lamzuAtlantisEncodeRequest, lamzuAtlantisFieldIsIntact, lamzuAtlantisProduct, lamzuAtlantisSealField, } from "@openmouse/protocol/lamzu";
2
+ import { pulsarVgnEncodeDpi } from "@openmouse/protocol/pulsar";
3
+ const RESPONSE_TIMEOUT_MS = 600;
4
+ const RESPONSE_ATTEMPTS = 3;
5
+ const DEBOUNCE_MAX_MS = 15;
6
+ /**
7
+ * Lamzu's Atlantis generation (0x3554), which speaks CompX's report-8
8
+ * interrupt protocol rather than the feature-report page/command protocol the
9
+ * 0x373e and 0x37b0 Lamzu models use. Settings are byte fields in a flash
10
+ * image, so every setter here writes one field and reads it back.
11
+ *
12
+ * The framing and the 50-step DPI encoding are shared with the Pulsar 4K
13
+ * receiver and the VGN and Teevolution units on the same vendor id, and are
14
+ * imported rather than reimplemented. What is Lamzu-specific is the identity,
15
+ * the lift-off encoding, the polling-rate table and the DPI-stage fields —
16
+ * see `../../lamzu/atlantis.ts`.
17
+ */
18
+ export class LamzuAtlantisHidClient {
19
+ canDisableSleep = false;
20
+ device;
21
+ queue = Promise.resolve();
22
+ lifecycleQueue = Promise.resolve();
23
+ pending = null;
24
+ abortPending = null;
25
+ listener = null;
26
+ opening = null;
27
+ /** Set by close(), so work already queued gives up instead of reopening. */
28
+ closed = false;
29
+ lastStatus = null;
30
+ firmware = null;
31
+ /**
32
+ * Y values per stage. MouseStatus carries dpiY only for the active stage, so
33
+ * without this a stage switch would report the new stage's X beside the old
34
+ * stage's Y.
35
+ */
36
+ stagesY = [];
37
+ constructor(device) {
38
+ this.device = device;
39
+ }
40
+ static isSupported(device) {
41
+ const search = (collection) => (collection.usagePage === CONFIG_USAGE_PAGE
42
+ && collection.usage === CONFIG_USAGE
43
+ && collection.outputReports.some((report) => report.reportId === REPORT_ID))
44
+ || collection.children.some(search);
45
+ return lamzuAtlantisProduct(device.vendorId, device.productId) !== undefined
46
+ && device.collections.some(search);
47
+ }
48
+ product() {
49
+ return lamzuAtlantisProduct(this.device.vendorId, this.device.productId);
50
+ }
51
+ /**
52
+ * Memoized: two concurrent reads would otherwise both see a closed device,
53
+ * and the second `device.open()` rejects while both callers go on to attach
54
+ * their own listener, of which `close()` removes one.
55
+ */
56
+ async open() {
57
+ await this.lifecycle(async () => {
58
+ this.closed = false;
59
+ await this.ensureOpen();
60
+ });
61
+ }
62
+ /**
63
+ * Opens and closes take turns. Overlapping them lets a reopen inspect the
64
+ * device while a close is still mid-flight: it finds the device open and the
65
+ * listener installed, memoizes a resolved promise, and then the close
66
+ * removes that listener — leaving every later open awaiting a promise that
67
+ * will never reinstall anything.
68
+ */
69
+ async lifecycle(operation) {
70
+ const run = this.lifecycleQueue.then(operation, operation);
71
+ this.lifecycleQueue = run.catch(() => undefined);
72
+ return await run;
73
+ }
74
+ /**
75
+ * Opens without clearing `closed`, so an exchange that was already queued
76
+ * when close() ran cannot quietly reopen the device behind the caller.
77
+ */
78
+ async ensureOpen() {
79
+ this.opening ??= this.openOnce().catch((error) => {
80
+ this.opening = null;
81
+ throw error;
82
+ });
83
+ await this.opening;
84
+ }
85
+ async openOnce() {
86
+ if (!this.device.opened)
87
+ await this.device.open();
88
+ if (this.listener)
89
+ return;
90
+ this.listener = (event) => {
91
+ if (event.reportId !== REPORT_ID || !this.pending)
92
+ return;
93
+ const view = event.data;
94
+ this.pending(new Uint8Array(view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength)));
95
+ };
96
+ this.device.addEventListener("inputreport", this.listener);
97
+ }
98
+ /**
99
+ * Closing has to cancel, not just tidy up. An exchange waiting on a reply is
100
+ * settled here rather than left to time out and retry, and the generation
101
+ * bump makes anything still queued fail instead of reopening the device
102
+ * behind the caller's back.
103
+ */
104
+ async close() {
105
+ await this.lifecycle(() => this.closeOnce());
106
+ }
107
+ async closeOnce() {
108
+ this.closed = true;
109
+ this.lastStatus = null;
110
+ this.pending = null;
111
+ const abort = this.abortPending;
112
+ this.abortPending = null;
113
+ abort?.();
114
+ const opening = this.opening;
115
+ this.opening = null;
116
+ // A close that lands mid-open must wait for that open to finish, or its
117
+ // listener is installed after this has already removed one.
118
+ await opening?.catch(() => undefined);
119
+ if (this.listener)
120
+ this.device.removeEventListener("inputreport", this.listener);
121
+ this.listener = null;
122
+ if (this.device.opened)
123
+ await this.device.close();
124
+ }
125
+ /**
126
+ * No push channel is known on this generation: the only report the config
127
+ * collection carries is 8, which is the request/reply channel, and nothing
128
+ * unsolicited was seen arriving on it while settings were changed in Lamzu's
129
+ * own configurator. Returning false leaves the app on its polling path,
130
+ * which is the honest answer until a notification report turns up.
131
+ */
132
+ async startNotifications() {
133
+ return false;
134
+ }
135
+ displayName() {
136
+ const known = this.product();
137
+ return known ? `Lamzu ${known.model}` : this.device.productName || "Lamzu";
138
+ }
139
+ deviceBrand() {
140
+ return "Lamzu";
141
+ }
142
+ maxDpi() {
143
+ return DPI_MAX;
144
+ }
145
+ getDebounceMaxMs() {
146
+ return DEBOUNCE_MAX_MS;
147
+ }
148
+ getSleepOptions() {
149
+ return SLEEP_OPTIONS;
150
+ }
151
+ getSupportedPollingRates() {
152
+ return [...(this.product()?.pollingRates ?? [125, 250, 500, 1000])];
153
+ }
154
+ getDpiOptions() {
155
+ const options = [];
156
+ for (let dpi = DPI_MIN; dpi <= DPI_MAX; dpi += DPI_STEP)
157
+ options.push(dpi);
158
+ return options;
159
+ }
160
+ isWireless() {
161
+ const known = this.product();
162
+ if (known)
163
+ return known.wireless;
164
+ return /receiver|dongle/i.test(this.device.productName || "");
165
+ }
166
+ async readStatus(live = false) {
167
+ await this.open();
168
+ return await this.transaction(async () => {
169
+ if (live && this.lastStatus)
170
+ return await this.readLiveStatus(this.lastStatus);
171
+ const battery = lamzuAtlantisDecodeBattery(await this.request(COMMAND.batteryLevel));
172
+ const activeProfile = (await this.request(COMMAND.getCurrentConfig))[0] ?? 0;
173
+ if (this.firmware === null) {
174
+ this.firmware = lamzuAtlantisDecodeFirmware("Mouse", await this.request(COMMAND.readVersionId))
175
+ ?? "Mouse firmware unavailable";
176
+ }
177
+ const pollingRaw = (await this.readField(FLASH.reportRate, 1))[0] ?? 0;
178
+ const stageCount = Math.min((await this.readField(FLASH.dpiStageCount, 1))[0] ?? 1, MAX_STAGES);
179
+ const stageIndex = Math.min((await this.readField(FLASH.currentDpi, 1))[0] ?? 0, Math.max(stageCount - 1, 0));
180
+ const stages = [];
181
+ const stagesY = [];
182
+ const colors = [];
183
+ for (let stage = 0; stage < stageCount; stage += 1) {
184
+ const address = FLASH.dpiValues + stage * STAGE_STRIDE;
185
+ const decoded = lamzuAtlantisDecodeDpiStage(await this.readRaw(address, STAGE_STRIDE));
186
+ // A stage carries its own checksum, so a failed decode means a corrupt
187
+ // read. Reporting a plausible-looking 50 DPI instead would be a lie.
188
+ if (!decoded)
189
+ throw new Error(`The mouse returned a corrupt DPI stage from address ${address}.`);
190
+ stages.push(decoded.x);
191
+ stagesY.push(decoded.y);
192
+ const color = await this.readField(FLASH.dpiStageColors + stage * STAGE_STRIDE, 3);
193
+ colors.push(`#${[...color].map((value) => value.toString(16).padStart(2, "0")).join("")}`);
194
+ }
195
+ const liftOffRaw = (await this.readField(FLASH.liftOffDistance, 1))[0] ?? 0;
196
+ const debounceMs = (await this.readField(FLASH.debounceTime, 1))[0] ?? 0;
197
+ const sleepRaw = (await this.readField(FLASH.sleepTime, 1))[0] ?? 0;
198
+ const motionSync = (await this.readField(FLASH.motionSync, 1))[0] === 1;
199
+ const angleSnapping = (await this.readField(FLASH.angleSnapping, 1))[0] === 1;
200
+ const rippleControl = (await this.readField(FLASH.rippleControl, 1))[0] === 1;
201
+ const performanceMode = (await this.readField(FLASH.performanceState, 1))[0] === 1;
202
+ const hyperMode = (await this.readField(FLASH.highPerformance, 1))[0] === 1;
203
+ const wireless = this.isWireless();
204
+ this.stagesY = stagesY;
205
+ return this.lastStatus = {
206
+ brand: "Lamzu",
207
+ name: this.displayName(),
208
+ ui: {
209
+ family: "lamzu-atlantis",
210
+ forceShowBattery: true,
211
+ hideUnsupportedPollingRates: true,
212
+ hideSignalCard: true,
213
+ showAdvancedSection: true,
214
+ dpiStageEditor: {
215
+ maxStages: MAX_STAGES,
216
+ countEditable: true,
217
+ minDpi: DPI_MIN,
218
+ maxDpi: DPI_MAX,
219
+ stepDpi: DPI_STEP,
220
+ },
221
+ },
222
+ batteryPercent: battery.percent,
223
+ batteryVoltageMv: battery.millivolts,
224
+ batteryState: battery.charging ? "Charging" : "Discharging",
225
+ dpi: stages[stageIndex] ?? stages[0] ?? DPI_MIN,
226
+ dpiY: stagesY[stageIndex] ?? stagesY[0] ?? DPI_MIN,
227
+ dpiStages: stages,
228
+ dpiStageColors: colors,
229
+ activeDpiStage: stageIndex,
230
+ pollingRateHz: lamzuAtlantisDecodePollingRate(pollingRaw) ?? this.getSupportedPollingRates()[0] ?? 1000,
231
+ supportedPollingRates: this.getSupportedPollingRates(),
232
+ // The profile byte is 0-based on the wire and 1-based in Lamzu's UI.
233
+ activeProfile: activeProfile + 1,
234
+ profileCount: PROFILE_COUNT,
235
+ connectionType: wireless ? "Wireless" : "Wired",
236
+ connectionDetail: wireless ? "2.4 GHz receiver" : "Wired USB",
237
+ debounceMs,
238
+ sleepTimeout: sleepRaw > 0 ? sleepRaw * TIMER_STEP_SECONDS : null,
239
+ liftOffDistance: lamzuAtlantisDecodeLiftOffDistance(liftOffRaw),
240
+ motionSync,
241
+ angleSnapping,
242
+ rippleControl,
243
+ performanceMode,
244
+ hyperMode,
245
+ firmware: [this.firmware],
246
+ };
247
+ });
248
+ }
249
+ async readLiveStatus(previous) {
250
+ const battery = lamzuAtlantisDecodeBattery(await this.request(COMMAND.batteryLevel));
251
+ const pollingRaw = (await this.readField(FLASH.reportRate, 1))[0] ?? 0;
252
+ return this.lastStatus = {
253
+ ...previous,
254
+ batteryPercent: battery.percent,
255
+ batteryVoltageMv: battery.millivolts,
256
+ batteryState: battery.charging ? "Charging" : "Discharging",
257
+ pollingRateHz: lamzuAtlantisDecodePollingRate(pollingRaw) ?? previous.pollingRateHz,
258
+ };
259
+ }
260
+ async setPollingRate(pollingRateHz) {
261
+ return await this.transaction(async () => {
262
+ const supported = this.getSupportedPollingRates();
263
+ const encoded = lamzuAtlantisEncodePollingRate(pollingRateHz, this.product()?.rateFamily ?? "wired");
264
+ if (encoded === null || !supported.includes(pollingRateHz)) {
265
+ throw new Error(`This mouse does not support ${pollingRateHz} Hz.`);
266
+ }
267
+ const confirmed = lamzuAtlantisDecodePollingRate(await this.writeByte(FLASH.reportRate, encoded));
268
+ if (confirmed !== pollingRateHz) {
269
+ throw new Error(`The mouse kept ${confirmed ?? "an unknown rate"} instead of ${pollingRateHz} Hz.`);
270
+ }
271
+ this.patch({ pollingRateHz: confirmed });
272
+ return confirmed;
273
+ });
274
+ }
275
+ async setLiftOffDistance(value) {
276
+ return await this.transaction(async () => {
277
+ const encoded = lamzuAtlantisEncodeLiftOffDistance(value);
278
+ if (encoded === null) {
279
+ throw new Error(`This mouse does not support a ${value.toLowerCase()} lift-off distance.`);
280
+ }
281
+ const confirmed = lamzuAtlantisDecodeLiftOffDistance(await this.writeByte(FLASH.liftOffDistance, encoded));
282
+ if (confirmed !== value) {
283
+ throw new Error(`The mouse kept a ${String(confirmed).toLowerCase()} lift-off distance instead of ${value.toLowerCase()}.`);
284
+ }
285
+ this.patch({ liftOffDistance: confirmed });
286
+ return confirmed;
287
+ });
288
+ }
289
+ async setDebounceTime(milliseconds) {
290
+ return await this.transaction(async () => {
291
+ if (!Number.isInteger(milliseconds) || milliseconds < 0 || milliseconds > DEBOUNCE_MAX_MS) {
292
+ throw new Error(`Debounce must be a whole number of milliseconds between 0 and ${DEBOUNCE_MAX_MS}.`);
293
+ }
294
+ const confirmed = await this.writeByte(FLASH.debounceTime, milliseconds);
295
+ if (confirmed !== milliseconds) {
296
+ throw new Error(`The mouse kept ${confirmed} ms of debounce instead of ${milliseconds} ms.`);
297
+ }
298
+ this.patch({ debounceMs: confirmed });
299
+ return confirmed;
300
+ });
301
+ }
302
+ async setSleepTimeout(seconds) {
303
+ return await this.transaction(async () => {
304
+ if (!Number.isInteger(seconds)
305
+ || seconds < TIMER_STEP_SECONDS
306
+ || seconds > MAX_TIMER_SECONDS
307
+ || seconds % TIMER_STEP_SECONDS !== 0) {
308
+ throw new Error(`The sleep timeout must be a whole number of ${TIMER_STEP_SECONDS}-second steps up to ${MAX_TIMER_SECONDS} seconds.`);
309
+ }
310
+ const confirmed = (await this.writeByte(FLASH.sleepTime, seconds / TIMER_STEP_SECONDS)) * TIMER_STEP_SECONDS;
311
+ if (confirmed !== seconds) {
312
+ throw new Error(`The mouse kept a ${confirmed} second sleep timeout instead of ${seconds} seconds.`);
313
+ }
314
+ this.patch({ sleepTimeout: confirmed });
315
+ return confirmed;
316
+ });
317
+ }
318
+ async setMotionSync(enabled) {
319
+ return await this.setFlag(FLASH.motionSync, enabled, "motionSync", "Motion Sync");
320
+ }
321
+ async setAngleSnapping(enabled) {
322
+ return await this.setFlag(FLASH.angleSnapping, enabled, "angleSnapping", "angle snapping");
323
+ }
324
+ async setRippleControl(enabled) {
325
+ return await this.setFlag(FLASH.rippleControl, enabled, "rippleControl", "ripple control");
326
+ }
327
+ async setPerformanceMode(enabled) {
328
+ return await this.setFlag(FLASH.performanceState, enabled, "performanceMode", "competition mode");
329
+ }
330
+ async setHyperMode(enabled) {
331
+ return await this.setFlag(FLASH.highPerformance, enabled, "hyperMode", "high performance");
332
+ }
333
+ async setDpi(dpi) {
334
+ return await this.transaction(async () => {
335
+ const stage = this.lastStatus?.activeDpiStage
336
+ ?? (await this.readField(FLASH.currentDpi, 1))[0]
337
+ ?? 0;
338
+ return await this.writeStage(stage, dpi);
339
+ });
340
+ }
341
+ async setDpiStageValue(stage, dpi) {
342
+ return await this.transaction(() => this.writeStage(stage, dpi));
343
+ }
344
+ async writeStage(stage, dpi) {
345
+ if (!Number.isInteger(stage) || stage < 0 || stage >= MAX_STAGES) {
346
+ throw new Error(`This mouse has no DPI stage ${stage + 1}.`);
347
+ }
348
+ const address = FLASH.dpiValues + stage * STAGE_STRIDE;
349
+ // pulsarVgnEncodeDpi returns the stage's four bytes with its checksum
350
+ // already in place, so this writes them as-is rather than re-sealing.
351
+ // It writes one value to both axes, so a stage Lamzu's own app had set to
352
+ // separate x and y is flattened here; asymmetric writes are not attempted
353
+ // without hardware to confirm the flags layout for them.
354
+ await this.write(address, [...pulsarVgnEncodeDpi(dpi)]);
355
+ const stored = lamzuAtlantisDecodeDpiStage(await this.readRaw(address, STAGE_STRIDE));
356
+ const confirmed = stored?.x ?? null;
357
+ if (confirmed !== dpi) {
358
+ throw new Error(`The mouse kept ${confirmed?.toLocaleString() ?? "an unknown DPI"} instead of ${dpi.toLocaleString()}.`);
359
+ }
360
+ const stages = this.lastStatus?.dpiStages?.slice();
361
+ if (stages && stage < stages.length)
362
+ stages[stage] = confirmed;
363
+ // The encoder wrote one value to both axes, so Y moved with X.
364
+ if (stage < this.stagesY.length)
365
+ this.stagesY[stage] = confirmed;
366
+ this.patch({
367
+ ...(stages ? { dpiStages: stages } : {}),
368
+ ...(this.lastStatus?.activeDpiStage === stage ? { dpi: confirmed, dpiY: confirmed } : {}),
369
+ });
370
+ return confirmed;
371
+ }
372
+ async setActiveDpiStage(stage) {
373
+ return await this.transaction(async () => {
374
+ const count = (await this.readField(FLASH.dpiStageCount, 1))[0] ?? 1;
375
+ if (!Number.isInteger(stage) || stage < 0 || stage >= count) {
376
+ throw new Error(`This mouse has no DPI stage ${stage + 1}.`);
377
+ }
378
+ const confirmed = await this.writeByte(FLASH.currentDpi, stage);
379
+ if (confirmed !== stage) {
380
+ throw new Error(`The mouse stayed on DPI stage ${confirmed + 1} instead of ${stage + 1}.`);
381
+ }
382
+ // Both axes belong to the newly selected stage; carrying the old Y over
383
+ // would report this stage's X beside the previous stage's Y.
384
+ this.patch({
385
+ activeDpiStage: confirmed,
386
+ ...(this.lastStatus?.dpiStages?.[confirmed] !== undefined
387
+ ? { dpi: this.lastStatus.dpiStages[confirmed] }
388
+ : {}),
389
+ ...(this.stagesY[confirmed] !== undefined ? { dpiY: this.stagesY[confirmed] } : {}),
390
+ });
391
+ return confirmed;
392
+ });
393
+ }
394
+ async setDpiStageCount(count) {
395
+ return await this.transaction(async () => {
396
+ if (!Number.isInteger(count) || count < 1 || count > MAX_STAGES) {
397
+ throw new Error(`This mouse supports between 1 and ${MAX_STAGES} DPI stages.`);
398
+ }
399
+ // Dropped before the write, not after: if the verification read fails
400
+ // the mouse has still changed, and a cache kept through that failure
401
+ // would describe a stage list that no longer exists.
402
+ this.lastStatus = null;
403
+ this.stagesY = [];
404
+ const confirmed = await this.writeByte(FLASH.dpiStageCount, count);
405
+ if (confirmed !== count) {
406
+ throw new Error(`The mouse kept ${confirmed} DPI stages instead of ${count}.`);
407
+ }
408
+ // Dropping stages can strand the active index past the end of the list.
409
+ const active = (await this.readField(FLASH.currentDpi, 1))[0] ?? 0;
410
+ if (active >= confirmed)
411
+ await this.writeByte(FLASH.currentDpi, confirmed - 1);
412
+ return confirmed;
413
+ });
414
+ }
415
+ async setDpiStageColor(stage, color) {
416
+ return await this.transaction(async () => {
417
+ // Without this bound the stage index scales straight into a flash address:
418
+ // stage -8 lands on the DPI stages at 12, stage 13 on the button actions
419
+ // at 96, and the colour reads back cleanly from wherever it landed.
420
+ if (!Number.isInteger(stage) || stage < 0 || stage >= MAX_STAGES) {
421
+ throw new Error(`This mouse has no DPI stage ${stage + 1}.`);
422
+ }
423
+ const match = /^#?([0-9a-f]{6})$/i.exec(color.trim());
424
+ if (!match)
425
+ throw new Error(`${color} is not a #rrggbb colour.`);
426
+ const wanted = match[1].toLowerCase();
427
+ const address = FLASH.dpiStageColors + stage * STAGE_STRIDE;
428
+ await this.writeField(address, [0, 2, 4].map((offset) => Number.parseInt(wanted.slice(offset, offset + 2), 16)));
429
+ const stored = await this.readField(address, 3);
430
+ const confirmed = `#${[...stored].map((value) => value.toString(16).padStart(2, "0")).join("")}`;
431
+ if (confirmed !== `#${wanted}`)
432
+ throw new Error(`The mouse kept ${confirmed} instead of #${wanted}.`);
433
+ const colors = this.lastStatus?.dpiStageColors?.slice();
434
+ if (colors && stage < colors.length)
435
+ colors[stage] = confirmed;
436
+ if (colors)
437
+ this.patch({ dpiStageColors: colors });
438
+ return confirmed;
439
+ });
440
+ }
441
+ async setProfile(profile) {
442
+ return await this.transaction(async () => {
443
+ if (!Number.isInteger(profile) || profile < 1 || profile > PROFILE_COUNT) {
444
+ throw new Error(`This mouse has profiles 1 to ${PROFILE_COUNT}.`);
445
+ }
446
+ // Every cached field — DPI stages, colours, active stage, the toggles —
447
+ // describes the profile we are leaving, and setDpi trusts the cached
448
+ // active stage. Dropped before the write, so a failed verification read
449
+ // cannot leave the old profile's settings looking current.
450
+ this.lastStatus = null;
451
+ this.stagesY = [];
452
+ await this.request(WRITE_ACTIVE_PROFILE, 0, [profile - 1]);
453
+ const confirmed = ((await this.request(COMMAND.getCurrentConfig))[0] ?? 0) + 1;
454
+ if (confirmed !== profile) {
455
+ throw new Error(`The mouse stayed on profile ${confirmed} instead of ${profile}.`);
456
+ }
457
+ return confirmed;
458
+ });
459
+ }
460
+ async setFlag(address, enabled, field, label) {
461
+ return await this.transaction(async () => {
462
+ const confirmed = (await this.writeByte(address, enabled ? 1 : 0)) === 1;
463
+ if (confirmed !== enabled)
464
+ throw new Error(`The mouse left ${label} ${confirmed ? "on" : "off"}.`);
465
+ this.patch({ [field]: confirmed });
466
+ return confirmed;
467
+ });
468
+ }
469
+ patch(changes) {
470
+ if (this.lastStatus)
471
+ this.lastStatus = { ...this.lastStatus, ...changes };
472
+ }
473
+ /**
474
+ * Writes one field byte and returns what the mouse reports afterwards. The
475
+ * write and its read-back are one transaction: interleaved with another
476
+ * setter for the same field, this would otherwise read the other value back
477
+ * and report a failure the mouse never made.
478
+ */
479
+ async writeByte(address, value) {
480
+ await this.writeField(address, [value]);
481
+ return (await this.readField(address, 1))[0] ?? 0;
482
+ }
483
+ async writeField(address, values) {
484
+ await this.write(address, lamzuAtlantisSealField([...values]));
485
+ }
486
+ async write(address, bytes) {
487
+ await this.exchange(COMMAND.writeFlashData, address, bytes);
488
+ }
489
+ /**
490
+ * Reads a flash field together with the checksum byte stored after it, and
491
+ * refuses the value unless the pair checksums out.
492
+ */
493
+ async readField(address, length) {
494
+ const field = await this.readRaw(address, length + 1);
495
+ if (!lamzuAtlantisFieldIsIntact(field)) {
496
+ throw new Error(`The mouse returned a corrupt value from address ${address}.`);
497
+ }
498
+ return field.subarray(0, length);
499
+ }
500
+ async readRaw(address, length) {
501
+ if (length > MAX_PAYLOAD)
502
+ throw new Error("A CompX flash read spans at most 10 bytes.");
503
+ const payload = await this.exchange(COMMAND.readFlashData, address, new Array(length).fill(0));
504
+ return payload.subarray(0, length);
505
+ }
506
+ /**
507
+ * Serializes a whole public operation, not a single packet.
508
+ *
509
+ * Queueing per exchange is not enough: a setter is a write followed by a
510
+ * read-back, and two concurrent setters for the same field would interleave
511
+ * as write(a), write(b), read(b), read(b) — the first setter then throws
512
+ * about a value the mouse did accept.
513
+ *
514
+ * Every public method holds this exactly once and works through the
515
+ * unqueued helpers below it, so there is no reentrancy to detect. An
516
+ * "am I nested?" flag cannot work here: it says only that *someone* owns
517
+ * the lock, so an unrelated caller arriving mid-operation would read it as
518
+ * nesting, run inline, and overwrite the in-flight exchange's reply
519
+ * callback.
520
+ */
521
+ async transaction(operation) {
522
+ const run = this.queue.then(operation, operation);
523
+ this.queue = run.catch(() => undefined);
524
+ return await run;
525
+ }
526
+ /** Unqueued: the caller already holds the transaction lock. */
527
+ async request(command, address = 0, payload = []) {
528
+ return await this.exchange(command, address, payload);
529
+ }
530
+ async exchange(command, address, payload) {
531
+ if (this.closed)
532
+ throw new Error("The connection to the mouse was closed.");
533
+ await this.ensureOpen();
534
+ const request = lamzuAtlantisEncodeRequest({ command, address, payload });
535
+ for (let attempt = 0; attempt < RESPONSE_ATTEMPTS; attempt += 1) {
536
+ if (this.closed)
537
+ throw new Error("The connection to the mouse was closed.");
538
+ const reply = await this.sendAndWait(request, command, address);
539
+ if (this.closed)
540
+ throw new Error("The connection to the mouse was closed.");
541
+ if (!reply)
542
+ continue;
543
+ if (reply.error !== 0) {
544
+ throw new Error(`Command 0x${command.toString(16).padStart(2, "0")} failed with status ${reply.error}.`);
545
+ }
546
+ return reply.payload;
547
+ }
548
+ throw new Error(`Command 0x${command.toString(16).padStart(2, "0")} got no answer — the mouse may be asleep or out of range.`);
549
+ }
550
+ /**
551
+ * A reply that does not match is skipped rather than treated as a failure.
552
+ *
553
+ * Matching on the command alone is not enough: every flash access shares
554
+ * command 0x08 (or 0x07), so after a timed-out attempt a late reply would
555
+ * satisfy the *next* request for a different address — a read of the
556
+ * debounce byte could return the motion-sync byte, and a setter's read-back
557
+ * would then verify against the wrong field. Every reply echoes the address
558
+ * it was asked for, so flash replies are matched on it too.
559
+ */
560
+ async sendAndWait(request, command, address) {
561
+ const addressed = command === COMMAND.readFlashData || command === COMMAND.writeFlashData;
562
+ return await new Promise((resolve) => {
563
+ let settled = false;
564
+ const finish = (value) => {
565
+ if (settled)
566
+ return;
567
+ settled = true;
568
+ this.pending = null;
569
+ this.abortPending = null;
570
+ globalThis.clearTimeout(timer);
571
+ resolve(value);
572
+ };
573
+ const timer = globalThis.setTimeout(() => finish(null), RESPONSE_TIMEOUT_MS);
574
+ this.abortPending = () => finish(null);
575
+ this.pending = (body) => {
576
+ const reply = lamzuAtlantisDecodeReply(body);
577
+ if (!reply || reply.command !== command)
578
+ return;
579
+ if (addressed && reply.address !== address)
580
+ return;
581
+ finish(reply);
582
+ };
583
+ this.device.sendReport(REPORT_ID, request).catch(() => finish(null));
584
+ });
585
+ }
586
+ }
587
+ //# sourceMappingURL=hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.js","sourceRoot":"","sources":["../../../src/drivers/lamzu-atlantis/hid.ts"],"names":[],"mappings":"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"}