@microbit/microbit-connection 0.9.0-apps.alpha.2 → 0.9.0-apps.alpha.20

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 (504) hide show
  1. package/build/cjs/async-util.d.ts +3 -1
  2. package/build/cjs/async-util.js +5 -1
  3. package/build/cjs/async-util.js.map +1 -1
  4. package/build/cjs/async-util.test.d.ts +1 -0
  5. package/build/cjs/async-util.test.js +20 -0
  6. package/build/cjs/async-util.test.js.map +1 -0
  7. package/build/cjs/availability.d.ts +14 -0
  8. package/build/cjs/availability.js +44 -0
  9. package/build/cjs/availability.js.map +1 -0
  10. package/build/cjs/bluetooth/ble-error.d.ts +10 -0
  11. package/build/cjs/bluetooth/ble-error.js +47 -0
  12. package/build/cjs/bluetooth/ble-error.js.map +1 -0
  13. package/build/cjs/bluetooth/connection.d.ts +378 -0
  14. package/build/cjs/bluetooth/connection.js +623 -0
  15. package/build/cjs/bluetooth/connection.js.map +1 -0
  16. package/build/cjs/bluetooth/connection.test.d.ts +1 -0
  17. package/build/cjs/bluetooth/connection.test.js +88 -0
  18. package/build/cjs/bluetooth/connection.test.js.map +1 -0
  19. package/build/cjs/bluetooth/device-bond-state.d.ts +14 -0
  20. package/build/cjs/bluetooth/device-bond-state.js +26 -0
  21. package/build/cjs/bluetooth/device-bond-state.js.map +1 -0
  22. package/build/cjs/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +35 -19
  23. package/build/cjs/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +169 -101
  24. package/build/cjs/bluetooth/device-wrapper.js.map +1 -0
  25. package/build/{esm → cjs/bluetooth}/flashing/flashing-full.d.ts +2 -2
  26. package/build/cjs/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
  27. package/build/cjs/bluetooth/flashing/flashing-full.js.map +1 -0
  28. package/build/cjs/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  29. package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  30. package/build/cjs/bluetooth/flashing/flashing-makecode.js.map +1 -0
  31. package/build/cjs/bluetooth/flashing/flashing-makecode.test.d.ts +1 -0
  32. package/build/cjs/bluetooth/flashing/flashing-makecode.test.js +253 -0
  33. package/build/cjs/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  34. package/build/cjs/bluetooth/flashing/flashing-partial.d.ts +10 -0
  35. package/build/cjs/bluetooth/flashing/flashing-partial.js +145 -0
  36. package/build/cjs/bluetooth/flashing/flashing-partial.js.map +1 -0
  37. package/build/cjs/bluetooth/flashing/flashing-v1.js.map +1 -0
  38. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  39. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.js +40 -14
  40. package/build/cjs/bluetooth/flashing/nordic-dfu.js.map +1 -0
  41. package/build/cjs/bluetooth/flashing/zip.js.map +1 -0
  42. package/build/cjs/bluetooth/flashing/zip.test.d.ts +1 -0
  43. package/build/cjs/bluetooth/flashing/zip.test.js +96 -0
  44. package/build/cjs/bluetooth/flashing/zip.test.js.map +1 -0
  45. package/build/cjs/bluetooth/index.d.ts +5 -0
  46. package/build/cjs/bluetooth/index.js +9 -0
  47. package/build/cjs/bluetooth/index.js.map +1 -0
  48. package/build/cjs/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  49. package/build/cjs/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  50. package/build/cjs/bluetooth/profile.js.map +1 -0
  51. package/build/{esm → cjs/bluetooth/services}/accelerometer-service.d.ts +2 -3
  52. package/build/cjs/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +17 -12
  53. package/build/cjs/bluetooth/services/accelerometer-service.js.map +1 -0
  54. package/build/{esm → cjs/bluetooth/services}/button-service.d.ts +2 -3
  55. package/build/cjs/{button-service.js → bluetooth/services/button-service.js} +24 -14
  56. package/build/cjs/bluetooth/services/button-service.js.map +1 -0
  57. package/build/{esm → cjs/bluetooth/services}/device-information-service.d.ts +1 -1
  58. package/build/cjs/bluetooth/services/device-information-service.js +29 -0
  59. package/build/cjs/bluetooth/services/device-information-service.js.map +1 -0
  60. package/build/cjs/{dfu-service.js → bluetooth/services/dfu-service.js} +2 -2
  61. package/build/cjs/bluetooth/services/dfu-service.js.map +1 -0
  62. package/build/cjs/bluetooth/services/event-service.d.ts +48 -0
  63. package/build/cjs/bluetooth/services/event-service.js +273 -0
  64. package/build/cjs/bluetooth/services/event-service.js.map +1 -0
  65. package/build/cjs/bluetooth/services/event-service.test.d.ts +1 -0
  66. package/build/cjs/bluetooth/services/event-service.test.js +252 -0
  67. package/build/cjs/bluetooth/services/event-service.test.js.map +1 -0
  68. package/build/cjs/bluetooth/services/io-pin-service.d.ts +65 -0
  69. package/build/cjs/bluetooth/services/io-pin-service.js +173 -0
  70. package/build/cjs/bluetooth/services/io-pin-service.js.map +1 -0
  71. package/build/cjs/{led-service.d.ts → bluetooth/services/led-service.d.ts} +2 -3
  72. package/build/cjs/{led-service.js → bluetooth/services/led-service.js} +10 -7
  73. package/build/cjs/bluetooth/services/led-service.js.map +1 -0
  74. package/build/cjs/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  75. package/build/cjs/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +19 -14
  76. package/build/cjs/bluetooth/services/magnetometer-service.js.map +1 -0
  77. package/build/{esm → cjs/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  78. package/build/cjs/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +8 -8
  79. package/build/cjs/bluetooth/services/partial-flashing-service.js.map +1 -0
  80. package/build/cjs/bluetooth/services/temperature-service.d.ts +14 -0
  81. package/build/cjs/bluetooth/services/temperature-service.js +80 -0
  82. package/build/cjs/bluetooth/services/temperature-service.js.map +1 -0
  83. package/build/cjs/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  84. package/build/cjs/{uart-service.js → bluetooth/services/uart-service.js} +21 -9
  85. package/build/cjs/bluetooth/services/uart-service.js.map +1 -0
  86. package/build/cjs/board-id.d.ts +1 -1
  87. package/build/cjs/board-id.js.map +1 -1
  88. package/build/cjs/device.d.ts +214 -97
  89. package/build/cjs/device.js +57 -114
  90. package/build/cjs/device.js.map +1 -1
  91. package/build/cjs/events.d.ts +8 -108
  92. package/build/cjs/events.js +27 -88
  93. package/build/cjs/events.js.map +1 -1
  94. package/build/cjs/events.test.d.ts +1 -0
  95. package/build/cjs/events.test.js +115 -0
  96. package/build/cjs/events.test.js.map +1 -0
  97. package/build/cjs/hex-util.d.ts +1 -0
  98. package/build/cjs/hex-util.js +15 -0
  99. package/build/cjs/hex-util.js.map +1 -0
  100. package/build/cjs/index.d.ts +8 -16
  101. package/build/cjs/index.js +9 -28
  102. package/build/cjs/index.js.map +1 -1
  103. package/build/cjs/logging.js.map +1 -1
  104. package/build/cjs/microbit-events.d.ts +67 -0
  105. package/build/cjs/microbit-events.js +55 -0
  106. package/build/cjs/microbit-events.js.map +1 -0
  107. package/build/cjs/radio-bridge/connection.d.ts +52 -0
  108. package/build/cjs/{usb-radio-bridge.js → radio-bridge/connection.js} +108 -97
  109. package/build/cjs/radio-bridge/connection.js.map +1 -0
  110. package/build/cjs/radio-bridge/index.d.ts +4 -0
  111. package/build/cjs/radio-bridge/index.js +9 -0
  112. package/build/cjs/radio-bridge/index.js.map +1 -0
  113. package/build/cjs/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  114. package/build/cjs/radio-bridge/serial-protocol.js.map +1 -0
  115. package/build/cjs/service-events.d.ts +92 -15
  116. package/build/cjs/service-events.js +6 -36
  117. package/build/cjs/service-events.js.map +1 -1
  118. package/build/cjs/setupTests.js +8 -0
  119. package/build/cjs/setupTests.js.map +1 -1
  120. package/build/{esm/hex-flash-data-source.d.ts → cjs/universal-hex/flash-data-source.d.ts} +1 -1
  121. package/build/cjs/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
  122. package/build/cjs/universal-hex/flash-data-source.js.map +1 -0
  123. package/build/cjs/universal-hex/index.d.ts +4 -0
  124. package/build/cjs/universal-hex/index.js +9 -0
  125. package/build/cjs/universal-hex/index.js.map +1 -0
  126. package/build/cjs/usb/arm-debug.d.ts +137 -0
  127. package/build/cjs/usb/arm-debug.js +414 -0
  128. package/build/cjs/usb/arm-debug.js.map +1 -0
  129. package/build/cjs/usb/arm-debug.test.d.ts +1 -0
  130. package/build/cjs/usb/arm-debug.test.js +333 -0
  131. package/build/cjs/usb/arm-debug.test.js.map +1 -0
  132. package/build/{esm → cjs/usb}/board-serial-info.d.ts +2 -1
  133. package/build/cjs/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  134. package/build/cjs/usb/board-serial-info.js.map +1 -0
  135. package/build/cjs/usb/board-serial-info.test.d.ts +1 -0
  136. package/build/cjs/usb/board-serial-info.test.js +46 -0
  137. package/build/cjs/usb/board-serial-info.test.js.map +1 -0
  138. package/build/cjs/usb/cdc-saturation.d.ts +36 -0
  139. package/build/cjs/usb/cdc-saturation.js +151 -0
  140. package/build/cjs/usb/cdc-saturation.js.map +1 -0
  141. package/build/cjs/usb/cmsis-dap.d.ts +113 -0
  142. package/build/cjs/usb/cmsis-dap.js +349 -0
  143. package/build/cjs/usb/cmsis-dap.js.map +1 -0
  144. package/build/cjs/usb/cmsis-dap.test.d.ts +1 -0
  145. package/build/cjs/usb/cmsis-dap.test.js +350 -0
  146. package/build/cjs/usb/cmsis-dap.test.js.map +1 -0
  147. package/build/cjs/usb/connection.d.ts +96 -0
  148. package/build/cjs/{usb.js → usb/connection.js} +274 -193
  149. package/build/cjs/usb/connection.js.map +1 -0
  150. package/build/cjs/usb/connection.test.d.ts +1 -0
  151. package/build/cjs/usb/connection.test.js +266 -0
  152. package/build/cjs/usb/connection.test.js.map +1 -0
  153. package/build/cjs/usb/cortex-m.d.ts +72 -0
  154. package/build/cjs/usb/cortex-m.js +165 -0
  155. package/build/cjs/usb/cortex-m.js.map +1 -0
  156. package/build/cjs/usb/cortex-m.test.d.ts +1 -0
  157. package/build/cjs/usb/cortex-m.test.js +217 -0
  158. package/build/cjs/usb/cortex-m.test.js.map +1 -0
  159. package/build/cjs/usb/daplink.d.ts +69 -0
  160. package/build/cjs/usb/daplink.js +238 -0
  161. package/build/cjs/usb/daplink.js.map +1 -0
  162. package/build/cjs/usb/daplink.test.d.ts +1 -0
  163. package/build/cjs/usb/daplink.test.js +290 -0
  164. package/build/cjs/usb/daplink.test.js.map +1 -0
  165. package/build/cjs/usb/device-wrapper.d.ts +34 -0
  166. package/build/cjs/usb/device-wrapper.js +102 -0
  167. package/build/cjs/usb/device-wrapper.js.map +1 -0
  168. package/build/cjs/usb/index.d.ts +5 -0
  169. package/build/cjs/usb/index.js +10 -0
  170. package/build/cjs/usb/index.js.map +1 -0
  171. package/build/cjs/{usb-partial-flashing-utils.d.ts → usb/partial-flashing-utils.d.ts} +6 -9
  172. package/build/cjs/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +6 -49
  173. package/build/cjs/usb/partial-flashing-utils.js.map +1 -0
  174. package/build/cjs/{usb-partial-flashing.d.ts → usb/partial-flashing.d.ts} +37 -11
  175. package/build/cjs/{usb-partial-flashing.js → usb/partial-flashing.js} +170 -134
  176. package/build/cjs/usb/partial-flashing.js.map +1 -0
  177. package/build/cjs/usb/promise-queue.js.map +1 -0
  178. package/build/cjs/usb/promise-queue.test.d.ts +1 -0
  179. package/build/cjs/usb/promise-queue.test.js +68 -0
  180. package/build/cjs/usb/promise-queue.test.js.map +1 -0
  181. package/build/cjs/usb/serial-events.d.ts +16 -0
  182. package/build/cjs/{led.js → usb/serial-events.js} +1 -1
  183. package/build/cjs/usb/serial-events.js.map +1 -0
  184. package/build/cjs/usb/transport.d.ts +42 -0
  185. package/build/cjs/usb/transport.js +155 -0
  186. package/build/cjs/usb/transport.js.map +1 -0
  187. package/build/esm/async-util.d.ts +3 -1
  188. package/build/esm/async-util.js +5 -1
  189. package/build/esm/async-util.js.map +1 -1
  190. package/build/esm/async-util.test.d.ts +1 -0
  191. package/build/esm/async-util.test.js +18 -0
  192. package/build/esm/async-util.test.js.map +1 -0
  193. package/build/esm/availability.d.ts +14 -0
  194. package/build/esm/availability.js +40 -0
  195. package/build/esm/availability.js.map +1 -0
  196. package/build/esm/bluetooth/ble-error.d.ts +10 -0
  197. package/build/esm/bluetooth/ble-error.js +42 -0
  198. package/build/esm/bluetooth/ble-error.js.map +1 -0
  199. package/build/esm/bluetooth/connection.d.ts +378 -0
  200. package/build/esm/bluetooth/connection.js +593 -0
  201. package/build/esm/bluetooth/connection.js.map +1 -0
  202. package/build/esm/bluetooth/connection.test.d.ts +1 -0
  203. package/build/esm/bluetooth/connection.test.js +86 -0
  204. package/build/esm/bluetooth/connection.test.js.map +1 -0
  205. package/build/esm/bluetooth/device-bond-state.d.ts +14 -0
  206. package/build/esm/bluetooth/device-bond-state.js +22 -0
  207. package/build/esm/bluetooth/device-bond-state.js.map +1 -0
  208. package/build/esm/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +35 -19
  209. package/build/esm/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +167 -100
  210. package/build/esm/bluetooth/device-wrapper.js.map +1 -0
  211. package/build/{cjs → esm/bluetooth}/flashing/flashing-full.d.ts +2 -2
  212. package/build/esm/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
  213. package/build/esm/bluetooth/flashing/flashing-full.js.map +1 -0
  214. package/build/esm/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  215. package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  216. package/build/esm/bluetooth/flashing/flashing-makecode.js.map +1 -0
  217. package/build/esm/bluetooth/flashing/flashing-makecode.test.d.ts +1 -0
  218. package/build/esm/bluetooth/flashing/flashing-makecode.test.js +248 -0
  219. package/build/esm/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  220. package/build/esm/bluetooth/flashing/flashing-partial.d.ts +10 -0
  221. package/build/esm/bluetooth/flashing/flashing-partial.js +142 -0
  222. package/build/esm/bluetooth/flashing/flashing-partial.js.map +1 -0
  223. package/build/esm/bluetooth/flashing/flashing-v1.js.map +1 -0
  224. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  225. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.js +40 -14
  226. package/build/esm/bluetooth/flashing/nordic-dfu.js.map +1 -0
  227. package/build/esm/bluetooth/flashing/zip.js.map +1 -0
  228. package/build/esm/bluetooth/flashing/zip.test.d.ts +1 -0
  229. package/build/esm/bluetooth/flashing/zip.test.js +94 -0
  230. package/build/esm/bluetooth/flashing/zip.test.js.map +1 -0
  231. package/build/esm/bluetooth/index.d.ts +5 -0
  232. package/build/esm/bluetooth/index.js +5 -0
  233. package/build/esm/bluetooth/index.js.map +1 -0
  234. package/build/esm/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  235. package/build/esm/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  236. package/build/{cjs/bluetooth-profile.js.map → esm/bluetooth/profile.js.map} +1 -1
  237. package/build/{cjs → esm/bluetooth/services}/accelerometer-service.d.ts +2 -3
  238. package/build/esm/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +11 -6
  239. package/build/esm/bluetooth/services/accelerometer-service.js.map +1 -0
  240. package/build/{cjs → esm/bluetooth/services}/button-service.d.ts +2 -3
  241. package/build/esm/{button-service.js → bluetooth/services/button-service.js} +20 -10
  242. package/build/esm/bluetooth/services/button-service.js.map +1 -0
  243. package/build/{cjs → esm/bluetooth/services}/device-information-service.d.ts +1 -1
  244. package/build/esm/bluetooth/services/device-information-service.js +25 -0
  245. package/build/esm/bluetooth/services/device-information-service.js.map +1 -0
  246. package/build/esm/{dfu-service.js → bluetooth/services/dfu-service.js} +1 -1
  247. package/build/esm/bluetooth/services/dfu-service.js.map +1 -0
  248. package/build/esm/bluetooth/services/event-service.d.ts +48 -0
  249. package/build/esm/bluetooth/services/event-service.js +269 -0
  250. package/build/esm/bluetooth/services/event-service.js.map +1 -0
  251. package/build/esm/bluetooth/services/event-service.test.d.ts +1 -0
  252. package/build/esm/bluetooth/services/event-service.test.js +250 -0
  253. package/build/esm/bluetooth/services/event-service.test.js.map +1 -0
  254. package/build/esm/bluetooth/services/io-pin-service.d.ts +65 -0
  255. package/build/esm/bluetooth/services/io-pin-service.js +169 -0
  256. package/build/esm/bluetooth/services/io-pin-service.js.map +1 -0
  257. package/build/esm/{led-service.d.ts → bluetooth/services/led-service.d.ts} +2 -3
  258. package/build/esm/{led-service.js → bluetooth/services/led-service.js} +4 -1
  259. package/build/esm/bluetooth/services/led-service.js.map +1 -0
  260. package/build/esm/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  261. package/build/esm/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +11 -6
  262. package/build/esm/bluetooth/services/magnetometer-service.js.map +1 -0
  263. package/build/{cjs → esm/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  264. package/build/esm/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +4 -4
  265. package/build/esm/bluetooth/services/partial-flashing-service.js.map +1 -0
  266. package/build/esm/bluetooth/services/temperature-service.d.ts +14 -0
  267. package/build/esm/bluetooth/services/temperature-service.js +76 -0
  268. package/build/esm/bluetooth/services/temperature-service.js.map +1 -0
  269. package/build/esm/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  270. package/build/esm/{uart-service.js → bluetooth/services/uart-service.js} +18 -6
  271. package/build/esm/bluetooth/services/uart-service.js.map +1 -0
  272. package/build/esm/board-id.d.ts +1 -1
  273. package/build/esm/board-id.js.map +1 -1
  274. package/build/esm/device.d.ts +214 -97
  275. package/build/esm/device.js +55 -108
  276. package/build/esm/device.js.map +1 -1
  277. package/build/esm/events.d.ts +8 -108
  278. package/build/esm/events.js +26 -86
  279. package/build/esm/events.js.map +1 -1
  280. package/build/esm/events.test.d.ts +1 -0
  281. package/build/esm/events.test.js +113 -0
  282. package/build/esm/events.test.js.map +1 -0
  283. package/build/esm/hex-util.d.ts +1 -0
  284. package/build/esm/hex-util.js +11 -0
  285. package/build/esm/hex-util.js.map +1 -0
  286. package/build/esm/index.d.ts +8 -16
  287. package/build/esm/index.js +7 -11
  288. package/build/esm/index.js.map +1 -1
  289. package/build/esm/logging.js.map +1 -1
  290. package/build/esm/microbit-events.d.ts +67 -0
  291. package/build/esm/microbit-events.js +52 -0
  292. package/build/esm/microbit-events.js.map +1 -0
  293. package/build/esm/radio-bridge/connection.d.ts +52 -0
  294. package/build/esm/{usb-radio-bridge.js → radio-bridge/connection.js} +108 -97
  295. package/build/esm/radio-bridge/connection.js.map +1 -0
  296. package/build/esm/radio-bridge/index.d.ts +4 -0
  297. package/build/esm/radio-bridge/index.js +5 -0
  298. package/build/esm/radio-bridge/index.js.map +1 -0
  299. package/build/esm/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  300. package/build/esm/radio-bridge/serial-protocol.js.map +1 -0
  301. package/build/esm/service-events.d.ts +92 -15
  302. package/build/esm/service-events.js +5 -34
  303. package/build/esm/service-events.js.map +1 -1
  304. package/build/esm/setupTests.js +7 -0
  305. package/build/esm/setupTests.js.map +1 -1
  306. package/build/{cjs/hex-flash-data-source.d.ts → esm/universal-hex/flash-data-source.d.ts} +1 -1
  307. package/build/esm/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
  308. package/build/esm/universal-hex/flash-data-source.js.map +1 -0
  309. package/build/esm/universal-hex/index.d.ts +4 -0
  310. package/build/esm/universal-hex/index.js +5 -0
  311. package/build/esm/universal-hex/index.js.map +1 -0
  312. package/build/esm/usb/arm-debug.d.ts +137 -0
  313. package/build/esm/usb/arm-debug.js +409 -0
  314. package/build/esm/usb/arm-debug.js.map +1 -0
  315. package/build/esm/usb/arm-debug.test.d.ts +1 -0
  316. package/build/esm/usb/arm-debug.test.js +331 -0
  317. package/build/esm/usb/arm-debug.test.js.map +1 -0
  318. package/build/{cjs → esm/usb}/board-serial-info.d.ts +2 -1
  319. package/build/esm/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  320. package/build/esm/usb/board-serial-info.js.map +1 -0
  321. package/build/esm/usb/board-serial-info.test.d.ts +1 -0
  322. package/build/esm/usb/board-serial-info.test.js +44 -0
  323. package/build/esm/usb/board-serial-info.test.js.map +1 -0
  324. package/build/esm/usb/cdc-saturation.d.ts +36 -0
  325. package/build/esm/usb/cdc-saturation.js +148 -0
  326. package/build/esm/usb/cdc-saturation.js.map +1 -0
  327. package/build/esm/usb/cmsis-dap.d.ts +113 -0
  328. package/build/esm/usb/cmsis-dap.js +342 -0
  329. package/build/esm/usb/cmsis-dap.js.map +1 -0
  330. package/build/esm/usb/cmsis-dap.test.d.ts +1 -0
  331. package/build/esm/usb/cmsis-dap.test.js +348 -0
  332. package/build/esm/usb/cmsis-dap.test.js.map +1 -0
  333. package/build/esm/usb/connection.d.ts +96 -0
  334. package/build/esm/{usb.js → usb/connection.js} +270 -188
  335. package/build/esm/usb/connection.js.map +1 -0
  336. package/build/esm/usb/connection.test.d.ts +1 -0
  337. package/build/esm/usb/connection.test.js +264 -0
  338. package/build/esm/usb/connection.test.js.map +1 -0
  339. package/build/esm/usb/cortex-m.d.ts +72 -0
  340. package/build/esm/usb/cortex-m.js +161 -0
  341. package/build/esm/usb/cortex-m.js.map +1 -0
  342. package/build/esm/usb/cortex-m.test.d.ts +1 -0
  343. package/build/esm/usb/cortex-m.test.js +215 -0
  344. package/build/esm/usb/cortex-m.test.js.map +1 -0
  345. package/build/esm/usb/daplink.d.ts +69 -0
  346. package/build/esm/usb/daplink.js +231 -0
  347. package/build/esm/usb/daplink.js.map +1 -0
  348. package/build/esm/usb/daplink.test.d.ts +1 -0
  349. package/build/esm/usb/daplink.test.js +288 -0
  350. package/build/esm/usb/daplink.test.js.map +1 -0
  351. package/build/esm/usb/device-wrapper.d.ts +34 -0
  352. package/build/esm/usb/device-wrapper.js +98 -0
  353. package/build/esm/usb/device-wrapper.js.map +1 -0
  354. package/build/esm/usb/index.d.ts +5 -0
  355. package/build/esm/usb/index.js +5 -0
  356. package/build/esm/usb/index.js.map +1 -0
  357. package/build/esm/{usb-partial-flashing-utils.d.ts → usb/partial-flashing-utils.d.ts} +6 -9
  358. package/build/esm/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +4 -44
  359. package/build/esm/usb/partial-flashing-utils.js.map +1 -0
  360. package/build/esm/{usb-partial-flashing.d.ts → usb/partial-flashing.d.ts} +37 -11
  361. package/build/esm/{usb-partial-flashing.js → usb/partial-flashing.js} +169 -110
  362. package/build/esm/usb/partial-flashing.js.map +1 -0
  363. package/build/esm/usb/promise-queue.js.map +1 -0
  364. package/build/esm/usb/promise-queue.test.d.ts +1 -0
  365. package/build/esm/usb/promise-queue.test.js +66 -0
  366. package/build/esm/usb/promise-queue.test.js.map +1 -0
  367. package/build/esm/usb/serial-events.d.ts +16 -0
  368. package/build/esm/usb/serial-events.js +2 -0
  369. package/build/esm/usb/serial-events.js.map +1 -0
  370. package/build/esm/usb/transport.d.ts +42 -0
  371. package/build/esm/usb/transport.js +151 -0
  372. package/build/esm/usb/transport.js.map +1 -0
  373. package/package.json +55 -15
  374. package/LICENSE.md +0 -21
  375. package/README.md +0 -125
  376. package/build/cjs/accelerometer-service.js.map +0 -1
  377. package/build/cjs/accelerometer.d.ts +0 -9
  378. package/build/cjs/accelerometer.js +0 -16
  379. package/build/cjs/accelerometer.js.map +0 -1
  380. package/build/cjs/bluetooth-device-wrapper.js.map +0 -1
  381. package/build/cjs/bluetooth.d.ts +0 -112
  382. package/build/cjs/bluetooth.js +0 -458
  383. package/build/cjs/bluetooth.js.map +0 -1
  384. package/build/cjs/board-serial-info.js.map +0 -1
  385. package/build/cjs/button-service.js.map +0 -1
  386. package/build/cjs/buttons.d.ts +0 -10
  387. package/build/cjs/buttons.js +0 -22
  388. package/build/cjs/buttons.js.map +0 -1
  389. package/build/cjs/constants.d.ts +0 -48
  390. package/build/cjs/constants.js +0 -73
  391. package/build/cjs/constants.js.map +0 -1
  392. package/build/cjs/device-information-service.js +0 -34
  393. package/build/cjs/device-information-service.js.map +0 -1
  394. package/build/cjs/dfu-service.js.map +0 -1
  395. package/build/cjs/flashing/flashing-full.js.map +0 -1
  396. package/build/cjs/flashing/flashing-makecode.d.ts +0 -6
  397. package/build/cjs/flashing/flashing-makecode.js.map +0 -1
  398. package/build/cjs/flashing/flashing-partial.d.ts +0 -9
  399. package/build/cjs/flashing/flashing-partial.js +0 -98
  400. package/build/cjs/flashing/flashing-partial.js.map +0 -1
  401. package/build/cjs/flashing/flashing-v1.js.map +0 -1
  402. package/build/cjs/flashing/nordic-dfu.js.map +0 -1
  403. package/build/cjs/flashing/zip.js.map +0 -1
  404. package/build/cjs/hex-flash-data-source.js.map +0 -1
  405. package/build/cjs/led-service.js.map +0 -1
  406. package/build/cjs/led.d.ts +0 -6
  407. package/build/cjs/led.js.map +0 -1
  408. package/build/cjs/magnetometer-service.js.map +0 -1
  409. package/build/cjs/magnetometer.d.ts +0 -9
  410. package/build/cjs/magnetometer.js +0 -16
  411. package/build/cjs/magnetometer.js.map +0 -1
  412. package/build/cjs/partial-flashing-service.js.map +0 -1
  413. package/build/cjs/promise-queue.js.map +0 -1
  414. package/build/cjs/serial-events.d.ts +0 -20
  415. package/build/cjs/serial-events.js +0 -69
  416. package/build/cjs/serial-events.js.map +0 -1
  417. package/build/cjs/uart-service.js.map +0 -1
  418. package/build/cjs/uart.d.ts +0 -4
  419. package/build/cjs/uart.js +0 -16
  420. package/build/cjs/uart.js.map +0 -1
  421. package/build/cjs/usb-device-wrapper.d.ts +0 -47
  422. package/build/cjs/usb-device-wrapper.js +0 -437
  423. package/build/cjs/usb-device-wrapper.js.map +0 -1
  424. package/build/cjs/usb-partial-flashing-utils.js.map +0 -1
  425. package/build/cjs/usb-partial-flashing.js.map +0 -1
  426. package/build/cjs/usb-radio-bridge.d.ts +0 -24
  427. package/build/cjs/usb-radio-bridge.js.map +0 -1
  428. package/build/cjs/usb-serial-protocol.js.map +0 -1
  429. package/build/cjs/usb.d.ts +0 -66
  430. package/build/cjs/usb.js.map +0 -1
  431. package/build/esm/accelerometer-service.js.map +0 -1
  432. package/build/esm/accelerometer.d.ts +0 -9
  433. package/build/esm/accelerometer.js +0 -12
  434. package/build/esm/accelerometer.js.map +0 -1
  435. package/build/esm/bluetooth-device-wrapper.js.map +0 -1
  436. package/build/esm/bluetooth-profile.js.map +0 -1
  437. package/build/esm/bluetooth.d.ts +0 -112
  438. package/build/esm/bluetooth.js +0 -428
  439. package/build/esm/bluetooth.js.map +0 -1
  440. package/build/esm/board-serial-info.js.map +0 -1
  441. package/build/esm/button-service.js.map +0 -1
  442. package/build/esm/buttons.d.ts +0 -10
  443. package/build/esm/buttons.js +0 -18
  444. package/build/esm/buttons.js.map +0 -1
  445. package/build/esm/constants.d.ts +0 -48
  446. package/build/esm/constants.js +0 -70
  447. package/build/esm/constants.js.map +0 -1
  448. package/build/esm/device-information-service.js +0 -30
  449. package/build/esm/device-information-service.js.map +0 -1
  450. package/build/esm/dfu-service.js.map +0 -1
  451. package/build/esm/flashing/flashing-full.js.map +0 -1
  452. package/build/esm/flashing/flashing-makecode.d.ts +0 -6
  453. package/build/esm/flashing/flashing-makecode.js.map +0 -1
  454. package/build/esm/flashing/flashing-partial.d.ts +0 -9
  455. package/build/esm/flashing/flashing-partial.js +0 -95
  456. package/build/esm/flashing/flashing-partial.js.map +0 -1
  457. package/build/esm/flashing/flashing-v1.js.map +0 -1
  458. package/build/esm/flashing/nordic-dfu.js.map +0 -1
  459. package/build/esm/flashing/zip.js.map +0 -1
  460. package/build/esm/hex-flash-data-source.js.map +0 -1
  461. package/build/esm/led-service.js.map +0 -1
  462. package/build/esm/led.d.ts +0 -6
  463. package/build/esm/led.js +0 -2
  464. package/build/esm/led.js.map +0 -1
  465. package/build/esm/magnetometer-service.js.map +0 -1
  466. package/build/esm/magnetometer.d.ts +0 -9
  467. package/build/esm/magnetometer.js +0 -12
  468. package/build/esm/magnetometer.js.map +0 -1
  469. package/build/esm/partial-flashing-service.js.map +0 -1
  470. package/build/esm/promise-queue.js.map +0 -1
  471. package/build/esm/serial-events.d.ts +0 -20
  472. package/build/esm/serial-events.js +0 -61
  473. package/build/esm/serial-events.js.map +0 -1
  474. package/build/esm/uart-service.js.map +0 -1
  475. package/build/esm/uart.d.ts +0 -4
  476. package/build/esm/uart.js +0 -12
  477. package/build/esm/uart.js.map +0 -1
  478. package/build/esm/usb-device-wrapper.d.ts +0 -47
  479. package/build/esm/usb-device-wrapper.js +0 -410
  480. package/build/esm/usb-device-wrapper.js.map +0 -1
  481. package/build/esm/usb-partial-flashing-utils.js.map +0 -1
  482. package/build/esm/usb-partial-flashing.js.map +0 -1
  483. package/build/esm/usb-radio-bridge.d.ts +0 -24
  484. package/build/esm/usb-radio-bridge.js.map +0 -1
  485. package/build/esm/usb-serial-protocol.js.map +0 -1
  486. package/build/esm/usb.d.ts +0 -66
  487. package/build/esm/usb.js.map +0 -1
  488. package/typedoc.json +0 -14
  489. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  490. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  491. /package/build/cjs/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  492. /package/build/cjs/{flashing → bluetooth/flashing}/zip.js +0 -0
  493. /package/build/cjs/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  494. /package/build/cjs/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  495. /package/build/cjs/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  496. /package/build/cjs/{promise-queue.js → usb/promise-queue.js} +0 -0
  497. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  498. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  499. /package/build/esm/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  500. /package/build/esm/{flashing → bluetooth/flashing}/zip.js +0 -0
  501. /package/build/esm/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  502. /package/build/esm/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  503. /package/build/esm/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  504. /package/build/esm/{promise-queue.js → usb/promise-queue.js} +0 -0
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventService = void 0;
4
+ const bluetooth_le_1 = require("@capacitor-community/bluetooth-le");
5
+ const profile_js_1 = require("../profile.js");
6
+ const ble_error_js_1 = require("../ble-error.js");
7
+ const microbit_events_js_1 = require("../../microbit-events.js");
8
+ const NAMED_EVENTS = [
9
+ "gesturechanged",
10
+ "buttonaaction",
11
+ "buttonbaction",
12
+ "buttonabaction",
13
+ "logoaction",
14
+ ];
15
+ function isNamedEvent(type) {
16
+ return NAMED_EVENTS.includes(type);
17
+ }
18
+ class EventService {
19
+ constructor(deviceId, dispatchTypedEvent, getBoardVersion) {
20
+ Object.defineProperty(this, "deviceId", {
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true,
24
+ value: deviceId
25
+ });
26
+ Object.defineProperty(this, "dispatchTypedEvent", {
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: true,
30
+ value: dispatchTypedEvent
31
+ });
32
+ Object.defineProperty(this, "getBoardVersion", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: getBoardVersion
37
+ });
38
+ Object.defineProperty(this, "uuid", {
39
+ enumerable: true,
40
+ configurable: true,
41
+ writable: true,
42
+ value: profile_js_1.profile.event.id
43
+ });
44
+ Object.defineProperty(this, "activeEventTypes", {
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true,
48
+ value: new Set()
49
+ });
50
+ /**
51
+ * Filters registered via named events (gestures, buttons), keyed as "source:value".
52
+ * Persists across reconnects so we can replay them.
53
+ */
54
+ Object.defineProperty(this, "namedRequirements", {
55
+ enumerable: true,
56
+ configurable: true,
57
+ writable: true,
58
+ value: new Set()
59
+ });
60
+ /**
61
+ * Filters registered via explicit {@link subscribeToEvent} calls, keyed as "source:value".
62
+ * Only events matching these are dispatched as `microbitevent`.
63
+ * Persists across reconnects so we can replay them.
64
+ */
65
+ Object.defineProperty(this, "explicitSubscriptions", {
66
+ enumerable: true,
67
+ configurable: true,
68
+ writable: true,
69
+ value: new Set()
70
+ });
71
+ /**
72
+ * Tracks which named event types contributed which filter keys,
73
+ * so we can clean up when a named event is stopped.
74
+ */
75
+ Object.defineProperty(this, "namedEventFilters", {
76
+ enumerable: true,
77
+ configurable: true,
78
+ writable: true,
79
+ value: new Map()
80
+ });
81
+ }
82
+ getRelevantEvents() {
83
+ return [
84
+ "gesturechanged",
85
+ "buttonaaction",
86
+ "buttonbaction",
87
+ "buttonabaction",
88
+ "logoaction",
89
+ "microbitevent",
90
+ ];
91
+ }
92
+ async startNotifications(type) {
93
+ if (!this.getRelevantEvents().includes(type)) {
94
+ return;
95
+ }
96
+ this.activeEventTypes.add(type);
97
+ try {
98
+ // Always (re-)register the BLE notification. After a reconnect the
99
+ // previous subscription is gone even though the service instance is
100
+ // reused, so we cannot skip this.
101
+ await bluetooth_le_1.BleClient.startNotifications(this.deviceId, profile_js_1.profile.event.id, profile_js_1.profile.event.characteristics.microBitEvent.id, (value) => this.handleNotification(value));
102
+ if (isNamedEvent(type)) {
103
+ this.writeRequirementsForNamedEvent(type);
104
+ }
105
+ // Replay all filters (handles reconnect case where the micro:bit
106
+ // has lost its listener registrations).
107
+ await this.replayAllRequirements();
108
+ }
109
+ catch (e) {
110
+ this.dispatchTypedEvent("backgrounderror", {
111
+ error: (0, ble_error_js_1.mapBleError)(e),
112
+ event: type,
113
+ });
114
+ }
115
+ }
116
+ async stopNotifications(type) {
117
+ if (!this.getRelevantEvents().includes(type)) {
118
+ return;
119
+ }
120
+ this.activeEventTypes.delete(type);
121
+ // Remove filters contributed by this named event type
122
+ if (isNamedEvent(type)) {
123
+ const keys = this.namedEventFilters.get(type) ?? [];
124
+ for (const key of keys) {
125
+ this.namedRequirements.delete(key);
126
+ }
127
+ this.namedEventFilters.delete(type);
128
+ }
129
+ if (this.activeEventTypes.size === 0) {
130
+ try {
131
+ await bluetooth_le_1.BleClient.stopNotifications(this.deviceId, profile_js_1.profile.event.id, profile_js_1.profile.event.characteristics.microBitEvent.id);
132
+ }
133
+ catch (e) {
134
+ this.dispatchTypedEvent("backgrounderror", {
135
+ error: (0, ble_error_js_1.mapBleError)(e),
136
+ event: type,
137
+ });
138
+ }
139
+ }
140
+ }
141
+ /**
142
+ * Register interest in a specific micro:bit message bus event.
143
+ * Tells the micro:bit to forward matching message bus traffic over BLE.
144
+ * Matching events are dispatched as `microbitevent`.
145
+ * Use 0 as the value to match all events from a source.
146
+ */
147
+ async subscribeToEvent(source, value) {
148
+ const key = filterKey(source, value);
149
+ if (!this.explicitSubscriptions.has(key)) {
150
+ this.explicitSubscriptions.add(key);
151
+ await this.writeClientRequirement(source, value);
152
+ }
153
+ }
154
+ /**
155
+ * Send an event to the micro:bit's message bus.
156
+ */
157
+ async sendEvent(source, value) {
158
+ const data = new DataView(new ArrayBuffer(4));
159
+ data.setUint16(0, source, true);
160
+ data.setUint16(2, value, true);
161
+ await bluetooth_le_1.BleClient.writeWithoutResponse(this.deviceId, profile_js_1.profile.event.id, profile_js_1.profile.event.characteristics.clientEvent.id, data);
162
+ }
163
+ handleNotification(dataView) {
164
+ for (let offset = 0; offset + 4 <= dataView.byteLength; offset += 4) {
165
+ const source = dataView.getUint16(offset, true);
166
+ const value = dataView.getUint16(offset + 2, true);
167
+ if (this.activeEventTypes.has("microbitevent") &&
168
+ this.matchesExplicitSubscription(source, value)) {
169
+ this.dispatchTypedEvent("microbitevent", { source, value });
170
+ }
171
+ this.demuxToNamedEvents(source, value);
172
+ }
173
+ }
174
+ demuxToNamedEvents(source, value) {
175
+ const src = this.getSourceIds();
176
+ if (!src)
177
+ return;
178
+ if (source === src.Gesture && this.activeEventTypes.has("gesturechanged")) {
179
+ this.dispatchTypedEvent("gesturechanged", {
180
+ gesture: value,
181
+ });
182
+ }
183
+ if (source === src.ButtonA && this.activeEventTypes.has("buttonaaction")) {
184
+ this.dispatchTypedEvent("buttonaaction", {
185
+ button: "A",
186
+ action: value,
187
+ });
188
+ }
189
+ if (source === src.ButtonB && this.activeEventTypes.has("buttonbaction")) {
190
+ this.dispatchTypedEvent("buttonbaction", {
191
+ button: "B",
192
+ action: value,
193
+ });
194
+ }
195
+ if (source === src.ButtonAB &&
196
+ this.activeEventTypes.has("buttonabaction")) {
197
+ this.dispatchTypedEvent("buttonabaction", {
198
+ button: "AB",
199
+ action: value,
200
+ });
201
+ }
202
+ if (source === microbit_events_js_1.V2Source.Logo && this.activeEventTypes.has("logoaction")) {
203
+ this.dispatchTypedEvent("logoaction", {
204
+ button: "Logo",
205
+ action: value,
206
+ });
207
+ }
208
+ }
209
+ writeRequirementsForNamedEvent(type) {
210
+ const src = this.getSourceIds();
211
+ if (!src)
212
+ return;
213
+ const filters = [];
214
+ switch (type) {
215
+ case "gesturechanged":
216
+ filters.push([src.Gesture, 0]);
217
+ break;
218
+ case "buttonaaction":
219
+ filters.push([src.ButtonA, 0]);
220
+ break;
221
+ case "buttonbaction":
222
+ filters.push([src.ButtonB, 0]);
223
+ break;
224
+ case "buttonabaction":
225
+ filters.push([src.ButtonAB, 0]);
226
+ break;
227
+ case "logoaction":
228
+ filters.push([microbit_events_js_1.V2Source.Logo, 0]);
229
+ break;
230
+ }
231
+ const keys = [];
232
+ for (const [source, value] of filters) {
233
+ const key = filterKey(source, value);
234
+ keys.push(key);
235
+ this.namedRequirements.add(key);
236
+ }
237
+ this.namedEventFilters.set(type, keys);
238
+ }
239
+ matchesExplicitSubscription(source, value) {
240
+ if (this.explicitSubscriptions.has(filterKey(source, value)))
241
+ return true;
242
+ if (this.explicitSubscriptions.has(filterKey(source, 0)))
243
+ return true;
244
+ return false;
245
+ }
246
+ async replayAllRequirements() {
247
+ for (const key of this.namedRequirements) {
248
+ const [source, value] = key.split(":").map(Number);
249
+ await this.writeClientRequirement(source, value);
250
+ }
251
+ for (const key of this.explicitSubscriptions) {
252
+ const [source, value] = key.split(":").map(Number);
253
+ await this.writeClientRequirement(source, value);
254
+ }
255
+ }
256
+ async writeClientRequirement(source, value) {
257
+ const data = new DataView(new ArrayBuffer(4));
258
+ data.setUint16(0, source, true);
259
+ data.setUint16(2, value, true);
260
+ await bluetooth_le_1.BleClient.write(this.deviceId, profile_js_1.profile.event.id, profile_js_1.profile.event.characteristics.clientRequirements.id, data);
261
+ }
262
+ getSourceIds() {
263
+ const version = this.getBoardVersion();
264
+ if (!version)
265
+ return undefined;
266
+ return version === "V1" ? microbit_events_js_1.EventSource.v1 : microbit_events_js_1.EventSource.v2;
267
+ }
268
+ }
269
+ exports.EventService = EventService;
270
+ function filterKey(source, value) {
271
+ return `${source}:${value}`;
272
+ }
273
+ //# sourceMappingURL=event-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-service.js","sourceRoot":"","sources":["../../../../src/bluetooth/services/event-service.ts"],"names":[],"mappings":";;;AAAA,oEAA8D;AAM9D,8CAAwC;AACxC,kDAA8C;AAE9C,iEAKkC;AAIlC,MAAM,YAAY,GAAG;IACnB,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,YAAY;CACJ,CAAC;AAIX,SAAS,YAAY,CAAC,IAAY;IAChC,OAAQ,YAAkC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,MAAa,YAAY;IAqBvB,YACU,QAAgB,EAChB,kBAA+C,EAC/C,eAA+C;QAFvD;;;;mBAAQ,QAAQ;WAAQ;QACxB;;;;mBAAQ,kBAAkB;WAA6B;QACvD;;;;mBAAQ,eAAe;WAAgC;QAvBzD;;;;mBAAO,oBAAO,CAAC,KAAK,CAAC,EAAE;WAAC;QAEhB;;;;mBAAmB,IAAI,GAAG,EAAU;WAAC;QAC7C;;;WAGG;QACK;;;;mBAAoB,IAAI,GAAG,EAAU;WAAC;QAC9C;;;;WAIG;QACK;;;;mBAAwB,IAAI,GAAG,EAAU;WAAC;QAClD;;;WAGG;QACK;;;;mBAAoB,IAAI,GAAG,EAAoB;WAAC;IAMrD,CAAC;IAEJ,iBAAiB;QACf,OAAO;YACL,gBAAgB;YAChB,eAAe;YACf,eAAe;YACf,gBAAgB;YAChB,YAAY;YACZ,eAAe;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAuB;QAC9C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC;YACH,mEAAmE;YACnE,oEAAoE;YACpE,kCAAkC;YAClC,MAAM,wBAAS,CAAC,kBAAkB,CAChC,IAAI,CAAC,QAAQ,EACb,oBAAO,CAAC,KAAK,CAAC,EAAE,EAChB,oBAAO,CAAC,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,EAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAC1C,CAAC;YAEF,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;YAED,iEAAiE;YACjE,wCAAwC;YACxC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE;gBACzC,KAAK,EAAE,IAAA,0BAAW,EAAC,CAAC,CAAC;gBACrB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAuB;QAC7C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEnC,sDAAsD;QACtD,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,wBAAS,CAAC,iBAAiB,CAC/B,IAAI,CAAC,QAAQ,EACb,oBAAO,CAAC,KAAK,CAAC,EAAE,EAChB,oBAAO,CAAC,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAC/C,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE;oBACzC,KAAK,EAAE,IAAA,0BAAW,EAAC,CAAC,CAAC;oBACrB,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAa;QAClD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,KAAa;QAC3C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,wBAAS,CAAC,oBAAoB,CAClC,IAAI,CAAC,QAAQ,EACb,oBAAO,CAAC,KAAK,CAAC,EAAE,EAChB,oBAAO,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,EAC5C,IAAI,CACL,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,QAAkB;QAC3C,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YAEnD,IACE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC;gBAC1C,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,EAC/C,CAAC;gBACD,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,MAAc,EAAE,KAAa;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,IAAI,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE;gBACxC,OAAO,EAAE,KAAqB;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE;gBACvC,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,KAAqB;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE;gBACvC,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,KAAqB;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,IACE,MAAM,KAAK,GAAG,CAAC,QAAQ;YACvB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAC3C,CAAC;YACD,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE;gBACxC,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,KAAqB;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,KAAK,6BAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;gBACpC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,KAAqB;aAC9B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,8BAA8B,CAAC,IAAgB;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB;gBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,eAAe;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,eAAe;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,gBAAgB;gBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,YAAY;gBACf,OAAO,CAAC,IAAI,CAAC,CAAC,6BAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM;QACV,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,2BAA2B,CAAC,MAAc,EAAE,KAAa;QAC/D,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1E,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7C,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,MAAc,EACd,KAAa;QAEb,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,wBAAS,CAAC,KAAK,CACnB,IAAI,CAAC,QAAQ,EACb,oBAAO,CAAC,KAAK,CAAC,EAAE,EAChB,oBAAO,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,EACnD,IAAI,CACL,CAAC;IACJ,CAAC;IAEO,YAAY;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,gCAAW,CAAC,EAAE,CAAC,CAAC,CAAC,gCAAW,CAAC,EAAE,CAAC;IAC5D,CAAC;CACF;AA7PD,oCA6PC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,KAAa;IAC9C,OAAO,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const bluetooth_le_1 = require("@capacitor-community/bluetooth-le");
5
+ const event_service_js_1 = require("./event-service.js");
6
+ const microbit_events_js_1 = require("../../microbit-events.js");
7
+ vitest_1.vi.mock("@capacitor-community/bluetooth-le", () => ({
8
+ BleClient: {
9
+ startNotifications: vitest_1.vi.fn().mockResolvedValue(undefined),
10
+ stopNotifications: vitest_1.vi.fn().mockResolvedValue(undefined),
11
+ write: vitest_1.vi.fn().mockResolvedValue(undefined),
12
+ writeWithoutResponse: vitest_1.vi.fn().mockResolvedValue(undefined),
13
+ },
14
+ }));
15
+ vitest_1.vi.mock("../ble-error.js", () => ({
16
+ mapBleError: (e) => e,
17
+ }));
18
+ function makeEvent(source, value) {
19
+ const data = new DataView(new ArrayBuffer(4));
20
+ data.setUint16(0, source, true);
21
+ data.setUint16(2, value, true);
22
+ return data;
23
+ }
24
+ function makeMultiEvent(...pairs) {
25
+ const data = new DataView(new ArrayBuffer(pairs.length * 4));
26
+ pairs.forEach(([source, value], i) => {
27
+ data.setUint16(i * 4, source, true);
28
+ data.setUint16(i * 4 + 2, value, true);
29
+ });
30
+ return data;
31
+ }
32
+ /** Captures the notification callback passed to BleClient.startNotifications */
33
+ function captureNotificationCallback() {
34
+ const calls = bluetooth_le_1.BleClient.startNotifications.mock.calls;
35
+ const lastCall = calls[calls.length - 1];
36
+ return lastCall[3];
37
+ }
38
+ (0, vitest_1.describe)("EventService", () => {
39
+ let service;
40
+ let dispatch;
41
+ (0, vitest_1.beforeEach)(() => {
42
+ vitest_1.vi.clearAllMocks();
43
+ dispatch = vitest_1.vi.fn();
44
+ service = new event_service_js_1.EventService("test-device", dispatch, () => "V2");
45
+ });
46
+ (0, vitest_1.describe)("named events", () => {
47
+ (0, vitest_1.it)("dispatches gesturechanged when listening", async () => {
48
+ await service.startNotifications("gesturechanged");
49
+ const notify = captureNotificationCallback();
50
+ notify(makeEvent(microbit_events_js_1.V2Source.Gesture, microbit_events_js_1.GestureEvent.Shake));
51
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("gesturechanged", {
52
+ gesture: microbit_events_js_1.GestureEvent.Shake,
53
+ });
54
+ });
55
+ (0, vitest_1.it)("dispatches button actions for A, B, AB", async () => {
56
+ await service.startNotifications("buttonaaction");
57
+ await service.startNotifications("buttonbaction");
58
+ await service.startNotifications("buttonabaction");
59
+ const notify = captureNotificationCallback();
60
+ notify(makeEvent(microbit_events_js_1.V2Source.ButtonA, microbit_events_js_1.ButtonAction.Click));
61
+ notify(makeEvent(microbit_events_js_1.V2Source.ButtonB, microbit_events_js_1.ButtonAction.LongClick));
62
+ notify(makeEvent(microbit_events_js_1.V2Source.ButtonAB, microbit_events_js_1.ButtonAction.DoubleClick));
63
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("buttonaaction", {
64
+ button: "A",
65
+ action: microbit_events_js_1.ButtonAction.Click,
66
+ });
67
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("buttonbaction", {
68
+ button: "B",
69
+ action: microbit_events_js_1.ButtonAction.LongClick,
70
+ });
71
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("buttonabaction", {
72
+ button: "AB",
73
+ action: microbit_events_js_1.ButtonAction.DoubleClick,
74
+ });
75
+ });
76
+ (0, vitest_1.it)("dispatches logoaction (V2 only)", async () => {
77
+ await service.startNotifications("logoaction");
78
+ const notify = captureNotificationCallback();
79
+ notify(makeEvent(microbit_events_js_1.V2Source.Logo, microbit_events_js_1.ButtonAction.Click));
80
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("logoaction", {
81
+ button: "Logo",
82
+ action: microbit_events_js_1.ButtonAction.Click,
83
+ });
84
+ });
85
+ (0, vitest_1.it)("does not dispatch after stopping a named event", async () => {
86
+ await service.startNotifications("gesturechanged");
87
+ const notify = captureNotificationCallback();
88
+ await service.stopNotifications("gesturechanged");
89
+ notify(makeEvent(microbit_events_js_1.V2Source.Gesture, microbit_events_js_1.GestureEvent.Shake));
90
+ (0, vitest_1.expect)(dispatch).not.toHaveBeenCalledWith("gesturechanged", vitest_1.expect.anything());
91
+ });
92
+ (0, vitest_1.it)("handles multiple events packed in one notification", async () => {
93
+ await service.startNotifications("gesturechanged");
94
+ await service.startNotifications("buttonaaction");
95
+ const notify = captureNotificationCallback();
96
+ notify(makeMultiEvent([microbit_events_js_1.V2Source.Gesture, microbit_events_js_1.GestureEvent.FaceUp], [microbit_events_js_1.V2Source.ButtonA, microbit_events_js_1.ButtonAction.Click]));
97
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("gesturechanged", {
98
+ gesture: microbit_events_js_1.GestureEvent.FaceUp,
99
+ });
100
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("buttonaaction", {
101
+ button: "A",
102
+ action: microbit_events_js_1.ButtonAction.Click,
103
+ });
104
+ });
105
+ });
106
+ (0, vitest_1.describe)("microbitevent isolation", () => {
107
+ (0, vitest_1.it)("does not dispatch microbitevent for named event traffic", async () => {
108
+ await service.startNotifications("gesturechanged");
109
+ await service.startNotifications("microbitevent");
110
+ const notify = captureNotificationCallback();
111
+ notify(makeEvent(microbit_events_js_1.V2Source.Gesture, microbit_events_js_1.GestureEvent.Shake));
112
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("gesturechanged", {
113
+ gesture: microbit_events_js_1.GestureEvent.Shake,
114
+ });
115
+ (0, vitest_1.expect)(dispatch).not.toHaveBeenCalledWith("microbitevent", vitest_1.expect.anything());
116
+ });
117
+ (0, vitest_1.it)("dispatches microbitevent only for explicit subscriptions", async () => {
118
+ await service.startNotifications("microbitevent");
119
+ await service.subscribeToEvent(999, 0);
120
+ const notify = captureNotificationCallback();
121
+ notify(makeEvent(999, 42));
122
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("microbitevent", {
123
+ source: 999,
124
+ value: 42,
125
+ });
126
+ });
127
+ (0, vitest_1.it)("wildcard subscription (value=0) matches all values from that source", async () => {
128
+ await service.startNotifications("microbitevent");
129
+ await service.subscribeToEvent(999, 0);
130
+ const notify = captureNotificationCallback();
131
+ notify(makeEvent(999, 1));
132
+ notify(makeEvent(999, 2));
133
+ notify(makeEvent(888, 1));
134
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("microbitevent", {
135
+ source: 999,
136
+ value: 1,
137
+ });
138
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("microbitevent", {
139
+ source: 999,
140
+ value: 2,
141
+ });
142
+ (0, vitest_1.expect)(dispatch).not.toHaveBeenCalledWith("microbitevent", vitest_1.expect.objectContaining({ source: 888 }));
143
+ });
144
+ (0, vitest_1.it)("exact subscription only matches that specific value", async () => {
145
+ await service.startNotifications("microbitevent");
146
+ await service.subscribeToEvent(999, 5);
147
+ const notify = captureNotificationCallback();
148
+ notify(makeEvent(999, 5));
149
+ notify(makeEvent(999, 6));
150
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("microbitevent", {
151
+ source: 999,
152
+ value: 5,
153
+ });
154
+ (0, vitest_1.expect)(dispatch).not.toHaveBeenCalledWith("microbitevent", vitest_1.expect.objectContaining({ value: 6 }));
155
+ });
156
+ (0, vitest_1.it)("named events and explicit subscriptions work independently", async () => {
157
+ await service.startNotifications("gesturechanged");
158
+ await service.startNotifications("microbitevent");
159
+ await service.subscribeToEvent(999, 0);
160
+ const notify = captureNotificationCallback();
161
+ // Gesture events go to gesturechanged only
162
+ notify(makeEvent(microbit_events_js_1.V2Source.Gesture, microbit_events_js_1.GestureEvent.Shake));
163
+ // Custom events go to microbitevent only
164
+ notify(makeEvent(999, 42));
165
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("gesturechanged", {
166
+ gesture: microbit_events_js_1.GestureEvent.Shake,
167
+ });
168
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("microbitevent", {
169
+ source: 999,
170
+ value: 42,
171
+ });
172
+ // Gesture should NOT leak into microbitevent
173
+ (0, vitest_1.expect)(dispatch).not.toHaveBeenCalledWith("microbitevent", vitest_1.expect.objectContaining({ source: microbit_events_js_1.V2Source.Gesture }));
174
+ });
175
+ (0, vitest_1.it)("overlapping named + explicit subscription dispatches both", async () => {
176
+ await service.startNotifications("gesturechanged");
177
+ await service.startNotifications("microbitevent");
178
+ // Explicitly subscribe to the same source as the named event
179
+ await service.subscribeToEvent(microbit_events_js_1.V2Source.Gesture, 0);
180
+ const notify = captureNotificationCallback();
181
+ notify(makeEvent(microbit_events_js_1.V2Source.Gesture, microbit_events_js_1.GestureEvent.Shake));
182
+ // Both fire — you asked for both
183
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("gesturechanged", {
184
+ gesture: microbit_events_js_1.GestureEvent.Shake,
185
+ });
186
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("microbitevent", {
187
+ source: microbit_events_js_1.V2Source.Gesture,
188
+ value: microbit_events_js_1.GestureEvent.Shake,
189
+ });
190
+ });
191
+ (0, vitest_1.it)("stopping named event leaves explicit subscription working", async () => {
192
+ await service.startNotifications("gesturechanged");
193
+ await service.startNotifications("microbitevent");
194
+ await service.subscribeToEvent(microbit_events_js_1.V2Source.Gesture, 0);
195
+ const notify = captureNotificationCallback();
196
+ await service.stopNotifications("gesturechanged");
197
+ dispatch.mockClear();
198
+ notify(makeEvent(microbit_events_js_1.V2Source.Gesture, microbit_events_js_1.GestureEvent.Shake));
199
+ // Named event stopped
200
+ (0, vitest_1.expect)(dispatch).not.toHaveBeenCalledWith("gesturechanged", vitest_1.expect.anything());
201
+ // Explicit subscription still works
202
+ (0, vitest_1.expect)(dispatch).toHaveBeenCalledWith("microbitevent", {
203
+ source: microbit_events_js_1.V2Source.Gesture,
204
+ value: microbit_events_js_1.GestureEvent.Shake,
205
+ });
206
+ });
207
+ });
208
+ (0, vitest_1.describe)("BLE notification lifecycle", () => {
209
+ (0, vitest_1.it)("re-registers BLE notifications on each startNotifications call to handle reconnect", async () => {
210
+ await service.startNotifications("gesturechanged");
211
+ await service.startNotifications("buttonaaction");
212
+ await service.startNotifications("microbitevent");
213
+ (0, vitest_1.expect)(bluetooth_le_1.BleClient.startNotifications).toHaveBeenCalledTimes(3);
214
+ });
215
+ (0, vitest_1.it)("stops BLE notifications only when all event types are stopped", async () => {
216
+ await service.startNotifications("gesturechanged");
217
+ await service.startNotifications("buttonaaction");
218
+ await service.stopNotifications("gesturechanged");
219
+ (0, vitest_1.expect)(bluetooth_le_1.BleClient.stopNotifications).not.toHaveBeenCalled();
220
+ await service.stopNotifications("buttonaaction");
221
+ (0, vitest_1.expect)(bluetooth_le_1.BleClient.stopNotifications).toHaveBeenCalledTimes(1);
222
+ });
223
+ (0, vitest_1.it)("ignores irrelevant event types", async () => {
224
+ await service.startNotifications("accelerometerdatachanged");
225
+ (0, vitest_1.expect)(bluetooth_le_1.BleClient.startNotifications).not.toHaveBeenCalled();
226
+ });
227
+ });
228
+ (0, vitest_1.describe)("client requirements", () => {
229
+ (0, vitest_1.it)("writes client requirements for named events", async () => {
230
+ await service.startNotifications("gesturechanged");
231
+ (0, vitest_1.expect)(bluetooth_le_1.BleClient.write).toHaveBeenCalled();
232
+ const calls = bluetooth_le_1.BleClient.write.mock.calls;
233
+ const data = calls[calls.length - 1][3];
234
+ (0, vitest_1.expect)(data.getUint16(0, true)).toBe(microbit_events_js_1.V2Source.Gesture);
235
+ (0, vitest_1.expect)(data.getUint16(2, true)).toBe(0);
236
+ });
237
+ (0, vitest_1.it)("writes client requirements for explicit subscriptions", async () => {
238
+ await service.subscribeToEvent(999, 42);
239
+ (0, vitest_1.expect)(bluetooth_le_1.BleClient.write).toHaveBeenCalled();
240
+ const calls = bluetooth_le_1.BleClient.write.mock.calls;
241
+ const data = calls[calls.length - 1][3];
242
+ (0, vitest_1.expect)(data.getUint16(0, true)).toBe(999);
243
+ (0, vitest_1.expect)(data.getUint16(2, true)).toBe(42);
244
+ });
245
+ (0, vitest_1.it)("does not duplicate explicit subscription writes", async () => {
246
+ await service.subscribeToEvent(999, 42);
247
+ await service.subscribeToEvent(999, 42);
248
+ (0, vitest_1.expect)(bluetooth_le_1.BleClient.write).toHaveBeenCalledTimes(1);
249
+ });
250
+ });
251
+ });
252
+ //# sourceMappingURL=event-service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-service.test.js","sourceRoot":"","sources":["../../../../src/bluetooth/services/event-service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Service } from "../device-wrapper.js";
2
+ import { PinValue, TypedServiceEvent, TypedServiceEventDispatcher } from "../../service-events.js";
3
+ export declare class IoPinService implements Service {
4
+ private deviceId;
5
+ private dispatchTypedEvent;
6
+ uuid: string;
7
+ constructor(deviceId: string, dispatchTypedEvent: TypedServiceEventDispatcher);
8
+ getRelevantEvents(): TypedServiceEvent[];
9
+ /**
10
+ * Gets which pins are configured as analog.
11
+ * All other pins are digital (the default).
12
+ *
13
+ * @returns array of pin numbers (0-18) configured as analog.
14
+ */
15
+ getAnalogPins(): Promise<number[]>;
16
+ /**
17
+ * Sets which pins are configured as analog.
18
+ * All other pins become digital (the default).
19
+ *
20
+ * @param pins array of pin numbers (0-18) to configure as analog.
21
+ */
22
+ setAnalogPins(pins: number[]): Promise<void>;
23
+ /**
24
+ * Gets which pins are configured as inputs.
25
+ * Input pins are monitored by the service and their values reported
26
+ * via notifications and reads of the pin data characteristic.
27
+ * All other pins are outputs (the default).
28
+ *
29
+ * @returns array of pin numbers (0-18) configured as inputs.
30
+ */
31
+ getInputPins(): Promise<number[]>;
32
+ /**
33
+ * Sets which pins are configured as inputs.
34
+ * Input pins are monitored by the service and their values reported
35
+ * via notifications and reads of the pin data characteristic.
36
+ * All other pins become outputs (the default).
37
+ *
38
+ * @param pins array of pin numbers (0-18) to configure as inputs.
39
+ */
40
+ setInputPins(pins: number[]): Promise<void>;
41
+ /**
42
+ * Reads pin data for all active input pins.
43
+ * For digital pins, value is 0 or 1.
44
+ * For analog pins, value is 0-255 (10-bit analog value >> 2).
45
+ */
46
+ readPins(): Promise<PinValue[]>;
47
+ /**
48
+ * Writes pin data for output pins.
49
+ * Only pins configured as outputs (not active inputs) will be affected.
50
+ * For digital pins, value is 0 or 1.
51
+ * For analog pins, value 0-255 is scaled to 0-1023 on the device.
52
+ */
53
+ writePins(data: PinValue[]): Promise<void>;
54
+ /**
55
+ * Sets PWM output on a pin.
56
+ *
57
+ * @param pin Pin number (0-18).
58
+ * @param value Analog value (0-1024).
59
+ * @param period Period in microseconds.
60
+ */
61
+ setPwm(pin: number, value: number, period: number): Promise<void>;
62
+ startNotifications(type: TypedServiceEvent): Promise<void>;
63
+ stopNotifications(type: TypedServiceEvent): Promise<void>;
64
+ private dataViewToPinData;
65
+ }