@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,542 @@
1
+ import { CMD, decodeButtonAction, DONGLE_CMD, DPI_RGB_OFFSET, DPI_X_OFFSET, DPI_Y_OFFSET, encodeButtonAction, encodeCommand, GEARHUB_BUTTON_ACTIONS, GEARHUB_BUTTONS, GEARHUB_DEBOUNCE_MAX_MS, GEARHUB_FALLBACK_PROFILE, GEARHUB_LIFT_OFF_LEVELS, GEARHUB_MAX_DPI_STAGES, GEARHUB_PRODUCTS, GEARHUB_RATES, GEARHUB_REPORT_ID, GEARHUB_REPORT_SIZE, GEARHUB_SLEEP_OPTIONS, GEARHUB_VENDOR_ID, gearHubProfileFor, OPT0_DEBOUNCE, OPT0_FLAG_RIPPLE, OPT0_FLAGS, OPT0_REPORT_RATE, OPT0_SILENT_HEIGHT, OPT0_SLEEP_24G, OPT0_SLEEP_BT, OPT0_STRAIGHT_CORRECTION, REPORT_RATE_DECODE, REPORT_RATE_ENCODE, TARGET_MOUSE, } from "@openmouse/protocol/gearhub";
2
+ const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
3
+ export class GearHubHidClient {
4
+ device;
5
+ currentProfile = 0;
6
+ /** What the product id tells us before we connect: the transport. */
7
+ transportEntry;
8
+ /** Model identity, resolved from the device id on the first readStatus(). */
9
+ resolvedProfile = null;
10
+ targetSelected = false;
11
+ /**
12
+ * The relay is stateful — select target, poll ready, send, notice-read,
13
+ * read — so two exchanges in flight at once interleave and corrupt each
14
+ * other. Every public operation is chained through here so only one runs at
15
+ * a time, the same way GearHub serialises through its own send queue.
16
+ */
17
+ queue = Promise.resolve();
18
+ enqueue(task) {
19
+ const run = this.queue.then(task, task);
20
+ this.queue = run.catch(() => undefined);
21
+ return run;
22
+ }
23
+ constructor(device) {
24
+ this.device = device;
25
+ this.transportEntry = GEARHUB_PRODUCTS.get(device.productId);
26
+ }
27
+ static isSupported(device) {
28
+ if (device.vendorId !== GEARHUB_VENDOR_ID)
29
+ return false;
30
+ if (!GEARHUB_PRODUCTS.has(device.productId))
31
+ return false;
32
+ const hasControl = (collections) => collections.some((collection) => (collection.usagePage === 0xffff && collection.usage === 0x02) ||
33
+ hasControl(collection.children ?? []));
34
+ return hasControl(device.collections);
35
+ }
36
+ /** Whether reads go through the 2.4 GHz relay or straight to the device. */
37
+ get transport() {
38
+ return this.transportEntry?.transport ?? "direct";
39
+ }
40
+ get supportedPollingRates() {
41
+ const profile = this.resolvedProfile ?? GEARHUB_FALLBACK_PROFILE;
42
+ const linkCeiling = this.transportEntry?.wiredPollingCeilingHz ?? Infinity;
43
+ const ceiling = Math.min(profile.maxPollingHz, linkCeiling);
44
+ return GEARHUB_RATES.filter((hz) => hz <= ceiling);
45
+ }
46
+ /**
47
+ * DPI stops worth offering, capped at the resolved model's sensor ceiling.
48
+ * These sensors step in 50 DPI increments; the UI offers the round values.
49
+ * Before the first readStatus() this uses the fallback (M5 Pro) ceiling.
50
+ */
51
+ getDpiOptions() {
52
+ const { maxDpi } = this.resolvedProfile ?? GEARHUB_FALLBACK_PROFILE;
53
+ return [
54
+ 400, 800, 1200, 1600, 2000, 2400, 3200, 4000, 4800, 5600, 6400, 8000,
55
+ 10000, 12000, 16000, 20000, 26000,
56
+ 28000, 30000, 32000, 36000, 40000, 42000,
57
+ ].filter((dpi) => dpi <= maxDpi);
58
+ }
59
+ async open() {
60
+ if (!this.device.opened)
61
+ await this.device.open();
62
+ }
63
+ async close() {
64
+ if (this.device.opened)
65
+ await this.device.close();
66
+ }
67
+ // ---------------------------------------------------------------------------
68
+ // Raw feature-report I/O
69
+ // ---------------------------------------------------------------------------
70
+ async rawSend(bytes) {
71
+ const buf = new Uint8Array(GEARHUB_REPORT_SIZE);
72
+ buf.set(bytes instanceof Uint8Array
73
+ ? bytes.subarray(0, GEARHUB_REPORT_SIZE)
74
+ : bytes.slice(0, GEARHUB_REPORT_SIZE));
75
+ await this.device.sendFeatureReport(GEARHUB_REPORT_ID, buf);
76
+ }
77
+ async rawRead() {
78
+ const view = await this.device.receiveFeatureReport(GEARHUB_REPORT_ID);
79
+ return new Uint8Array(view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength));
80
+ }
81
+ // ---------------------------------------------------------------------------
82
+ // 2.4 GHz receiver relay
83
+ // ---------------------------------------------------------------------------
84
+ /**
85
+ * Poll the receiver for link state and battery. A receiver command, so no
86
+ * checksum. Measured layout, live: `01 00 2D 01 00 01` — ready to read,
87
+ * no keyboard, mouse at 0x2D = 45%, keyboard offline, mouse online, ready
88
+ * to send.
89
+ */
90
+ async readDongleStatus() {
91
+ return this.enqueue(() => this.pollStatus());
92
+ }
93
+ /** Unqueued: callers already holding the queue slot use this. */
94
+ async pollStatus() {
95
+ await this.rawSend([DONGLE_CMD.GET_STATUS]);
96
+ await delay(10);
97
+ const r = await this.rawRead();
98
+ return {
99
+ canRead: r[0] === 1,
100
+ keyboardBattery: r[1],
101
+ mouseBattery: r[2],
102
+ keyboardOnline: r[3] === 0,
103
+ mouseOnline: r[4] === 0,
104
+ canSend: r[5] === 1,
105
+ };
106
+ }
107
+ async selectMouse() {
108
+ if (this.targetSelected)
109
+ return;
110
+ await this.rawSend([DONGLE_CMD.SELECT_TARGET, TARGET_MOUSE]);
111
+ await delay(50);
112
+ this.targetSelected = true;
113
+ }
114
+ async waitReady(direction) {
115
+ for (let attempt = 0; attempt < 8; attempt++) {
116
+ await delay(100);
117
+ const status = await this.pollStatus();
118
+ if (direction === "send" ? status.canSend : status.canRead)
119
+ return true;
120
+ }
121
+ return false;
122
+ }
123
+ // ---------------------------------------------------------------------------
124
+ // Command exchange
125
+ // ---------------------------------------------------------------------------
126
+ /**
127
+ * Run one command and return its reply, rejecting a reply that is not an
128
+ * answer. Most reads echo the command id in byte 0; an unrelayed or
129
+ * unchecksummed command comes back as 64 zeros, which must never be mistaken
130
+ * for data. `GET_KEYMATRIX` is the exception — its reply is pure matrix data
131
+ * with no echo byte — so `echoes: false` keeps only the all-zero guard.
132
+ */
133
+ async command(bytes, opts = {}) {
134
+ return this.enqueue(() => this.exchange(bytes, opts.echoes ?? true));
135
+ }
136
+ async exchange(bytes, echoes) {
137
+ await this.open();
138
+ const encoded = encodeCommand(bytes);
139
+ if (this.transport === "direct") {
140
+ await this.rawSend(encoded);
141
+ await delay(10);
142
+ return this.verifyReply(await this.rawRead(), bytes[0], echoes);
143
+ }
144
+ await this.selectMouse();
145
+ if (!(await this.waitReady("send"))) {
146
+ throw new Error("The 2.4 GHz receiver never became ready to send.");
147
+ }
148
+ await this.rawSend(encoded);
149
+ if (!(await this.waitReady("read"))) {
150
+ throw new Error("The 2.4 GHz receiver never became ready to read.");
151
+ }
152
+ await this.rawSend([DONGLE_CMD.NOTICE_READ]);
153
+ await delay(10);
154
+ return this.verifyReply(await this.rawRead(), bytes[0], echoes);
155
+ }
156
+ verifyReply(resp, cmd, echoes) {
157
+ if (resp.length < GEARHUB_REPORT_SIZE) {
158
+ throw new Error(`GearHub command 0x${cmd.toString(16)} returned ${resp.length} bytes, expected ${GEARHUB_REPORT_SIZE}.`);
159
+ }
160
+ if (resp.every((byte) => byte === 0)) {
161
+ throw new Error(`GearHub command 0x${cmd.toString(16)} was not answered (all-zero response).`);
162
+ }
163
+ if (echoes && resp[0] !== cmd) {
164
+ throw new Error(`GearHub command 0x${cmd.toString(16)} answered with id 0x${resp[0].toString(16)}.`);
165
+ }
166
+ return resp;
167
+ }
168
+ // ---------------------------------------------------------------------------
169
+ // Reads
170
+ // ---------------------------------------------------------------------------
171
+ /** Device id — the key GearHub looks its model table up by. M5 Pro answers 2285. */
172
+ async getDeviceId() {
173
+ const resp = await this.command([CMD.GET_USB_VERSION]);
174
+ return (resp[1] | (resp[2] << 8) | (resp[3] << 16) | (resp[4] << 24)) >>> 0;
175
+ }
176
+ /** Firmware revision: byte 2 high, byte 1 low. M5 Pro answers 0x0303. */
177
+ async getFirmwareVersion() {
178
+ const resp = await this.command([CMD.GET_FIRMWARE]);
179
+ return (resp[2] << 8) | resp[1];
180
+ }
181
+ /**
182
+ * Read the 64-byte OPTIONPARAM0 block — report rate (byte 9), debounce
183
+ * (10), lift-off (52), sleep, sensitivity. GearHub reads and writes this
184
+ * whole; the driver picks out the fields it exposes.
185
+ */
186
+ async getOptionParam0() {
187
+ return this.command([CMD.GET_OPTIONPARAM0]);
188
+ }
189
+ async getReportRate() {
190
+ const opt0 = await this.getOptionParam0();
191
+ const hz = REPORT_RATE_DECODE[opt0[OPT0_REPORT_RATE]];
192
+ if (hz === undefined) {
193
+ throw new Error(`GearHub OPTIONPARAM0 held an unknown report-rate code ${opt0[OPT0_REPORT_RATE]}.`);
194
+ }
195
+ return hz;
196
+ }
197
+ /** The lift-off stops this model offers, ascending; empty when unknown. */
198
+ liftOffLevels() {
199
+ const profile = this.resolvedProfile ?? GEARHUB_FALLBACK_PROFILE;
200
+ return GEARHUB_LIFT_OFF_LEVELS[profile.sensor] ?? [];
201
+ }
202
+ /** Every DPI stage of the active profile, plus which one is selected. */
203
+ async getDpi() {
204
+ const resp = await this.command([CMD.GET_DPI, this.currentProfile]);
205
+ const activeIndex = resp[2] >= GEARHUB_MAX_DPI_STAGES ? 0 : resp[2];
206
+ const count = Math.min(resp[3], GEARHUB_MAX_DPI_STAGES);
207
+ if (count === 0)
208
+ throw new Error("GearHub GET_DPI reported no DPI stages.");
209
+ const stages = [];
210
+ for (let i = 0; i < count; i++) {
211
+ stages.push({
212
+ x: resp[DPI_X_OFFSET + i * 2] | (resp[DPI_X_OFFSET + 1 + i * 2] << 8),
213
+ y: resp[DPI_Y_OFFSET + i * 2] | (resp[DPI_Y_OFFSET + 1 + i * 2] << 8),
214
+ rgb: (resp[DPI_RGB_OFFSET + i * 3] << 16) |
215
+ (resp[DPI_RGB_OFFSET + 1 + i * 3] << 8) |
216
+ resp[DPI_RGB_OFFSET + 2 + i * 3],
217
+ });
218
+ }
219
+ return { stages, activeIndex };
220
+ }
221
+ // ---------------------------------------------------------------------------
222
+ // Writes
223
+ // ---------------------------------------------------------------------------
224
+ /**
225
+ * Change fields in OPTIONPARAM0 by read-modify-write. GearHub's settings
226
+ * only take effect when the whole 64-byte block is written back, so every
227
+ * byte not in `overrides` is carried over from the current read. Bytes
228
+ * 17/18 are stamped the way GearHub's own writer stamps them.
229
+ */
230
+ async patchOptionParam0(overrides) {
231
+ const current = await this.getOptionParam0();
232
+ const block = new Uint8Array(GEARHUB_REPORT_SIZE);
233
+ block.set(current.subarray(8, GEARHUB_REPORT_SIZE), 8);
234
+ block[0] = CMD.SET_OPTIONPARAM0;
235
+ block[17] = 255;
236
+ block[18] = 8;
237
+ for (const [offset, value] of Object.entries(overrides)) {
238
+ const i = Number(offset);
239
+ block[i] = (typeof value === "function" ? value(current[i]) : value) & 0xff;
240
+ }
241
+ await this.sendWrite(block);
242
+ }
243
+ async setReportRate(hz) {
244
+ const code = REPORT_RATE_ENCODE[hz];
245
+ if (code === undefined || !this.supportedPollingRates.includes(hz)) {
246
+ throw new Error(`Unsupported rate ${hz} Hz. Supported: ${this.supportedPollingRates.join(", ")}`);
247
+ }
248
+ await this.patchOptionParam0({ [OPT0_REPORT_RATE]: code });
249
+ return hz;
250
+ }
251
+ /** Set the lift-off distance. Levels come from `liftOffLevels()`. */
252
+ async setLiftOffDistance(level) {
253
+ const index = this.liftOffLevels().indexOf(level);
254
+ if (index < 0) {
255
+ throw new Error(`Lift-off level "${level}" is not available on this model.`);
256
+ }
257
+ await this.patchOptionParam0({ [OPT0_SILENT_HEIGHT]: index });
258
+ return level;
259
+ }
260
+ /** Debounce (button click filter), 0..10 ms — GearHub's "Debounce" slider. */
261
+ getDebounceMaxMs() {
262
+ return GEARHUB_DEBOUNCE_MAX_MS;
263
+ }
264
+ /** The exact debounce values to offer (0..10 ms), so the UI never presents
265
+ * a value the firmware would clamp. */
266
+ getDebounceOptions() {
267
+ return Array.from({ length: GEARHUB_DEBOUNCE_MAX_MS + 1 }, (_, ms) => ms);
268
+ }
269
+ async setDebounceTime(ms) {
270
+ const clamped = Math.max(0, Math.min(GEARHUB_DEBOUNCE_MAX_MS, Math.round(ms)));
271
+ await this.patchOptionParam0({ [OPT0_DEBOUNCE]: clamped });
272
+ return clamped;
273
+ }
274
+ /** Standby-time stops, seconds; 0 = never. GearHub's "Sleep Settings". */
275
+ getSleepOptions() {
276
+ return [...GEARHUB_SLEEP_OPTIONS];
277
+ }
278
+ /**
279
+ * Idle seconds before standby. GearHub keeps a 2.4 GHz timer and a Bluetooth
280
+ * timer; OpenMouse has one control, so both are set to the same value.
281
+ */
282
+ async setSleepTimeout(seconds) {
283
+ const s = Math.max(0, Math.min(0xffff, Math.round(seconds)));
284
+ await this.patchOptionParam0({
285
+ [OPT0_SLEEP_24G]: s & 0xff,
286
+ [OPT0_SLEEP_24G + 1]: (s >> 8) & 0xff,
287
+ [OPT0_SLEEP_BT]: s & 0xff,
288
+ [OPT0_SLEEP_BT + 1]: (s >> 8) & 0xff,
289
+ });
290
+ return s;
291
+ }
292
+ /** "Straight Correction" — GearHub's angle-snapping / line-repair toggle. */
293
+ async setAngleSnapping(enabled) {
294
+ await this.patchOptionParam0({ [OPT0_STRAIGHT_CORRECTION]: enabled ? 1 : 0 });
295
+ return enabled;
296
+ }
297
+ /** "Ripple Correction" — bit 2 of the OPTIONPARAM0 flags word. */
298
+ async setRippleControl(enabled) {
299
+ await this.patchOptionParam0({
300
+ [OPT0_FLAGS]: (current) => enabled ? current | OPT0_FLAG_RIPPLE : current & ~OPT0_FLAG_RIPPLE,
301
+ });
302
+ return enabled;
303
+ }
304
+ // ── Button remapping ──────────────────────────────────────────────────────
305
+ /**
306
+ * Raw keymatrix reply for a profile: 14 slots x 4 bytes, no echo byte. Read
307
+ * late in `readStatus` after several other relay exchanges, so it retries
308
+ * once — the relay is more likely to miss its ready window under load.
309
+ */
310
+ async getKeyMatrix(profile = 0) {
311
+ try {
312
+ return await this.command([CMD.GET_KEYMATRIX, profile], { echoes: false });
313
+ }
314
+ catch {
315
+ return this.command([CMD.GET_KEYMATRIX, profile], { echoes: false });
316
+ }
317
+ }
318
+ buttonMappingsFrom(reply) {
319
+ const out = {};
320
+ for (const { name, slot } of GEARHUB_BUTTONS) {
321
+ const o = slot * 4;
322
+ out[name] = decodeButtonAction([reply[o], reply[o + 1], reply[o + 2], reply[o + 3]]);
323
+ }
324
+ return out;
325
+ }
326
+ /** Every action `setButtonMapping` accepts, in display order. */
327
+ getButtonOptions() {
328
+ return GEARHUB_BUTTON_ACTIONS.map(([label]) => label);
329
+ }
330
+ /** Reassign one physical button. `button` is a `GEARHUB_BUTTONS` name. */
331
+ async setButtonMapping(button, action) {
332
+ const target = GEARHUB_BUTTONS.find((b) => b.name === button);
333
+ if (!target)
334
+ throw new Error(`Unknown button "${button}".`);
335
+ const value = encodeButtonAction(action);
336
+ if (!value)
337
+ throw new Error(`Unsupported button action "${action}".`);
338
+ const cmd = new Uint8Array(GEARHUB_REPORT_SIZE);
339
+ cmd[0] = CMD.SET_KEYMATRIX;
340
+ cmd[1] = 0; // profile
341
+ cmd[2] = target.slot;
342
+ cmd[8] = value[0];
343
+ cmd[9] = value[1];
344
+ cmd[10] = value[2];
345
+ cmd[11] = value[3];
346
+ await this.sendWrite(cmd);
347
+ }
348
+ /**
349
+ * Replace one DPI stage's resolution. SET_DPI carries the whole stage table,
350
+ * so the other stages — and every stage's indicator colour — are read back
351
+ * and echoed unchanged rather than zeroed.
352
+ */
353
+ async setDpiForStage(x, y, index) {
354
+ const { stages, activeIndex } = await this.getDpi();
355
+ const target = index >= 0 && index < stages.length ? index : activeIndex;
356
+ stages[target] = { ...stages[target], x, y };
357
+ await this.writeDpiTable(stages, activeIndex);
358
+ return x;
359
+ }
360
+ /**
361
+ * Recolour one DPI stage's indicator LED. Same whole-table write as
362
+ * `setDpiForStage`, changing `rgb` instead of the resolution. `color` is
363
+ * `#rrggbb`; returns it normalised.
364
+ */
365
+ async setDpiStageColor(index, color) {
366
+ const rgb = Number.parseInt(color.replace(/^#/, ""), 16);
367
+ if (!Number.isFinite(rgb))
368
+ throw new Error(`Invalid DPI stage colour "${color}".`);
369
+ const { stages, activeIndex } = await this.getDpi();
370
+ const target = index >= 0 && index < stages.length ? index : activeIndex;
371
+ stages[target] = { ...stages[target], rgb: rgb & 0xffffff };
372
+ await this.writeDpiTable(stages, activeIndex);
373
+ return `#${(rgb & 0xffffff).toString(16).padStart(6, "0")}`;
374
+ }
375
+ /**
376
+ * Switch which DPI stage the mouse is on. SET_DPI's byte 2 is the active
377
+ * index; re-send the unchanged table with it moved.
378
+ */
379
+ async setActiveDpiStage(index) {
380
+ const { stages } = await this.getDpi();
381
+ if (stages.length === 0)
382
+ throw new Error("GearHub reported no DPI stages.");
383
+ const target = Math.max(0, Math.min(index, stages.length - 1));
384
+ await this.writeDpiTable(stages, target);
385
+ return target;
386
+ }
387
+ /** Encode the full stage table into one SET_DPI report and send it. */
388
+ async writeDpiTable(stages, active) {
389
+ const cmd = new Uint8Array(GEARHUB_REPORT_SIZE);
390
+ cmd[0] = CMD.SET_DPI;
391
+ cmd[1] = this.currentProfile;
392
+ cmd[2] = active;
393
+ cmd[3] = stages.length;
394
+ stages.forEach((stage, i) => {
395
+ cmd[DPI_X_OFFSET + i * 2] = stage.x & 0xff;
396
+ cmd[DPI_X_OFFSET + 1 + i * 2] = (stage.x >> 8) & 0xff;
397
+ cmd[DPI_Y_OFFSET + i * 2] = stage.y & 0xff;
398
+ cmd[DPI_Y_OFFSET + 1 + i * 2] = (stage.y >> 8) & 0xff;
399
+ cmd[DPI_RGB_OFFSET + i * 3] = (stage.rgb >> 16) & 0xff;
400
+ cmd[DPI_RGB_OFFSET + 1 + i * 3] = (stage.rgb >> 8) & 0xff;
401
+ cmd[DPI_RGB_OFFSET + 2 + i * 3] = stage.rgb & 0xff;
402
+ });
403
+ await this.sendWrite(cmd);
404
+ }
405
+ /** A write takes the same relay path as a read, minus the read-back. */
406
+ async sendWrite(cmd) {
407
+ return this.enqueue(() => this.writeThrough(cmd));
408
+ }
409
+ async writeThrough(cmd) {
410
+ const encoded = encodeCommand([...cmd]);
411
+ if (this.transport === "direct") {
412
+ await this.rawSend(encoded);
413
+ await delay(10);
414
+ return;
415
+ }
416
+ await this.selectMouse();
417
+ if (!(await this.waitReady("send"))) {
418
+ throw new Error("The 2.4 GHz receiver never became ready to send.");
419
+ }
420
+ await this.rawSend(encoded);
421
+ await delay(50);
422
+ }
423
+ // ---------------------------------------------------------------------------
424
+ // High-Level API
425
+ // ---------------------------------------------------------------------------
426
+ async readStatus() {
427
+ await this.open();
428
+ let battery = null;
429
+ let connectionType = "Wired";
430
+ let connectionDetail = "USB";
431
+ if (this.transport === "dongle") {
432
+ connectionType = "Wireless";
433
+ connectionDetail = "2.4 GHz";
434
+ const status = await this.readDongleStatus();
435
+ if (!status.mouseOnline) {
436
+ throw new Error("The 2.4 GHz receiver is present but no mouse is linked to it — the mouse is asleep, powered off, or switched to Bluetooth/wired mode. Move the mouse and try again.");
437
+ }
438
+ battery = status.mouseBattery > 0 && status.mouseBattery <= 100 ? status.mouseBattery : null;
439
+ }
440
+ // Identify the model before the first data read. GearHub keys its model
441
+ // table off this id; the receiver's shared VID:PID cannot. A failure here
442
+ // (older firmware, a sibling that does not answer 0x8F) is non-fatal — we
443
+ // fall back to the M5 Pro profile, which is what this driver always was.
444
+ let deviceId = null;
445
+ try {
446
+ deviceId = await this.getDeviceId();
447
+ }
448
+ catch {
449
+ deviceId = null;
450
+ }
451
+ this.resolvedProfile = deviceId !== null ? gearHubProfileFor(deviceId) : null;
452
+ const profile = this.resolvedProfile ?? GEARHUB_FALLBACK_PROFILE;
453
+ const displayName = `${profile.brand} ${profile.model}`;
454
+ // The DPI read has to work: it carries the values the UI exists to show,
455
+ // and it is the cheapest proof the whole relay + checksum path is right.
456
+ const dpi = await this.getDpi();
457
+ const active = dpi.stages[dpi.activeIndex] ?? dpi.stages[0];
458
+ // Report rate and lift-off both live in the OPTIONPARAM0 block — one read
459
+ // covers both. A failure leaves the rate at a safe default and lift-off
460
+ // unreported rather than sinking the whole status.
461
+ const [opt0Result, keyMatrixResult, firmwareResult] = await Promise.allSettled([
462
+ this.getOptionParam0(),
463
+ this.getKeyMatrix(0),
464
+ this.getFirmwareVersion(),
465
+ ]);
466
+ let pollingRateHz = 1000;
467
+ let liftOffDistance = null;
468
+ let supportedLiftOffDistances;
469
+ let debounceMs = null;
470
+ let angleSnapping = null;
471
+ let rippleControl = null;
472
+ let sleepTimeout = null;
473
+ if (opt0Result.status === "fulfilled") {
474
+ const opt0 = opt0Result.value;
475
+ pollingRateHz = REPORT_RATE_DECODE[opt0[OPT0_REPORT_RATE]] ?? pollingRateHz;
476
+ debounceMs = opt0[OPT0_DEBOUNCE];
477
+ angleSnapping = opt0[OPT0_STRAIGHT_CORRECTION] !== 0;
478
+ rippleControl = (opt0[OPT0_FLAGS] & OPT0_FLAG_RIPPLE) !== 0;
479
+ sleepTimeout = opt0[OPT0_SLEEP_24G] | (opt0[OPT0_SLEEP_24G + 1] << 8);
480
+ const levels = this.liftOffLevels();
481
+ if (levels.length > 0) {
482
+ liftOffDistance = levels[opt0[OPT0_SILENT_HEIGHT]] ?? levels[0];
483
+ if (levels.length < 3)
484
+ supportedLiftOffDistances = [...levels];
485
+ }
486
+ }
487
+ const firmware = firmwareResult.status === "fulfilled" && firmwareResult.value !== 0
488
+ ? [`v${(firmwareResult.value >> 8) & 0xff}.${String(firmwareResult.value & 0xff).padStart(2, "0")}`]
489
+ : [];
490
+ const buttonMappings = keyMatrixResult.status === "fulfilled"
491
+ ? this.buttonMappingsFrom(keyMatrixResult.value)
492
+ : undefined;
493
+ return {
494
+ brand: profile.brand,
495
+ name: displayName,
496
+ ui: {
497
+ family: "gearhub",
498
+ settingsReady: true,
499
+ defaultDisplayName: displayName,
500
+ // Stage-list DPI editor: per-stage resolution + indicator colour, the
501
+ // way GearHub itself shows it. Stage count is fixed (no SET for it), so
502
+ // countEditable is left off and the count picker stays hidden.
503
+ dpiStageEditor: {
504
+ maxStages: dpi.stages.length,
505
+ minDpi: profile.minDpi,
506
+ maxDpi: profile.maxDpi,
507
+ stepDpi: profile.dpiStep,
508
+ },
509
+ },
510
+ batteryPercent: battery,
511
+ batteryState: battery === null ? "Unknown" : "Discharging",
512
+ dpi: active.x,
513
+ dpiY: active.y,
514
+ supportsSeparateDpiAxes: true,
515
+ dpiStages: dpi.stages.map((stage) => stage.x),
516
+ dpiStageColors: dpi.stages.map((stage) => `#${(stage.rgb & 0xffffff).toString(16).padStart(6, "0")}`),
517
+ activeDpiStage: dpi.activeIndex,
518
+ pollingRateHz,
519
+ supportedPollingRates: this.supportedPollingRates,
520
+ activeProfile: this.currentProfile,
521
+ connectionType,
522
+ connectionDetail,
523
+ liftOffDistance,
524
+ ...(supportedLiftOffDistances ? { supportedLiftOffDistances } : {}),
525
+ debounceMs,
526
+ angleSnapping,
527
+ rippleControl,
528
+ sleepTimeout,
529
+ ...(buttonMappings ? { buttonMappings, buttonOptions: this.getButtonOptions() } : {}),
530
+ firmware: [...firmware, profile.sensor],
531
+ };
532
+ }
533
+ async setDpi(dpi, dpiY = dpi) {
534
+ const { activeIndex } = await this.getDpi();
535
+ await this.setDpiForStage(dpi, dpiY, activeIndex);
536
+ return dpi;
537
+ }
538
+ async setPollingRate(rate) {
539
+ return this.setReportRate(rate);
540
+ }
541
+ }
542
+ //# sourceMappingURL=hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.js","sourceRoot":"","sources":["../../../src/drivers/gearhub/hid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { MouseStatus } from "../mouse-types.ts";
2
+ import { type GloriousClassicRgb } from "../../glorious-classic/index.ts";
3
+ export declare class GloriousClassicHidClient {
4
+ readonly pollIntervalMs = 0;
5
+ readonly device: HIDDevice;
6
+ /**
7
+ * The vendor collection's feature report id and byte length, read from the
8
+ * device at connect time rather than assumed - see isConfirmedReportLength()
9
+ * for why a length other than 64 means writes get refused instead of guessed at.
10
+ */
11
+ private readonly reportId;
12
+ private readonly reportLength;
13
+ private lastRgb;
14
+ constructor(device: HIDDevice);
15
+ static isSupported(device: HIDDevice): boolean;
16
+ /** The feature-report id and byte length carried by the config channel collection, or null. */
17
+ private static findConfigReport;
18
+ private static findConfigReportIn;
19
+ /** Resizes a payload (always built at GLORIOUS_CLASSIC_PACKET_LENGTH) to the device's real declared length. */
20
+ private fitPayload;
21
+ private send;
22
+ open(): Promise<void>;
23
+ close(): Promise<void>;
24
+ displayName(): string;
25
+ isWireless(): boolean;
26
+ /**
27
+ * "core2" (Model O3 Wireless, Model D 2 PRO 4K/8KHz Edition) only gets
28
+ * RGB/debounce/battery — see the doc comment on `GLORIOUS_CLASSIC_PRODUCTS`
29
+ * in vendors.ts for why DPI/polling/LOD stay off for this generation.
30
+ */
31
+ private isCore2;
32
+ /**
33
+ * Every payload builder in glorious-classic/index.ts was reverse-engineered
34
+ * against the 64-byte feature report every classic-line unit confirmed so
35
+ * far uses. A real 0x320f:0x823a instead declares a 263-byte report;
36
+ * resizing our 64-byte payload to fit sends without a WebHID error, but a
37
+ * diagnostic confirmed the mouse ignores it outright - the firmware ACKs
38
+ * the write and changes nothing. A report length this driver hasn't seen a
39
+ * real byte layout for is therefore not writable yet, even though it
40
+ * connects and its report id is known - see [[glorious-classic-protocol]]
41
+ * in memory. Refuse instead of guessing again until a capture of the
42
+ * device's own official software gives the real layout.
43
+ */
44
+ private isConfirmedReportLength;
45
+ private assertWritable;
46
+ getDpiOptions(): number[];
47
+ getSupportedPollingRates(): number[];
48
+ readStatus(): Promise<MouseStatus>;
49
+ setDpi(dpi: number): Promise<number>;
50
+ setPollingRate(pollingRateHz: number): Promise<number>;
51
+ setLiftOffDistance(value: NonNullable<MouseStatus["liftOffDistance"]>): Promise<NonNullable<MouseStatus["liftOffDistance"]>>;
52
+ setDebounceTime(milliseconds: number): Promise<number>;
53
+ getRgb(): GloriousClassicRgb;
54
+ setRgb(rgb: GloriousClassicRgb): Promise<GloriousClassicRgb>;
55
+ private readBattery;
56
+ private delay;
57
+ private getUiHints;
58
+ private stateKey;
59
+ private loadState;
60
+ private saveState;
61
+ }
62
+ //# sourceMappingURL=classic-hid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classic-hid.d.ts","sourceRoot":"","sources":["../../../src/drivers/glorious/classic-hid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAwBL,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;AAiEzC,qBAAa,wBAAwB;IACnC,QAAQ,CAAC,cAAc,KAAK;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,OAAO,CAAoD;gBAEvD,MAAM,EAAE,SAAS;IAO7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAS9C,+FAA+F;IAC/F,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAajC,+GAA+G;IAC/G,OAAO,CAAC,UAAU;YAOJ,IAAI;IAIZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,WAAW,IAAI,MAAM;IAKrB,UAAU,IAAI,OAAO;IAIrB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAIf;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,cAAc;IAOtB,aAAa,IAAI,MAAM,EAAE;IAOzB,wBAAwB,IAAI,MAAM,EAAE;IAK9B,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IA8BlC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAepC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYtD,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAY5H,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB5D,MAAM,IAAI,kBAAkB;IAItB,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAYpD,WAAW;IAQzB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,SAAS;CAOlB"}