@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,225 @@
1
+ import { GWOLVES_ADDRESS, GWOLVES_COMMAND, GWOLVES_REPORT_ID, gwolvesBuildReadPayload, gwolvesBuildSimplePayload, gwolvesBuildWritePayload, gwolvesBuildWriteScalarPayload, gwolvesDecodeProfile, gwolvesEncodeDpi, gwolvesEncodePollingRate, gwolvesParseBattery, gwolvesParseReadResponse, gwolvesReportChecksumIsValid, } from "@openmouse/protocol/gwolves";
2
+ import { GWOLVES_PRODUCTS, GWOLVES_VENDOR_ID } from "./products.js";
3
+ // G-Wolves mice enumerate under their own vendor id (0x33e4) but speak the
4
+ // exact same shared VGN-family wire protocol already implemented
5
+ // independently in this repo for the VGN Dragonfly F2 Master+ and the
6
+ // Pulsar 4K Wireless Receiver — identical opcodes, checksums, EEPROM
7
+ // address map, DPI encoding, and polling-rate encoding. This driver uses
8
+ // its own protocol module (../../gwolves/index.ts) rather than importing
9
+ // vgn's, matching the pattern already established for the Pulsar/VGN case:
10
+ // independent per-brand implementation of a shared algorithm, so a future
11
+ // G-Wolves-specific quirk can diverge without touching another brand's
12
+ // tested code. Confirmed against real hardware 2026-08-21 via a live HID
13
+ // capture (browser sendReport/inputreport patch) while changing DPI, LOD,
14
+ // and polling rate on the official G-Wolves web driver at mouse.fit, then
15
+ // independently reproduced with hidapitester with no browser involved at
16
+ // all. See PROTOCOL-NOTES.md in the PR for the raw captured packets this
17
+ // was verified against.
18
+ //
19
+ // This class is intentionally model-agnostic: per-product identity (name,
20
+ // wireless/wired, verified-on-hardware status) lives in ./products.ts, not
21
+ // here. Adding support for another G-Wolves model that turns out to share
22
+ // this same protocol should just mean a new entry in that catalog.
23
+ const RESPONSE_TIMEOUT_MS = 700;
24
+ const SUPPORTED_POLLING_RATES = [125, 250, 500, 1000, 2000, 4000, 8000];
25
+ export class GWolvesHidClient {
26
+ device;
27
+ waiter = null;
28
+ onInputReport = (event) => {
29
+ if (event.reportId !== GWOLVES_REPORT_ID)
30
+ return;
31
+ const response = new Uint8Array(event.data.buffer.slice(event.data.byteOffset, event.data.byteOffset + event.data.byteLength));
32
+ const waiter = this.waiter;
33
+ if (!waiter || response[0] !== waiter.command)
34
+ return;
35
+ window.clearTimeout(waiter.timer);
36
+ this.waiter = null;
37
+ waiter.resolve(response);
38
+ };
39
+ constructor(device) {
40
+ this.device = device;
41
+ }
42
+ // Only product ids present in GWOLVES_PRODUCTS (see ./products.ts) are
43
+ // accepted — this is the single place that catalog is consulted for
44
+ // device recognition, so adding a model is purely a data change there.
45
+ static isSupported(device) {
46
+ if (device.vendorId !== GWOLVES_VENDOR_ID)
47
+ return false;
48
+ if (!GWOLVES_PRODUCTS.has(device.productId))
49
+ return false;
50
+ return device.collections.some((collection) => collection.usagePage === 0xff02
51
+ && collection.inputReports.some((report) => report.reportId === GWOLVES_REPORT_ID && this.reportLength(report) === 16)
52
+ && collection.outputReports.some((report) => report.reportId === GWOLVES_REPORT_ID && this.reportLength(report) === 16));
53
+ }
54
+ get product() {
55
+ // isSupported() is always checked before a client is constructed (see
56
+ // registry.ts), so an unknown product id here means a caller bypassed
57
+ // that check rather than a real runtime case to handle gracefully.
58
+ const product = GWOLVES_PRODUCTS.get(this.device.productId);
59
+ if (!product)
60
+ throw new Error(`Unrecognized G-Wolves product id 0x${this.device.productId.toString(16)}.`);
61
+ return product;
62
+ }
63
+ isWirelessPath() {
64
+ return this.product.wireless;
65
+ }
66
+ get pollIntervalMs() {
67
+ return this.isWirelessPath() ? 10_000 : 30_000;
68
+ }
69
+ getDpiOptions() {
70
+ const values = [];
71
+ for (let dpi = 50; dpi <= 26_000; dpi += 50)
72
+ values.push(dpi);
73
+ return values;
74
+ }
75
+ async open() {
76
+ if (!this.device.opened)
77
+ await this.device.open();
78
+ this.device.removeEventListener("inputreport", this.onInputReport);
79
+ this.device.addEventListener("inputreport", this.onInputReport);
80
+ }
81
+ async readStatus() {
82
+ await this.open();
83
+ const { model, wireless } = this.product;
84
+ const batteryResponse = await this.transact(gwolvesBuildSimplePayload(GWOLVES_COMMAND.battery));
85
+ const firmwareResponse = await this.transact(gwolvesBuildSimplePayload(GWOLVES_COMMAND.firmware));
86
+ const profile = await this.readProfile();
87
+ const battery = gwolvesParseBattery(batteryResponse);
88
+ const settings = gwolvesDecodeProfile(profile);
89
+ const firmware = this.version(firmwareResponse);
90
+ return {
91
+ brand: "G-Wolves",
92
+ name: `G-Wolves ${model}`,
93
+ batteryPercent: battery?.percent ?? null,
94
+ batteryVoltageMv: battery?.voltageMv ?? null,
95
+ batteryState: battery
96
+ ? battery.charging ? (battery.percent >= 99 ? "Full" : "Charging") : "Discharging"
97
+ : "Unknown",
98
+ dpi: settings.dpi,
99
+ pollingRateHz: settings.pollingRateHz,
100
+ supportedPollingRates: SUPPORTED_POLLING_RATES,
101
+ activeProfile: null,
102
+ connectionType: wireless ? "Wireless" : "Wired",
103
+ connectionDetail: wireless ? "2.4 GHz receiver · 8K protocol" : "USB · 8K protocol",
104
+ motionSync: settings.motionSync,
105
+ debounceMs: settings.debounceMs,
106
+ sleepTimeout: settings.sleepTimeout === null ? null : settings.sleepTimeout / 10,
107
+ angleSnapping: settings.angleSnapping,
108
+ rippleControl: settings.rippleControl,
109
+ performanceMode: settings.performanceMode,
110
+ liftOffDistance: settings.liftOffDistance,
111
+ firmware: firmware ? [`Mouse ${firmware}`] : [],
112
+ ui: {
113
+ family: "vgn-f2",
114
+ hideUnsupportedPollingRates: true,
115
+ forceShowBattery: false,
116
+ pollingNote: `${model} supports 125 Hz through 8,000 Hz over its shared VGN-family protocol.`,
117
+ defaultDisplayName: `G-Wolves ${model}`,
118
+ },
119
+ };
120
+ }
121
+ async setDpi(dpi) {
122
+ const profile = gwolvesDecodeProfile(await this.readProfile());
123
+ const address = GWOLVES_ADDRESS.dpiStages + profile.activeDpiStage * 4;
124
+ await this.write(address, [...gwolvesEncodeDpi(dpi)]);
125
+ const confirmed = gwolvesDecodeProfile(await this.readProfile()).dpi;
126
+ if (confirmed !== dpi)
127
+ throw new Error(`The ${this.product.model} kept ${confirmed} DPI instead of ${dpi} DPI.`);
128
+ return confirmed;
129
+ }
130
+ async setPollingRate(rate) {
131
+ await this.writeScalar(GWOLVES_ADDRESS.pollingRate, gwolvesEncodePollingRate(rate));
132
+ const confirmed = gwolvesDecodeProfile(await this.readProfile()).pollingRateHz;
133
+ if (confirmed !== rate) {
134
+ const hint = this.isWirelessPath()
135
+ ? " (on the wireless path, the mouse must be actively awake — try moving it first)"
136
+ : "";
137
+ throw new Error(`The ${this.product.model} kept ${confirmed} Hz instead of ${rate} Hz.${hint}`);
138
+ }
139
+ return confirmed;
140
+ }
141
+ async setLiftOffDistance(value) {
142
+ const raw = value === "Low" ? 3 : value === "Medium" ? 1 : 2;
143
+ await this.writeScalar(GWOLVES_ADDRESS.lod, raw);
144
+ const confirmed = gwolvesDecodeProfile(await this.readProfile()).liftOffDistance;
145
+ if (confirmed !== value)
146
+ throw new Error(`The ${this.product.model} kept ${confirmed ?? "unknown"} LOD instead of ${value}.`);
147
+ return confirmed;
148
+ }
149
+ async close() {
150
+ this.failWaiter(new Error("The G-Wolves device was closed."));
151
+ this.device.removeEventListener("inputreport", this.onInputReport);
152
+ if (this.device.opened)
153
+ await this.device.close();
154
+ }
155
+ async readProfile() {
156
+ const profile = new Uint8Array(0xb7);
157
+ for (const [start, end] of [[0, 0x2c], [0xa8, 0xb7]]) {
158
+ for (let address = start; address < end; address += 10) {
159
+ const length = Math.min(10, end - address);
160
+ profile.set(await this.read(address, length), address);
161
+ }
162
+ }
163
+ return profile;
164
+ }
165
+ async read(address, length) {
166
+ const response = await this.transact(gwolvesBuildReadPayload(address, length));
167
+ const data = gwolvesParseReadResponse(response, address, length);
168
+ if (!data)
169
+ throw new Error(`${this.product.model} flash read failed at 0x${address.toString(16)}.`);
170
+ return data;
171
+ }
172
+ async writeScalar(address, value) {
173
+ const response = await this.transact(gwolvesBuildWriteScalarPayload(address, value));
174
+ if (!gwolvesReportChecksumIsValid(response) || response[0] !== GWOLVES_COMMAND.write || response[1] !== 0) {
175
+ throw new Error(`${this.product.model} flash write failed at 0x${address.toString(16)}.`);
176
+ }
177
+ const confirmed = await this.read(address, 2);
178
+ if (confirmed[0] !== value || ((confirmed[0] + confirmed[1]) & 0xff) !== 0x55) {
179
+ throw new Error(`The ${this.product.model} did not retain the value written at 0x${address.toString(16)}.`);
180
+ }
181
+ }
182
+ async write(address, data) {
183
+ const response = await this.transact(gwolvesBuildWritePayload(address, data));
184
+ if (!gwolvesReportChecksumIsValid(response) || response[0] !== GWOLVES_COMMAND.write || response[1] !== 0) {
185
+ throw new Error(`${this.product.model} flash write failed at 0x${address.toString(16)}.`);
186
+ }
187
+ }
188
+ async transact(payload) {
189
+ await this.open();
190
+ this.failWaiter(new Error("Superseded by another G-Wolves request."));
191
+ const command = payload[0];
192
+ const response = new Promise((resolve, reject) => {
193
+ const timer = window.setTimeout(() => {
194
+ if (this.waiter?.resolve === resolve)
195
+ this.waiter = null;
196
+ reject(new Error(`Timed out waiting for G-Wolves command 0x${command.toString(16)}.`));
197
+ }, RESPONSE_TIMEOUT_MS);
198
+ this.waiter = { command, resolve, reject, timer };
199
+ });
200
+ try {
201
+ await this.device.sendReport(GWOLVES_REPORT_ID, new Uint8Array(payload).buffer);
202
+ }
203
+ catch (error) {
204
+ this.failWaiter(error instanceof Error ? error : new Error(String(error)));
205
+ }
206
+ return response;
207
+ }
208
+ version(response) {
209
+ if (!gwolvesReportChecksumIsValid(response) || response[0] !== GWOLVES_COMMAND.firmware || response[1] !== 0)
210
+ return null;
211
+ return `v${response[5] ?? 0}.${(response[6] ?? 0).toString(16).padStart(2, "0")}`;
212
+ }
213
+ failWaiter(error) {
214
+ const waiter = this.waiter;
215
+ if (!waiter)
216
+ return;
217
+ window.clearTimeout(waiter.timer);
218
+ this.waiter = null;
219
+ waiter.reject(error);
220
+ }
221
+ static reportLength(report) {
222
+ return report.items.reduce((sum, item) => sum + item.reportSize * item.reportCount, 0) / 8;
223
+ }
224
+ }
225
+ //# sourceMappingURL=hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.js","sourceRoot":"","sources":["../../../src/drivers/gwolves/hid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface GWolvesProduct {
2
+ model: string;
3
+ wireless: boolean;
4
+ /**
5
+ * Only `verified: true` entries have been exercised against real hardware
6
+ * by this project. Everything else would be a guess based on "probably
7
+ * the same shared VGN-family protocol as the HTX Ultra" and should not be
8
+ * assumed correct until actually tested — see PROTOCOL-NOTES.md in the
9
+ * HTX Ultra PR for how the verified entries were confirmed (live HID
10
+ * capture while using the official web driver at mouse.fit, cross-checked
11
+ * independently with hidapitester).
12
+ */
13
+ verified: boolean;
14
+ }
15
+ export declare const GWOLVES_VENDOR_ID = 13284;
16
+ export declare const GWOLVES_PRODUCTS: ReadonlyMap<number, GWolvesProduct>;
17
+ //# sourceMappingURL=products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../../src/drivers/gwolves/products.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;;OAQG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAuD/D,CAAC"}
@@ -0,0 +1,58 @@
1
+ export const GWOLVES_VENDOR_ID = 0x33e4;
2
+ export const GWOLVES_PRODUCTS = new Map([
3
+ [0x5618, { model: "HTX Ultra", wireless: false, verified: true }],
4
+ [0x3854, { model: "HTX Ultra", wireless: true, verified: true }],
5
+ // Everything below is transcribed from G-Wolves' own live web-driver config
6
+ // (mouse.xyz's env-models.json, fetched 2026-08-30 — every entry shares the
7
+ // HTX Ultra's vendor id 0x33e4 and "IsNewProtocol": "1"), not independently
8
+ // hardware-tested. Add further G-Wolves models here as they're
9
+ // captured/verified — but confirm with a real capture before setting
10
+ // verified: true, since a wrong address/encoding on an unverified model
11
+ // could silently write the wrong value rather than fail loudly.
12
+ [0x3808, { model: "HTM Plus", wireless: false, verified: false }],
13
+ [0x3817, { model: "HTM Plus", wireless: true, verified: false }],
14
+ [0x6808, { model: "HSK Pro 2.0", wireless: false, verified: false }],
15
+ [0x6817, { model: "HSK Pro 2.0", wireless: true, verified: false }],
16
+ [0x5608, { model: "HTXU", wireless: false, verified: false }],
17
+ [0x5617, { model: "HTXU", wireless: true, verified: false }],
18
+ [0x3608, { model: "Fenrir Pro", wireless: false, verified: false }],
19
+ [0x3617, { model: "Fenrir Pro", wireless: true, verified: false }],
20
+ [0x3908, { model: "VUK", wireless: false, verified: false }],
21
+ [0x3917, { model: "VUK", wireless: true, verified: false }],
22
+ [0x7904, { model: "HT-S2", wireless: false, verified: false }],
23
+ [0x7913, { model: "HT-S2", wireless: true, verified: false }],
24
+ [0x3708, { model: "Fenir Max", wireless: false, verified: false }],
25
+ [0x3717, { model: "Fenir Max", wireless: true, verified: false }],
26
+ [0x5308, { model: "HTS Ultra", wireless: false, verified: false }],
27
+ [0x5317, { model: "HTS Ultra", wireless: true, verified: false }],
28
+ [0x7704, { model: "HTR", wireless: false, verified: false }],
29
+ [0x7713, { model: "HTR", wireless: true, verified: false }],
30
+ [0x3508, { model: "Fenrir", wireless: false, verified: false }],
31
+ [0x3517, { model: "Fenrir", wireless: true, verified: false }],
32
+ [0x7908, { model: "HT-S2 Pro", wireless: false, verified: false }],
33
+ [0x7917, { model: "HT-S2 Pro", wireless: true, verified: false }],
34
+ [0x5808, { model: "HSK Pro", wireless: false, verified: false }],
35
+ [0x5817, { model: "HSK Pro", wireless: true, verified: false }],
36
+ [0x2708, { model: "HTX Mini", wireless: false, verified: false }],
37
+ [0x2717, { model: "HTX Mini", wireless: true, verified: false }],
38
+ [0x5408, { model: "HTS Plus", wireless: false, verified: false }],
39
+ [0x5417, { model: "HTS Plus", wireless: true, verified: false }],
40
+ [0x5708, { model: "HTX", wireless: false, verified: false }],
41
+ [0x5717, { model: "HTX", wireless: true, verified: false }],
42
+ [0x5908, { model: "HSK Plus", wireless: false, verified: false }],
43
+ [0x5917, { model: "HSK Plus", wireless: true, verified: false }],
44
+ [0x7708, { model: "HTR Pro", wireless: false, verified: false }],
45
+ [0x7717, { model: "HTR Pro", wireless: true, verified: false }],
46
+ [0x5804, { model: "HSK Pro ACE", wireless: false, verified: false }],
47
+ [0x5803, { model: "HSK Pro ACE", wireless: true, verified: false }],
48
+ [0x5404, { model: "HTS Plus ACE", wireless: false, verified: false }],
49
+ [0x5403, { model: "HTS Plus ACE", wireless: true, verified: false }],
50
+ [0x5704, { model: "HTX ACE", wireless: false, verified: false }],
51
+ [0x5703, { model: "HTX ACE", wireless: true, verified: false }],
52
+ [0x5904, { model: "HSK Plus ACE", wireless: false, verified: false }],
53
+ [0x5903, { model: "HSK Plus ACE", wireless: true, verified: false }],
54
+ // "TEST HTS Plus" in that config (wired 0x5428, wireless 0x3854) is
55
+ // deliberately skipped: its own name marks it a dev/test entry, and its
56
+ // wireless id collides with the already-verified HTX Ultra's 0x3854.
57
+ ]);
58
+ //# sourceMappingURL=products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.js","sourceRoot":"","sources":["../../../src/drivers/gwolves/products.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { MouseStatus } from "../mouse-types.ts";
2
+ import { type DpiSettings } from "@openmouse/protocol/hyperx";
3
+ /**
4
+ * HyperX Pulsefire Haste — WebHID client.
5
+ *
6
+ * The config channel is a single vendor collection (usage page 0xFF00, usage
7
+ * 0x01) carrying one 64-byte **output** report and one 64-byte **input**
8
+ * report. It declares no feature report, so this driver transfers through
9
+ * `sendReport()` / the `inputreport` event instead of `sendFeatureReport()`.
10
+ *
11
+ * Reads (0x46/0x50/0x51/0x53/0x54) echo the request's opcode at byte 0 of
12
+ * their reply; writes (0xD0/0xD3/0xDE) are fire-and-forget and must be
13
+ * confirmed by re-reading the matching getter.
14
+ *
15
+ * The mouse is write-direct: DPI writes target onboard profile 0 (the profile
16
+ * NGENUITY opens as "Profile 1") and are persisted with a SAVE packet, then
17
+ * re-read through the 0x53 DPI-settings report so staged values are confirmed
18
+ * rather than assumed.
19
+ */
20
+ export declare class HyperXHidClient {
21
+ readonly device: HIDDevice;
22
+ private onReport;
23
+ private inbox;
24
+ constructor(device: HIDDevice);
25
+ static isSupported(device: HIDDevice): boolean;
26
+ get supportedPollingRates(): number[];
27
+ getDpiOptions(): number[];
28
+ open(): Promise<void>;
29
+ close(): Promise<void>;
30
+ /**
31
+ * Send a 64-byte output report and wait for a reply echoing `opcode` at byte
32
+ * 0. Other interfaces (mouse input, keyboard) share this HIDDevice; their
33
+ * reports are filtered out by length and opcode.
34
+ */
35
+ sendQuery(opcode: number): Promise<Uint8Array>;
36
+ /** Fire-and-forget write; no reply is expected. */
37
+ private sendCommand;
38
+ private delay;
39
+ getHardwareInfo(): Promise<{
40
+ firmware: string;
41
+ product: string;
42
+ }>;
43
+ getConnection(): Promise<{
44
+ type: "Wired" | "Wireless" | null;
45
+ detail: string;
46
+ }>;
47
+ getBattery(): Promise<{
48
+ percent: number | null;
49
+ state: "Charging" | "Discharging" | "Full" | "Unknown";
50
+ }>;
51
+ getDpiSettings(): Promise<DpiSettings | null>;
52
+ setDpi(dpi: number, dpiY?: number): Promise<number>;
53
+ setPollingRate(rate: number): Promise<number>;
54
+ setLiftOffDistance(value: NonNullable<MouseStatus["liftOffDistance"]>): Promise<void>;
55
+ /** Re-read DPI settings until they match, tolerating fire-and-forget write latency. */
56
+ private confirmDpi;
57
+ readStatus(): Promise<MouseStatus>;
58
+ }
59
+ //# sourceMappingURL=hid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.d.ts","sourceRoot":"","sources":["../../../src/drivers/hyperx/hid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAiBL,KAAK,WAAW,EAEjB,MAAM,4BAA4B,CAAC;AAYpC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAuD;IACvE,OAAO,CAAC,KAAK,CAAoB;gBAErB,MAAM,EAAE,SAAS;IAI7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAY9C,IAAI,qBAAqB,IAAI,MAAM,EAAE,CAEpC;IAED,aAAa,IAAI,MAAM,EAAE;IAInB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAcpD,mDAAmD;YACrC,WAAW;IAKzB,OAAO,CAAC,KAAK;IAQP,eAAe,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IASjE,aAAa,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAM/E,UAAU,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAKzG,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAS7C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBxD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW7C,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3F,uFAAuF;YACzE,UAAU;IAalB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;CAkDzC"}
@@ -0,0 +1,229 @@
1
+ import { CMD, HYPERX_USAGE, HYPERX_USAGE_PAGE, HYPERX_VENDOR_ID_HP, HYPERX_VENDOR_ID_KINGSTON, SUPPORTED_POLLING_RATES, decodeBattery, decodeConnection, decodeDpiSettings, decodeHardwareInfo, dpiOptions, encodeSave, encodeSetDpi, encodeSetLod, encodeSetPollingRate, isValidDpi, } from "@openmouse/protocol/hyperx";
2
+ const REPORT_SIZE = 64;
3
+ const RESPONSE_TIMEOUT_MS = 500;
4
+ const RESPONSE_POLL_MS = 5;
5
+ const WRITE_SETTLE_MS = 60;
6
+ const WRITE_CONFIRM_ATTEMPTS = 5;
7
+ function hex(value) {
8
+ return `0x${value.toString(16).padStart(2, "0")}`;
9
+ }
10
+ /**
11
+ * HyperX Pulsefire Haste — WebHID client.
12
+ *
13
+ * The config channel is a single vendor collection (usage page 0xFF00, usage
14
+ * 0x01) carrying one 64-byte **output** report and one 64-byte **input**
15
+ * report. It declares no feature report, so this driver transfers through
16
+ * `sendReport()` / the `inputreport` event instead of `sendFeatureReport()`.
17
+ *
18
+ * Reads (0x46/0x50/0x51/0x53/0x54) echo the request's opcode at byte 0 of
19
+ * their reply; writes (0xD0/0xD3/0xDE) are fire-and-forget and must be
20
+ * confirmed by re-reading the matching getter.
21
+ *
22
+ * The mouse is write-direct: DPI writes target onboard profile 0 (the profile
23
+ * NGENUITY opens as "Profile 1") and are persisted with a SAVE packet, then
24
+ * re-read through the 0x53 DPI-settings report so staged values are confirmed
25
+ * rather than assumed.
26
+ */
27
+ export class HyperXHidClient {
28
+ device;
29
+ onReport = null;
30
+ inbox = [];
31
+ constructor(device) {
32
+ this.device = device;
33
+ }
34
+ static isSupported(device) {
35
+ const vid = device.vendorId;
36
+ if (vid !== HYPERX_VENDOR_ID_KINGSTON && vid !== HYPERX_VENDOR_ID_HP)
37
+ return false;
38
+ const hasVendorCollection = (collections) => collections.some((collection) => (collection.usagePage === HYPERX_USAGE_PAGE && collection.usage === HYPERX_USAGE) ||
39
+ hasVendorCollection(collection.children));
40
+ return hasVendorCollection(device.collections);
41
+ }
42
+ get supportedPollingRates() {
43
+ return [...SUPPORTED_POLLING_RATES];
44
+ }
45
+ getDpiOptions() {
46
+ return dpiOptions();
47
+ }
48
+ async open() {
49
+ if (!this.device.opened)
50
+ await this.device.open();
51
+ if (!this.onReport) {
52
+ this.inbox = [];
53
+ this.onReport = (event) => {
54
+ const data = new Uint8Array(event.data.buffer, event.data.byteOffset, event.data.byteLength);
55
+ if (data.length >= REPORT_SIZE) {
56
+ this.inbox.push(data.subarray(0, REPORT_SIZE));
57
+ }
58
+ };
59
+ this.device.addEventListener("inputreport", this.onReport);
60
+ }
61
+ }
62
+ async close() {
63
+ if (this.onReport) {
64
+ this.device.removeEventListener("inputreport", this.onReport);
65
+ this.onReport = null;
66
+ }
67
+ this.inbox = [];
68
+ if (this.device.opened)
69
+ await this.device.close();
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Report I/O
73
+ // ---------------------------------------------------------------------------
74
+ /**
75
+ * Send a 64-byte output report and wait for a reply echoing `opcode` at byte
76
+ * 0. Other interfaces (mouse input, keyboard) share this HIDDevice; their
77
+ * reports are filtered out by length and opcode.
78
+ */
79
+ async sendQuery(opcode) {
80
+ await this.open();
81
+ const buf = new Uint8Array(REPORT_SIZE);
82
+ buf[0] = opcode;
83
+ const deadline = performance.now() + RESPONSE_TIMEOUT_MS;
84
+ await this.device.sendReport(0, buf);
85
+ while (performance.now() < deadline) {
86
+ const index = this.inbox.findIndex((candidate) => candidate[0] === opcode);
87
+ if (index !== -1)
88
+ return this.inbox.splice(index, 1)[0];
89
+ await this.delay(RESPONSE_POLL_MS);
90
+ }
91
+ throw new Error(`HyperX command ${hex(opcode)} was not answered.`);
92
+ }
93
+ /** Fire-and-forget write; no reply is expected. */
94
+ async sendCommand(buf) {
95
+ await this.open();
96
+ await this.device.sendReport(0, buf.buffer);
97
+ }
98
+ delay(ms) {
99
+ return new Promise((resolve) => setTimeout(resolve, ms));
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // Reads
103
+ // ---------------------------------------------------------------------------
104
+ async getHardwareInfo() {
105
+ const resp = await this.sendQuery(CMD.GET_HARDWARE_INFO);
106
+ const info = decodeHardwareInfo(resp);
107
+ return {
108
+ firmware: info?.firmware ?? "unknown",
109
+ product: info?.product ?? this.device.productName ?? "",
110
+ };
111
+ }
112
+ async getConnection() {
113
+ const resp = await this.sendQuery(CMD.GET_CONNECTION);
114
+ const type = decodeConnection(resp);
115
+ return { type, detail: type === "Wireless" ? "2.4 GHz receiver" : type === "Wired" ? "USB" : "" };
116
+ }
117
+ async getBattery() {
118
+ const resp = await this.sendQuery(CMD.GET_BATTERY);
119
+ return decodeBattery(resp) ?? { percent: null, state: "Unknown" };
120
+ }
121
+ async getDpiSettings() {
122
+ const resp = await this.sendQuery(CMD.GET_DPI);
123
+ return decodeDpiSettings(resp);
124
+ }
125
+ // ---------------------------------------------------------------------------
126
+ // Writes
127
+ // ---------------------------------------------------------------------------
128
+ async setDpi(dpi, dpiY = dpi) {
129
+ if (!isValidDpi(dpi) || !isValidDpi(dpiY)) {
130
+ throw new Error("HyperX DPI must be 200–16,000 in 100 DPI steps.");
131
+ }
132
+ await this.open();
133
+ for (const [profile, value] of [[0, dpi], [1, dpiY]]) {
134
+ const buf = encodeSetDpi(profile, value);
135
+ if (buf)
136
+ await this.sendCommand(buf);
137
+ }
138
+ const save = encodeSave(0x03);
139
+ await this.sendCommand(save);
140
+ await this.delay(WRITE_SETTLE_MS);
141
+ const confirmed = await this.confirmDpi((settings) => settings !== null && settings.profiles[0] === dpi);
142
+ if (confirmed && confirmed.profiles[0] !== dpi) {
143
+ throw new Error(`The mouse kept ${confirmed.profiles[0].toLocaleString()} DPI instead of ${dpi.toLocaleString()}.`);
144
+ }
145
+ return confirmed?.profiles[0] ?? dpi;
146
+ }
147
+ async setPollingRate(rate) {
148
+ if (!SUPPORTED_POLLING_RATES.includes(rate)) {
149
+ throw new Error(`HyperX supports ${SUPPORTED_POLLING_RATES.join(", ")} Hz.`);
150
+ }
151
+ const buf = encodeSetPollingRate(rate);
152
+ if (!buf)
153
+ throw new Error(`Failed to encode polling rate ${rate} Hz.`);
154
+ await this.sendCommand(buf);
155
+ await this.delay(WRITE_SETTLE_MS);
156
+ return rate;
157
+ }
158
+ async setLiftOffDistance(value) {
159
+ if (value !== "Low" && value !== "High") {
160
+ throw new Error("HyperX supports 1 mm (Low) or 2 mm (High) lift-off distance.");
161
+ }
162
+ const buf = encodeSetLod(value);
163
+ await this.sendCommand(buf);
164
+ const save = encodeSave(0x03);
165
+ await this.sendCommand(save);
166
+ await this.delay(WRITE_SETTLE_MS);
167
+ const confirmed = await this.confirmDpi((settings) => settings !== null && settings.liftOffDistance === value);
168
+ if (confirmed && confirmed.liftOffDistance !== value) {
169
+ throw new Error(`The mouse kept ${confirmed.liftOffDistance ?? "an unknown"} lift-off distance instead of ${value}.`);
170
+ }
171
+ }
172
+ /** Re-read DPI settings until they match, tolerating fire-and-forget write latency. */
173
+ async confirmDpi(matches) {
174
+ let settings = await this.getDpiSettings().catch(() => null);
175
+ for (let attempt = 1; attempt < WRITE_CONFIRM_ATTEMPTS && !matches(settings); attempt += 1) {
176
+ await this.delay(WRITE_SETTLE_MS);
177
+ settings = await this.getDpiSettings().catch(() => null);
178
+ }
179
+ return settings;
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // High-level API
183
+ // ---------------------------------------------------------------------------
184
+ async readStatus() {
185
+ await this.open();
186
+ // Hardware info must answer, or this is not a HyperX config interface.
187
+ const [infoResult, dpiResult, batteryResult, connectionResult] = await Promise.allSettled([
188
+ this.getHardwareInfo(),
189
+ this.getDpiSettings(),
190
+ this.getBattery(),
191
+ this.getConnection(),
192
+ ]);
193
+ if (infoResult.status === "rejected") {
194
+ throw new Error(`HyperX control interface did not answer hardware info. ${infoResult.reason}`);
195
+ }
196
+ const info = infoResult.value;
197
+ const dpi = dpiResult.status === "fulfilled" ? dpiResult.value : null;
198
+ const battery = batteryResult.status === "fulfilled" ? batteryResult.value : null;
199
+ const connection = connectionResult.status === "fulfilled" ? connectionResult.value : null;
200
+ const activeDpi = dpi?.profiles[dpi.activeProfile] ?? dpi?.profiles[0] ?? 1600;
201
+ const isWireless = connection?.type === "Wireless";
202
+ const settingsReady = dpi !== null;
203
+ return {
204
+ brand: "HyperX",
205
+ name: info.product || this.device.productName || "HyperX Mouse",
206
+ ui: {
207
+ family: "hyperx",
208
+ settingsReady,
209
+ hideLodLow: false,
210
+ hideUnsupportedPollingRates: true,
211
+ hideProcessingCard: true,
212
+ defaultDisplayName: info.product || this.device.productName || "HyperX Mouse",
213
+ },
214
+ batteryPercent: isWireless ? battery?.percent ?? null : null,
215
+ batteryState: isWireless ? battery?.state ?? "Unknown" : "Unknown",
216
+ dpi: activeDpi,
217
+ dpiY: activeDpi,
218
+ pollingRateHz: 1000,
219
+ supportedPollingRates: this.supportedPollingRates,
220
+ activeProfile: dpi?.activeProfile ?? null,
221
+ connectionType: connection?.type ?? (isWireless ? "Wireless" : "Wired"),
222
+ connectionDetail: connection?.detail,
223
+ liftOffDistance: dpi?.liftOffDistance ?? null,
224
+ supportedLiftOffDistances: ["Low", "High"],
225
+ firmware: info.firmware ? [`Mouse v${info.firmware}`] : [],
226
+ };
227
+ }
228
+ }
229
+ //# sourceMappingURL=hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.js","sourceRoot":"","sources":["../../../src/drivers/hyperx/hid.ts"],"names":[],"mappings":"AACA,OAAO,EACL,GAAG,EACH,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,UAAU,GAGX,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,eAAe;IACjB,MAAM,CAAY;IACnB,QAAQ,GAAkD,IAAI,CAAC;IAC/D,KAAK,GAAiB,EAAE,CAAC;IAEjC,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAAiB;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC5B,IAAI,GAAG,KAAK,yBAAyB,IAAI,GAAG,KAAK,mBAAmB;YAAE,OAAO,KAAK,CAAC;QACnF,MAAM,mBAAmB,GAAG,CAAC,WAAyC,EAAW,EAAE,CACjF,WAAW,CAAC,IAAI,CACd,CAAC,UAAU,EAAE,EAAE,CACb,CAAC,UAAU,CAAC,SAAS,KAAK,iBAAiB,IAAI,UAAU,CAAC,KAAK,KAAK,YAAY,CAAC;YACjF,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC3C,CAAC;QACJ,OAAO,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,qBAAqB;QACvB,OAAO,CAAC,GAAG,uBAAuB,CAAC,CAAC;IACtC,CAAC;IAED,aAAa;QACX,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,GAAG,CAAC,KAA0B,EAAE,EAAE;gBAC7C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC7F,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;oBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACpD,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E;;;;OAIG;IACH,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAChB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAC;QACzD,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;YAC3E,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACrE,CAAC;IAED,mDAAmD;IAC3C,KAAK,CAAC,WAAW,CAAC,GAAe;QACvC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,MAAqB,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,8EAA8E;IAC9E,QAAQ;IACR,8EAA8E;IAE9E,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,SAAS;YACrC,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE;SACxD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpG,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnD,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,8EAA8E;IAC9E,SAAS;IACT,8EAA8E;IAE9E,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,OAAe,GAAG;QAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAElB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAU,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,IAAI,GAAG;gBAAE,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAElC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACzG,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,mBAAmB,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACtH,CAAC;QACD,OAAO,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,IAAI,CAAE,uBAA6C,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,mBAAmB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,MAAM,CAAC,CAAC;QACvE,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAkD;QACzE,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,KAAwB,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAElC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,eAAe,KAAK,KAAK,CAAC,CAAC;QAC/G,IAAI,SAAS,IAAI,SAAS,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,kBAAkB,SAAS,CAAC,eAAe,IAAI,YAAY,iCAAiC,KAAK,GAAG,CACrG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,uFAAuF;IAC/E,KAAK,CAAC,UAAU,CAAC,OAAkD;QACzE,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,sBAAsB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YAC3F,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAClC,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAElB,uEAAuE;QACvE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACxF,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE;SACrB,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,0DAA0D,UAAU,CAAC,MAAM,EAAE,CAC9E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;QAC9B,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3F,MAAM,SAAS,GAAG,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC/E,MAAM,UAAU,GAAG,UAAU,EAAE,IAAI,KAAK,UAAU,CAAC;QACnD,MAAM,aAAa,GAAG,GAAG,KAAK,IAAI,CAAC;QAEnC,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,cAAc;YAC/D,EAAE,EAAE;gBACF,MAAM,EAAE,QAAQ;gBAChB,aAAa;gBACb,UAAU,EAAE,KAAK;gBACjB,2BAA2B,EAAE,IAAI;gBACjC,kBAAkB,EAAE,IAAI;gBACxB,kBAAkB,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,cAAc;aAC9E;YACD,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;YAC5D,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS;YAClE,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;YACf,aAAa,EAAE,IAAI;YACnB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,aAAa,EAAE,GAAG,EAAE,aAAa,IAAI,IAAI;YACzC,cAAc,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YACvE,gBAAgB,EAAE,UAAU,EAAE,MAAM;YACpC,eAAe,EAAE,GAAG,EAAE,eAAe,IAAI,IAAI;YAC7C,yBAAyB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;YAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;SAC3D,CAAC;IACJ,CAAC;CACF"}