@microbit/microbit-connection 0.0.0-tab.change.177 → 0.9.0-apps.alpha.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 (292) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +94 -5
  3. package/build/cjs/accelerometer-service.d.ts +18 -0
  4. package/build/cjs/accelerometer-service.js +105 -0
  5. package/build/cjs/accelerometer-service.js.map +1 -0
  6. package/build/cjs/accelerometer.js +16 -0
  7. package/build/cjs/accelerometer.js.map +1 -0
  8. package/build/{async-util.d.ts → cjs/async-util.d.ts} +9 -0
  9. package/build/cjs/async-util.js +47 -0
  10. package/build/cjs/async-util.js.map +1 -0
  11. package/build/cjs/bluetooth-device-wrapper.d.ts +97 -0
  12. package/build/cjs/bluetooth-device-wrapper.js +486 -0
  13. package/build/cjs/bluetooth-device-wrapper.js.map +1 -0
  14. package/build/{bluetooth-profile.d.ts → cjs/bluetooth-profile.d.ts} +43 -35
  15. package/build/cjs/bluetooth-profile.js +92 -0
  16. package/build/cjs/bluetooth-profile.js.map +1 -0
  17. package/build/cjs/bluetooth.d.ts +112 -0
  18. package/build/cjs/bluetooth.js +458 -0
  19. package/build/cjs/bluetooth.js.map +1 -0
  20. package/build/cjs/board-id.js +81 -0
  21. package/build/cjs/board-id.js.map +1 -0
  22. package/build/cjs/board-serial-info.js +51 -0
  23. package/build/cjs/board-serial-info.js.map +1 -0
  24. package/build/cjs/button-service.d.ts +13 -0
  25. package/build/cjs/button-service.js +66 -0
  26. package/build/cjs/button-service.js.map +1 -0
  27. package/build/cjs/buttons.js +22 -0
  28. package/build/cjs/buttons.js.map +1 -0
  29. package/build/cjs/constants.js +73 -0
  30. package/build/cjs/constants.js.map +1 -0
  31. package/build/cjs/device-information-service.d.ts +6 -0
  32. package/build/cjs/device-information-service.js +34 -0
  33. package/build/cjs/device-information-service.js.map +1 -0
  34. package/build/{device.d.ts → cjs/device.d.ts} +71 -39
  35. package/build/cjs/device.js +147 -0
  36. package/build/cjs/device.js.map +1 -0
  37. package/build/cjs/dfu-service.d.ts +9 -0
  38. package/build/cjs/dfu-service.js +26 -0
  39. package/build/cjs/dfu-service.js.map +1 -0
  40. package/build/{events.d.ts → cjs/events.d.ts} +1 -2
  41. package/build/cjs/events.js +109 -0
  42. package/build/cjs/events.js.map +1 -0
  43. package/build/cjs/flashing/flashing-full.d.ts +14 -0
  44. package/build/cjs/flashing/flashing-full.js +87 -0
  45. package/build/cjs/flashing/flashing-full.js.map +1 -0
  46. package/build/cjs/flashing/flashing-makecode.d.ts +6 -0
  47. package/build/cjs/flashing/flashing-makecode.js +48 -0
  48. package/build/cjs/flashing/flashing-makecode.js.map +1 -0
  49. package/build/cjs/flashing/flashing-partial.d.ts +9 -0
  50. package/build/cjs/flashing/flashing-partial.js +98 -0
  51. package/build/cjs/flashing/flashing-partial.js.map +1 -0
  52. package/build/cjs/flashing/flashing-v1.d.ts +11 -0
  53. package/build/cjs/flashing/flashing-v1.js +24 -0
  54. package/build/cjs/flashing/flashing-v1.js.map +1 -0
  55. package/build/cjs/flashing/nordic-dfu.d.ts +3 -0
  56. package/build/cjs/flashing/nordic-dfu.js +214 -0
  57. package/build/cjs/flashing/nordic-dfu.js.map +1 -0
  58. package/build/cjs/flashing/zip.d.ts +12 -0
  59. package/build/cjs/flashing/zip.js +177 -0
  60. package/build/cjs/flashing/zip.js.map +1 -0
  61. package/build/cjs/hex-flash-data-source.js +26 -0
  62. package/build/cjs/hex-flash-data-source.js.map +1 -0
  63. package/build/cjs/index.d.ts +17 -0
  64. package/build/cjs/index.js +37 -0
  65. package/build/cjs/index.js.map +1 -0
  66. package/build/cjs/led-service.d.ts +18 -0
  67. package/build/cjs/led-service.js +89 -0
  68. package/build/cjs/led-service.js.map +1 -0
  69. package/build/cjs/led.js +3 -0
  70. package/build/cjs/led.js.map +1 -0
  71. package/build/{logging.d.ts → cjs/logging.d.ts} +4 -4
  72. package/build/cjs/logging.js +16 -0
  73. package/build/cjs/logging.js.map +1 -0
  74. package/build/cjs/magnetometer-service.d.ts +18 -0
  75. package/build/cjs/magnetometer-service.js +94 -0
  76. package/build/cjs/magnetometer-service.js.map +1 -0
  77. package/build/cjs/magnetometer.d.ts +9 -0
  78. package/build/cjs/magnetometer.js +16 -0
  79. package/build/cjs/magnetometer.js.map +1 -0
  80. package/build/cjs/package.json +1 -0
  81. package/build/cjs/partial-flashing-service.d.ts +45 -0
  82. package/build/cjs/partial-flashing-service.js +110 -0
  83. package/build/cjs/partial-flashing-service.js.map +1 -0
  84. package/build/cjs/promise-queue.js +78 -0
  85. package/build/cjs/promise-queue.js.map +1 -0
  86. package/build/cjs/serial-events.d.ts +20 -0
  87. package/build/cjs/serial-events.js +69 -0
  88. package/build/cjs/serial-events.js.map +1 -0
  89. package/build/{service-events.d.ts → cjs/service-events.d.ts} +4 -0
  90. package/build/cjs/service-events.js +39 -0
  91. package/build/cjs/service-events.js.map +1 -0
  92. package/build/cjs/setupTests.js.map +1 -0
  93. package/build/cjs/uart-service.d.ts +12 -0
  94. package/build/cjs/uart-service.js +55 -0
  95. package/build/cjs/uart-service.js.map +1 -0
  96. package/build/cjs/uart.d.ts +4 -0
  97. package/build/cjs/uart.js +16 -0
  98. package/build/cjs/uart.js.map +1 -0
  99. package/build/{usb-device-wrapper.d.ts → cjs/usb-device-wrapper.d.ts} +1 -6
  100. package/build/cjs/usb-device-wrapper.js +437 -0
  101. package/build/cjs/usb-device-wrapper.js.map +1 -0
  102. package/build/cjs/usb-partial-flashing-utils.js +133 -0
  103. package/build/cjs/usb-partial-flashing-utils.js.map +1 -0
  104. package/build/{usb-partial-flashing.d.ts → cjs/usb-partial-flashing.d.ts} +3 -5
  105. package/build/cjs/usb-partial-flashing.js +342 -0
  106. package/build/cjs/usb-partial-flashing.js.map +1 -0
  107. package/build/cjs/usb-radio-bridge.d.ts +24 -0
  108. package/build/cjs/usb-radio-bridge.js +515 -0
  109. package/build/cjs/usb-radio-bridge.js.map +1 -0
  110. package/build/cjs/usb-serial-protocol.js +183 -0
  111. package/build/cjs/usb-serial-protocol.js.map +1 -0
  112. package/build/cjs/usb.d.ts +66 -0
  113. package/build/cjs/usb.js +662 -0
  114. package/build/cjs/usb.js.map +1 -0
  115. package/build/esm/accelerometer-service.d.ts +18 -0
  116. package/build/esm/accelerometer-service.js +101 -0
  117. package/build/esm/accelerometer-service.js.map +1 -0
  118. package/build/esm/accelerometer.d.ts +9 -0
  119. package/build/esm/accelerometer.js.map +1 -0
  120. package/build/esm/async-util.d.ts +22 -0
  121. package/build/esm/async-util.js +38 -0
  122. package/build/esm/async-util.js.map +1 -0
  123. package/build/esm/bluetooth-device-wrapper.d.ts +97 -0
  124. package/build/esm/bluetooth-device-wrapper.js +481 -0
  125. package/build/esm/bluetooth-device-wrapper.js.map +1 -0
  126. package/build/esm/bluetooth-profile.d.ts +147 -0
  127. package/build/{bluetooth-profile.js → esm/bluetooth-profile.js} +35 -29
  128. package/build/esm/bluetooth-profile.js.map +1 -0
  129. package/build/esm/bluetooth.d.ts +112 -0
  130. package/build/esm/bluetooth.js +428 -0
  131. package/build/esm/bluetooth.js.map +1 -0
  132. package/build/esm/board-id.d.ts +36 -0
  133. package/build/esm/board-id.js.map +1 -0
  134. package/build/esm/board-serial-info.d.ts +14 -0
  135. package/build/esm/board-serial-info.js.map +1 -0
  136. package/build/esm/button-service.d.ts +13 -0
  137. package/build/esm/button-service.js +62 -0
  138. package/build/esm/button-service.js.map +1 -0
  139. package/build/esm/buttons.d.ts +10 -0
  140. package/build/esm/buttons.js.map +1 -0
  141. package/build/esm/constants.d.ts +48 -0
  142. package/build/esm/constants.js.map +1 -0
  143. package/build/esm/device-information-service.d.ts +6 -0
  144. package/build/esm/device-information-service.js +30 -0
  145. package/build/esm/device-information-service.js.map +1 -0
  146. package/build/esm/device.d.ts +238 -0
  147. package/build/{device.js → esm/device.js} +16 -58
  148. package/build/esm/device.js.map +1 -0
  149. package/build/esm/dfu-service.d.ts +9 -0
  150. package/build/esm/dfu-service.js +22 -0
  151. package/build/esm/dfu-service.js.map +1 -0
  152. package/build/esm/events.d.ts +110 -0
  153. package/build/esm/events.js.map +1 -0
  154. package/build/esm/flashing/flashing-full.d.ts +14 -0
  155. package/build/esm/flashing/flashing-full.js +84 -0
  156. package/build/esm/flashing/flashing-full.js.map +1 -0
  157. package/build/esm/flashing/flashing-makecode.d.ts +6 -0
  158. package/build/esm/flashing/flashing-makecode.js +44 -0
  159. package/build/esm/flashing/flashing-makecode.js.map +1 -0
  160. package/build/esm/flashing/flashing-partial.d.ts +9 -0
  161. package/build/esm/flashing/flashing-partial.js +95 -0
  162. package/build/esm/flashing/flashing-partial.js.map +1 -0
  163. package/build/esm/flashing/flashing-v1.d.ts +11 -0
  164. package/build/esm/flashing/flashing-v1.js +20 -0
  165. package/build/esm/flashing/flashing-v1.js.map +1 -0
  166. package/build/esm/flashing/nordic-dfu.d.ts +3 -0
  167. package/build/esm/flashing/nordic-dfu.js +211 -0
  168. package/build/esm/flashing/nordic-dfu.js.map +1 -0
  169. package/build/esm/flashing/zip.d.ts +12 -0
  170. package/build/esm/flashing/zip.js +174 -0
  171. package/build/esm/flashing/zip.js.map +1 -0
  172. package/build/esm/hex-flash-data-source.d.ts +7 -0
  173. package/build/esm/hex-flash-data-source.js.map +1 -0
  174. package/build/esm/index.d.ts +17 -0
  175. package/build/esm/index.js +12 -0
  176. package/build/esm/index.js.map +1 -0
  177. package/build/esm/led-service.d.ts +18 -0
  178. package/build/esm/led-service.js +85 -0
  179. package/build/esm/led-service.js.map +1 -0
  180. package/build/esm/led.d.ts +6 -0
  181. package/build/esm/led.js.map +1 -0
  182. package/build/esm/logging.d.ts +21 -0
  183. package/build/{logging.js → esm/logging.js} +1 -1
  184. package/build/esm/logging.js.map +1 -0
  185. package/build/esm/magnetometer-service.d.ts +18 -0
  186. package/build/esm/magnetometer-service.js +90 -0
  187. package/build/esm/magnetometer-service.js.map +1 -0
  188. package/build/esm/magnetometer.d.ts +9 -0
  189. package/build/esm/magnetometer.js +12 -0
  190. package/build/esm/magnetometer.js.map +1 -0
  191. package/build/esm/package.json +1 -0
  192. package/build/esm/partial-flashing-service.d.ts +45 -0
  193. package/build/esm/partial-flashing-service.js +106 -0
  194. package/build/esm/partial-flashing-service.js.map +1 -0
  195. package/build/esm/promise-queue.d.ts +27 -0
  196. package/build/esm/promise-queue.js.map +1 -0
  197. package/build/esm/serial-events.d.ts +20 -0
  198. package/build/esm/serial-events.js +61 -0
  199. package/build/esm/serial-events.js.map +1 -0
  200. package/build/esm/service-events.d.ts +17 -0
  201. package/build/{service-events.js → esm/service-events.js} +12 -0
  202. package/build/esm/service-events.js.map +1 -0
  203. package/build/esm/setupTests.d.ts +6 -0
  204. package/build/{setupTests.js.map → esm/setupTests.js.map} +1 -1
  205. package/build/esm/uart-service.d.ts +12 -0
  206. package/build/esm/uart-service.js +51 -0
  207. package/build/esm/uart-service.js.map +1 -0
  208. package/build/esm/uart.d.ts +4 -0
  209. package/build/esm/uart.js +12 -0
  210. package/build/esm/uart.js.map +1 -0
  211. package/build/esm/usb-device-wrapper.d.ts +47 -0
  212. package/build/{usb-device-wrapper.js → esm/usb-device-wrapper.js} +43 -17
  213. package/build/esm/usb-device-wrapper.js.map +1 -0
  214. package/build/esm/usb-partial-flashing-utils.d.ts +17 -0
  215. package/build/esm/usb-partial-flashing-utils.js.map +1 -0
  216. package/build/esm/usb-partial-flashing.d.ts +67 -0
  217. package/build/{usb-partial-flashing.js → esm/usb-partial-flashing.js} +12 -13
  218. package/build/esm/usb-partial-flashing.js.map +1 -0
  219. package/build/esm/usb-radio-bridge.d.ts +24 -0
  220. package/build/{usb-radio-bridge.js → esm/usb-radio-bridge.js} +13 -7
  221. package/build/esm/usb-radio-bridge.js.map +1 -0
  222. package/build/esm/usb-serial-protocol.d.ts +66 -0
  223. package/build/esm/usb-serial-protocol.js.map +1 -0
  224. package/build/esm/usb.d.ts +66 -0
  225. package/build/{usb.js → esm/usb.js} +257 -49
  226. package/build/esm/usb.js.map +1 -0
  227. package/package.json +25 -8
  228. package/typedoc.json +14 -0
  229. package/build/accelerometer-service.d.ts +0 -18
  230. package/build/accelerometer-service.js +0 -102
  231. package/build/accelerometer-service.js.map +0 -1
  232. package/build/accelerometer.js.map +0 -1
  233. package/build/async-util.js +0 -22
  234. package/build/async-util.js.map +0 -1
  235. package/build/bluetooth-device-wrapper.d.ts +0 -57
  236. package/build/bluetooth-device-wrapper.js +0 -433
  237. package/build/bluetooth-device-wrapper.js.map +0 -1
  238. package/build/bluetooth-profile.js.map +0 -1
  239. package/build/bluetooth.d.ts +0 -54
  240. package/build/bluetooth.js +0 -243
  241. package/build/bluetooth.js.map +0 -1
  242. package/build/board-id.js.map +0 -1
  243. package/build/board-serial-info.js.map +0 -1
  244. package/build/button-service.d.ts +0 -13
  245. package/build/button-service.js +0 -76
  246. package/build/button-service.js.map +0 -1
  247. package/build/buttons.js.map +0 -1
  248. package/build/constants.js.map +0 -1
  249. package/build/device.js.map +0 -1
  250. package/build/events.js.map +0 -1
  251. package/build/hex-flash-data-source.js.map +0 -1
  252. package/build/index.d.ts +0 -10
  253. package/build/index.js +0 -8
  254. package/build/index.js.map +0 -1
  255. package/build/led-service.d.ts +0 -20
  256. package/build/led-service.js +0 -116
  257. package/build/led-service.js.map +0 -1
  258. package/build/led.js.map +0 -1
  259. package/build/logging.js.map +0 -1
  260. package/build/promise-queue.js.map +0 -1
  261. package/build/service-events.js.map +0 -1
  262. package/build/usb-device-wrapper.js.map +0 -1
  263. package/build/usb-partial-flashing-utils.js.map +0 -1
  264. package/build/usb-partial-flashing.js.map +0 -1
  265. package/build/usb-radio-bridge.d.ts +0 -41
  266. package/build/usb-radio-bridge.js.map +0 -1
  267. package/build/usb-serial-protocol.js.map +0 -1
  268. package/build/usb.d.ts +0 -54
  269. package/build/usb.js.map +0 -1
  270. package/vite.config.ts +0 -34
  271. /package/build/{accelerometer.d.ts → cjs/accelerometer.d.ts} +0 -0
  272. /package/build/{board-id.d.ts → cjs/board-id.d.ts} +0 -0
  273. /package/build/{board-serial-info.d.ts → cjs/board-serial-info.d.ts} +0 -0
  274. /package/build/{buttons.d.ts → cjs/buttons.d.ts} +0 -0
  275. /package/build/{constants.d.ts → cjs/constants.d.ts} +0 -0
  276. /package/build/{hex-flash-data-source.d.ts → cjs/hex-flash-data-source.d.ts} +0 -0
  277. /package/build/{led.d.ts → cjs/led.d.ts} +0 -0
  278. /package/build/{promise-queue.d.ts → cjs/promise-queue.d.ts} +0 -0
  279. /package/build/{setupTests.d.ts → cjs/setupTests.d.ts} +0 -0
  280. /package/build/{usb-partial-flashing-utils.d.ts → cjs/usb-partial-flashing-utils.d.ts} +0 -0
  281. /package/build/{usb-serial-protocol.d.ts → cjs/usb-serial-protocol.d.ts} +0 -0
  282. /package/build/{accelerometer.js → esm/accelerometer.js} +0 -0
  283. /package/build/{board-id.js → esm/board-id.js} +0 -0
  284. /package/build/{board-serial-info.js → esm/board-serial-info.js} +0 -0
  285. /package/build/{buttons.js → esm/buttons.js} +0 -0
  286. /package/build/{constants.js → esm/constants.js} +0 -0
  287. /package/build/{events.js → esm/events.js} +0 -0
  288. /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
  289. /package/build/{led.js → esm/led.js} +0 -0
  290. /package/build/{promise-queue.js → esm/promise-queue.js} +0 -0
  291. /package/build/{usb-partial-flashing-utils.js → esm/usb-partial-flashing-utils.js} +0 -0
  292. /package/build/{usb-serial-protocol.js → esm/usb-serial-protocol.js} +0 -0
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeviceConnectionEventMap = exports.BackgroundErrorEvent = exports.AfterRequestDevice = exports.BeforeRequestDevice = exports.ConnectionStatusEvent = exports.FlashDataError = exports.ConnectionStatus = exports.DeviceError = exports.ProgressStage = void 0;
4
+ var ProgressStage;
5
+ (function (ProgressStage) {
6
+ ProgressStage["Initializing"] = "Initializing";
7
+ ProgressStage["FindingDevice"] = "FindingDevice";
8
+ ProgressStage["Connecting"] = "Connecting";
9
+ ProgressStage["PartialFlashing"] = "PartialFlashing";
10
+ ProgressStage["FullFlashing"] = "FullFlashing";
11
+ })(ProgressStage || (exports.ProgressStage = ProgressStage = {}));
12
+ /**
13
+ * Error type used for all interactions with this module.
14
+ *
15
+ * The code indicates the error type and may be suitable for providing
16
+ * translated error messages.
17
+ *
18
+ * The message is the underlying message text and will usually be in
19
+ * English.
20
+ */
21
+ class DeviceError extends Error {
22
+ constructor({ code, message }) {
23
+ super(message);
24
+ Object.defineProperty(this, "code", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: void 0
29
+ });
30
+ this.code = code;
31
+ }
32
+ }
33
+ exports.DeviceError = DeviceError;
34
+ /**
35
+ * Tracks connection status,
36
+ */
37
+ var ConnectionStatus;
38
+ (function (ConnectionStatus) {
39
+ /**
40
+ * Determining whether the connection type is supported requires
41
+ * initialize() to complete.
42
+ */
43
+ ConnectionStatus["SUPPORT_NOT_KNOWN"] = "SUPPORT_NOT_KNOWN";
44
+ /**
45
+ * Not supported.
46
+ */
47
+ ConnectionStatus["NOT_SUPPORTED"] = "NOT_SUPPORTED";
48
+ /**
49
+ * Supported but no device available.
50
+ *
51
+ * This will be the case even when a device is physically connected
52
+ * but has not been connected via the browser security UI.
53
+ */
54
+ ConnectionStatus["NO_AUTHORIZED_DEVICE"] = "NO_AUTHORIZED_DEVICE";
55
+ /**
56
+ * Authorized device available but we haven't connected to it.
57
+ */
58
+ ConnectionStatus["DISCONNECTED"] = "DISCONNECTED";
59
+ /**
60
+ * Connected.
61
+ */
62
+ ConnectionStatus["CONNECTED"] = "CONNECTED";
63
+ /**
64
+ * Connecting.
65
+ */
66
+ ConnectionStatus["CONNECTING"] = "CONNECTING";
67
+ /**
68
+ * Reconnecting. When there is unexpected disruption in the connection,
69
+ * a reconnection is attempted.
70
+ */
71
+ ConnectionStatus["RECONNECTING"] = "RECONNECTING";
72
+ })(ConnectionStatus || (exports.ConnectionStatus = ConnectionStatus = {}));
73
+ class FlashDataError extends Error {
74
+ }
75
+ exports.FlashDataError = FlashDataError;
76
+ class ConnectionStatusEvent extends Event {
77
+ constructor(status) {
78
+ super("status");
79
+ Object.defineProperty(this, "status", {
80
+ enumerable: true,
81
+ configurable: true,
82
+ writable: true,
83
+ value: status
84
+ });
85
+ }
86
+ }
87
+ exports.ConnectionStatusEvent = ConnectionStatusEvent;
88
+ class BeforeRequestDevice extends Event {
89
+ constructor() {
90
+ super("beforerequestdevice");
91
+ }
92
+ }
93
+ exports.BeforeRequestDevice = BeforeRequestDevice;
94
+ class AfterRequestDevice extends Event {
95
+ constructor() {
96
+ super("afterrequestdevice");
97
+ }
98
+ }
99
+ exports.AfterRequestDevice = AfterRequestDevice;
100
+ class BackgroundErrorEvent extends Event {
101
+ constructor(errorMessage, error) {
102
+ super("backgrounderror");
103
+ Object.defineProperty(this, "errorMessage", {
104
+ enumerable: true,
105
+ configurable: true,
106
+ writable: true,
107
+ value: errorMessage
108
+ });
109
+ Object.defineProperty(this, "error", {
110
+ enumerable: true,
111
+ configurable: true,
112
+ writable: true,
113
+ value: error
114
+ });
115
+ }
116
+ }
117
+ exports.BackgroundErrorEvent = BackgroundErrorEvent;
118
+ class DeviceConnectionEventMap {
119
+ constructor() {
120
+ Object.defineProperty(this, "status", {
121
+ enumerable: true,
122
+ configurable: true,
123
+ writable: true,
124
+ value: void 0
125
+ });
126
+ Object.defineProperty(this, "backgrounderror", {
127
+ enumerable: true,
128
+ configurable: true,
129
+ writable: true,
130
+ value: void 0
131
+ });
132
+ Object.defineProperty(this, "beforerequestdevice", {
133
+ enumerable: true,
134
+ configurable: true,
135
+ writable: true,
136
+ value: void 0
137
+ });
138
+ Object.defineProperty(this, "afterrequestdevice", {
139
+ enumerable: true,
140
+ configurable: true,
141
+ writable: true,
142
+ value: void 0
143
+ });
144
+ }
145
+ }
146
+ exports.DeviceConnectionEventMap = DeviceConnectionEventMap;
147
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../lib/device.ts"],"names":[],"mappings":";;;AAsEA,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,8CAA6B,CAAA;IAC7B,gDAA+B,CAAA;IAC/B,0CAAyB,CAAA;IACzB,oDAAmC,CAAA;IACnC,8CAA6B,CAAA;AAC/B,CAAC,EANW,aAAa,6BAAb,aAAa,QAMxB;AAwBD;;;;;;;;GAQG;AACH,MAAa,WAAY,SAAQ,KAAK;IAEpC,YAAY,EAAE,IAAI,EAAE,OAAO,EAA+C;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;QAFjB;;;;;WAAsB;QAGpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAND,kCAMC;AAED;;GAEG;AACH,IAAY,gBAkCX;AAlCD,WAAY,gBAAgB;IAC1B;;;OAGG;IACH,2DAAuC,CAAA;IACvC;;OAEG;IACH,mDAA+B,CAAA;IAC/B;;;;;OAKG;IACH,iEAA6C,CAAA;IAC7C;;OAEG;IACH,iDAA6B,CAAA;IAC7B;;OAEG;IACH,2CAAuB,CAAA;IACvB;;OAEG;IACH,6CAAyB,CAAA;IACzB;;;OAGG;IACH,iDAA6B,CAAA;AAC/B,CAAC,EAlCW,gBAAgB,gCAAhB,gBAAgB,QAkC3B;AA6BD,MAAa,cAAe,SAAQ,KAAK;CAAG;AAA5C,wCAA4C;AAQ5C,MAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAA4B,MAAwB;QAClD,KAAK,CAAC,QAAQ,CAAC,CAAC;QADN;;;;mBAAgB,MAAM;WAAkB;IAEpD,CAAC;CACF;AAJD,sDAIC;AAED,MAAa,mBAAoB,SAAQ,KAAK;IAC5C;QACE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/B,CAAC;CACF;AAJD,kDAIC;AAED,MAAa,kBAAmB,SAAQ,KAAK;IAC3C;QACE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC9B,CAAC;CACF;AAJD,gDAIC;AAED,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YACkB,YAAoB,EACpB,KAAe;QAE/B,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAHzB;;;;mBAAgB,YAAY;WAAQ;QACpC;;;;mBAAgB,KAAK;WAAU;IAGjC,CAAC;CACF;AAPD,oDAOC;AAED,MAAa,wBAAwB;IAArC;QACE,4BAAA,QAAQ;;;;;WAAwB;QAChC,4BAAA,iBAAiB;;;;;WAAuB;QACxC,4BAAA,qBAAqB;;;;;WAAQ;QAC7B,4BAAA,oBAAoB;;;;;WAAQ;IAC9B,CAAC;CAAA;AALD,4DAKC"}
@@ -0,0 +1,9 @@
1
+ export declare const NORDIC_DFU_SERVICE = "00001530-1212-EFDE-1523-785FEABCD123";
2
+ export declare class DfuService {
3
+ private deviceId;
4
+ constructor(deviceId: string);
5
+ /**
6
+ * We do this for V1 only.
7
+ */
8
+ requestRebootToBootloader(): Promise<void>;
9
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DfuService = exports.NORDIC_DFU_SERVICE = void 0;
4
+ const bluetooth_le_1 = require("@capacitor-community/bluetooth-le");
5
+ const bluetooth_profile_1 = require("./bluetooth-profile");
6
+ // This is the service that should be available on V1 after the reboot.
7
+ // We don't use it directly (the Nordic DFU library does) but we check it's there.
8
+ exports.NORDIC_DFU_SERVICE = "00001530-1212-EFDE-1523-785FEABCD123";
9
+ class DfuService {
10
+ constructor(deviceId) {
11
+ Object.defineProperty(this, "deviceId", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: deviceId
16
+ });
17
+ }
18
+ /**
19
+ * We do this for V1 only.
20
+ */
21
+ async requestRebootToBootloader() {
22
+ await bluetooth_le_1.BleClient.write(this.deviceId, bluetooth_profile_1.profile.dfuControl.id, bluetooth_profile_1.profile.dfuControl.characteristics.control.id, (0, bluetooth_le_1.numbersToDataView)([0x01]));
23
+ }
24
+ }
25
+ exports.DfuService = DfuService;
26
+ //# sourceMappingURL=dfu-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dfu-service.js","sourceRoot":"","sources":["../../lib/dfu-service.ts"],"names":[],"mappings":";;;AAAA,oEAG2C;AAC3C,2DAA8C;AAE9C,uEAAuE;AACvE,kFAAkF;AACrE,QAAA,kBAAkB,GAAG,sCAAsC,CAAC;AAEzE,MAAa,UAAU;IACrB,YAAoB,QAAgB;QAAxB;;;;mBAAQ,QAAQ;WAAQ;IAAG,CAAC;IAExC;;OAEG;IACH,KAAK,CAAC,yBAAyB;QAC7B,MAAM,wBAAS,CAAC,KAAK,CACnB,IAAI,CAAC,QAAQ,EACb,2BAAO,CAAC,UAAU,CAAC,EAAE,EACrB,2BAAO,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAC7C,IAAA,gCAAiB,EAAC,CAAC,IAAI,CAAC,CAAC,CAC1B,CAAC;IACJ,CAAC;CACF;AAdD,gCAcC"}
@@ -32,7 +32,7 @@ export interface TypedEventListenerObject<M, T extends keyof M> {
32
32
  * @template T The type of event to listen for (has to be keyof `M`).
33
33
  */
34
34
  export type TypedEventListenerOrEventListenerObject<M, T extends keyof M> = TypedEventListener<M, T> | TypedEventListenerObject<M, T>;
35
- type ValueIsEvent<T> = {
35
+ export type ValueIsEvent<T> = {
36
36
  [key in keyof T]: Event;
37
37
  };
38
38
  /**
@@ -108,4 +108,3 @@ export declare class TypedEventTarget<M extends ValueIsEvent<M>> extends Trackin
108
108
  */
109
109
  dispatchTypedEvent<T extends keyof M>(_type: T, event: M[T]): boolean;
110
110
  }
111
- export {};
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) 2022 Jonas "DerZade" Schade
4
+ *
5
+ * SPDX-License-Identifier: MIT
6
+ *
7
+ * https://github.com/DerZade/typescript-event-target/blob/master/src/TypedEventTarget.ts
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.TypedEventTarget = exports.TrackingEventTarget = void 0;
11
+ // We've added this in to keep track of what events are active.
12
+ // Having done this it's questionable whether it's worth the reimplementation
13
+ // just to use an EventTarget API.
14
+ class TrackingEventTarget extends EventTarget {
15
+ constructor() {
16
+ super(...arguments);
17
+ Object.defineProperty(this, "activeEventTracking", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: new Map()
22
+ });
23
+ }
24
+ addEventListener(type, callback, options) {
25
+ if (callback !== null) {
26
+ const registrations = this.activeEventTracking.get(type) ?? [];
27
+ const wasEmpty = registrations.length === 0;
28
+ const registration = new Registration(callback, options ?? false);
29
+ if (!registrations.find((r) => r.eq(registration))) {
30
+ registrations.push(registration);
31
+ this.activeEventTracking.set(type, registrations);
32
+ if (wasEmpty) {
33
+ this.eventActivated(type);
34
+ }
35
+ }
36
+ }
37
+ super.addEventListener(type, callback, options);
38
+ }
39
+ removeEventListener(type, callback, options) {
40
+ if (callback !== null) {
41
+ const registration = new Registration(callback, options ?? false);
42
+ this.filterRegistrations(type, (r) => !r.eq(registration));
43
+ }
44
+ super.removeEventListener(type, callback, options);
45
+ }
46
+ dispatchEvent(event) {
47
+ const result = super.dispatchEvent(event);
48
+ this.filterRegistrations(event.type, (r) => !r.isOnce());
49
+ return result;
50
+ }
51
+ filterRegistrations(type, predicate) {
52
+ let registrations = this.activeEventTracking.get(type) ?? [];
53
+ registrations = registrations.filter(predicate);
54
+ if (registrations.length === 0) {
55
+ this.activeEventTracking.delete(type);
56
+ this.eventDeactivated(type);
57
+ }
58
+ else {
59
+ this.activeEventTracking.set(type, registrations);
60
+ }
61
+ }
62
+ eventActivated(type) { }
63
+ eventDeactivated(type) { }
64
+ getActiveEvents() {
65
+ return [...this.activeEventTracking.keys()];
66
+ }
67
+ }
68
+ exports.TrackingEventTarget = TrackingEventTarget;
69
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
70
+ class TypedEventTarget extends TrackingEventTarget {
71
+ /**
72
+ * Dispatches a synthetic event event to target and returns true if either
73
+ * event's cancelable attribute value is false or its preventDefault() method
74
+ * was not invoked, and false otherwise.
75
+ */
76
+ dispatchTypedEvent(_type, event) {
77
+ return super.dispatchEvent(event);
78
+ }
79
+ }
80
+ exports.TypedEventTarget = TypedEventTarget;
81
+ class Registration {
82
+ constructor(callback, options) {
83
+ Object.defineProperty(this, "callback", {
84
+ enumerable: true,
85
+ configurable: true,
86
+ writable: true,
87
+ value: callback
88
+ });
89
+ Object.defineProperty(this, "options", {
90
+ enumerable: true,
91
+ configurable: true,
92
+ writable: true,
93
+ value: options
94
+ });
95
+ }
96
+ isOnce() {
97
+ return typeof this.options === "object" && this.options.once === true;
98
+ }
99
+ eq(other) {
100
+ return (other.callback === this.callback &&
101
+ eqUseCapture(this.options, other.options));
102
+ }
103
+ }
104
+ const eqUseCapture = (left, right) => {
105
+ const leftValue = typeof left === "boolean" ? left : left.capture ?? false;
106
+ const rightValue = typeof right === "boolean" ? right : right.capture ?? false;
107
+ return leftValue === rightValue;
108
+ };
109
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../lib/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import MemoryMap from "nrf-intel-hex";
2
+ import { BoardVersion, ProgressCallback } from "../device";
3
+ import { BluetoothDeviceWrapper } from "../bluetooth-device-wrapper";
4
+ /**
5
+ * Perform a full flash via Nordic's DFU service.
6
+ *
7
+ * The connection is closed before handing off to Nordic's service which will
8
+ * connect again.
9
+ *
10
+ * The device is assumed to be bonded.
11
+ *
12
+ * @throws {DeviceError} On flash failure.
13
+ */
14
+ export declare function fullFlash(connection: BluetoothDeviceWrapper, boardVersion: BoardVersion, memoryMap: MemoryMap, progress: ProgressCallback): Promise<void>;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fullFlash = fullFlash;
4
+ const device_1 = require("../device");
5
+ const dfu_service_1 = require("../dfu-service");
6
+ const flashing_v1_1 = require("./flashing-v1");
7
+ const nordic_dfu_1 = require("./nordic-dfu");
8
+ const async_util_1 = require("../async-util");
9
+ /**
10
+ * Perform a full flash via Nordic's DFU service.
11
+ *
12
+ * The connection is closed before handing off to Nordic's service which will
13
+ * connect again.
14
+ *
15
+ * The device is assumed to be bonded.
16
+ *
17
+ * @throws {DeviceError} On flash failure.
18
+ */
19
+ async function fullFlash(connection, boardVersion, memoryMap, progress) {
20
+ connection.log("Full flash");
21
+ progress(device_1.ProgressStage.FullFlashing);
22
+ const { deviceId } = connection.device;
23
+ try {
24
+ if (boardVersion === "V1") {
25
+ connection.log("Rebooting V1 to bootloader");
26
+ const dfuService = new dfu_service_1.DfuService(deviceId);
27
+ try {
28
+ await dfuService.requestRebootToBootloader();
29
+ }
30
+ catch (e) {
31
+ connection.error("Failed to request reboot to bootloader", e);
32
+ throw new device_1.DeviceError({
33
+ code: "flash-full-failed",
34
+ message: e instanceof Error ? e.message : "Failed to reboot to bootloader",
35
+ });
36
+ }
37
+ // Wait for device to automatically disconnect as it reboots into bootloader
38
+ connection.log("Waiting for device to reboot and disconnect");
39
+ try {
40
+ await connection.waitForDisconnect(3000);
41
+ }
42
+ catch {
43
+ connection.log("Device did not disconnect automatically, disconnecting manually");
44
+ await connection.disconnect();
45
+ }
46
+ // Give device time to disconnect and reboot into bootloader mode
47
+ await (0, async_util_1.delay)(2500);
48
+ // Reconnect to device now in bootloader mode
49
+ progress(device_1.ProgressStage.Connecting);
50
+ await connection.connect();
51
+ await (0, flashing_v1_1.refreshServicesForV1IfDesiredServiceMissing)(deviceId, dfu_service_1.NORDIC_DFU_SERVICE);
52
+ }
53
+ }
54
+ finally {
55
+ // The Nordic code opens its own connection.
56
+ await connection.disconnect();
57
+ // If we've previously been connected, maybe this helps???
58
+ await (0, async_util_1.delay)(3000);
59
+ }
60
+ const appBin = createAppBin(memoryMap, boardVersion);
61
+ if (appBin === null) {
62
+ connection.log("Invalid hex (app bin case)");
63
+ throw new device_1.FlashDataError("Invalid hex data: could not extract app binary");
64
+ }
65
+ connection.log(`Extracted app bin: ${appBin.length} bytes`);
66
+ await (0, nordic_dfu_1.flashDfu)(connection, boardVersion, appBin, progress);
67
+ }
68
+ const createAppBin = (memoryMap, boardVersion) => {
69
+ const appRegionBoundaries = {
70
+ V1: { start: 0x18000, end: 0x3c000 },
71
+ V2: { start: 0x1c000, end: 0x77000 },
72
+ }[boardVersion];
73
+ // Calculate data size within the app region
74
+ let maxAddress = appRegionBoundaries.start;
75
+ for (const [blockAddr, block] of memoryMap) {
76
+ const blockEnd = blockAddr + block.length;
77
+ if (blockEnd > appRegionBoundaries.start &&
78
+ blockAddr < appRegionBoundaries.end) {
79
+ maxAddress = Math.max(maxAddress, Math.min(blockEnd, appRegionBoundaries.end));
80
+ }
81
+ }
82
+ let size = maxAddress - appRegionBoundaries.start;
83
+ // 4-byte alignment required by DFU
84
+ size = Math.ceil(size / 4) * 4;
85
+ return memoryMap.slicePad(appRegionBoundaries.start, size);
86
+ };
87
+ //# sourceMappingURL=flashing-full.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashing-full.js","sourceRoot":"","sources":["../../../lib/flashing/flashing-full.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import MemoryMap from "nrf-intel-hex";
2
+ import { RegionInfo } from "../partial-flashing-service";
3
+ /**
4
+ * Find the MakeCode code region in a MemoryMap (typically from a hex file).
5
+ */
6
+ export declare const findMakeCodeRegionInMemoryMap: (memoryMap: MemoryMap, deviceCodeRegion: RegionInfo) => RegionInfo | null;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findMakeCodeRegionInMemoryMap = void 0;
4
+ const PXT_MAGIC_HEX = "708E3B92C615A841C49866C975EE5197";
5
+ /**
6
+ * Find the MakeCode code region in a MemoryMap (typically from a hex file).
7
+ */
8
+ const findMakeCodeRegionInMemoryMap = (memoryMap, deviceCodeRegion) => {
9
+ for (const [blockAddr, block] of memoryMap) {
10
+ const offset = findByteSequence(block, PXT_MAGIC_HEX);
11
+ if (offset >= 0) {
12
+ const start = blockAddr + offset;
13
+ const hashOffset = start + PXT_MAGIC_HEX.length / 2;
14
+ const hashBytes = memoryMap.slicePad(hashOffset, 8);
15
+ const hash = bytesToHex(hashBytes);
16
+ // Find the highest address with data in the memory map within the code region
17
+ let end = start;
18
+ for (const [blockAddr, block] of memoryMap) {
19
+ const blockEnd = blockAddr + block.length;
20
+ if (blockEnd > start && blockAddr < deviceCodeRegion.end) {
21
+ end = Math.max(end, Math.min(blockEnd, deviceCodeRegion.end));
22
+ }
23
+ }
24
+ // Round up to next 64-byte boundary
25
+ end = Math.ceil(end / 64) * 64;
26
+ return { start, end, hash };
27
+ }
28
+ }
29
+ return null;
30
+ };
31
+ exports.findMakeCodeRegionInMemoryMap = findMakeCodeRegionInMemoryMap;
32
+ const bytesToHex = (bytes) => {
33
+ return Array.from(bytes)
34
+ .map((byte) => byte.toString(16).padStart(2, "0").toUpperCase())
35
+ .join("");
36
+ };
37
+ function findByteSequence(data, hexTarget) {
38
+ const target = new Uint8Array(hexTarget.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
39
+ outer: for (let i = 0; i <= data.length - target.length; i++) {
40
+ for (let j = 0; j < target.length; j++) {
41
+ if (data[i + j] !== target[j])
42
+ continue outer;
43
+ }
44
+ return i;
45
+ }
46
+ return -1;
47
+ }
48
+ //# sourceMappingURL=flashing-makecode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashing-makecode.js","sourceRoot":"","sources":["../../../lib/flashing/flashing-makecode.ts"],"names":[],"mappings":";;;AAGA,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAEzD;;GAEG;AACI,MAAM,6BAA6B,GAAG,CAC3C,SAAoB,EACpB,gBAA4B,EACT,EAAE;IACrB,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACtD,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;YACjC,MAAM,UAAU,GAAG,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YAEnC,8EAA8E;YAC9E,IAAI,GAAG,GAAG,KAAK,CAAC;YAChB,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC1C,IAAI,QAAQ,GAAG,KAAK,IAAI,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC;oBACzD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YACD,oCAAoC;YACpC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAE/B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AA3BW,QAAA,6BAA6B,iCA2BxC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAU,EAAE;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;SAC/D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAAgB,EAAE,SAAiB;IAC3D,MAAM,MAAM,GAAG,IAAI,UAAU,CAC3B,SAAS,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAC9D,CAAC;IAEF,KAAK,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;gBAAE,SAAS,KAAK,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import MemoryMap from "nrf-intel-hex";
2
+ import { BluetoothDeviceWrapper } from "../bluetooth-device-wrapper";
3
+ import { ProgressCallback } from "../device";
4
+ export declare enum PartialFlashResult {
5
+ Success = "Success",
6
+ AttemptFullFlash = "AttemptFullFlash"
7
+ }
8
+ declare const partialFlash: (connection: BluetoothDeviceWrapper, memoryMap: MemoryMap, progress: ProgressCallback) => Promise<PartialFlashResult>;
9
+ export default partialFlash;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PartialFlashResult = void 0;
4
+ const partial_flashing_service_1 = require("../partial-flashing-service");
5
+ const flashing_makecode_1 = require("./flashing-makecode");
6
+ const async_util_1 = require("../async-util");
7
+ const device_1 = require("../device");
8
+ var PartialFlashResult;
9
+ (function (PartialFlashResult) {
10
+ PartialFlashResult["Success"] = "Success";
11
+ PartialFlashResult["AttemptFullFlash"] = "AttemptFullFlash";
12
+ })(PartialFlashResult || (exports.PartialFlashResult = PartialFlashResult = {}));
13
+ const partialFlash = async (connection, memoryMap, progress) => {
14
+ const pf = new partial_flashing_service_1.PartialFlashingService(connection);
15
+ await pf.startNotifications();
16
+ const result = await connection.raceDisconnectAndTimeout(partialFlashInternal(connection, pf, memoryMap, progress), { timeout: 30_000, actionName: "partial flash" });
17
+ try {
18
+ await pf.stopNotifications();
19
+ }
20
+ catch (e) {
21
+ // V1 disconnects quickly after a partial flash.
22
+ if (!(e instanceof async_util_1.DisconnectError)) {
23
+ connection.error("Error stopping notifications", e);
24
+ }
25
+ }
26
+ return result;
27
+ };
28
+ const partialFlashInternal = async (connection, pf, memoryMap, progress) => {
29
+ connection.log("Partial flash");
30
+ progress(device_1.ProgressStage.PartialFlashing);
31
+ try {
32
+ const deviceCodeRegion = await pf.getRegionInfo(partial_flashing_service_1.RegionId.MakeCode);
33
+ if (deviceCodeRegion === null) {
34
+ connection.log("Could not read code region");
35
+ return PartialFlashResult.AttemptFullFlash;
36
+ }
37
+ const deviceDalRegion = await pf.getRegionInfo(partial_flashing_service_1.RegionId.Dal);
38
+ if (deviceDalRegion === null) {
39
+ connection.log("Could not read DAL region");
40
+ return PartialFlashResult.AttemptFullFlash;
41
+ }
42
+ progress(device_1.ProgressStage.PartialFlashing);
43
+ const fileCodeRegion = (0, flashing_makecode_1.findMakeCodeRegionInMemoryMap)(memoryMap, deviceCodeRegion);
44
+ if (fileCodeRegion === null) {
45
+ connection.log("No partial flash data");
46
+ return PartialFlashResult.AttemptFullFlash;
47
+ }
48
+ if (fileCodeRegion.hash !== deviceDalRegion.hash) {
49
+ connection.log(`DAL hash comparison failed. Hex: ${fileCodeRegion.hash} vs device: ${deviceDalRegion.hash}`);
50
+ return PartialFlashResult.AttemptFullFlash;
51
+ }
52
+ if (deviceCodeRegion.start !== fileCodeRegion.start) {
53
+ connection.log("Code start address doesn't match");
54
+ return PartialFlashResult.AttemptFullFlash;
55
+ }
56
+ let nextPacketNumber = 0;
57
+ outer: for (let offset = fileCodeRegion.start; offset < fileCodeRegion.end;) {
58
+ const batchStartAddress = offset;
59
+ for (let packetInBatch = 0; packetInBatch < 4; ++packetInBatch) {
60
+ const packetNumber = nextPacketNumber++;
61
+ const packetDataOffset = offset + packetInBatch * 16;
62
+ if (packetInBatch < 3) {
63
+ await pf.writeFlash(memoryMap, batchStartAddress, packetDataOffset, packetNumber, packetInBatch);
64
+ }
65
+ else {
66
+ const result = await pf.writeFlashForNotification(memoryMap, batchStartAddress, packetDataOffset, packetNumber, packetInBatch);
67
+ if (result === partial_flashing_service_1.PacketState.Retransmit) {
68
+ // Retry the whole 64 bytes.
69
+ connection.log(`Retransmit requested at offset ${offset}`);
70
+ continue outer;
71
+ }
72
+ else {
73
+ progress(device_1.ProgressStage.PartialFlashing, (offset - fileCodeRegion.start) /
74
+ (fileCodeRegion.end - fileCodeRegion.start));
75
+ }
76
+ }
77
+ }
78
+ offset += 64;
79
+ }
80
+ await (0, async_util_1.delay)(100); // allow time for write to complete
81
+ await pf.writeEndOfFlashPacket();
82
+ await (0, async_util_1.delay)(100); // allow time for write to complete
83
+ progress(device_1.ProgressStage.PartialFlashing, 1);
84
+ return PartialFlashResult.Success;
85
+ }
86
+ catch (e) {
87
+ connection.error("Partial flash failed", e);
88
+ if (e instanceof device_1.DeviceError) {
89
+ throw e;
90
+ }
91
+ throw new device_1.DeviceError({
92
+ code: "flash-partial-failed",
93
+ message: e instanceof Error ? e.message : String(e),
94
+ });
95
+ }
96
+ };
97
+ exports.default = partialFlash;
98
+ //# sourceMappingURL=flashing-partial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashing-partial.js","sourceRoot":"","sources":["../../../lib/flashing/flashing-partial.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * V1 changes the service it offers in application/bootloader mode.
3
+ *
4
+ * We don't trust Android to have an up-to-date copy of services so will fall back
5
+ * to calling internal API via reflection if the desired/expected service is not
6
+ * listed.
7
+ *
8
+ * It might be that this is only needed for older versions of Android where we
9
+ * can't get service changed indications.
10
+ */
11
+ export declare const refreshServicesForV1IfDesiredServiceMissing: (deviceId: string, desiredServiceUuid: string) => Promise<void>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.refreshServicesForV1IfDesiredServiceMissing = void 0;
4
+ const bluetooth_le_1 = require("@capacitor-community/bluetooth-le");
5
+ /**
6
+ * V1 changes the service it offers in application/bootloader mode.
7
+ *
8
+ * We don't trust Android to have an up-to-date copy of services so will fall back
9
+ * to calling internal API via reflection if the desired/expected service is not
10
+ * listed.
11
+ *
12
+ * It might be that this is only needed for older versions of Android where we
13
+ * can't get service changed indications.
14
+ */
15
+ const refreshServicesForV1IfDesiredServiceMissing = async (deviceId, desiredServiceUuid) => {
16
+ const services = await bluetooth_le_1.BleClient.getServices(deviceId);
17
+ const deviceHasService = services.some((s) => s.uuid === desiredServiceUuid);
18
+ if (!deviceHasService) {
19
+ // On Android this does use the refresh reflection hack.
20
+ await bluetooth_le_1.BleClient.discoverServices(deviceId);
21
+ }
22
+ };
23
+ exports.refreshServicesForV1IfDesiredServiceMissing = refreshServicesForV1IfDesiredServiceMissing;
24
+ //# sourceMappingURL=flashing-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashing-v1.js","sourceRoot":"","sources":["../../../lib/flashing/flashing-v1.ts"],"names":[],"mappings":";;;AAAA,oEAA8D;AAE9D;;;;;;;;;GASG;AACI,MAAM,2CAA2C,GAAG,KAAK,EAC9D,QAAgB,EAChB,kBAA0B,EAC1B,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,wBAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;IAC7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,wDAAwD;QACxD,MAAM,wBAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CAAC;AAVW,QAAA,2CAA2C,+CAUtD"}