@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,550 @@
1
+ import { MCHOSE_COMMAND, MCHOSE_CONFIG_USAGE, MCHOSE_CONFIG_USAGE_PAGE, MCHOSE_DPI_STAGES, MCHOSE_LONG_REPORT_ID, MCHOSE_LONG_TOKENS, MCHOSE_PRODUCTS, MCHOSE_PROFILE_COUNT, MCHOSE_SLEEP_OPTIONS, MCHOSE_DEBOUNCE_MAX_MS, MCHOSE_DOCK_PRODUCT_ID, MCHOSE_ANGLE_TUNING_MAX, MCHOSE_SHORT_REPORT_ID, MCHOSE_SHORT_TOKENS, mchoseDecodeBattery, mchoseDecodeConfig, mchoseDecodeIdentity, mchoseDecodeReply, mchoseDecodeVersion, mchoseEncodeCommand, mchoseEncodeConfigWrite, mchoseEncodeSetProfile, mchoseEncodeSleep, mchoseEncodePerformance, mchoseLiftOffLabels, mchoseDecodeButtons, mchoseDecodeButtonName, MCHOSE_BUTTON_TYPE, mchoseDecodeProfileName, mchoseModeNumber, MCHOSE_MODES, MCHOSE_ANGLE_TUNING_MIN, mchoseEncodeButton, mchoseFindButtonAction, MCHOSE_BUTTONS, MCHOSE_BUTTON_ACTIONS, mchoseFindProduct, mchoseV3IsProductId, mchosePollingRates, } from "@openmouse/protocol/mchose";
2
+ import { VENDOR_ID } from "../vendors.js";
3
+ /**
4
+ * MCHOSE A7 V2 family, over the vendor `0xff01` collection.
5
+ *
6
+ * The command set and its bit-inverted wire format were recovered from
7
+ * MCHOSE's M HUB web driver and verified against an A7 V2 Ultra+ on its 2.4 GHz
8
+ * receiver, including a polling-rate write that round-tripped and restored.
9
+ * docs/mchose-protocol.md has the details, including which of the device's
10
+ * other vendor collections are decoys.
11
+ */
12
+ /** A reply can arrive before the firmware has filled it in, so reads are polled. */
13
+ const POLL_DELAY_MS = 90;
14
+ const POLL_ATTEMPTS = 20;
15
+ /** Settle time after a config write before the value reads back. */
16
+ const WRITE_SETTLE_MS = 400;
17
+ /** The mouse needs longer than a config write before it answers for a new profile. */
18
+ const PROFILE_SETTLE_MS = 600;
19
+ /** Sleep is applied more slowly still; 400 ms was not enough on hardware. */
20
+ const SLEEP_SETTLE_MS = 1500;
21
+ /**
22
+ * The performance command is the slowest to apply; at 1200 ms a read still
23
+ * returned the previous state, so it is given longer and retried.
24
+ */
25
+ const PERFORMANCE_SETTLE_MS = 2000;
26
+ const PERFORMANCE_ATTEMPTS = 3;
27
+ /** A button write is a standalone command and applies quickly. */
28
+ const BUTTON_SETTLE_MS = 900;
29
+ /** Bytes of the 0x67 reply that carry fields; past this is stale scratch. */
30
+ const CONFIG_MEANINGFUL_BYTES = 20;
31
+ const BATTERY_MEANINGFUL_BYTES = 11;
32
+ const DPI_MIN = 50;
33
+ const DPI_STEP = 50;
34
+ const delay = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); });
35
+ export class MchoseHidClient {
36
+ device;
37
+ queue = Promise.resolve();
38
+ cachedProduct = null;
39
+ constructor(device) {
40
+ this.device = device;
41
+ }
42
+ static isSupported(device) {
43
+ const search = (collection) => (collection.usagePage === MCHOSE_CONFIG_USAGE_PAGE
44
+ && collection.usage === MCHOSE_CONFIG_USAGE)
45
+ || collection.children.some(search);
46
+ return device.vendorId === VENDOR_ID.mchose
47
+ // The MagDock is the same vendor but a different protocol entirely, and
48
+ // has its own driver; it must never be claimed as a mouse.
49
+ && device.productId !== MCHOSE_DOCK_PRODUCT_ID
50
+ // The A7 V3 generation puts a *different* protocol on this same usage
51
+ // page, so the collection alone no longer identifies a V2. Subtracting
52
+ // the known V3 ids rather than listing the V2's keeps this open to
53
+ // unlisted V2-era models, which is how it found the test hardware.
54
+ && !mchoseV3IsProductId(device.productId)
55
+ && device.collections.some(search);
56
+ }
57
+ async open() {
58
+ if (!this.device.opened)
59
+ await this.device.open();
60
+ }
61
+ async close() {
62
+ if (this.device.opened)
63
+ await this.device.close();
64
+ }
65
+ /** MCHOSE pushes unsolicited reports, but their layout is not decoded yet. */
66
+ async startNotifications() {
67
+ return false;
68
+ }
69
+ displayName() {
70
+ const name = this.device.productName?.trim();
71
+ if (!name)
72
+ return "MCHOSE";
73
+ return /^mchose/i.test(name) ? name : `MCHOSE ${name}`;
74
+ }
75
+ isWireless() {
76
+ return !this.isWired();
77
+ }
78
+ /**
79
+ * Over a cable the host talks to the mouse itself, so the product id is a
80
+ * model id; every other link enumerates as a shared receiver id. Which link
81
+ * is live decides which half of the config byte pair applies.
82
+ */
83
+ isWired() {
84
+ return MCHOSE_PRODUCTS.some((entry) => entry.productId === this.device.productId);
85
+ }
86
+ /**
87
+ * Send a command and poll for its answer.
88
+ *
89
+ * Two guards matter here, because every command shares one reply buffer: the
90
+ * command echo must un-invert to what was sent, and the caller's `accept`
91
+ * check must pass. Without both, a stale answer left by a previous command
92
+ * reads as a valid one — which is exactly how a config read can hand back a
93
+ * battery reply.
94
+ */
95
+ request(reportId, command, tokenCount, accept, extraTokens = []) {
96
+ const run = async () => {
97
+ const body = mchoseEncodeCommand([command, ...extraTokens], tokenCount);
98
+ let previous = null;
99
+ for (let attempt = 0; attempt < POLL_ATTEMPTS; attempt += 1) {
100
+ await this.device.sendFeatureReport(reportId, body);
101
+ await delay(POLL_DELAY_MS);
102
+ let raw;
103
+ try {
104
+ raw = await this.device.receiveFeatureReport(reportId);
105
+ }
106
+ catch {
107
+ continue;
108
+ }
109
+ const reply = mchoseDecodeReply(new Uint8Array(raw.buffer));
110
+ if (!reply || reply.command !== command)
111
+ continue;
112
+ if (!accept(reply.payload))
113
+ continue;
114
+ if (previous && reply.payload.every((byte, index) => byte === previous[index])) {
115
+ return reply.payload;
116
+ }
117
+ previous = Uint8Array.from(reply.payload);
118
+ }
119
+ return null;
120
+ };
121
+ const next = this.queue.then(run, run);
122
+ this.queue = next.catch(() => undefined);
123
+ return next;
124
+ }
125
+ nonZero(length) {
126
+ return (payload) => payload.subarray(0, length).some((byte) => byte !== 0);
127
+ }
128
+ /** A config payload always carries a plausible first DPI stage. */
129
+ static looksLikeConfig(payload) {
130
+ if (payload.length < CONFIG_MEANINGFUL_BYTES)
131
+ return false;
132
+ const firstStage = (payload[4] ?? 0) | ((payload[5] ?? 0) << 8);
133
+ return firstStage >= DPI_MIN && firstStage <= 42000;
134
+ }
135
+ readConfigPayload() {
136
+ return this.request(MCHOSE_LONG_REPORT_ID, MCHOSE_COMMAND.config, MCHOSE_LONG_TOKENS, MchoseHidClient.looksLikeConfig);
137
+ }
138
+ /**
139
+ * Read the config, apply `changes`, write it back and confirm it took. The
140
+ * whole payload is echoed apart from the changed fields, so button mappings
141
+ * and macros are preserved rather than zeroed by a partial write.
142
+ */
143
+ async updateConfig(changes) {
144
+ await this.open();
145
+ const before = await this.readConfigPayload();
146
+ if (!before)
147
+ throw new Error("The mouse did not return its configuration.");
148
+ const tokens = mchoseEncodeConfigWrite(before, changes);
149
+ const body = mchoseEncodeCommand(tokens, MCHOSE_LONG_TOKENS);
150
+ const send = async () => {
151
+ await this.device.sendFeatureReport(MCHOSE_LONG_REPORT_ID, body);
152
+ await delay(WRITE_SETTLE_MS);
153
+ };
154
+ const queued = this.queue.then(send, send);
155
+ this.queue = queued.catch(() => undefined);
156
+ await queued;
157
+ const after = await this.readConfigPayload();
158
+ const decoded = after ? mchoseDecodeConfig(after) : null;
159
+ if (!decoded)
160
+ throw new Error("The mouse did not confirm the new configuration.");
161
+ return decoded;
162
+ }
163
+ linkRates(product) {
164
+ return product ? mchosePollingRates(product, this.device.productId) : [];
165
+ }
166
+ async readStatus() {
167
+ await this.open();
168
+ // Identity and version answer from the receiver itself and are reliable;
169
+ // battery and config travel over the RF link, so a partial read degrades
170
+ // rather than breaking the connect flow.
171
+ const identity = mchoseDecodeIdentity((await this.request(MCHOSE_SHORT_REPORT_ID, MCHOSE_COMMAND.identity, MCHOSE_SHORT_TOKENS, this.nonZero(7))) ?? new Uint8Array());
172
+ const version = mchoseDecodeVersion((await this.request(MCHOSE_SHORT_REPORT_ID, MCHOSE_COMMAND.version, MCHOSE_SHORT_TOKENS, this.nonZero(2))) ?? new Uint8Array());
173
+ let battery = null;
174
+ const batteryPayload = await this.request(MCHOSE_SHORT_REPORT_ID, MCHOSE_COMMAND.battery, MCHOSE_SHORT_TOKENS, this.nonZero(BATTERY_MEANINGFUL_BYTES));
175
+ if (batteryPayload)
176
+ battery = mchoseDecodeBattery(batteryPayload);
177
+ const configPayload = await this.readConfigPayload();
178
+ const config = configPayload ? mchoseDecodeConfig(configPayload) : null;
179
+ const product = mchoseFindProduct(battery?.productId ?? null, this.device.productName);
180
+ this.cachedProduct = product;
181
+ const wired = this.isWired();
182
+ const stageIndex = config ? (wired ? config.wiredDpiIndex : config.wirelessDpiIndex) : 0;
183
+ const rateIndex = config ? (wired ? config.wiredRateIndex : config.wirelessRateIndex) : -1;
184
+ const stages = config?.dpiStages ?? [];
185
+ const rates = this.linkRates(product);
186
+ const liftOffSteps = product?.liftOffDistances.length ?? 3;
187
+ const buttons = configPayload ? mchoseDecodeButtons(configPayload) : null;
188
+ if (buttons)
189
+ await this.labelMacros(buttons);
190
+ const profileNames = config ? await this.readProfileNames() : null;
191
+ const firmware = [];
192
+ if (version)
193
+ firmware.push(`Receiver ${version}`);
194
+ return {
195
+ brand: "MCHOSE",
196
+ name: product ? `MCHOSE ${product.name}` : this.displayName(),
197
+ batteryPercent: battery?.batteryPercent ?? null,
198
+ batteryState: battery?.charging ? "Charging" : battery ? "Discharging" : "Unknown",
199
+ dpi: stages[stageIndex] ?? 0,
200
+ dpiStages: stages.length ? stages : undefined,
201
+ activeDpiStage: stages.length ? stageIndex : undefined,
202
+ pollingRateHz: rates[rateIndex] ?? 0,
203
+ supportedPollingRates: rates.length ? [...rates] : undefined,
204
+ // The wire index is 0-based; the shell shows profiles counting from one.
205
+ activeProfile: config ? config.profileIndex + 1 : null,
206
+ profileCount: config ? MCHOSE_PROFILE_COUNT : undefined,
207
+ profileNames: profileNames ?? undefined,
208
+ debounceMs: config?.keyDebounce ?? null,
209
+ sleepTimeout: config ? config.sleep * 60 : null,
210
+ connectionType: wired ? "Wired" : "Wireless",
211
+ connectionDetail: identity && !identity.connected
212
+ ? "Receiver connected, mouse not linked"
213
+ : undefined,
214
+ liftOffDistance: config ? (mchoseLiftOffLabels(liftOffSteps)[config.liftOffIndex] ?? null) : null,
215
+ motionSync: config ? config.processing.motionSync : null,
216
+ angleSnapping: config ? config.processing.angleSnapping : null,
217
+ rippleControl: config ? config.processing.rippleControl : null,
218
+ powerMode: config ? config.mode : undefined,
219
+ powerModes: config ? [...MCHOSE_MODES] : undefined,
220
+ angleTuning: config ? config.angleTuning : null,
221
+ supportedLiftOffDistances: config ? mchoseLiftOffLabels(liftOffSteps) : undefined,
222
+ buttonMappings: buttons
223
+ ? Object.fromEntries(MCHOSE_BUTTONS.map((name, index) => [name, buttons[index].label]))
224
+ : undefined,
225
+ buttonOptions: buttons ? this.getButtonOptions() : undefined,
226
+ firmware,
227
+ ui: {
228
+ family: "mchose",
229
+ settingsReady: Boolean(config),
230
+ valuesVerified: Boolean(config),
231
+ defaultDisplayName: "MCHOSE",
232
+ forceShowBattery: true,
233
+ hideSignalCard: true,
234
+ hideUnsupportedPollingRates: true,
235
+ // Each link stores its own polling rate and DPI stage; only the one in
236
+ // use is shown, so say which that is.
237
+ pollingNote: wired
238
+ ? "Applies to the wired connection."
239
+ : "Applies to the 2.4 GHz connection; Bluetooth is capped at 1000 Hz.",
240
+ dpiStageEditor: {
241
+ maxStages: MCHOSE_DPI_STAGES,
242
+ countEditable: true,
243
+ minDpi: DPI_MIN,
244
+ maxDpi: product?.dpiMax ?? 26000,
245
+ stepDpi: DPI_STEP,
246
+ },
247
+ },
248
+ };
249
+ }
250
+ /** Called for every connected client; the stage editor drives DPI here. */
251
+ getDpiOptions() {
252
+ return [];
253
+ }
254
+ // ── setters ──────────────────────────────────────────────────────────────
255
+ async setPollingRate(hertz) {
256
+ const rates = this.linkRates(this.cachedProduct);
257
+ const index = rates.indexOf(hertz);
258
+ if (index < 0)
259
+ throw new Error(`This mouse does not support ${hertz} Hz on this connection.`);
260
+ const key = this.isWired() ? "wiredRateIndex" : "wirelessRateIndex";
261
+ const after = await this.updateConfig({ [key]: index });
262
+ const applied = this.isWired() ? after.wiredRateIndex : after.wirelessRateIndex;
263
+ if (applied !== index)
264
+ throw new Error("The mouse did not accept the new polling rate.");
265
+ }
266
+ async setActiveDpiStage(stage) {
267
+ if (!Number.isInteger(stage) || stage < 0 || stage >= MCHOSE_DPI_STAGES) {
268
+ throw new Error(`DPI stage must be 0-${MCHOSE_DPI_STAGES - 1}.`);
269
+ }
270
+ const key = this.isWired() ? "wiredDpiIndex" : "wirelessDpiIndex";
271
+ const after = await this.updateConfig({ [key]: stage });
272
+ const applied = this.isWired() ? after.wiredDpiIndex : after.wirelessDpiIndex;
273
+ if (applied !== stage)
274
+ throw new Error("The mouse did not accept the new DPI stage.");
275
+ }
276
+ async setDpiStageValue(stage, dpi) {
277
+ if (!Number.isInteger(stage) || stage < 0 || stage >= MCHOSE_DPI_STAGES) {
278
+ throw new Error(`DPI stage must be 0-${MCHOSE_DPI_STAGES - 1}.`);
279
+ }
280
+ const max = this.cachedProduct?.dpiMax ?? 26000;
281
+ if (dpi < DPI_MIN || dpi > max)
282
+ throw new Error(`DPI must be between ${DPI_MIN} and ${max}.`);
283
+ const rounded = Math.round(dpi / DPI_STEP) * DPI_STEP;
284
+ const before = await this.readConfigPayload();
285
+ const current = before ? mchoseDecodeConfig(before) : null;
286
+ if (!current)
287
+ throw new Error("The mouse did not return its configuration.");
288
+ const stages = [...current.dpiStages];
289
+ stages[stage] = rounded;
290
+ const after = await this.updateConfig({ dpiStages: stages });
291
+ if (after.dpiStages[stage] !== rounded) {
292
+ throw new Error("The mouse did not accept the new DPI value.");
293
+ }
294
+ }
295
+ /**
296
+ * Switch the active onboard profile. `profile` is 1-based to match what the
297
+ * shell displays; the firmware is 0-based.
298
+ *
299
+ * Each profile carries its own DPI stages and per-link rate, so everything
300
+ * the panel shows changes with it — the caller is expected to re-read status
301
+ * afterwards. The device also needs a moment before it will answer for the
302
+ * newly selected profile, hence the settle below.
303
+ */
304
+ async setProfile(profile) {
305
+ if (!Number.isInteger(profile) || profile < 1 || profile > MCHOSE_PROFILE_COUNT) {
306
+ throw new Error(`Profile must be 1-${MCHOSE_PROFILE_COUNT}.`);
307
+ }
308
+ await this.open();
309
+ const body = mchoseEncodeCommand(mchoseEncodeSetProfile(profile - 1), MCHOSE_SHORT_TOKENS);
310
+ const send = async () => {
311
+ await this.device.sendFeatureReport(MCHOSE_SHORT_REPORT_ID, body);
312
+ await delay(PROFILE_SETTLE_MS);
313
+ };
314
+ const queued = this.queue.then(send, send);
315
+ this.queue = queued.catch(() => undefined);
316
+ await queued;
317
+ const after = await this.readConfigPayload();
318
+ const decoded = after ? mchoseDecodeConfig(after) : null;
319
+ if (!decoded)
320
+ throw new Error("The mouse did not confirm the profile change.");
321
+ if (decoded.profileIndex !== profile - 1) {
322
+ throw new Error("The mouse did not switch to that profile.");
323
+ }
324
+ }
325
+ /**
326
+ * Lift-off and the processing toggles share one command and one status byte,
327
+ * so both go through here rather than `updateConfig`. They still read back
328
+ * out of the config blob, which is what confirms the change.
329
+ */
330
+ async writePerformance(liftOffIndex, changes, applied) {
331
+ await this.open();
332
+ const body = mchoseEncodeCommand(mchoseEncodePerformance(liftOffIndex, changes), MCHOSE_SHORT_TOKENS);
333
+ // This command is the slowest of the lot, and a read taken too soon comes
334
+ // back with the *previous* state rather than failing — which reads as the
335
+ // change being rejected. Re-send and re-read until the value actually
336
+ // reflects what was asked for.
337
+ let last = null;
338
+ for (let attempt = 0; attempt < PERFORMANCE_ATTEMPTS; attempt += 1) {
339
+ const send = async () => {
340
+ await this.device.sendFeatureReport(MCHOSE_SHORT_REPORT_ID, body);
341
+ await delay(PERFORMANCE_SETTLE_MS);
342
+ };
343
+ const queued = this.queue.then(send, send);
344
+ this.queue = queued.catch(() => undefined);
345
+ await queued;
346
+ const after = await this.readConfigPayload();
347
+ const decoded = after ? mchoseDecodeConfig(after) : null;
348
+ if (decoded) {
349
+ last = decoded;
350
+ if (applied(decoded))
351
+ return decoded;
352
+ }
353
+ }
354
+ if (!last)
355
+ throw new Error("The mouse did not confirm the change.");
356
+ return last;
357
+ }
358
+ /** The current lift-off step, needed because the command always carries it. */
359
+ async currentLiftOffIndex() {
360
+ const payload = await this.readConfigPayload();
361
+ const config = payload ? mchoseDecodeConfig(payload) : null;
362
+ if (!config)
363
+ throw new Error("The mouse did not return its configuration.");
364
+ return config.liftOffIndex;
365
+ }
366
+ async setLiftOffDistance(label) {
367
+ const steps = this.cachedProduct?.liftOffDistances.length ?? 3;
368
+ const index = mchoseLiftOffLabels(steps).indexOf(label);
369
+ if (index < 0)
370
+ throw new Error(`This mouse does not offer a ${label} lift-off distance.`);
371
+ const after = await this.writePerformance(index, {}, (c) => c.liftOffIndex === index);
372
+ if (after.liftOffIndex !== index) {
373
+ throw new Error("The mouse did not accept that lift-off distance.");
374
+ }
375
+ }
376
+ async setMotionSync(enabled) {
377
+ const after = await this.writePerformance(await this.currentLiftOffIndex(), { motionSync: enabled }, (c) => c.processing.motionSync === enabled);
378
+ if (after.processing.motionSync !== enabled) {
379
+ throw new Error("The mouse did not accept the motion sync change.");
380
+ }
381
+ }
382
+ async setAngleSnapping(enabled) {
383
+ const after = await this.writePerformance(await this.currentLiftOffIndex(), { angleSnapping: enabled }, (c) => c.processing.angleSnapping === enabled);
384
+ if (after.processing.angleSnapping !== enabled) {
385
+ throw new Error("The mouse did not accept the angle snapping change.");
386
+ }
387
+ }
388
+ async setRippleControl(enabled) {
389
+ const after = await this.writePerformance(await this.currentLiftOffIndex(), { rippleControl: enabled }, (c) => c.processing.rippleControl === enabled);
390
+ if (after.processing.rippleControl !== enabled) {
391
+ throw new Error("The mouse did not accept the ripple control change.");
392
+ }
393
+ }
394
+ /** The named power/performance modes this mouse offers. */
395
+ getPowerModes() {
396
+ return [...MCHOSE_MODES];
397
+ }
398
+ /**
399
+ * MCHOSE's mode selector — Performance, eSports or Ultra. It is a three-way
400
+ * choice, not a switch: the two bits live at the top of the same `sensor`
401
+ * byte as lift-off and the processing toggles.
402
+ */
403
+ async setPowerMode(name) {
404
+ const mode = mchoseModeNumber(name);
405
+ if (mode === null)
406
+ throw new Error(`This mouse has no "${name}" mode.`);
407
+ const after = await this.writePerformance(await this.currentLiftOffIndex(), { mode }, (config) => config.mode === name);
408
+ if (after.mode !== name)
409
+ throw new Error("The mouse did not accept the mode change.");
410
+ }
411
+ /** Angle tuning in degrees; 0 turns the correction off. */
412
+ async setAngleTuning(degrees) {
413
+ const value = Math.round(degrees);
414
+ if (!Number.isInteger(value) || value < MCHOSE_ANGLE_TUNING_MIN || value > MCHOSE_ANGLE_TUNING_MAX) {
415
+ throw new Error(`Angle tuning must be ${MCHOSE_ANGLE_TUNING_MIN} to ${MCHOSE_ANGLE_TUNING_MAX} degrees.`);
416
+ }
417
+ const after = await this.writePerformance(await this.currentLiftOffIndex(), { angleTuning: value }, (c) => c.angleTuning === value);
418
+ if (after.angleTuning !== value) {
419
+ throw new Error("The mouse did not accept the angle tuning change.");
420
+ }
421
+ }
422
+ /**
423
+ * How many of the six DPI stages the mouse cycles through. Stored in the
424
+ * config blob, so it goes through the ordinary read-modify-write.
425
+ */
426
+ async setDpiStageCount(count) {
427
+ if (!Number.isInteger(count) || count < 1 || count > MCHOSE_DPI_STAGES) {
428
+ throw new Error(`DPI stage count must be 1-${MCHOSE_DPI_STAGES}.`);
429
+ }
430
+ const after = await this.updateConfig({ stageCount: count });
431
+ if (after.stageCount !== count) {
432
+ throw new Error("The mouse did not accept the new DPI stage count.");
433
+ }
434
+ }
435
+ /**
436
+ * The three profile names the mouse stores. Read one at a time; a profile
437
+ * whose name will not come back is left out rather than guessed at, and the
438
+ * caller falls back to numbering.
439
+ */
440
+ async readProfileNames() {
441
+ const names = [];
442
+ for (let index = 0; index < MCHOSE_PROFILE_COUNT; index += 1) {
443
+ const payload = await this.request(MCHOSE_LONG_REPORT_ID, MCHOSE_COMMAND.readProfileName, MCHOSE_LONG_TOKENS, (reply) => reply[0] === index && (reply[1] ?? 0) !== 0, [index]);
444
+ const name = payload ? mchoseDecodeProfileName(payload) : null;
445
+ if (!name)
446
+ return null;
447
+ names.push(name);
448
+ }
449
+ return names;
450
+ }
451
+ /**
452
+ * Name whichever buttons carry a macro. A macro's name is the only thing
453
+ * about it this driver can surface — recording one is not implemented — so
454
+ * labelling it beats showing a bare "Macro". Buttons without one answer with
455
+ * a zero-length name and are left alone.
456
+ */
457
+ async labelMacros(buttons) {
458
+ for (const button of buttons) {
459
+ if (button.type !== MCHOSE_BUTTON_TYPE.macro)
460
+ continue;
461
+ const payload = await this.request(MCHOSE_LONG_REPORT_ID, MCHOSE_COMMAND.readButtonName, MCHOSE_LONG_TOKENS, (reply) => reply[0] === button.buttonIndex, [button.buttonIndex]);
462
+ const name = payload ? mchoseDecodeButtonName(payload, button.buttonIndex) : null;
463
+ if (name)
464
+ button.label = `Macro: ${name}`;
465
+ }
466
+ }
467
+ /** Every action a button can be assigned, for the picker. */
468
+ getButtonOptions() {
469
+ return MCHOSE_BUTTON_ACTIONS.map((entry) => entry.label);
470
+ }
471
+ /**
472
+ * Reassign one button. This is a standalone command rather than part of the
473
+ * config blob, so it cannot disturb DPI, polling or the other buttons —
474
+ * confirmed on hardware, where only the target button's four bytes moved.
475
+ *
476
+ * "Default" restores the factory function, which is the firmware's own escape
477
+ * hatch (type 0 with a zero value).
478
+ */
479
+ async setButtonMapping(button, actionLabel) {
480
+ const buttonIndex = MCHOSE_BUTTONS.indexOf(button);
481
+ if (buttonIndex < 0)
482
+ throw new Error(`This mouse has no "${button}" button.`);
483
+ const action = mchoseFindButtonAction(actionLabel);
484
+ if (!action)
485
+ throw new Error(`Unknown button action "${actionLabel}".`);
486
+ await this.open();
487
+ const tokens = mchoseEncodeButton(buttonIndex, action.type, action.value);
488
+ const body = mchoseEncodeCommand(tokens, MCHOSE_LONG_TOKENS);
489
+ const send = async () => {
490
+ await this.device.sendFeatureReport(MCHOSE_LONG_REPORT_ID, body);
491
+ await delay(BUTTON_SETTLE_MS);
492
+ };
493
+ const queued = this.queue.then(send, send);
494
+ this.queue = queued.catch(() => undefined);
495
+ await queued;
496
+ const after = await this.readConfigPayload();
497
+ const assignments = after ? mchoseDecodeButtons(after) : null;
498
+ const applied = assignments?.[buttonIndex];
499
+ if (!applied)
500
+ throw new Error("The mouse did not confirm the button change.");
501
+ if (applied.type !== action.type || applied.value !== action.value) {
502
+ throw new Error("The mouse did not accept that button assignment.");
503
+ }
504
+ }
505
+ /** Sleep timeouts this driver offers, in seconds. 0 disables the timer. */
506
+ getSleepOptions() {
507
+ return [...MCHOSE_SLEEP_OPTIONS];
508
+ }
509
+ getDebounceMaxMs() {
510
+ return MCHOSE_DEBOUNCE_MAX_MS;
511
+ }
512
+ /** The firmware stores whole minutes; the panel works in seconds. */
513
+ async setSleepTimeout(seconds) {
514
+ const minutes = Math.round(Math.max(0, seconds) / 60);
515
+ await this.open();
516
+ const body = mchoseEncodeCommand(mchoseEncodeSleep(minutes), MCHOSE_SHORT_TOKENS);
517
+ const send = async () => {
518
+ await this.device.sendFeatureReport(MCHOSE_SHORT_REPORT_ID, body);
519
+ await delay(SLEEP_SETTLE_MS);
520
+ };
521
+ const queued = this.queue.then(send, send);
522
+ this.queue = queued.catch(() => undefined);
523
+ await queued;
524
+ const after = await this.readConfigPayload();
525
+ const decoded = after ? mchoseDecodeConfig(after) : null;
526
+ if (!decoded)
527
+ throw new Error("The mouse did not confirm the sleep timeout.");
528
+ if (decoded.sleep !== minutes)
529
+ throw new Error("The mouse did not accept that sleep timeout.");
530
+ }
531
+ /** Debounce rides along in the config blob rather than its own command. */
532
+ async setDebounceTime(milliseconds) {
533
+ if (!Number.isInteger(milliseconds) || milliseconds < 0 || milliseconds > MCHOSE_DEBOUNCE_MAX_MS) {
534
+ throw new Error(`Debounce must be 0-${MCHOSE_DEBOUNCE_MAX_MS} ms.`);
535
+ }
536
+ const after = await this.updateConfig({ keyDebounce: milliseconds });
537
+ if (after.keyDebounce !== milliseconds) {
538
+ throw new Error("The mouse did not accept the new debounce time.");
539
+ }
540
+ }
541
+ /** Sets the DPI of whichever stage the live connection is using. */
542
+ async setDpi(dpi) {
543
+ const payload = await this.readConfigPayload();
544
+ const current = payload ? mchoseDecodeConfig(payload) : null;
545
+ if (!current)
546
+ throw new Error("The mouse did not return its configuration.");
547
+ await this.setDpiStageValue(this.isWired() ? current.wiredDpiIndex : current.wirelessDpiIndex, dpi);
548
+ }
549
+ }
550
+ //# sourceMappingURL=hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.js","sourceRoot":"","sources":["../../../src/drivers/mchose/hid.ts"],"names":[],"mappings":"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"}