@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,182 @@
1
+ import { RIVAL310_POLLING_RATES, STEELSERIES_PRODUCTS, STEELSERIES_RIVAL310_REPORT_ID, STEELSERIES_VENDOR_ID, steelseriesRival310DecodeFirmware, steelseriesRival310DpiOptions, steelseriesRival310EncodeButtonsMapping, steelseriesRival310EncodeLedColor, steelseriesRival310EncodePollingRate, steelseriesRival310EncodeSensitivity1, steelseriesRival310FirmwareQuery, steelseriesRival310SaveCommand, } from "@openmouse/protocol/steelseries";
2
+ /** rivalcfg's `command_approve_delay`, shared across every SteelSeries family. */
3
+ const COMMAND_DELAY_MS = 50;
4
+ /** rivalcfg reads the firmware response with a 200 ms timeout; allow slack. */
5
+ const FIRMWARE_TIMEOUT_MS = 500;
6
+ /** rivalcfg profile defaults (`rival310.py`), shown only until this session writes a value. */
7
+ const DEFAULT_DPI = 800;
8
+ const DEFAULT_POLLING_HZ = 1000;
9
+ /**
10
+ * SteelSeries Rival 310 WebHID control (`1038:1720`, `1038:171E` CS:GO Howl
11
+ * Edition, `1038:1736` PUBG Edition — one shared command set, see
12
+ * `../../steelseries/rival310.ts`'s doc comment).
13
+ *
14
+ * The device is write-only for settings: only the two-byte firmware version
15
+ * (`90 00`) can be read back, and this driver uses it as its connectivity
16
+ * probe, same pattern as `./hid.ts`'s Rival 3 Gen 1 client. `readStatus`
17
+ * therefore reports the session's last-written DPI/polling values (or
18
+ * rivalcfg's documented defaults before any write) with
19
+ * `valuesVerified: false` — it never pretends to have read them from the
20
+ * mouse. Every setter follows its write with the save command so the change
21
+ * persists in the mouse's onboard memory, mirroring rivalcfg's CLI default.
22
+ *
23
+ * The config channel is hidapi `endpoint 0`, per `rival310.py`'s model
24
+ * entries; its WebHID collection shape has not been captured yet, so the
25
+ * picker offers every interface and the wrong ones fail the firmware probe
26
+ * loudly, same as Rival 3 Gen 1.
27
+ *
28
+ * LED color writes are HID **feature** reports, not output reports (see
29
+ * `steelseriesRival310EncodeLedColor`'s doc comment) — `setLedColor` routes
30
+ * through `device.sendFeatureReport`, unlike every other setter here.
31
+ */
32
+ export class SteelSeriesRival310HidClient {
33
+ device;
34
+ queue = Promise.resolve();
35
+ listenerAttached = false;
36
+ inputWaiters = new Set();
37
+ lastWritten = {
38
+ dpi: null,
39
+ pollingRateHz: null,
40
+ };
41
+ onInputReport = (event) => {
42
+ const payload = new Uint8Array(event.data.buffer.slice(event.data.byteOffset, event.data.byteOffset + event.data.byteLength));
43
+ for (const finish of [...this.inputWaiters])
44
+ finish(payload);
45
+ };
46
+ constructor(device) {
47
+ this.device = device;
48
+ }
49
+ static isSupported(device) {
50
+ if (device.vendorId !== STEELSERIES_VENDOR_ID)
51
+ return false;
52
+ return STEELSERIES_PRODUCTS.get(device.productId)?.family === "rival310";
53
+ }
54
+ get pollIntervalMs() { return 30_000; }
55
+ get supportedPollingRates() { return [...RIVAL310_POLLING_RATES]; }
56
+ getDpiOptions() { return steelseriesRival310DpiOptions(); }
57
+ async open() {
58
+ if (!this.device.opened)
59
+ await this.device.open();
60
+ if (!this.listenerAttached) {
61
+ this.device.addEventListener("inputreport", this.onInputReport);
62
+ this.listenerAttached = true;
63
+ }
64
+ }
65
+ async close() {
66
+ if (this.listenerAttached) {
67
+ this.device.removeEventListener("inputreport", this.onInputReport);
68
+ this.listenerAttached = false;
69
+ }
70
+ if (this.device.opened)
71
+ await this.device.close();
72
+ }
73
+ async readStatus() {
74
+ return await this.run(async () => {
75
+ await this.open();
76
+ const firmware = await this.probeFirmware();
77
+ const product = STEELSERIES_PRODUCTS.get(this.device.productId);
78
+ const name = this.device.productName?.trim() || `SteelSeries ${product?.model ?? "Rival 310"}`;
79
+ return {
80
+ brand: "SteelSeries",
81
+ name,
82
+ ui: {
83
+ family: "steelseries-rival310",
84
+ settingsReady: true,
85
+ valuesVerified: false,
86
+ hideUnsupportedPollingRates: true,
87
+ hideProcessingCard: true,
88
+ pollingNote: "The Rival 310 cannot report its current settings; values shown are the last written by this app, or assumed defaults.",
89
+ defaultDisplayName: "SteelSeries Rival 310",
90
+ },
91
+ batteryPercent: null,
92
+ batteryState: "Unknown",
93
+ dpi: this.lastWritten.dpi ?? DEFAULT_DPI,
94
+ pollingRateHz: this.lastWritten.pollingRateHz ?? DEFAULT_POLLING_HZ,
95
+ supportedPollingRates: this.supportedPollingRates,
96
+ activeProfile: null,
97
+ connectionType: "Wired",
98
+ liftOffDistance: null,
99
+ firmware: [firmware.display],
100
+ };
101
+ });
102
+ }
103
+ /**
104
+ * Writes sensitivity preset 1 only. The device is write-only, so the
105
+ * existing preset 2 and button/lighting configuration cannot be read and
106
+ * preserved — record them before testing, per docs/steelseries-testing.md.
107
+ */
108
+ async setDpi(dpi) {
109
+ const report = steelseriesRival310EncodeSensitivity1(dpi);
110
+ await this.run(async () => {
111
+ await this.open();
112
+ await this.write(report);
113
+ await this.delay(COMMAND_DELAY_MS);
114
+ await this.write(steelseriesRival310SaveCommand());
115
+ this.lastWritten.dpi = dpi;
116
+ });
117
+ return dpi;
118
+ }
119
+ async setPollingRate(pollingRateHz) {
120
+ const report = steelseriesRival310EncodePollingRate(pollingRateHz);
121
+ await this.run(async () => {
122
+ await this.open();
123
+ await this.write(report);
124
+ await this.delay(COMMAND_DELAY_MS);
125
+ await this.write(steelseriesRival310SaveCommand());
126
+ this.lastWritten.pollingRateHz = pollingRateHz;
127
+ });
128
+ return pollingRateHz;
129
+ }
130
+ async setLedColor(led, r, g, b) {
131
+ const report = steelseriesRival310EncodeLedColor(led, r, g, b);
132
+ await this.run(async () => {
133
+ await this.open();
134
+ await this.device.sendFeatureReport(STEELSERIES_RIVAL310_REPORT_ID, report.buffer);
135
+ await this.delay(COMMAND_DELAY_MS);
136
+ await this.write(steelseriesRival310SaveCommand());
137
+ });
138
+ }
139
+ async setButtonsMapping(mapping) {
140
+ const report = steelseriesRival310EncodeButtonsMapping(mapping);
141
+ await this.run(async () => {
142
+ await this.open();
143
+ await this.write(report);
144
+ await this.delay(COMMAND_DELAY_MS);
145
+ await this.write(steelseriesRival310SaveCommand());
146
+ });
147
+ }
148
+ /**
149
+ * The `90 00` firmware query is the device's only readable value, so it
150
+ * doubles as the proof that the granted interface is the config channel.
151
+ */
152
+ async probeFirmware() {
153
+ const response = new Promise((resolve) => {
154
+ let timer;
155
+ const finish = (payload) => {
156
+ clearTimeout(timer);
157
+ this.inputWaiters.delete(finish);
158
+ resolve(payload);
159
+ };
160
+ timer = setTimeout(() => finish(null), FIRMWARE_TIMEOUT_MS);
161
+ this.inputWaiters.add(finish);
162
+ });
163
+ await this.write(steelseriesRival310FirmwareQuery());
164
+ const payload = await response;
165
+ if (!payload) {
166
+ throw new Error("The Rival 310 did not answer on this interface. Close SteelSeries GG (and the SteelSeriesEngine service); if it still does not answer, add the device again and choose another entry.");
167
+ }
168
+ return steelseriesRival310DecodeFirmware(payload);
169
+ }
170
+ async write(payload) {
171
+ await this.device.sendReport(STEELSERIES_RIVAL310_REPORT_ID, payload.buffer);
172
+ }
173
+ delay(milliseconds) {
174
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
175
+ }
176
+ async run(operation) {
177
+ const result = this.queue.then(operation, operation);
178
+ this.queue = result.then(() => undefined, () => undefined);
179
+ return await result;
180
+ }
181
+ }
182
+ //# sourceMappingURL=rival310-hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rival310-hid.js","sourceRoot":"","sources":["../../../src/drivers/steelseries/rival310-hid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { MouseStatus } from "../mouse-types.js";
2
+ import { type Rival650ButtonAction, type Rival650ButtonName } from "@openmouse/protocol/steelseries";
3
+ /**
4
+ * SteelSeries Rival 650 Wireless WebHID control (`1038:172B` wired mode,
5
+ * `1038:1726` 2.4 GHz wireless mode).
6
+ *
7
+ * DPI (two independent presets, `sensitivity1`/`sensitivity2` — this codec
8
+ * exposes `setDpi` against preset 1 only, matching every other SteelSeries
9
+ * family's single-`setDpi` surface), polling rate, lift-off distance,
10
+ * buttons, and the sleep timer are all write-only — `rival650.py` defines no
11
+ * getter for any of them. Unlike `SteelSeriesRival3WirelessHidClient`, this
12
+ * device has **no firmware-query command** at all (`rival650.py` defines no
13
+ * `firmware_version` block), so `readStatus` reports firmware as unknown
14
+ * rather than probing for it. `battery_level` (`AA 01`) is readable and
15
+ * doubles as this client's connectivity probe, same role it plays for the
16
+ * Rival 3 Wireless. `readStatus` therefore has `valuesVerified: false`:
17
+ * DPI, polling rate, and lift-off distance are the session's last-written
18
+ * values (or rivalcfg's documented defaults before any write).
19
+ *
20
+ * The config channel is hidapi interface 0, per `rival650.py`'s
21
+ * `"endpoint": 0` model entries (both PIDs); its WebHID collection shape has
22
+ * not been captured yet, so the picker offers every interface and the wrong
23
+ * ones fail the battery probe loudly.
24
+ */
25
+ export declare class SteelSeriesRival650HidClient {
26
+ readonly device: HIDDevice;
27
+ private queue;
28
+ private listenerAttached;
29
+ private readonly inputWaiters;
30
+ private lastWritten;
31
+ private readonly onInputReport;
32
+ constructor(device: HIDDevice);
33
+ static isSupported(device: HIDDevice): boolean;
34
+ get pollIntervalMs(): number;
35
+ get supportedPollingRates(): number[];
36
+ getDpiOptions(): number[];
37
+ open(): Promise<void>;
38
+ close(): Promise<void>;
39
+ readStatus(): Promise<MouseStatus>;
40
+ /** `15 01 <v>` — sensitivity preset 1. The device has no getter, so preset 2 is left untouched by this call. */
41
+ setDpi(dpi: number): Promise<number>;
42
+ setPollingRate(pollingRateHz: number): Promise<number>;
43
+ /**
44
+ * `20 01 <v>` — lift-off distance, 1–8 mm. Named distinctly from the
45
+ * shared `setLiftOffDistance(lod: "Low" | "Medium" | "High")` surface
46
+ * every other driver implements: the Rival 650's scale is a raw
47
+ * millimeter range with no natural 3-way mapping onto that enum (see the
48
+ * `readStatus` comment above), and giving it the same method name would
49
+ * collapse `SupportedClient`'s intersected parameter type to `never` for
50
+ * every driver, since TypeScript intersects the parameter types of a
51
+ * union of function members. Not currently wired to any UI control.
52
+ */
53
+ setLiftOffDistanceMm(millimeters: number): Promise<number>;
54
+ /** `2B 01 01 00 00 00 <v>` — idle minutes before sleep, 1–20. */
55
+ setSleepTimer(minutes: number): Promise<void>;
56
+ setButtonsMapping(mapping: Partial<Record<Rival650ButtonName, Rival650ButtonAction>>): Promise<void>;
57
+ /**
58
+ * `AA 01` — battery percentage and charging state. Doubles as the proof
59
+ * that the granted interface is the config channel, same role it plays
60
+ * for `SteelSeriesRival3WirelessHidClient`.
61
+ */
62
+ private probeBattery;
63
+ private awaitResponse;
64
+ private write;
65
+ private delay;
66
+ private run;
67
+ }
68
+ //# sourceMappingURL=rival650-hid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rival650-hid.d.ts","sourceRoot":"","sources":["../../../src/drivers/steelseries/rival650-hid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAeL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;AAUzC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,4BAA4B;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4C;IACzE,OAAO,CAAC,WAAW,CAIjB;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;gBAEU,MAAM,EAAE,SAAS;IAI7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAK9C,IAAI,cAAc,IAAI,MAAM,CAAmB;IAE/C,IAAI,qBAAqB,IAAI,MAAM,EAAE,CAAwC;IAE7E,aAAa,IAAI,MAAM,EAAE;IAEnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAoCxC,gHAAgH;IAC1G,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYpC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY5D;;;;;;;;;OASG;IACG,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhE,iEAAiE;IAC3D,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1G;;;;OAIG;YACW,YAAY;YAUZ,aAAa;YAeb,KAAK;IAInB,OAAO,CAAC,KAAK;YAIC,GAAG;CAKlB"}
@@ -0,0 +1,209 @@
1
+ import { RIVAL650_POLLING_RATES, STEELSERIES_PRODUCTS, STEELSERIES_VENDOR_ID, RIVAL650_REPORT_ID, steelseriesRival650BatteryQuery, steelseriesRival650DecodeBattery, steelseriesRival650DpiOptions, steelseriesRival650EncodeButtonsMapping, steelseriesRival650EncodeLiftOffDistance, steelseriesRival650EncodePollingRate, steelseriesRival650EncodeSensitivity1, steelseriesRival650EncodeSleepTimer, steelseriesRival650SaveCommand, } from "@openmouse/protocol/steelseries";
2
+ /** rivalcfg's `command_approve_delay`, shared across every SteelSeries family. */
3
+ const COMMAND_DELAY_MS = 50;
4
+ /** rivalcfg reads input-report replies with a 200 ms timeout; allow slack. */
5
+ const RESPONSE_TIMEOUT_MS = 500;
6
+ /** rivalcfg profile default (`rival650.py`: `sensitivity1` default 800). */
7
+ const DEFAULT_DPI = 800;
8
+ const DEFAULT_POLLING_HZ = 1000;
9
+ /**
10
+ * SteelSeries Rival 650 Wireless WebHID control (`1038:172B` wired mode,
11
+ * `1038:1726` 2.4 GHz wireless mode).
12
+ *
13
+ * DPI (two independent presets, `sensitivity1`/`sensitivity2` — this codec
14
+ * exposes `setDpi` against preset 1 only, matching every other SteelSeries
15
+ * family's single-`setDpi` surface), polling rate, lift-off distance,
16
+ * buttons, and the sleep timer are all write-only — `rival650.py` defines no
17
+ * getter for any of them. Unlike `SteelSeriesRival3WirelessHidClient`, this
18
+ * device has **no firmware-query command** at all (`rival650.py` defines no
19
+ * `firmware_version` block), so `readStatus` reports firmware as unknown
20
+ * rather than probing for it. `battery_level` (`AA 01`) is readable and
21
+ * doubles as this client's connectivity probe, same role it plays for the
22
+ * Rival 3 Wireless. `readStatus` therefore has `valuesVerified: false`:
23
+ * DPI, polling rate, and lift-off distance are the session's last-written
24
+ * values (or rivalcfg's documented defaults before any write).
25
+ *
26
+ * The config channel is hidapi interface 0, per `rival650.py`'s
27
+ * `"endpoint": 0` model entries (both PIDs); its WebHID collection shape has
28
+ * not been captured yet, so the picker offers every interface and the wrong
29
+ * ones fail the battery probe loudly.
30
+ */
31
+ export class SteelSeriesRival650HidClient {
32
+ device;
33
+ queue = Promise.resolve();
34
+ listenerAttached = false;
35
+ inputWaiters = new Set();
36
+ lastWritten = {
37
+ dpi: null,
38
+ pollingRateHz: null,
39
+ liftOffDistance: null,
40
+ };
41
+ onInputReport = (event) => {
42
+ const payload = new Uint8Array(event.data.buffer.slice(event.data.byteOffset, event.data.byteOffset + event.data.byteLength));
43
+ for (const finish of [...this.inputWaiters])
44
+ finish(payload);
45
+ };
46
+ constructor(device) {
47
+ this.device = device;
48
+ }
49
+ static isSupported(device) {
50
+ if (device.vendorId !== STEELSERIES_VENDOR_ID)
51
+ return false;
52
+ return STEELSERIES_PRODUCTS.get(device.productId)?.family === "rival650";
53
+ }
54
+ get pollIntervalMs() { return 30_000; }
55
+ get supportedPollingRates() { return [...RIVAL650_POLLING_RATES]; }
56
+ getDpiOptions() { return steelseriesRival650DpiOptions(); }
57
+ async open() {
58
+ if (!this.device.opened)
59
+ await this.device.open();
60
+ if (!this.listenerAttached) {
61
+ this.device.addEventListener("inputreport", this.onInputReport);
62
+ this.listenerAttached = true;
63
+ }
64
+ }
65
+ async close() {
66
+ if (this.listenerAttached) {
67
+ this.device.removeEventListener("inputreport", this.onInputReport);
68
+ this.listenerAttached = false;
69
+ }
70
+ if (this.device.opened)
71
+ await this.device.close();
72
+ }
73
+ async readStatus() {
74
+ return await this.run(async () => {
75
+ await this.open();
76
+ const battery = await this.probeBattery();
77
+ const product = STEELSERIES_PRODUCTS.get(this.device.productId);
78
+ const name = this.device.productName?.trim() || `SteelSeries ${product?.model ?? "Rival 650 Wireless"}`;
79
+ return {
80
+ brand: "SteelSeries",
81
+ name,
82
+ ui: {
83
+ family: "steelseries-rival650",
84
+ settingsReady: true,
85
+ valuesVerified: false,
86
+ hideUnsupportedPollingRates: true,
87
+ hideProcessingCard: true,
88
+ pollingNote: "The Rival 650 Wireless cannot report its current DPI, polling rate, or lift-off distance; values shown are the last written by this app, or assumed defaults.",
89
+ defaultDisplayName: "SteelSeries Rival 650 Wireless",
90
+ },
91
+ batteryPercent: battery.level,
92
+ batteryState: battery.isCharging ? "Charging" : "Discharging",
93
+ dpi: this.lastWritten.dpi ?? DEFAULT_DPI,
94
+ pollingRateHz: this.lastWritten.pollingRateHz ?? DEFAULT_POLLING_HZ,
95
+ supportedPollingRates: this.supportedPollingRates,
96
+ activeProfile: null,
97
+ connectionType: "Wireless",
98
+ // `MouseStatus.liftOffDistance` is the shared three-stop Low/Medium/
99
+ // High enum; this device's 1–8 mm scale does not map onto it cleanly
100
+ // (same reason every sibling SteelSeries client reports null here),
101
+ // so the raw last-written millimeter value stays internal to this
102
+ // client (`this.lastWritten.liftOffDistance`) rather than surfaced.
103
+ liftOffDistance: null,
104
+ firmware: [],
105
+ };
106
+ });
107
+ }
108
+ /** `15 01 <v>` — sensitivity preset 1. The device has no getter, so preset 2 is left untouched by this call. */
109
+ async setDpi(dpi) {
110
+ const report = steelseriesRival650EncodeSensitivity1(dpi);
111
+ await this.run(async () => {
112
+ await this.open();
113
+ await this.write(report);
114
+ await this.delay(COMMAND_DELAY_MS);
115
+ await this.write(steelseriesRival650SaveCommand());
116
+ this.lastWritten.dpi = dpi;
117
+ });
118
+ return dpi;
119
+ }
120
+ async setPollingRate(pollingRateHz) {
121
+ const report = steelseriesRival650EncodePollingRate(pollingRateHz);
122
+ await this.run(async () => {
123
+ await this.open();
124
+ await this.write(report);
125
+ await this.delay(COMMAND_DELAY_MS);
126
+ await this.write(steelseriesRival650SaveCommand());
127
+ this.lastWritten.pollingRateHz = pollingRateHz;
128
+ });
129
+ return pollingRateHz;
130
+ }
131
+ /**
132
+ * `20 01 <v>` — lift-off distance, 1–8 mm. Named distinctly from the
133
+ * shared `setLiftOffDistance(lod: "Low" | "Medium" | "High")` surface
134
+ * every other driver implements: the Rival 650's scale is a raw
135
+ * millimeter range with no natural 3-way mapping onto that enum (see the
136
+ * `readStatus` comment above), and giving it the same method name would
137
+ * collapse `SupportedClient`'s intersected parameter type to `never` for
138
+ * every driver, since TypeScript intersects the parameter types of a
139
+ * union of function members. Not currently wired to any UI control.
140
+ */
141
+ async setLiftOffDistanceMm(millimeters) {
142
+ const report = steelseriesRival650EncodeLiftOffDistance(millimeters);
143
+ await this.run(async () => {
144
+ await this.open();
145
+ await this.write(report);
146
+ await this.delay(COMMAND_DELAY_MS);
147
+ await this.write(steelseriesRival650SaveCommand());
148
+ this.lastWritten.liftOffDistance = millimeters;
149
+ });
150
+ return millimeters;
151
+ }
152
+ /** `2B 01 01 00 00 00 <v>` — idle minutes before sleep, 1–20. */
153
+ async setSleepTimer(minutes) {
154
+ const report = steelseriesRival650EncodeSleepTimer(minutes);
155
+ await this.run(async () => {
156
+ await this.open();
157
+ await this.write(report);
158
+ await this.delay(COMMAND_DELAY_MS);
159
+ await this.write(steelseriesRival650SaveCommand());
160
+ });
161
+ }
162
+ async setButtonsMapping(mapping) {
163
+ const report = steelseriesRival650EncodeButtonsMapping(mapping);
164
+ await this.run(async () => {
165
+ await this.open();
166
+ await this.write(report);
167
+ await this.delay(COMMAND_DELAY_MS);
168
+ await this.write(steelseriesRival650SaveCommand());
169
+ });
170
+ }
171
+ /**
172
+ * `AA 01` — battery percentage and charging state. Doubles as the proof
173
+ * that the granted interface is the config channel, same role it plays
174
+ * for `SteelSeriesRival3WirelessHidClient`.
175
+ */
176
+ async probeBattery() {
177
+ const payload = await this.awaitResponse(steelseriesRival650BatteryQuery());
178
+ if (!payload) {
179
+ throw new Error("The Rival 650 Wireless did not answer on this interface. Close SteelSeries GG (and the SteelSeriesEngine service); if it still does not answer, add the device again and choose another entry.");
180
+ }
181
+ return steelseriesRival650DecodeBattery(payload);
182
+ }
183
+ async awaitResponse(query) {
184
+ const response = new Promise((resolve) => {
185
+ let timer;
186
+ const finish = (payload) => {
187
+ clearTimeout(timer);
188
+ this.inputWaiters.delete(finish);
189
+ resolve(payload);
190
+ };
191
+ timer = setTimeout(() => finish(null), RESPONSE_TIMEOUT_MS);
192
+ this.inputWaiters.add(finish);
193
+ });
194
+ await this.write(query);
195
+ return await response;
196
+ }
197
+ async write(payload) {
198
+ await this.device.sendReport(RIVAL650_REPORT_ID, payload.buffer);
199
+ }
200
+ delay(milliseconds) {
201
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
202
+ }
203
+ async run(operation) {
204
+ const result = this.queue.then(operation, operation);
205
+ this.queue = result.then(() => undefined, () => undefined);
206
+ return await result;
207
+ }
208
+ }
209
+ //# sourceMappingURL=rival650-hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rival650-hid.js","sourceRoot":"","sources":["../../../src/drivers/steelseries/rival650-hid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { MouseStatus } from "../mouse-types.js";
2
+ import { type SenseiTenButtonAction, type SenseiTenButtonName, type SenseiTenColorStop, type SenseiTenLed } from "@openmouse/protocol/steelseries";
3
+ /**
4
+ * SteelSeries Sensei TEN WebHID control (`1038:1832`, `1038:1834` CS:GO Neon
5
+ * Rider Edition).
6
+ *
7
+ * The device is write-only for DPI/polling/lighting/buttons: settings are
8
+ * sent as unnumbered output (or, for `logo_color`/`wheel_color`, feature)
9
+ * reports and nothing can be read back except the two-byte firmware
10
+ * version, which this driver uses as its connectivity probe — same pattern
11
+ * as Rival 3 Gen 1's `10 00`, but Sensei TEN's query is `90 00`.
12
+ * `readStatus` therefore reports the session's last-written values (or
13
+ * rivalcfg's documented defaults before any write) with `valuesVerified:
14
+ * false`. Every setter follows its write with the save command so the
15
+ * change persists in the mouse's onboard memory, mirroring rivalcfg's CLI
16
+ * default.
17
+ *
18
+ * The config channel is hidapi `endpoint: 0`, per `sensei_ten.py`'s model
19
+ * entries; its WebHID collection shape has not been captured yet, so the
20
+ * picker offers every interface and the wrong ones fail the firmware probe
21
+ * loudly.
22
+ *
23
+ * See `../../steelseries/sensei-ten.ts`'s doc comment for the full protocol
24
+ * writeup, including the flagged corroboration gap (rivalcfg only — no
25
+ * libratbag or OpenRGB source was reachable for this device).
26
+ */
27
+ export declare class SteelSeriesSenseiTenHidClient {
28
+ readonly device: HIDDevice;
29
+ private queue;
30
+ private listenerAttached;
31
+ private readonly inputWaiters;
32
+ private lastWritten;
33
+ private readonly onInputReport;
34
+ constructor(device: HIDDevice);
35
+ static isSupported(device: HIDDevice): boolean;
36
+ get pollIntervalMs(): number;
37
+ get supportedPollingRates(): number[];
38
+ getDpiOptions(): number[];
39
+ open(): Promise<void>;
40
+ close(): Promise<void>;
41
+ readStatus(): Promise<MouseStatus>;
42
+ /**
43
+ * Replaces the mouse's DPI preset table with a single preset. The device
44
+ * is write-only, so the existing presets cannot be read and preserved —
45
+ * record them before testing.
46
+ */
47
+ setDpi(dpi: number): Promise<number>;
48
+ setPollingRate(pollingRateHz: number): Promise<number>;
49
+ /** `5B 00` feature report — see `steelseriesSenseiTenEncodeLedColor`'s doc comment. */
50
+ setLedColor(led: SenseiTenLed, stops: readonly SenseiTenColorStop[], durationMs?: number): Promise<void>;
51
+ setButtonsMapping(mapping?: Partial<Record<SenseiTenButtonName, SenseiTenButtonAction>>): Promise<void>;
52
+ /**
53
+ * The `90 00` firmware query is the device's only readable value, so it
54
+ * doubles as the proof that the granted interface is the config channel.
55
+ */
56
+ private probeFirmware;
57
+ private write;
58
+ private writeFeature;
59
+ private delay;
60
+ private run;
61
+ }
62
+ //# sourceMappingURL=sensei-ten-hid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensei-ten-hid.d.ts","sourceRoot":"","sources":["../../../src/drivers/steelseries/sensei-ten-hid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAcL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAEvB,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAUzC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,6BAA6B;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4C;IACzE,OAAO,CAAC,WAAW,CAGjB;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;gBAEU,MAAM,EAAE,SAAS;IAI7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAK9C,IAAI,cAAc,IAAI,MAAM,CAAmB;IAE/C,IAAI,qBAAqB,IAAI,MAAM,EAAE,CAA0C;IAE/E,aAAa,IAAI,MAAM,EAAE;IAEnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IA8BxC;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYpC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY5D,uFAAuF;IACjF,WAAW,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,kBAAkB,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxG,iBAAiB,CACrB,OAAO,GAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAsC,GACxG,OAAO,CAAC,IAAI,CAAC;IAUhB;;;OAGG;YACW,aAAa;YAqBb,KAAK;YAIL,YAAY;IAI1B,OAAO,CAAC,KAAK;YAIC,GAAG;CAKlB"}