@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,230 @@
1
+ /**
2
+ * SteelSeries Rival 310 configuration protocol — pure encode/decode helpers.
3
+ *
4
+ * Reconstructed from public open-source implementations, not vendor software:
5
+ *
6
+ * - rivalcfg `rivalcfg/devices/rival310.py` — the primary source for every
7
+ * command byte, default, and PID here.
8
+ * - rivalcfg `rivalcfg/handlers/range.py` — the "range" handler used for both
9
+ * DPI presets: linear `input_range: [100, 12000, 100]` mapped onto
10
+ * `output_range: [0x00, 0x77, 1]`, i.e. a **plain one-byte linear encoding**
11
+ * (`byte = (dpi - 100) / 100`), not the TrueMove Core lookup table used by
12
+ * `./rival3.ts` and `./aerox3.ts`. The Rival 310 predates TrueMove Core
13
+ * (SteelSeries shipped it with the older PixArt PMW3360-derived "TrueMove3"
14
+ * sensor); rivalcfg encodes it as a bare range, so this module does too —
15
+ * no table is reused from the Rival 3 modules.
16
+ * - rivalcfg `rivalcfg/handlers/choice.py` — polling rate.
17
+ * - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
18
+ * field layout (5 bytes/button, zero-filled, `offset`/`id` per button,
19
+ * `<action byte>` then `<code byte>` for keyboard/multimedia targets).
20
+ * Byte-identical field mechanics to `./aerox3.ts`'s buttons handler, but a
21
+ * two-byte `31 00` command prefix (Rival 310) instead of one-byte `2A`
22
+ * (Aerox 3), and different id/offset/special-action values throughout.
23
+ * - rivalcfg `rivalcfg/handlers/rgbgradient.py` — LED color/effect encoding;
24
+ * see "RGB — deliberately reduced scope" below for what this module
25
+ * actually implements of it.
26
+ *
27
+ * ## Corroboration gap — explicitly flagged
28
+ *
29
+ * This module was **not** cross-checked against libratbag's
30
+ * `src/driver-steelseries.c` or against OpenRGB's SteelSeries controller
31
+ * files: both `github.com/libratbag/libratbag` and
32
+ * `github.com/openrgb/OpenRGB` were unreachable from this environment (no
33
+ * outbound network access beyond the pre-cloned `/tmp/rivalcfg` mirror), and
34
+ * no local clone of either was available to read instead. The task
35
+ * instructions called for checking libratbag "harder" for this device
36
+ * specifically, since the Rival 310 is old/popular enough to plausibly be
37
+ * supported there — that check could not be performed. Every byte in this
38
+ * module traces to rivalcfg alone. Treat the DPI range encoding, the button
39
+ * byte layout, and the RGB header/body layout as **rivalcfg-only claims,
40
+ * unverified against a second independent source**, until someone with
41
+ * network access (or a local libratbag/OpenRGB checkout) confirms or
42
+ * corrects them.
43
+ *
44
+ * Every command is an HID **output report** with report id 0x00 on the
45
+ * vendor configuration interface (hidapi `endpoint == 0`, per rivalcfg's
46
+ * `"endpoint": 0` model entries — note this differs from Rival 3 Gen 1's and
47
+ * Aerox 3's `endpoint: 3`; do not assume interface 3 for this device). The
48
+ * one exception is the RGB color commands, which rivalcfg sends as HID
49
+ * **feature** reports (`usbhid.HID_REPORT_TYPE_FEATURE`) — callers must route
50
+ * `steelseriesRival310EncodeLedColor`'s output through a feature-report send,
51
+ * not `sendReport`. The functions here build the report *payload* — the
52
+ * bytes after the report id — unpadded, matching rivalcfg's `usbhid.py`.
53
+ *
54
+ * **This device is write-only for settings**, like every other SteelSeries
55
+ * family in this package: rivalcfg defines no getter for DPI, polling,
56
+ * lighting, or buttons. The one readable value is the two-byte firmware
57
+ * version behind command `90 00` (`response_length: 2`, `report_type`
58
+ * output) — analogous to Rival 3 Gen 1's `10 00`, a different command byte.
59
+ *
60
+ * Settings apply immediately; the save command (`59 00`) commits them to
61
+ * onboard flash, matching rivalcfg's CLI default of saving after every write.
62
+ * None of this has been verified on physical Rival 310 hardware by this
63
+ * project.
64
+ *
65
+ * ## Product ids
66
+ *
67
+ * rivalcfg's `rival310.py` lists three colorway/bundle variants, all vendor
68
+ * `0x1038`, all sharing this exact command set (one profile, three `models`
69
+ * entries):
70
+ *
71
+ * - `0x1720` — SteelSeries Rival 310
72
+ * - `0x171E` — SteelSeries Rival 310 CS:GO Howl Edition
73
+ * - `0x1736` — SteelSeries Rival 310 PUBG Edition
74
+ *
75
+ * Checked against `./devices.ts` as it stood when this module was written:
76
+ * none of `0x1720`/`0x171E`/`0x1736` collided with any PID already claimed
77
+ * there (Rival 3 Gen 1 `0x1824`/`0x184C`, Aerox 3 `0x1836`, Rival 3 Wireless
78
+ * `0x1830`, Aerox 5 `0x1850`, Aerox 5 Wireless family `0x1852`/`0x1854`/
79
+ * `0x185C`/`0x185E`/`0x1860`/`0x1862`).
80
+ *
81
+ * ## RGB — deliberately reduced scope
82
+ *
83
+ * rivalcfg's `rgbgradient` handler supports up to 14 timed color stops with
84
+ * duration, repeat, and button-trigger fields — a small state machine. This
85
+ * module implements only the **single steady color** path through that
86
+ * handler (`is_gradient = False`, one color, `pos = 0`), which is what the
87
+ * handler itself produces for a plain color string or RGB tuple input (the
88
+ * common case; see `_handle_color_string`/`_handle_color_tuple` in
89
+ * `rgbgradient.py`). Traced byte-for-byte from `process_value`:
90
+ *
91
+ * - `header` is `header_length` (26) zero-filled bytes: `header[0]` = led id
92
+ * (`led_id_offsets: [0]`), `header[1..2]` = duration little-endian
93
+ * (`duration_offset: 1`, `duration_length: 2`; rivalcfg's default 1000 ms
94
+ * is used since a steady color does not animate), `header[17]` = repeat
95
+ * flag (`repeat_offset: 17`; **`0x01` for a steady, non-gradient color** —
96
+ * `process_value` sets `repeat = 0x01` whenever `is_gradient` is false),
97
+ * `header[21]` = triggers bitmask (`triggers_offset: 21`; always `0x00`
98
+ * here — trigger support is out of scope), `header[25]` = color count
99
+ * (`color_count_offset: 25`; always `1`).
100
+ * - `body` is the color repeated with a zero position delta:
101
+ * `[r, g, b, r, g, b, 0x00]` — `process_value`'s body starts as
102
+ * `list(gradient[0]["color"])` (first `r,g,b`), then its stop loop appends
103
+ * `merge_bytes(body, color, real_pos - last_real_pos)` for the same single
104
+ * stop, i.e. `color` again followed by the integer position delta (`0` for
105
+ * the only stop, at `pos = 0`) appended as its own trailing byte.
106
+ * - Full payload sent to the device: `5B 00` (command) + 26-byte header +
107
+ * 7-byte body = 35 bytes, as a **feature** report.
108
+ *
109
+ * Multi-stop gradients, custom durations, repeat-off one-shot sequences, and
110
+ * button-triggered color changes are not implemented — documented here so
111
+ * nobody re-derives them, the same scope line `./aerox3.ts` draws around its
112
+ * button-mapping keyboard/multimedia name tables.
113
+ */
114
+ export declare const STEELSERIES_RIVAL310_REPORT_ID = 0;
115
+ /** Two-byte command prefixes; the payload is the prefix plus its arguments. */
116
+ export declare const RIVAL310_COMMAND: {
117
+ readonly sensitivity1: readonly [83, 0, 1];
118
+ readonly sensitivity2: readonly [83, 0, 2];
119
+ readonly pollingRate: readonly [84, 0];
120
+ readonly ledColor: readonly [91, 0];
121
+ readonly buttonsMapping: readonly [49, 0];
122
+ readonly save: readonly [89, 0];
123
+ readonly firmware: readonly [144, 0];
124
+ };
125
+ export declare const RIVAL310_SAVE_COMMAND: readonly [89, 0];
126
+ export declare const RIVAL310_FIRMWARE_RESPONSE_LENGTH = 2;
127
+ export declare const RIVAL310_POLLING_RATES: readonly [125, 250, 500, 1000];
128
+ export declare const RIVAL310_DPI_MIN = 100;
129
+ export declare const RIVAL310_DPI_MAX = 12000;
130
+ export declare const RIVAL310_DPI_STEP = 100;
131
+ export declare class SteelSeriesRival310ProtocolError extends Error {
132
+ }
133
+ /** The 120 DPI values the linear encoding can express, ascending. */
134
+ export declare function steelseriesRival310DpiOptions(): number[];
135
+ /** `53 00 01 <byte> 00 42` — sensitivity preset 1. */
136
+ export declare function steelseriesRival310EncodeSensitivity1(dpi: number): Uint8Array;
137
+ /** `53 00 02 <byte> 00 42` — sensitivity preset 2. */
138
+ export declare function steelseriesRival310EncodeSensitivity2(dpi: number): Uint8Array;
139
+ /** `54 00 <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04. */
140
+ export declare function steelseriesRival310EncodePollingRate(pollingRateHz: number): Uint8Array;
141
+ /** `59 00` — commit the current settings to onboard flash. */
142
+ export declare function steelseriesRival310SaveCommand(): Uint8Array;
143
+ /** `90 00` — the device answers with a two-byte input report. */
144
+ export declare function steelseriesRival310FirmwareQuery(): Uint8Array;
145
+ export interface SteelSeriesRival310Firmware {
146
+ /** The two raw response bytes, in the order the device sent them. */
147
+ bytes: [number, number];
148
+ /** The bytes joined in read order, e.g. "37.0". */
149
+ display: string;
150
+ }
151
+ /**
152
+ * Decode the two-byte firmware response. As with `rival3.ts`'s `10 00`
153
+ * response, the byte order is not settled against hardware; `display`
154
+ * follows the same read-order convention until a real Rival 310 unit
155
+ * confirms which byte is major and which is minor.
156
+ */
157
+ export declare function steelseriesRival310DecodeFirmware(payload: Uint8Array): SteelSeriesRival310Firmware;
158
+ export type Rival310Led = "logo" | "wheel";
159
+ /**
160
+ * `5B 00` (feature report) + 26-byte header + 7-byte body — sets one LED to
161
+ * a steady color. See the module doc comment's "RGB — deliberately reduced
162
+ * scope" section for the byte-by-byte derivation from rivalcfg's
163
+ * `rgbgradient` handler. This is a **feature** report, unlike every other
164
+ * command in this module.
165
+ */
166
+ export declare function steelseriesRival310EncodeLedColor(led: Rival310Led, r: number, g: number, b: number): Uint8Array;
167
+ /** `buttons_mapping.buttons` from `rival310.py`, id + byte offset into the packet. */
168
+ export declare const RIVAL310_BUTTONS: {
169
+ readonly button1: {
170
+ readonly id: 1;
171
+ readonly offset: 0;
172
+ };
173
+ readonly button2: {
174
+ readonly id: 2;
175
+ readonly offset: 5;
176
+ };
177
+ readonly button3: {
178
+ readonly id: 3;
179
+ readonly offset: 10;
180
+ };
181
+ readonly button4: {
182
+ readonly id: 4;
183
+ readonly offset: 15;
184
+ };
185
+ readonly button5: {
186
+ readonly id: 5;
187
+ readonly offset: 20;
188
+ };
189
+ readonly button6: {
190
+ readonly id: 6;
191
+ readonly offset: 25;
192
+ };
193
+ };
194
+ export type Rival310ButtonName = keyof typeof RIVAL310_BUTTONS;
195
+ /**
196
+ * One button's target. Unlike `./aerox3.ts` (where `scrollUp`/`scrollDown`
197
+ * are physical button *sources* that cannot be remap targets), `rival310.py`
198
+ * has no scroll-wheel button slots at all — `button_scroll_up`/
199
+ * `button_scroll_down` are special *action* bytes any of the six buttons can
200
+ * be assigned, alongside `disabled`/`dpiSwitch`/another mouse button/a
201
+ * keyboard or multimedia key.
202
+ */
203
+ export type Rival310ButtonAction = {
204
+ type: "button";
205
+ target: Rival310ButtonName;
206
+ } | {
207
+ type: "disabled";
208
+ } | {
209
+ type: "dpiSwitch";
210
+ } | {
211
+ type: "scrollUp";
212
+ } | {
213
+ type: "scrollDown";
214
+ } | {
215
+ type: "keyboard";
216
+ code: number;
217
+ } | {
218
+ type: "multimedia";
219
+ code: number;
220
+ };
221
+ /**
222
+ * `31 00` + one 30-byte (`6 buttons × 5-byte field length`) packet,
223
+ * zero-filled except where a mapping is given. Unmapped buttons are left as
224
+ * all-zero fields, same policy as `./aerox3.ts`: pass every button
225
+ * explicitly for parity with rivalcfg's default profile
226
+ * (`button1=button1; button2=button2; button3=button3; button4=button4;
227
+ * button5=button5; button6=dpi`).
228
+ */
229
+ export declare function steelseriesRival310EncodeButtonsMapping(mapping: Partial<Record<Rival310ButtonName, Rival310ButtonAction>>): Uint8Array;
230
+ //# sourceMappingURL=rival310.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rival310.d.ts","sourceRoot":"","sources":["../../src/steelseries/rival310.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgHG;AAEH,eAAO,MAAM,8BAA8B,IAAO,CAAC;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB;;;;;;;;CAQnB,CAAC;AAKX,eAAO,MAAM,qBAAqB,kBAAwB,CAAC;AAC3D,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,eAAO,MAAM,sBAAsB,gCAAiC,CAAC;AASrE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,qBAAa,gCAAiC,SAAQ,KAAK;CAAG;AAwB9D,qEAAqE;AACrE,wBAAgB,6BAA6B,IAAI,MAAM,EAAE,CAMxD;AAED,sDAAsD;AACtD,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAE7E;AAED,sDAAsD;AACtD,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAE7E;AAED,gEAAgE;AAChE,wBAAgB,oCAAoC,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAMtF;AAED,8DAA8D;AAC9D,wBAAgB,8BAA8B,IAAI,UAAU,CAE3D;AAED,iEAAiE;AACjE,wBAAgB,gCAAgC,IAAI,UAAU,CAE7D;AAED,MAAM,WAAW,2BAA2B;IAC1C,qEAAqE;IACrE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,UAAU,GAAG,2BAA2B,CAMlG;AAID,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAoB3C;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAkB/G;AASD,sFAAsF;AACtF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;CAO0B,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAU/D;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,GACjE,UAAU,CA0DZ"}
@@ -0,0 +1,322 @@
1
+ /**
2
+ * SteelSeries Rival 310 configuration protocol — pure encode/decode helpers.
3
+ *
4
+ * Reconstructed from public open-source implementations, not vendor software:
5
+ *
6
+ * - rivalcfg `rivalcfg/devices/rival310.py` — the primary source for every
7
+ * command byte, default, and PID here.
8
+ * - rivalcfg `rivalcfg/handlers/range.py` — the "range" handler used for both
9
+ * DPI presets: linear `input_range: [100, 12000, 100]` mapped onto
10
+ * `output_range: [0x00, 0x77, 1]`, i.e. a **plain one-byte linear encoding**
11
+ * (`byte = (dpi - 100) / 100`), not the TrueMove Core lookup table used by
12
+ * `./rival3.ts` and `./aerox3.ts`. The Rival 310 predates TrueMove Core
13
+ * (SteelSeries shipped it with the older PixArt PMW3360-derived "TrueMove3"
14
+ * sensor); rivalcfg encodes it as a bare range, so this module does too —
15
+ * no table is reused from the Rival 3 modules.
16
+ * - rivalcfg `rivalcfg/handlers/choice.py` — polling rate.
17
+ * - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
18
+ * field layout (5 bytes/button, zero-filled, `offset`/`id` per button,
19
+ * `<action byte>` then `<code byte>` for keyboard/multimedia targets).
20
+ * Byte-identical field mechanics to `./aerox3.ts`'s buttons handler, but a
21
+ * two-byte `31 00` command prefix (Rival 310) instead of one-byte `2A`
22
+ * (Aerox 3), and different id/offset/special-action values throughout.
23
+ * - rivalcfg `rivalcfg/handlers/rgbgradient.py` — LED color/effect encoding;
24
+ * see "RGB — deliberately reduced scope" below for what this module
25
+ * actually implements of it.
26
+ *
27
+ * ## Corroboration gap — explicitly flagged
28
+ *
29
+ * This module was **not** cross-checked against libratbag's
30
+ * `src/driver-steelseries.c` or against OpenRGB's SteelSeries controller
31
+ * files: both `github.com/libratbag/libratbag` and
32
+ * `github.com/openrgb/OpenRGB` were unreachable from this environment (no
33
+ * outbound network access beyond the pre-cloned `/tmp/rivalcfg` mirror), and
34
+ * no local clone of either was available to read instead. The task
35
+ * instructions called for checking libratbag "harder" for this device
36
+ * specifically, since the Rival 310 is old/popular enough to plausibly be
37
+ * supported there — that check could not be performed. Every byte in this
38
+ * module traces to rivalcfg alone. Treat the DPI range encoding, the button
39
+ * byte layout, and the RGB header/body layout as **rivalcfg-only claims,
40
+ * unverified against a second independent source**, until someone with
41
+ * network access (or a local libratbag/OpenRGB checkout) confirms or
42
+ * corrects them.
43
+ *
44
+ * Every command is an HID **output report** with report id 0x00 on the
45
+ * vendor configuration interface (hidapi `endpoint == 0`, per rivalcfg's
46
+ * `"endpoint": 0` model entries — note this differs from Rival 3 Gen 1's and
47
+ * Aerox 3's `endpoint: 3`; do not assume interface 3 for this device). The
48
+ * one exception is the RGB color commands, which rivalcfg sends as HID
49
+ * **feature** reports (`usbhid.HID_REPORT_TYPE_FEATURE`) — callers must route
50
+ * `steelseriesRival310EncodeLedColor`'s output through a feature-report send,
51
+ * not `sendReport`. The functions here build the report *payload* — the
52
+ * bytes after the report id — unpadded, matching rivalcfg's `usbhid.py`.
53
+ *
54
+ * **This device is write-only for settings**, like every other SteelSeries
55
+ * family in this package: rivalcfg defines no getter for DPI, polling,
56
+ * lighting, or buttons. The one readable value is the two-byte firmware
57
+ * version behind command `90 00` (`response_length: 2`, `report_type`
58
+ * output) — analogous to Rival 3 Gen 1's `10 00`, a different command byte.
59
+ *
60
+ * Settings apply immediately; the save command (`59 00`) commits them to
61
+ * onboard flash, matching rivalcfg's CLI default of saving after every write.
62
+ * None of this has been verified on physical Rival 310 hardware by this
63
+ * project.
64
+ *
65
+ * ## Product ids
66
+ *
67
+ * rivalcfg's `rival310.py` lists three colorway/bundle variants, all vendor
68
+ * `0x1038`, all sharing this exact command set (one profile, three `models`
69
+ * entries):
70
+ *
71
+ * - `0x1720` — SteelSeries Rival 310
72
+ * - `0x171E` — SteelSeries Rival 310 CS:GO Howl Edition
73
+ * - `0x1736` — SteelSeries Rival 310 PUBG Edition
74
+ *
75
+ * Checked against `./devices.ts` as it stood when this module was written:
76
+ * none of `0x1720`/`0x171E`/`0x1736` collided with any PID already claimed
77
+ * there (Rival 3 Gen 1 `0x1824`/`0x184C`, Aerox 3 `0x1836`, Rival 3 Wireless
78
+ * `0x1830`, Aerox 5 `0x1850`, Aerox 5 Wireless family `0x1852`/`0x1854`/
79
+ * `0x185C`/`0x185E`/`0x1860`/`0x1862`).
80
+ *
81
+ * ## RGB — deliberately reduced scope
82
+ *
83
+ * rivalcfg's `rgbgradient` handler supports up to 14 timed color stops with
84
+ * duration, repeat, and button-trigger fields — a small state machine. This
85
+ * module implements only the **single steady color** path through that
86
+ * handler (`is_gradient = False`, one color, `pos = 0`), which is what the
87
+ * handler itself produces for a plain color string or RGB tuple input (the
88
+ * common case; see `_handle_color_string`/`_handle_color_tuple` in
89
+ * `rgbgradient.py`). Traced byte-for-byte from `process_value`:
90
+ *
91
+ * - `header` is `header_length` (26) zero-filled bytes: `header[0]` = led id
92
+ * (`led_id_offsets: [0]`), `header[1..2]` = duration little-endian
93
+ * (`duration_offset: 1`, `duration_length: 2`; rivalcfg's default 1000 ms
94
+ * is used since a steady color does not animate), `header[17]` = repeat
95
+ * flag (`repeat_offset: 17`; **`0x01` for a steady, non-gradient color** —
96
+ * `process_value` sets `repeat = 0x01` whenever `is_gradient` is false),
97
+ * `header[21]` = triggers bitmask (`triggers_offset: 21`; always `0x00`
98
+ * here — trigger support is out of scope), `header[25]` = color count
99
+ * (`color_count_offset: 25`; always `1`).
100
+ * - `body` is the color repeated with a zero position delta:
101
+ * `[r, g, b, r, g, b, 0x00]` — `process_value`'s body starts as
102
+ * `list(gradient[0]["color"])` (first `r,g,b`), then its stop loop appends
103
+ * `merge_bytes(body, color, real_pos - last_real_pos)` for the same single
104
+ * stop, i.e. `color` again followed by the integer position delta (`0` for
105
+ * the only stop, at `pos = 0`) appended as its own trailing byte.
106
+ * - Full payload sent to the device: `5B 00` (command) + 26-byte header +
107
+ * 7-byte body = 35 bytes, as a **feature** report.
108
+ *
109
+ * Multi-stop gradients, custom durations, repeat-off one-shot sequences, and
110
+ * button-triggered color changes are not implemented — documented here so
111
+ * nobody re-derives them, the same scope line `./aerox3.ts` draws around its
112
+ * button-mapping keyboard/multimedia name tables.
113
+ */
114
+ export const STEELSERIES_RIVAL310_REPORT_ID = 0x00;
115
+ /** Two-byte command prefixes; the payload is the prefix plus its arguments. */
116
+ export const RIVAL310_COMMAND = {
117
+ sensitivity1: [0x53, 0x00, 0x01],
118
+ sensitivity2: [0x53, 0x00, 0x02],
119
+ pollingRate: [0x54, 0x00],
120
+ ledColor: [0x5b, 0x00],
121
+ buttonsMapping: [0x31, 0x00],
122
+ save: [0x59, 0x00],
123
+ firmware: [0x90, 0x00],
124
+ };
125
+ /** `command_suffix` appended after the DPI byte for both sensitivity presets. */
126
+ const SENSITIVITY_SUFFIX = [0x00, 0x42];
127
+ export const RIVAL310_SAVE_COMMAND = [0x59, 0x00];
128
+ export const RIVAL310_FIRMWARE_RESPONSE_LENGTH = 2;
129
+ export const RIVAL310_POLLING_RATES = [125, 250, 500, 1000];
130
+ const POLLING_RATE_TO_BYTE = new Map([
131
+ [1000, 0x01],
132
+ [500, 0x02],
133
+ [250, 0x03],
134
+ [125, 0x04],
135
+ ]);
136
+ export const RIVAL310_DPI_MIN = 100;
137
+ export const RIVAL310_DPI_MAX = 12000;
138
+ export const RIVAL310_DPI_STEP = 100;
139
+ export class SteelSeriesRival310ProtocolError extends Error {
140
+ }
141
+ /**
142
+ * `input_range: [100, 12000, 100]` -> `output_range: [0x00, 0x77, 1]`: a
143
+ * plain linear one-byte encoding, `byte = (dpi - 100) / 100`, range 0x00–0x77
144
+ * (119). Values must land exactly on a 100 DPI step; rivalcfg's `range`
145
+ * handler rounds off-grid input to the nearest step instead, but this codec
146
+ * rejects it, matching how the rest of this package validates DPI (see
147
+ * `rival3.ts`'s doc comment on the same choice).
148
+ */
149
+ function encodeDpiByte(dpi) {
150
+ if (!Number.isInteger(dpi) ||
151
+ dpi < RIVAL310_DPI_MIN ||
152
+ dpi > RIVAL310_DPI_MAX ||
153
+ (dpi - RIVAL310_DPI_MIN) % RIVAL310_DPI_STEP !== 0) {
154
+ throw new SteelSeriesRival310ProtocolError(`SteelSeries Rival 310 DPI must be ${RIVAL310_DPI_MIN}–${RIVAL310_DPI_MAX.toLocaleString()} in ${RIVAL310_DPI_STEP} DPI steps.`);
155
+ }
156
+ return (dpi - RIVAL310_DPI_MIN) / RIVAL310_DPI_STEP;
157
+ }
158
+ /** The 120 DPI values the linear encoding can express, ascending. */
159
+ export function steelseriesRival310DpiOptions() {
160
+ const options = [];
161
+ for (let dpi = RIVAL310_DPI_MIN; dpi <= RIVAL310_DPI_MAX; dpi += RIVAL310_DPI_STEP) {
162
+ options.push(dpi);
163
+ }
164
+ return options;
165
+ }
166
+ /** `53 00 01 <byte> 00 42` — sensitivity preset 1. */
167
+ export function steelseriesRival310EncodeSensitivity1(dpi) {
168
+ return new Uint8Array([...RIVAL310_COMMAND.sensitivity1, encodeDpiByte(dpi), ...SENSITIVITY_SUFFIX]);
169
+ }
170
+ /** `53 00 02 <byte> 00 42` — sensitivity preset 2. */
171
+ export function steelseriesRival310EncodeSensitivity2(dpi) {
172
+ return new Uint8Array([...RIVAL310_COMMAND.sensitivity2, encodeDpiByte(dpi), ...SENSITIVITY_SUFFIX]);
173
+ }
174
+ /** `54 00 <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04. */
175
+ export function steelseriesRival310EncodePollingRate(pollingRateHz) {
176
+ const byte = POLLING_RATE_TO_BYTE.get(pollingRateHz);
177
+ if (byte === undefined) {
178
+ throw new SteelSeriesRival310ProtocolError("SteelSeries Rival 310 supports 125, 250, 500, or 1000 Hz polling.");
179
+ }
180
+ return new Uint8Array([...RIVAL310_COMMAND.pollingRate, byte]);
181
+ }
182
+ /** `59 00` — commit the current settings to onboard flash. */
183
+ export function steelseriesRival310SaveCommand() {
184
+ return new Uint8Array(RIVAL310_SAVE_COMMAND);
185
+ }
186
+ /** `90 00` — the device answers with a two-byte input report. */
187
+ export function steelseriesRival310FirmwareQuery() {
188
+ return new Uint8Array(RIVAL310_COMMAND.firmware);
189
+ }
190
+ /**
191
+ * Decode the two-byte firmware response. As with `rival3.ts`'s `10 00`
192
+ * response, the byte order is not settled against hardware; `display`
193
+ * follows the same read-order convention until a real Rival 310 unit
194
+ * confirms which byte is major and which is minor.
195
+ */
196
+ export function steelseriesRival310DecodeFirmware(payload) {
197
+ if (payload.length < RIVAL310_FIRMWARE_RESPONSE_LENGTH) {
198
+ throw new SteelSeriesRival310ProtocolError("SteelSeries Rival 310 firmware response is shorter than two bytes.");
199
+ }
200
+ const bytes = [payload[0], payload[1]];
201
+ return { bytes, display: `${bytes[0]}.${bytes[1]}` };
202
+ }
203
+ const LED_ID = { logo: 0x00, wheel: 0x01 };
204
+ const RGBGRADIENT_HEADER_LENGTH = 26;
205
+ const RGBGRADIENT_DURATION_OFFSET = 1;
206
+ const RGBGRADIENT_REPEAT_OFFSET = 17;
207
+ const RGBGRADIENT_TRIGGERS_OFFSET = 21;
208
+ const RGBGRADIENT_COLOR_COUNT_OFFSET = 25;
209
+ const RGBGRADIENT_DEFAULT_DURATION_MS = 1000;
210
+ function encodeRgb(r, g, b) {
211
+ for (const channel of [r, g, b]) {
212
+ if (!Number.isInteger(channel) || channel < 0 || channel > 255) {
213
+ throw new SteelSeriesRival310ProtocolError("RGB channels must be integers 0–255.");
214
+ }
215
+ }
216
+ return [r, g, b];
217
+ }
218
+ /**
219
+ * `5B 00` (feature report) + 26-byte header + 7-byte body — sets one LED to
220
+ * a steady color. See the module doc comment's "RGB — deliberately reduced
221
+ * scope" section for the byte-by-byte derivation from rivalcfg's
222
+ * `rgbgradient` handler. This is a **feature** report, unlike every other
223
+ * command in this module.
224
+ */
225
+ export function steelseriesRival310EncodeLedColor(led, r, g, b) {
226
+ const [red, green, blue] = encodeRgb(r, g, b);
227
+ const ledId = LED_ID[led];
228
+ if (ledId === undefined) {
229
+ throw new SteelSeriesRival310ProtocolError('SteelSeries Rival 310 LEDs are "logo" and "wheel" only.');
230
+ }
231
+ const header = new Array(RGBGRADIENT_HEADER_LENGTH).fill(0x00);
232
+ header[0] = ledId;
233
+ header[RGBGRADIENT_DURATION_OFFSET] = RGBGRADIENT_DEFAULT_DURATION_MS & 0xff;
234
+ header[RGBGRADIENT_DURATION_OFFSET + 1] = (RGBGRADIENT_DEFAULT_DURATION_MS >> 8) & 0xff;
235
+ header[RGBGRADIENT_REPEAT_OFFSET] = 0x01;
236
+ header[RGBGRADIENT_TRIGGERS_OFFSET] = 0x00;
237
+ header[RGBGRADIENT_COLOR_COUNT_OFFSET] = 0x01;
238
+ const body = [red, green, blue, red, green, blue, 0x00];
239
+ return new Uint8Array([...RIVAL310_COMMAND.ledColor, ...header, ...body]);
240
+ }
241
+ /** `buttons_mapping.buttons` from `rival310.py`, id + byte offset into the packet. */
242
+ export const RIVAL310_BUTTONS = {
243
+ button1: { id: 0x01, offset: 0x00 },
244
+ button2: { id: 0x02, offset: 0x05 },
245
+ button3: { id: 0x03, offset: 0x0a },
246
+ button4: { id: 0x04, offset: 0x0f },
247
+ button5: { id: 0x05, offset: 0x14 },
248
+ button6: { id: 0x06, offset: 0x19 },
249
+ };
250
+ const RIVAL310_BUTTON_FIELD_LENGTH = 5;
251
+ const RIVAL310_BUTTON_DISABLE = 0x00;
252
+ const RIVAL310_BUTTON_KEYBOARD = 0x51;
253
+ const RIVAL310_BUTTON_MULTIMEDIA = 0x61;
254
+ const RIVAL310_BUTTON_DPI_SWITCH = 0x30;
255
+ const RIVAL310_BUTTON_SCROLL_UP = 0x31;
256
+ const RIVAL310_BUTTON_SCROLL_DOWN = 0x32;
257
+ /**
258
+ * `31 00` + one 30-byte (`6 buttons × 5-byte field length`) packet,
259
+ * zero-filled except where a mapping is given. Unmapped buttons are left as
260
+ * all-zero fields, same policy as `./aerox3.ts`: pass every button
261
+ * explicitly for parity with rivalcfg's default profile
262
+ * (`button1=button1; button2=button2; button3=button3; button4=button4;
263
+ * button5=button5; button6=dpi`).
264
+ */
265
+ export function steelseriesRival310EncodeButtonsMapping(mapping) {
266
+ const names = Object.keys(RIVAL310_BUTTONS);
267
+ const packet = new Array(names.length * RIVAL310_BUTTON_FIELD_LENGTH).fill(0x00);
268
+ for (const [name, action] of Object.entries(mapping)) {
269
+ const slot = RIVAL310_BUTTONS[name];
270
+ if (!slot) {
271
+ throw new SteelSeriesRival310ProtocolError(`Unknown SteelSeries Rival 310 button "${name}".`);
272
+ }
273
+ const { offset } = slot;
274
+ switch (action.type) {
275
+ case "button": {
276
+ const target = RIVAL310_BUTTONS[action.target];
277
+ if (!target) {
278
+ throw new SteelSeriesRival310ProtocolError(`Unknown SteelSeries Rival 310 button "${action.target}".`);
279
+ }
280
+ packet[offset] = target.id;
281
+ break;
282
+ }
283
+ case "disabled": {
284
+ packet[offset] = RIVAL310_BUTTON_DISABLE;
285
+ break;
286
+ }
287
+ case "dpiSwitch": {
288
+ packet[offset] = RIVAL310_BUTTON_DPI_SWITCH;
289
+ break;
290
+ }
291
+ case "scrollUp": {
292
+ packet[offset] = RIVAL310_BUTTON_SCROLL_UP;
293
+ break;
294
+ }
295
+ case "scrollDown": {
296
+ packet[offset] = RIVAL310_BUTTON_SCROLL_DOWN;
297
+ break;
298
+ }
299
+ case "keyboard": {
300
+ if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
301
+ throw new SteelSeriesRival310ProtocolError("Keyboard scan codes must be integers 0–255.");
302
+ }
303
+ packet[offset] = RIVAL310_BUTTON_KEYBOARD;
304
+ packet[offset + 1] = action.code;
305
+ break;
306
+ }
307
+ case "multimedia": {
308
+ if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
309
+ throw new SteelSeriesRival310ProtocolError("Multimedia key codes must be integers 0–255.");
310
+ }
311
+ packet[offset] = RIVAL310_BUTTON_MULTIMEDIA;
312
+ packet[offset + 1] = action.code;
313
+ break;
314
+ }
315
+ default: {
316
+ throw new SteelSeriesRival310ProtocolError("Unsupported SteelSeries Rival 310 button action.");
317
+ }
318
+ }
319
+ }
320
+ return new Uint8Array([...RIVAL310_COMMAND.buttonsMapping, ...packet]);
321
+ }
322
+ //# sourceMappingURL=rival310.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rival310.js","sourceRoot":"","sources":["../../src/steelseries/rival310.ts"],"names":[],"mappings":"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"}