@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,80 @@
1
+ /**
2
+ * Features 0x1815 (Hosts Info) and 0x1814 (Change Host) — Easy-Switch.
3
+ *
4
+ * Read from an MX Master 4 (WPID B042) over a Logi Bolt receiver. 0x1815
5
+ * fn 0x00 answers [capabilities(2), hostCount, currentHost]: the two leading
6
+ * capability bytes matter, because reading the counts one byte earlier reports
7
+ * eight slots on a device whose slots 3 and up refuse outright. That device
8
+ * reports three slots with two paired, itself on slot 0.
9
+ *
10
+ * Slot indices are zero-based on the wire. The button on the underside of the
11
+ * mouse and its indicator both count from one, so anything user-facing has to
12
+ * add one or it disagrees with the hardware in the user's hand.
13
+ */
14
+ export const LOGITECH_HOSTS = {
15
+ /** getHostsInfo: [capabilities(2), hostCount, currentHost]. */
16
+ info: 0x00,
17
+ /** getHostInfo(slot): [slot, status, ..., nameLength, maxNameLength]. */
18
+ host: 0x10,
19
+ /**
20
+ * getHostFriendlyName(slot, offset). NOT the host's label: on an MX Master 4
21
+ * this answers six non-text bytes per slot regardless of the reported name
22
+ * length, which is an address rather than a name. Where the label actually
23
+ * lives is unknown, and the remaining function ids on this feature are
24
+ * reportedly set-name, move and delete-host — a blind call to the last would
25
+ * unpair one of the user's computers, so it was left alone.
26
+ */
27
+ hostName: 0x20,
28
+ };
29
+ export const LOGITECH_CHANGE_HOST = {
30
+ /** getCurrentHost. */
31
+ current: 0x00,
32
+ /** setCurrentHost(slot) — disconnects this host on success. */
33
+ set: 0x10,
34
+ };
35
+ /** Status 1 means a computer is paired to the slot; 0 means it is empty. */
36
+ export const LOGITECH_HOST_STATUS_PAIRED = 0x01;
37
+ export function decodeHostsInfo(payload) {
38
+ const capabilityHigh = payload[0];
39
+ const capabilityLow = payload[1];
40
+ const hostCount = payload[2];
41
+ const currentHost = payload[3];
42
+ if (capabilityHigh === undefined || capabilityLow === undefined)
43
+ return null;
44
+ if (hostCount === undefined || currentHost === undefined || hostCount === 0)
45
+ return null;
46
+ if (currentHost >= hostCount)
47
+ return null;
48
+ return {
49
+ hostCount,
50
+ currentHost,
51
+ capabilities: (capabilityHigh << 8) | capabilityLow,
52
+ };
53
+ }
54
+ export function decodeHostPaired(payload) {
55
+ const status = payload[1];
56
+ return status === undefined ? null : status === LOGITECH_HOST_STATUS_PAIRED;
57
+ }
58
+ /**
59
+ * Why a host switch must not be sent, or null when it may be.
60
+ *
61
+ * Refusing an empty slot is the important one. Switching into a slot with no
62
+ * computer paired leaves the mouse unreachable until someone presses the
63
+ * button on its underside, and no warning text makes that an acceptable thing
64
+ * for a misclick to do.
65
+ */
66
+ export function rejectHostSwitch(slot, info, paired) {
67
+ if (!info)
68
+ return "no-hosts";
69
+ if (!Number.isInteger(slot) || slot < 0 || slot >= info.hostCount)
70
+ return "out-of-range";
71
+ if (slot === info.currentHost)
72
+ return "already-current";
73
+ if (paired[slot] !== true)
74
+ return "empty-slot";
75
+ return null;
76
+ }
77
+ export function buildHostSwitchWrite(slot) {
78
+ return [slot & 0xff];
79
+ }
80
+ //# sourceMappingURL=hosts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/logitech/hosts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,+DAA+D;IAC/D,IAAI,EAAE,IAAI;IACV,yEAAyE;IACzE,IAAI,EAAE,IAAI;IACV;;;;;;;OAOG;IACH,QAAQ,EAAE,IAAI;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,sBAAsB;IACtB,OAAO,EAAE,IAAI;IACb,+DAA+D;IAC/D,GAAG,EAAE,IAAI;CACD,CAAC;AAEX,4EAA4E;AAC5E,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAQhD,MAAM,UAAU,eAAe,CAAC,OAAuC;IACrE,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,cAAc,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC7E,IAAI,SAAS,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzF,IAAI,WAAW,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO;QACL,SAAS;QACT,WAAW;QACX,YAAY,EAAE,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,aAAa;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAuC;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,2BAA2B,CAAC;AAC9E,CAAC;AAID;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,IAA8B,EAC9B,MAA0B;IAE1B,IAAI,CAAC,IAAI;QAAE,OAAO,UAAU,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,cAAc,CAAC;IACzF,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,iBAAiB,CAAC;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,127 @@
1
+ export * from "./controls.js";
2
+ export * from "./friendly-name.js";
3
+ export * from "./haptics.js";
4
+ export * from "./hosts.js";
5
+ export * from "./wheel.js";
6
+ /** Add this client's HID++ software ID while preserving the function nibble. */
7
+ export declare function withSoftwareId(functionId: number): number;
8
+ /**
9
+ * Usage page carrying HID++ over USB: a receiver, or a mouse's own wired
10
+ * vendor interface. Usage 1 is the short-report collection, usage 2 the long.
11
+ */
12
+ export declare const HIDPP_USAGE_PAGE = 65280;
13
+ /**
14
+ * Usage page carrying HID++ over Bluetooth. BLE devices do not expose the
15
+ * 0xFF00 pair at all: Logitech moves the protocol to its own vendor page
16
+ * (usage 0x0202) and carries long reports only, which is why an MX Master
17
+ * paired over Bluetooth shows a single `Vendor (0xFF43)` interface and was
18
+ * never offered by a 0xFF00-only picker filter.
19
+ *
20
+ * The page is Logitech's alone, so both the filter and the support check match
21
+ * the whole page rather than a single usage, keeping firmware that numbers the
22
+ * collection differently within reach.
23
+ */
24
+ export declare const HIDPP_BLUETOOTH_USAGE_PAGE = 65347;
25
+ /** Receiver-attached mice answer on the receiver's first pairing slot. */
26
+ export declare const DEVICE_INDEX_RECEIVER = 1;
27
+ /** A mouse addressed over its own USB interface answers on 0xFF. */
28
+ export declare const DEVICE_INDEX_DIRECT = 255;
29
+ /** Bolt receivers expose up to six pairing slots (HID++ device indices 1..6). */
30
+ export declare const BOLT_PAIRING_SLOTS: readonly [1, 2, 3, 4, 5, 6];
31
+ /**
32
+ * Logitech mice whose vendor interface is the mouse itself rather than a
33
+ * receiver. They answer HID++ on device index 0xFF and keep their writable
34
+ * settings in an onboard profile.
35
+ *
36
+ * G203 / G102 generation (HID++ 2.0, legacy DPI feature 0x2201):
37
+ * - 0xc084 — G203 PRODIGY (wired)
38
+ * - 0xc089 — G102 LIGHTSYNC (wired)
39
+ * - 0xc092 — G203 LIGHTSYNC (wired)
40
+ *
41
+ * G303 / G402 generation:
42
+ * - 0xc07d — G502 / G502 Proteus Core (wired)
43
+ * - 0xc07e — G402 / G402 Hyperion Fury (wired)
44
+ * - 0xc080 — G303 Daedalus Apex (wired)
45
+ *
46
+ * G Pro / G502 / G403 HERO generation (HID++ 2.0, DPI feature 0x2202):
47
+ * - 0xc085 — G Pro (wired, 2017)
48
+ * - 0xc087 — G703 (wired)
49
+ * - 0xc08b — G502 HERO (wired)
50
+ * - 0xc08c — G Pro Hero (wired)
51
+ * - 0xc08e — G903 HERO (wired)
52
+ * - 0xc08f — G403 HERO (wired)
53
+ * - 0xc095 — G502 X PLUS (USB cable)
54
+ * - 0xc098 — G502 X LIGHTSPEED (USB cable, direct-connect mode)
55
+ * - 0xc099 — G502 X (wired)
56
+ *
57
+ * G Pro X Superlight generation:
58
+ * - 0xc094 — G Pro X Superlight (wired)
59
+ *
60
+ * This module deliberately imports nothing, so both the driver and the WebHID
61
+ * filters in ../vendors can read it without a cycle.
62
+ */
63
+ export declare const LOGITECH_DIRECT_PRODUCT_IDS: readonly [49284, 49289, 49298, 49277, 49278, 49280, 49285, 49287, 49291, 49292, 49294, 49295, 49300, 49301, 49304, 49305];
64
+ /**
65
+ * Logi Bolt receivers. Unlike Lightspeed, device HID++ 2.0 rides long reports
66
+ * (report id 0x11) on usage `ff00:2`, and the mouse may sit on any pairing
67
+ * slot — not only 0x01.
68
+ *
69
+ * - 0xc548 — Logi Bolt USB receiver (MX Master 3S and other Bolt mice)
70
+ */
71
+ export declare const LOGITECH_BOLT_PRODUCT_IDS: readonly [50504];
72
+ export declare function isDirectConnectProduct(productId: number): boolean;
73
+ export declare function isBoltReceiverProduct(productId: number): boolean;
74
+ /**
75
+ * Whether this HID++ endpoint is the mouse itself rather than a receiver.
76
+ * Runtime device-index probing is authoritative; product IDs do not decide it.
77
+ */
78
+ export declare function isDirectConnection(resolvedDeviceIndex: number | null): boolean;
79
+ /**
80
+ * Device indices to probe when discovering which one answers.
81
+ *
82
+ * A receiver forwards to its pairing slots, and G HUB merging a keyboard onto
83
+ * the same receiver can push the mouse off the first one — so all six slots
84
+ * are probed before the direct index. A direct connection is its own single
85
+ * endpoint and answers as itself, with the receiver slot only a fallback for
86
+ * product ids that are on neither list.
87
+ */
88
+ export declare function hidppDeviceIndexCandidates(isKnownReceiver: boolean): readonly number[];
89
+ export declare function hidppErrorMessage(code: number): string;
90
+ export declare function hidpp10ErrorMessage(code: number): string;
91
+ /**
92
+ * Decodes an error only when it echoes the request being awaited.
93
+ *
94
+ * HID++ 1.0: [device, 0x8f, sub-id, address, error]
95
+ * HID++ 2.0: [device, 0xff, feature-index, function+software-id, error]
96
+ */
97
+ export declare function hidppErrorForRequest(report: Uint8Array, requestFirstByte: number, requestSecondByte: number): string | null;
98
+ /**
99
+ * Decode the legacy Report Rate (0x8060) supported-rate bitmap, where bit i
100
+ * marks an interval of (i + 1) ms. The G402 generation reports 0x8b, meaning
101
+ * 1, 2, 4 and 8 ms — 1000, 500, 250 and 125 Hz.
102
+ */
103
+ export declare function decodeReportRateBitmap(bitflags: number): number[];
104
+ export type BatteryChargeState = "Charging" | "Charging slowly" | "Almost full" | "Full" | "Discharging" | "Unknown";
105
+ /**
106
+ * 0x1004 UNIFIED_BATTERY chargingStatus.
107
+ *
108
+ * Deliberately separate from the 0x1000 mapping below: the two features number
109
+ * their states differently, and decoding one with the other's table reports a
110
+ * slow charge as "almost full".
111
+ */
112
+ export declare function decodeUnifiedBatteryState(chargingStatus: number): BatteryChargeState;
113
+ /** 0x1000 BATTERY_LEVEL_STATUS batteryStatus. */
114
+ export declare function decodeBatteryLevelState(batteryStatus: number): BatteryChargeState;
115
+ /**
116
+ * The mouse keeps its settings in onboard memory and will not hand control to
117
+ * software, so the only way to change anything is to write its profile — which
118
+ * needs a decoded layout for that profile format.
119
+ *
120
+ * Its own type because it is not a fault: it is a mouse that cannot be
121
+ * supported yet, and the way forward is a capture from whoever owns one.
122
+ */
123
+ export declare class OnboardOnlyError extends Error {
124
+ readonly profileFormatId: number | null;
125
+ constructor(profileFormatId: number | null);
126
+ }
127
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logitech/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAM3B,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,IAAO,CAAC;AAC1C,oEAAoE;AACpE,eAAO,MAAM,mBAAmB,MAAO,CAAC;AACxC,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,6BAAgD,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,2BAA2B,2HAW9B,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,kBAAoB,CAAC;AAK3D,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAE9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAItF;AA+BD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAClB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,GACxB,MAAM,GAAG,IAAI,CAKf;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAMjE;AAED,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GAAG,iBAAiB,GAAG,aAAa,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;AAExF;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG,kBAAkB,CAUpF;AAED,iDAAiD;AACjD,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,kBAAkB,CAUjF;AAED;;;;;;;GAOG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;gBAE5B,eAAe,EAAE,MAAM,GAAG,IAAI;CAU3C"}
@@ -0,0 +1,233 @@
1
+ export * from "./controls.js";
2
+ export * from "./friendly-name.js";
3
+ export * from "./haptics.js";
4
+ export * from "./hosts.js";
5
+ export * from "./wheel.js";
6
+ // HID++ reserves software ID 0 for device-originated notifications. Using a
7
+ // nonzero ID keeps command replies distinct from asynchronous mouse events.
8
+ const SOFTWARE_ID = 0x05;
9
+ /** Add this client's HID++ software ID while preserving the function nibble. */
10
+ export function withSoftwareId(functionId) {
11
+ return (functionId & 0xf0) | SOFTWARE_ID;
12
+ }
13
+ /**
14
+ * Usage page carrying HID++ over USB: a receiver, or a mouse's own wired
15
+ * vendor interface. Usage 1 is the short-report collection, usage 2 the long.
16
+ */
17
+ export const HIDPP_USAGE_PAGE = 0xff00;
18
+ /**
19
+ * Usage page carrying HID++ over Bluetooth. BLE devices do not expose the
20
+ * 0xFF00 pair at all: Logitech moves the protocol to its own vendor page
21
+ * (usage 0x0202) and carries long reports only, which is why an MX Master
22
+ * paired over Bluetooth shows a single `Vendor (0xFF43)` interface and was
23
+ * never offered by a 0xFF00-only picker filter.
24
+ *
25
+ * The page is Logitech's alone, so both the filter and the support check match
26
+ * the whole page rather than a single usage, keeping firmware that numbers the
27
+ * collection differently within reach.
28
+ */
29
+ export const HIDPP_BLUETOOTH_USAGE_PAGE = 0xff43;
30
+ /** Receiver-attached mice answer on the receiver's first pairing slot. */
31
+ export const DEVICE_INDEX_RECEIVER = 0x01;
32
+ /** A mouse addressed over its own USB interface answers on 0xFF. */
33
+ export const DEVICE_INDEX_DIRECT = 0xff;
34
+ /** Bolt receivers expose up to six pairing slots (HID++ device indices 1..6). */
35
+ export const BOLT_PAIRING_SLOTS = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06];
36
+ /**
37
+ * Logitech mice whose vendor interface is the mouse itself rather than a
38
+ * receiver. They answer HID++ on device index 0xFF and keep their writable
39
+ * settings in an onboard profile.
40
+ *
41
+ * G203 / G102 generation (HID++ 2.0, legacy DPI feature 0x2201):
42
+ * - 0xc084 — G203 PRODIGY (wired)
43
+ * - 0xc089 — G102 LIGHTSYNC (wired)
44
+ * - 0xc092 — G203 LIGHTSYNC (wired)
45
+ *
46
+ * G303 / G402 generation:
47
+ * - 0xc07d — G502 / G502 Proteus Core (wired)
48
+ * - 0xc07e — G402 / G402 Hyperion Fury (wired)
49
+ * - 0xc080 — G303 Daedalus Apex (wired)
50
+ *
51
+ * G Pro / G502 / G403 HERO generation (HID++ 2.0, DPI feature 0x2202):
52
+ * - 0xc085 — G Pro (wired, 2017)
53
+ * - 0xc087 — G703 (wired)
54
+ * - 0xc08b — G502 HERO (wired)
55
+ * - 0xc08c — G Pro Hero (wired)
56
+ * - 0xc08e — G903 HERO (wired)
57
+ * - 0xc08f — G403 HERO (wired)
58
+ * - 0xc095 — G502 X PLUS (USB cable)
59
+ * - 0xc098 — G502 X LIGHTSPEED (USB cable, direct-connect mode)
60
+ * - 0xc099 — G502 X (wired)
61
+ *
62
+ * G Pro X Superlight generation:
63
+ * - 0xc094 — G Pro X Superlight (wired)
64
+ *
65
+ * This module deliberately imports nothing, so both the driver and the WebHID
66
+ * filters in ../vendors can read it without a cycle.
67
+ */
68
+ export const LOGITECH_DIRECT_PRODUCT_IDS = [
69
+ // G203 / G102 generation
70
+ 0xc084, 0xc089, 0xc092,
71
+ // G303 / G402 generation
72
+ 0xc07d, 0xc07e, 0xc080,
73
+ // G Pro / G502 / G403 HERO / G703 generation
74
+ 0xc085, 0xc087, 0xc08b, 0xc08c, 0xc08e, 0xc08f,
75
+ // G Pro X Superlight generation
76
+ 0xc094,
77
+ // G502 X generation
78
+ 0xc095, 0xc098, 0xc099,
79
+ ];
80
+ /**
81
+ * Logi Bolt receivers. Unlike Lightspeed, device HID++ 2.0 rides long reports
82
+ * (report id 0x11) on usage `ff00:2`, and the mouse may sit on any pairing
83
+ * slot — not only 0x01.
84
+ *
85
+ * - 0xc548 — Logi Bolt USB receiver (MX Master 3S and other Bolt mice)
86
+ */
87
+ export const LOGITECH_BOLT_PRODUCT_IDS = [0xc548];
88
+ const DIRECT_PRODUCT_ID_SET = new Set(LOGITECH_DIRECT_PRODUCT_IDS);
89
+ const BOLT_PRODUCT_ID_SET = new Set(LOGITECH_BOLT_PRODUCT_IDS);
90
+ export function isDirectConnectProduct(productId) {
91
+ return DIRECT_PRODUCT_ID_SET.has(productId);
92
+ }
93
+ export function isBoltReceiverProduct(productId) {
94
+ return BOLT_PRODUCT_ID_SET.has(productId);
95
+ }
96
+ /**
97
+ * Whether this HID++ endpoint is the mouse itself rather than a receiver.
98
+ * Runtime device-index probing is authoritative; product IDs do not decide it.
99
+ */
100
+ export function isDirectConnection(resolvedDeviceIndex) {
101
+ return resolvedDeviceIndex === DEVICE_INDEX_DIRECT;
102
+ }
103
+ /**
104
+ * Device indices to probe when discovering which one answers.
105
+ *
106
+ * A receiver forwards to its pairing slots, and G HUB merging a keyboard onto
107
+ * the same receiver can push the mouse off the first one — so all six slots
108
+ * are probed before the direct index. A direct connection is its own single
109
+ * endpoint and answers as itself, with the receiver slot only a fallback for
110
+ * product ids that are on neither list.
111
+ */
112
+ export function hidppDeviceIndexCandidates(isKnownReceiver) {
113
+ return isKnownReceiver
114
+ ? [DEVICE_INDEX_RECEIVER, 0x02, 0x03, 0x04, 0x05, 0x06, DEVICE_INDEX_DIRECT]
115
+ : [DEVICE_INDEX_DIRECT, DEVICE_INDEX_RECEIVER];
116
+ }
117
+ /** HID++ 2.0 error codes, reported in byte 4 of a 0xFF error response. */
118
+ const HIDPP20_ERRORS = {
119
+ 0x01: "unknown request",
120
+ 0x02: "invalid argument",
121
+ 0x03: "value out of range",
122
+ 0x04: "hardware error",
123
+ 0x05: "Logitech internal error",
124
+ 0x06: "invalid feature index",
125
+ 0x07: "invalid function",
126
+ 0x08: "device busy",
127
+ 0x09: "unsupported",
128
+ };
129
+ /** HID++ 1.0 error codes, reported in byte 4 of a 0x8F error response. */
130
+ const HIDPP10_ERRORS = {
131
+ 0x01: "invalid command",
132
+ 0x02: "invalid address",
133
+ 0x03: "invalid value",
134
+ 0x04: "connection request failed",
135
+ 0x05: "too many devices",
136
+ 0x06: "already exists",
137
+ 0x07: "device busy",
138
+ 0x08: "unknown device",
139
+ 0x09: "resource error",
140
+ 0x0a: "request unavailable",
141
+ 0x0b: "unsupported parameter value",
142
+ 0x0c: "wrong PIN code",
143
+ };
144
+ export function hidppErrorMessage(code) {
145
+ const reason = HIDPP20_ERRORS[code];
146
+ return reason
147
+ ? `The mouse rejected that setting (${reason}).`
148
+ : `The mouse rejected that setting (HID++ 2.0 error 0x${code.toString(16).padStart(2, "0")}).`;
149
+ }
150
+ export function hidpp10ErrorMessage(code) {
151
+ const reason = HIDPP10_ERRORS[code];
152
+ return reason
153
+ ? `The mouse rejected that setting (HID++ 1.0: ${reason}).`
154
+ : `The mouse rejected that setting (HID++ 1.0 error 0x${code.toString(16).padStart(2, "0")}).`;
155
+ }
156
+ /**
157
+ * Decodes an error only when it echoes the request being awaited.
158
+ *
159
+ * HID++ 1.0: [device, 0x8f, sub-id, address, error]
160
+ * HID++ 2.0: [device, 0xff, feature-index, function+software-id, error]
161
+ */
162
+ export function hidppErrorForRequest(report, requestFirstByte, requestSecondByte) {
163
+ if (report[2] !== requestFirstByte || report[3] !== withSoftwareId(requestSecondByte))
164
+ return null;
165
+ if (report[1] === 0x8f)
166
+ return hidpp10ErrorMessage(report[4] ?? 0);
167
+ if (report[1] === 0xff)
168
+ return hidppErrorMessage(report[4] ?? 0);
169
+ return null;
170
+ }
171
+ /**
172
+ * Decode the legacy Report Rate (0x8060) supported-rate bitmap, where bit i
173
+ * marks an interval of (i + 1) ms. The G402 generation reports 0x8b, meaning
174
+ * 1, 2, 4 and 8 ms — 1000, 500, 250 and 125 Hz.
175
+ */
176
+ export function decodeReportRateBitmap(bitflags) {
177
+ const rates = [];
178
+ for (let bit = 0; bit < 8; bit += 1) {
179
+ if ((bitflags & (1 << bit)) !== 0)
180
+ rates.push(Math.round(1000 / (bit + 1)));
181
+ }
182
+ return rates.sort((left, right) => left - right);
183
+ }
184
+ /**
185
+ * 0x1004 UNIFIED_BATTERY chargingStatus.
186
+ *
187
+ * Deliberately separate from the 0x1000 mapping below: the two features number
188
+ * their states differently, and decoding one with the other's table reports a
189
+ * slow charge as "almost full".
190
+ */
191
+ export function decodeUnifiedBatteryState(chargingStatus) {
192
+ switch (chargingStatus) {
193
+ case 0x00: return "Discharging";
194
+ case 0x01: return "Charging";
195
+ case 0x02: return "Charging slowly";
196
+ case 0x03: return "Full";
197
+ // 4 is a charging fault. There is no state for it, and calling it charging
198
+ // would be worse than admitting we do not know.
199
+ default: return "Unknown";
200
+ }
201
+ }
202
+ /** 0x1000 BATTERY_LEVEL_STATUS batteryStatus. */
203
+ export function decodeBatteryLevelState(batteryStatus) {
204
+ switch (batteryStatus) {
205
+ case 0x00: return "Discharging";
206
+ case 0x01: return "Charging";
207
+ case 0x02: return "Almost full";
208
+ case 0x03: return "Full";
209
+ case 0x04: return "Charging slowly";
210
+ // 5 invalid battery, 6 thermal error, 7 other charging error.
211
+ default: return "Unknown";
212
+ }
213
+ }
214
+ /**
215
+ * The mouse keeps its settings in onboard memory and will not hand control to
216
+ * software, so the only way to change anything is to write its profile — which
217
+ * needs a decoded layout for that profile format.
218
+ *
219
+ * Its own type because it is not a fault: it is a mouse that cannot be
220
+ * supported yet, and the way forward is a capture from whoever owns one.
221
+ */
222
+ export class OnboardOnlyError extends Error {
223
+ profileFormatId;
224
+ constructor(profileFormatId) {
225
+ super("This mouse keeps its settings in onboard memory and will not hand control to software. "
226
+ + `Writing ${profileFormatId === null ? "its profile format" : `profile format ${profileFormatId}`} `
227
+ + 'is not supported yet. Open Diagnostics, then HID++ capture, and use "Copy verification data" — '
228
+ + "sending that is what lets the layout be added.");
229
+ this.name = "OnboardOnlyError";
230
+ this.profileFormatId = profileFormatId;
231
+ }
232
+ }
233
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logitech/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Scroll-wheel features on the MX line: 0x2111 (SmartShift Enhanced),
3
+ * 0x2121 (Hi-Res Wheel) and 0x2150 (Thumb Wheel).
4
+ *
5
+ * Byte layouts were established on an MX Master 4 by pressing the physical
6
+ * wheel-mode button and diffing dumps — exactly two bytes moved — and by
7
+ * moving Logi Options+'s own sliders and watching which value followed.
8
+ */
9
+ export declare const LOGITECH_SMART_SHIFT: {
10
+ /** getCapabilities: [?, min, max, ...] on an MX Master 4, 01 0A 4B 0E. */
11
+ readonly capabilities: 0;
12
+ /** getRatchetControlMode: [mode, threshold, defaultThreshold]. */
13
+ readonly get: 16;
14
+ /** setRatchetControlMode(mode, threshold, defaultThreshold). */
15
+ readonly set: 32;
16
+ };
17
+ /**
18
+ * 0x2111 byte 0 is the wheel's ratchet mode — the same thing the button behind
19
+ * the wheel toggles, and NOT SmartShift on/off. It was first shipped labelled
20
+ * "SmartShift / Always ratchet", which was naming a control after inferred
21
+ * behaviour rather than demonstrated behaviour.
22
+ */
23
+ export declare const LOGITECH_WHEEL_MODE: {
24
+ readonly freespin: 1;
25
+ readonly ratchet: 2;
26
+ };
27
+ /**
28
+ * Byte 1 is the SmartShift threshold: 255 disables it, and a lower value
29
+ * releases the ratchet on a gentler flick. Proven by moving the Options+
30
+ * sensitivity slider — 9% wrote 46 and 75% wrote 15, with the mode byte stuck
31
+ * at 2 throughout.
32
+ */
33
+ export declare const LOGITECH_SMART_SHIFT_OFF = 255;
34
+ export declare const LOGITECH_HIRES_WHEEL: {
35
+ /** getCapabilities: [multiplier, flags, ...]. */
36
+ readonly capabilities: 0;
37
+ /** getMode / setMode, a single bitmask byte. */
38
+ readonly get: 16;
39
+ readonly set: 32;
40
+ /** getRatchetSwitchState: byte 0 is 1 while the wheel is ratcheted. */
41
+ readonly ratchetState: 48;
42
+ };
43
+ /**
44
+ * Bits of the 0x2121 mode byte.
45
+ *
46
+ * NEVER set divert. It routes wheel movement to HID++ instead of ordinary HID
47
+ * scrolling, and unless something is consuming those notifications the wheel
48
+ * simply stops working. Writes read-modify-write a single bit and carry this
49
+ * one through untouched.
50
+ */
51
+ export declare const LOGITECH_HIRES_WHEEL_BIT: {
52
+ readonly divert: 1;
53
+ readonly hiRes: 2;
54
+ readonly invert: 4;
55
+ };
56
+ /** Byte 1 of getCapabilities; bit 3 is set when inversion is supported. */
57
+ export declare const LOGITECH_HIRES_WHEEL_SUPPORTS_INVERT = 8;
58
+ export declare const LOGITECH_THUMB_WHEEL: {
59
+ /** getThumbwheelInfo: [nativeRes(2), divertedRes(2), capabilities(2), ...]. */
60
+ readonly info: 0;
61
+ /** getThumbwheelStatus: [diverted, inverted]. */
62
+ readonly get: 16;
63
+ /** setThumbwheelReporting(diverted, inverted). */
64
+ readonly set: 32;
65
+ };
66
+ /** Bit 0 of the two-byte capability field at payload[4..5]. */
67
+ export declare const LOGITECH_THUMB_WHEEL_SUPPORTS_INVERT = 1;
68
+ export type LogitechWheelMode = "Freespin" | "Ratchet";
69
+ export interface LogitechRatchetControl {
70
+ mode: LogitechWheelMode | null;
71
+ threshold: number;
72
+ defaultThreshold: number;
73
+ }
74
+ export declare function decodeRatchetControl(payload: Uint8Array | readonly number[]): LogitechRatchetControl | null;
75
+ /**
76
+ * A 0x2111 write carries all three bytes, so each setter reads the trio first
77
+ * and changes only its own field. A write that drops the companion silently
78
+ * discards a setting it was never asked to touch.
79
+ */
80
+ export declare function buildRatchetControlWrite(current: LogitechRatchetControl, change: {
81
+ mode?: LogitechWheelMode;
82
+ threshold?: number;
83
+ }): number[];
84
+ /**
85
+ * getCapabilities is [multiplier, flags]. Reading those two the other way
86
+ * round yields a nonsense multiplier of 28 on a wheel whose real multiplier
87
+ * is 15.
88
+ */
89
+ export declare function decodeHiresWheelCapabilities(payload: Uint8Array | readonly number[]): {
90
+ multiplier: number;
91
+ supportsInvert: boolean;
92
+ } | null;
93
+ export declare function decodeHiresWheelMode(modeByte: number): {
94
+ hiRes: boolean;
95
+ inverted: boolean;
96
+ diverted: boolean;
97
+ };
98
+ /** Sets one bit and carries every other through, diversion included. */
99
+ export declare function encodeHiresWheelMode(modeByte: number, bit: number, on: boolean): number;
100
+ /**
101
+ * Thumb-wheel capabilities are the TWO-byte field at payload[4..5] — an
102
+ * MX Master 4 answers 0x0003 there and demonstrably honours inversion, which
103
+ * reading the single byte at payload[4] would have reported as unsupported.
104
+ */
105
+ export declare function decodeThumbWheelSupportsInvert(payload: Uint8Array | readonly number[]): boolean | null;
106
+ export declare function decodeThumbWheelStatus(payload: Uint8Array | readonly number[]): {
107
+ diverted: boolean;
108
+ inverted: boolean;
109
+ } | null;
110
+ /**
111
+ * Logi Options+ sets the diversion bit to implement horizontal scrolling, so a
112
+ * write that clears it takes that away. Diversion is preserved from the read.
113
+ */
114
+ export declare function buildThumbWheelWrite(current: {
115
+ diverted: boolean;
116
+ }, inverted: boolean): number[];
117
+ //# sourceMappingURL=wheel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wheel.d.ts","sourceRoot":"","sources":["../../src/logitech/wheel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,oBAAoB;IAC/B,0EAA0E;;IAE1E,kEAAkE;;IAElE,gEAAgE;;CAExD,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;CAAuC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,MAAO,CAAC;AAE7C,eAAO,MAAM,oBAAoB;IAC/B,iDAAiD;;IAEjD,gDAAgD;;;IAGhD,uEAAuE;;CAE/D,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;CAAuD,CAAC;AAE7F,2EAA2E;AAC3E,eAAO,MAAM,oCAAoC,IAAO,CAAC;AAEzD,eAAO,MAAM,oBAAoB;IAC/B,+EAA+E;;IAE/E,iDAAiD;;IAEjD,kDAAkD;;CAE1C,CAAC;AAEX,+DAA+D;AAC/D,eAAO,MAAM,oCAAoC,IAAO,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,sBAAsB,GAAG,IAAI,CAW3G;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,MAAM,EAAE,CAIV;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GACtC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAKxD;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAM/G;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAEvF;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAKtG;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GACtC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAKjD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAEhG"}