@microbit/microbit-connection 0.0.0-tab.change.177 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +94 -5
  3. package/build/cjs/accelerometer-service.js +106 -0
  4. package/build/cjs/accelerometer-service.js.map +1 -0
  5. package/build/cjs/accelerometer.js +16 -0
  6. package/build/cjs/accelerometer.js.map +1 -0
  7. package/build/cjs/async-util.js +27 -0
  8. package/build/cjs/async-util.js.map +1 -0
  9. package/build/{bluetooth-device-wrapper.d.ts → cjs/bluetooth-device-wrapper.d.ts} +7 -1
  10. package/build/cjs/bluetooth-device-wrapper.js +467 -0
  11. package/build/cjs/bluetooth-device-wrapper.js.map +1 -0
  12. package/build/cjs/bluetooth-profile.js +86 -0
  13. package/build/cjs/bluetooth-profile.js.map +1 -0
  14. package/build/cjs/bluetooth.d.ts +108 -0
  15. package/build/cjs/bluetooth.js +272 -0
  16. package/build/cjs/bluetooth.js.map +1 -0
  17. package/build/cjs/board-id.js +81 -0
  18. package/build/cjs/board-id.js.map +1 -0
  19. package/build/cjs/board-serial-info.js +51 -0
  20. package/build/cjs/board-serial-info.js.map +1 -0
  21. package/build/cjs/button-service.js +80 -0
  22. package/build/cjs/button-service.js.map +1 -0
  23. package/build/cjs/buttons.js +22 -0
  24. package/build/cjs/buttons.js.map +1 -0
  25. package/build/cjs/constants.js +73 -0
  26. package/build/cjs/constants.js.map +1 -0
  27. package/build/{device.d.ts → cjs/device.d.ts} +6 -31
  28. package/build/cjs/device.js +133 -0
  29. package/build/cjs/device.js.map +1 -0
  30. package/build/{events.d.ts → cjs/events.d.ts} +1 -2
  31. package/build/cjs/events.js +109 -0
  32. package/build/cjs/events.js.map +1 -0
  33. package/build/cjs/hex-flash-data-source.js +26 -0
  34. package/build/cjs/hex-flash-data-source.js.map +1 -0
  35. package/build/cjs/index.d.ts +17 -0
  36. package/build/cjs/index.js +36 -0
  37. package/build/cjs/index.js.map +1 -0
  38. package/build/cjs/led-service.js +120 -0
  39. package/build/{led-service.js.map → cjs/led-service.js.map} +1 -1
  40. package/build/cjs/led.js +3 -0
  41. package/build/cjs/led.js.map +1 -0
  42. package/build/{logging.d.ts → cjs/logging.d.ts} +3 -3
  43. package/build/cjs/logging.js +16 -0
  44. package/build/cjs/logging.js.map +1 -0
  45. package/build/cjs/magnetometer-service.d.ts +22 -0
  46. package/build/cjs/magnetometer-service.js +129 -0
  47. package/build/cjs/magnetometer-service.js.map +1 -0
  48. package/build/cjs/magnetometer.d.ts +9 -0
  49. package/build/cjs/magnetometer.js +16 -0
  50. package/build/cjs/magnetometer.js.map +1 -0
  51. package/build/cjs/package.json +1 -0
  52. package/build/cjs/promise-queue.js +78 -0
  53. package/build/cjs/promise-queue.js.map +1 -0
  54. package/build/cjs/serial-events.d.ts +20 -0
  55. package/build/cjs/serial-events.js +69 -0
  56. package/build/cjs/serial-events.js.map +1 -0
  57. package/build/{service-events.d.ts → cjs/service-events.d.ts} +4 -0
  58. package/build/cjs/service-events.js +39 -0
  59. package/build/cjs/service-events.js.map +1 -0
  60. package/build/cjs/setupTests.js.map +1 -0
  61. package/build/cjs/uart-service.d.ts +13 -0
  62. package/build/cjs/uart-service.js +76 -0
  63. package/build/cjs/uart-service.js.map +1 -0
  64. package/build/cjs/uart.d.ts +4 -0
  65. package/build/cjs/uart.js +16 -0
  66. package/build/cjs/uart.js.map +1 -0
  67. package/build/{usb-device-wrapper.d.ts → cjs/usb-device-wrapper.d.ts} +1 -6
  68. package/build/cjs/usb-device-wrapper.js +412 -0
  69. package/build/cjs/usb-device-wrapper.js.map +1 -0
  70. package/build/cjs/usb-partial-flashing-utils.js +133 -0
  71. package/build/cjs/usb-partial-flashing-utils.js.map +1 -0
  72. package/build/{usb-partial-flashing.d.ts → cjs/usb-partial-flashing.d.ts} +3 -3
  73. package/build/cjs/usb-partial-flashing.js +341 -0
  74. package/build/cjs/usb-partial-flashing.js.map +1 -0
  75. package/build/cjs/usb-radio-bridge.d.ts +24 -0
  76. package/build/cjs/usb-radio-bridge.js +516 -0
  77. package/build/cjs/usb-radio-bridge.js.map +1 -0
  78. package/build/cjs/usb-serial-protocol.js +183 -0
  79. package/build/cjs/usb-serial-protocol.js.map +1 -0
  80. package/build/cjs/usb.d.ts +64 -0
  81. package/build/cjs/usb.js +647 -0
  82. package/build/cjs/usb.js.map +1 -0
  83. package/build/esm/accelerometer-service.d.ts +18 -0
  84. package/build/{accelerometer-service.js → esm/accelerometer-service.js} +1 -1
  85. package/build/esm/accelerometer-service.js.map +1 -0
  86. package/build/esm/accelerometer.d.ts +9 -0
  87. package/build/esm/accelerometer.js.map +1 -0
  88. package/build/esm/async-util.d.ts +13 -0
  89. package/build/esm/async-util.js.map +1 -0
  90. package/build/esm/bluetooth-device-wrapper.d.ts +63 -0
  91. package/build/{bluetooth-device-wrapper.js → esm/bluetooth-device-wrapper.js} +39 -10
  92. package/build/esm/bluetooth-device-wrapper.js.map +1 -0
  93. package/build/esm/bluetooth-profile.d.ts +139 -0
  94. package/build/esm/bluetooth-profile.js.map +1 -0
  95. package/build/esm/bluetooth.d.ts +108 -0
  96. package/build/{bluetooth.js → esm/bluetooth.js} +29 -4
  97. package/build/esm/bluetooth.js.map +1 -0
  98. package/build/esm/board-id.d.ts +36 -0
  99. package/build/esm/board-id.js.map +1 -0
  100. package/build/esm/board-serial-info.d.ts +14 -0
  101. package/build/esm/board-serial-info.js.map +1 -0
  102. package/build/esm/button-service.d.ts +13 -0
  103. package/build/esm/button-service.js.map +1 -0
  104. package/build/esm/buttons.d.ts +10 -0
  105. package/build/esm/buttons.js.map +1 -0
  106. package/build/esm/constants.d.ts +48 -0
  107. package/build/esm/constants.js.map +1 -0
  108. package/build/esm/device.d.ts +181 -0
  109. package/build/{device.js → esm/device.js} +1 -57
  110. package/build/esm/device.js.map +1 -0
  111. package/build/esm/events.d.ts +110 -0
  112. package/build/esm/events.js.map +1 -0
  113. package/build/esm/hex-flash-data-source.d.ts +7 -0
  114. package/build/esm/hex-flash-data-source.js.map +1 -0
  115. package/build/esm/index.d.ts +17 -0
  116. package/build/esm/index.js +12 -0
  117. package/build/esm/index.js.map +1 -0
  118. package/build/esm/led-service.d.ts +20 -0
  119. package/build/esm/led-service.js.map +1 -0
  120. package/build/esm/led.d.ts +6 -0
  121. package/build/esm/led.js.map +1 -0
  122. package/build/esm/logging.d.ts +21 -0
  123. package/build/esm/logging.js.map +1 -0
  124. package/build/esm/magnetometer-service.d.ts +22 -0
  125. package/build/esm/magnetometer-service.js +125 -0
  126. package/build/esm/magnetometer-service.js.map +1 -0
  127. package/build/esm/magnetometer.d.ts +9 -0
  128. package/build/esm/magnetometer.js +12 -0
  129. package/build/esm/magnetometer.js.map +1 -0
  130. package/build/esm/package.json +1 -0
  131. package/build/esm/promise-queue.d.ts +27 -0
  132. package/build/esm/promise-queue.js.map +1 -0
  133. package/build/esm/serial-events.d.ts +20 -0
  134. package/build/esm/serial-events.js +61 -0
  135. package/build/esm/serial-events.js.map +1 -0
  136. package/build/esm/service-events.d.ts +17 -0
  137. package/build/{service-events.js → esm/service-events.js} +12 -0
  138. package/build/esm/service-events.js.map +1 -0
  139. package/build/esm/setupTests.d.ts +6 -0
  140. package/build/{setupTests.js.map → esm/setupTests.js.map} +1 -1
  141. package/build/esm/uart-service.d.ts +13 -0
  142. package/build/esm/uart-service.js +72 -0
  143. package/build/esm/uart-service.js.map +1 -0
  144. package/build/esm/uart.d.ts +4 -0
  145. package/build/esm/uart.js +12 -0
  146. package/build/esm/uart.js.map +1 -0
  147. package/build/esm/usb-device-wrapper.d.ts +47 -0
  148. package/build/{usb-device-wrapper.js → esm/usb-device-wrapper.js} +10 -9
  149. package/build/esm/usb-device-wrapper.js.map +1 -0
  150. package/build/esm/usb-partial-flashing-utils.d.ts +17 -0
  151. package/build/esm/usb-partial-flashing-utils.js.map +1 -0
  152. package/build/esm/usb-partial-flashing.d.ts +69 -0
  153. package/build/{usb-partial-flashing.js → esm/usb-partial-flashing.js} +8 -10
  154. package/build/esm/usb-partial-flashing.js.map +1 -0
  155. package/build/esm/usb-radio-bridge.d.ts +24 -0
  156. package/build/{usb-radio-bridge.js → esm/usb-radio-bridge.js} +11 -4
  157. package/build/esm/usb-radio-bridge.js.map +1 -0
  158. package/build/esm/usb-serial-protocol.d.ts +66 -0
  159. package/build/esm/usb-serial-protocol.js.map +1 -0
  160. package/build/esm/usb.d.ts +64 -0
  161. package/build/{usb.js → esm/usb.js} +228 -35
  162. package/build/esm/usb.js.map +1 -0
  163. package/package.json +21 -8
  164. package/typedoc.json +14 -0
  165. package/build/accelerometer-service.js.map +0 -1
  166. package/build/accelerometer.js.map +0 -1
  167. package/build/async-util.js.map +0 -1
  168. package/build/bluetooth-device-wrapper.js.map +0 -1
  169. package/build/bluetooth-profile.js.map +0 -1
  170. package/build/bluetooth.d.ts +0 -54
  171. package/build/bluetooth.js.map +0 -1
  172. package/build/board-id.js.map +0 -1
  173. package/build/board-serial-info.js.map +0 -1
  174. package/build/button-service.js.map +0 -1
  175. package/build/buttons.js.map +0 -1
  176. package/build/constants.js.map +0 -1
  177. package/build/device.js.map +0 -1
  178. package/build/events.js.map +0 -1
  179. package/build/hex-flash-data-source.js.map +0 -1
  180. package/build/index.d.ts +0 -10
  181. package/build/index.js +0 -8
  182. package/build/index.js.map +0 -1
  183. package/build/led.js.map +0 -1
  184. package/build/logging.js.map +0 -1
  185. package/build/promise-queue.js.map +0 -1
  186. package/build/service-events.js.map +0 -1
  187. package/build/usb-device-wrapper.js.map +0 -1
  188. package/build/usb-partial-flashing-utils.js.map +0 -1
  189. package/build/usb-partial-flashing.js.map +0 -1
  190. package/build/usb-radio-bridge.d.ts +0 -41
  191. package/build/usb-radio-bridge.js.map +0 -1
  192. package/build/usb-serial-protocol.js.map +0 -1
  193. package/build/usb.d.ts +0 -54
  194. package/build/usb.js.map +0 -1
  195. package/vite.config.ts +0 -34
  196. /package/build/{accelerometer-service.d.ts → cjs/accelerometer-service.d.ts} +0 -0
  197. /package/build/{accelerometer.d.ts → cjs/accelerometer.d.ts} +0 -0
  198. /package/build/{async-util.d.ts → cjs/async-util.d.ts} +0 -0
  199. /package/build/{bluetooth-profile.d.ts → cjs/bluetooth-profile.d.ts} +0 -0
  200. /package/build/{board-id.d.ts → cjs/board-id.d.ts} +0 -0
  201. /package/build/{board-serial-info.d.ts → cjs/board-serial-info.d.ts} +0 -0
  202. /package/build/{button-service.d.ts → cjs/button-service.d.ts} +0 -0
  203. /package/build/{buttons.d.ts → cjs/buttons.d.ts} +0 -0
  204. /package/build/{constants.d.ts → cjs/constants.d.ts} +0 -0
  205. /package/build/{hex-flash-data-source.d.ts → cjs/hex-flash-data-source.d.ts} +0 -0
  206. /package/build/{led-service.d.ts → cjs/led-service.d.ts} +0 -0
  207. /package/build/{led.d.ts → cjs/led.d.ts} +0 -0
  208. /package/build/{promise-queue.d.ts → cjs/promise-queue.d.ts} +0 -0
  209. /package/build/{setupTests.d.ts → cjs/setupTests.d.ts} +0 -0
  210. /package/build/{usb-partial-flashing-utils.d.ts → cjs/usb-partial-flashing-utils.d.ts} +0 -0
  211. /package/build/{usb-serial-protocol.d.ts → cjs/usb-serial-protocol.d.ts} +0 -0
  212. /package/build/{accelerometer.js → esm/accelerometer.js} +0 -0
  213. /package/build/{async-util.js → esm/async-util.js} +0 -0
  214. /package/build/{bluetooth-profile.js → esm/bluetooth-profile.js} +0 -0
  215. /package/build/{board-id.js → esm/board-id.js} +0 -0
  216. /package/build/{board-serial-info.js → esm/board-serial-info.js} +0 -0
  217. /package/build/{button-service.js → esm/button-service.js} +0 -0
  218. /package/build/{buttons.js → esm/buttons.js} +0 -0
  219. /package/build/{constants.js → esm/constants.js} +0 -0
  220. /package/build/{events.js → esm/events.js} +0 -0
  221. /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
  222. /package/build/{led-service.js → esm/led-service.js} +0 -0
  223. /package/build/{led.js → esm/led.js} +0 -0
  224. /package/build/{logging.js → esm/logging.js} +0 -0
  225. /package/build/{promise-queue.js → esm/promise-queue.js} +0 -0
  226. /package/build/{usb-partial-flashing-utils.js → esm/usb-partial-flashing-utils.js} +0 -0
  227. /package/build/{usb-serial-protocol.js → esm/usb-serial-protocol.js} +0 -0
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ /**
3
+ * (c) 2021, Micro:bit Educational Foundation and contributors
4
+ *
5
+ * SPDX-License-Identifier: MIT
6
+ *
7
+ * This file is made up of a combination of original code, along with code
8
+ * extracted from the following repositories:
9
+ *
10
+ * https://github.com/mmoskal/dapjs/tree/a32f11f54e9e76a9c61896ddd425c1cb1a29c143
11
+ * https://github.com/microsoft/pxt-microbit
12
+ *
13
+ * The pxt-microbit license is included below.
14
+ *
15
+ * PXT - Programming Experience Toolkit
16
+ *
17
+ * The MIT License (MIT)
18
+ *
19
+ * Copyright (c) Microsoft Corporation
20
+ *
21
+ * All rights reserved.
22
+ *
23
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
24
+ * of this software and associated documentation files (the "Software"), to deal
25
+ * in the Software without restriction, including without limitation the rights
26
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
27
+ * copies of the Software, and to permit persons to whom the Software is
28
+ * furnished to do so, subject to the following conditions:
29
+ *
30
+ * The above copyright notice and this permission notice shall be included in all
31
+ * copies or substantial portions of the Software.
32
+ *
33
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39
+ * SOFTWARE.
40
+ */
41
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
42
+ if (k2 === undefined) k2 = k;
43
+ var desc = Object.getOwnPropertyDescriptor(m, k);
44
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
45
+ desc = { enumerable: true, get: function() { return m[k]; } };
46
+ }
47
+ Object.defineProperty(o, k2, desc);
48
+ }) : (function(o, m, k, k2) {
49
+ if (k2 === undefined) k2 = k;
50
+ o[k2] = m[k];
51
+ }));
52
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
53
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
54
+ }) : function(o, v) {
55
+ o["default"] = v;
56
+ });
57
+ var __importStar = (this && this.__importStar) || function (mod) {
58
+ if (mod && mod.__esModule) return mod;
59
+ var result = {};
60
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
61
+ __setModuleDefault(result, mod);
62
+ return result;
63
+ };
64
+ var __importDefault = (this && this.__importDefault) || function (mod) {
65
+ return (mod && mod.__esModule) ? mod : { "default": mod };
66
+ };
67
+ Object.defineProperty(exports, "__esModule", { value: true });
68
+ exports.PartialFlashing = void 0;
69
+ /**
70
+ * Implementation of partial flashing for the micro:bit.
71
+ *
72
+ * Latest Microsoft implementation is here:
73
+ * https://github.com/microsoft/pxt-microbit/blob/master/editor/flash.ts
74
+ */
75
+ // dapjs import faff needed for Vitest https://github.com/ARMmbed/dapjs/issues/118
76
+ const dapjs = __importStar(require("dapjs"));
77
+ const { DAPLink: DAPLinkValue } = dapjs;
78
+ const async_util_js_1 = require("./async-util.js");
79
+ const usb_partial_flashing_utils_js_1 = require("./usb-partial-flashing-utils.js");
80
+ const nrf_intel_hex_1 = __importDefault(require("nrf-intel-hex"));
81
+ // Source code for binaries in can be found at https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/external/sha/source/main.c
82
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L243
83
+ // Update from https://github.com/microsoft/pxt-microbit/commit/a35057717222b8e48335144f497b55e29e9b0f25
84
+ // prettier-ignore
85
+ const flashPageBIN = new Uint32Array([
86
+ 0xbe00be00, // bkpt - LR is set to this
87
+ 0x2502b5f0, 0x4c204b1f, 0xf3bf511d, 0xf3bf8f6f, 0x25808f4f, 0x002e00ed,
88
+ 0x2f00595f, 0x25a1d0fc, 0x515800ed, 0x2d00599d, 0x2500d0fc, 0xf3bf511d,
89
+ 0xf3bf8f6f, 0x25808f4f, 0x002e00ed, 0x2f00595f, 0x2501d0fc, 0xf3bf511d,
90
+ 0xf3bf8f6f, 0x599d8f4f, 0xd0fc2d00, 0x25002680, 0x00f60092, 0xd1094295,
91
+ 0x511a2200, 0x8f6ff3bf, 0x8f4ff3bf, 0x2a00599a, 0xbdf0d0fc, 0x5147594f,
92
+ 0x2f00599f, 0x3504d0fc, 0x46c0e7ec, 0x4001e000, 0x00000504,
93
+ ]);
94
+ // void computeHashes(uint32_t *dst, uint8_t *ptr, uint32_t pageSize, uint32_t numPages)
95
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L253
96
+ // prettier-ignore
97
+ const computeChecksums2 = new Uint32Array([
98
+ 0x4c27b5f0, 0x44a52680, 0x22009201, 0x91004f25, 0x00769303, 0x24080013,
99
+ 0x25010019, 0x40eb4029, 0xd0002900, 0x3c01407b, 0xd1f52c00, 0x468c0091,
100
+ 0xa9044665, 0x506b3201, 0xd1eb42b2, 0x089b9b01, 0x23139302, 0x9b03469c,
101
+ 0xd104429c, 0x2000be2a, 0x449d4b15, 0x9f00bdf0, 0x4d149e02, 0x49154a14,
102
+ 0x3e01cf08, 0x2111434b, 0x491341cb, 0x405a434b, 0x4663405d, 0x230541da,
103
+ 0x4b10435a, 0x466318d2, 0x230541dd, 0x4b0d435d, 0x2e0018ed, 0x6002d1e7,
104
+ 0x9a009b01, 0x18d36045, 0x93003008, 0xe7d23401, 0xfffffbec, 0xedb88320,
105
+ 0x00000414, 0x1ec3a6c8, 0x2f9be6cc, 0xcc9e2d51, 0x1b873593, 0xe6546b64,
106
+ ]);
107
+ const membase = 0x20000000;
108
+ const loadAddr = membase;
109
+ const dataAddr = 0x20002000;
110
+ const stackAddr = 0x20001000;
111
+ /**
112
+ * Uses a DAPWrapper to flash the micro:bit.
113
+ *
114
+ * Intented to be used for a single flash with a pre-connected DAPWrapper.
115
+ */
116
+ class PartialFlashing {
117
+ constructor(dapwrapper, logging, boardVersion) {
118
+ Object.defineProperty(this, "dapwrapper", {
119
+ enumerable: true,
120
+ configurable: true,
121
+ writable: true,
122
+ value: dapwrapper
123
+ });
124
+ Object.defineProperty(this, "logging", {
125
+ enumerable: true,
126
+ configurable: true,
127
+ writable: true,
128
+ value: logging
129
+ });
130
+ Object.defineProperty(this, "boardVersion", {
131
+ enumerable: true,
132
+ configurable: true,
133
+ writable: true,
134
+ value: boardVersion
135
+ });
136
+ }
137
+ log(v) {
138
+ this.logging.log(v);
139
+ }
140
+ // Runs the checksum algorithm on the micro:bit's whole flash memory, and returns the results.
141
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L365
142
+ async getFlashChecksumsAsync() {
143
+ await this.dapwrapper.executeAsync(loadAddr, computeChecksums2, stackAddr, loadAddr + 1, 0xffffffff, dataAddr, 0, this.dapwrapper.pageSize, this.dapwrapper.numPages);
144
+ return this.dapwrapper.readBlockAsync(dataAddr, this.dapwrapper.numPages * 2);
145
+ }
146
+ // Runs the code on the micro:bit to copy a single page of data from RAM address addr to the ROM address specified by the page.
147
+ // Does not wait for execution to halt.
148
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L340
149
+ async runFlash(page, addr) {
150
+ await this.dapwrapper.cortexM.halt(true);
151
+ await Promise.all([
152
+ this.dapwrapper.cortexM.writeCoreRegister(usb_partial_flashing_utils_js_1.CoreRegister.PC, loadAddr + 4 + 1),
153
+ this.dapwrapper.cortexM.writeCoreRegister(usb_partial_flashing_utils_js_1.CoreRegister.LR, loadAddr + 1),
154
+ this.dapwrapper.cortexM.writeCoreRegister(usb_partial_flashing_utils_js_1.CoreRegister.SP, stackAddr),
155
+ this.dapwrapper.cortexM.writeCoreRegister(0, page.targetAddr),
156
+ this.dapwrapper.cortexM.writeCoreRegister(1, addr),
157
+ this.dapwrapper.cortexM.writeCoreRegister(2, this.dapwrapper.pageSize >> 2),
158
+ ]);
159
+ return this.dapwrapper.cortexM.resume(false);
160
+ }
161
+ // Write a single page of data to micro:bit ROM by writing it to micro:bit RAM and copying to ROM.
162
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L385
163
+ async partialFlashPageAsync(page, nextPage, i) {
164
+ // TODO: This short-circuits UICR, do we need to update this?
165
+ if (page.targetAddr >= 0x10000000) {
166
+ return;
167
+ }
168
+ // Use two slots in RAM to allow parallelisation of the following two tasks.
169
+ // 1. DAPjs writes a page to one slot.
170
+ // 2. flashPageBIN copies a page to flash from the other slot.
171
+ let thisAddr = i & 1 ? dataAddr : dataAddr + this.dapwrapper.pageSize;
172
+ let nextAddr = i & 1 ? dataAddr + this.dapwrapper.pageSize : dataAddr;
173
+ // Write first page to slot in RAM.
174
+ // All subsequent pages will have already been written to RAM.
175
+ if (i === 0) {
176
+ let u32data = new Uint32Array(page.data.length / 4);
177
+ for (let j = 0; j < page.data.length; j += 4) {
178
+ u32data[j >> 2] = (0, usb_partial_flashing_utils_js_1.read32FromUInt8Array)(page.data, j);
179
+ }
180
+ await this.dapwrapper.writeBlockAsync(thisAddr, u32data);
181
+ }
182
+ await this.runFlash(page, thisAddr);
183
+ // Write next page to micro:bit RAM if it exists.
184
+ if (nextPage) {
185
+ let buf = new Uint32Array(nextPage.data.buffer);
186
+ await this.dapwrapper.writeBlockAsync(nextAddr, buf);
187
+ }
188
+ return this.dapwrapper.waitForHalt();
189
+ }
190
+ // Write pages of data to micro:bit ROM.
191
+ async partialFlashCoreAsync(pages, updateProgress) {
192
+ this.log("Partial flash");
193
+ for (let i = 0; i < pages.length; ++i) {
194
+ updateProgress(i / pages.length, true);
195
+ await this.partialFlashPageAsync(pages[i], pages[i + 1], i);
196
+ }
197
+ updateProgress(1, true);
198
+ }
199
+ // Flash the micro:bit's ROM with the provided image by only copying over the pages that differ.
200
+ // Falls back to a full flash if partial flashing fails.
201
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L335
202
+ async partialFlashAsync(data, updateProgress) {
203
+ const flashBytes = this.convertDataToPaddedBytes(data);
204
+ const checksums = await this.getFlashChecksumsAsync();
205
+ await this.dapwrapper.writeBlockAsync(loadAddr, flashPageBIN);
206
+ let aligned = (0, usb_partial_flashing_utils_js_1.pageAlignBlocks)(flashBytes, 0, this.dapwrapper.pageSize);
207
+ const totalPages = aligned.length;
208
+ this.log("Total pages: " + totalPages);
209
+ aligned = (0, usb_partial_flashing_utils_js_1.onlyChanged)(aligned, checksums, this.dapwrapper.pageSize);
210
+ this.log("Changed pages: " + aligned.length);
211
+ let partial;
212
+ if (aligned.length > totalPages / 2) {
213
+ try {
214
+ await this.fullFlashAsync(data, updateProgress);
215
+ partial = false;
216
+ }
217
+ catch (e) {
218
+ this.log(e);
219
+ this.log("Full flash failed, attempting partial flash.");
220
+ await this.partialFlashCoreAsync(aligned, updateProgress);
221
+ partial = true;
222
+ }
223
+ }
224
+ else {
225
+ try {
226
+ await this.partialFlashCoreAsync(aligned, updateProgress);
227
+ partial = true;
228
+ }
229
+ catch (e) {
230
+ this.log(e);
231
+ this.log("Partial flash failed, attempting full flash.");
232
+ await this.fullFlashAsync(data, updateProgress);
233
+ partial = false;
234
+ }
235
+ }
236
+ try {
237
+ await this.dapwrapper.reset();
238
+ }
239
+ catch (e) {
240
+ // Allow errors on resetting, user can always manually reset if necessary.
241
+ }
242
+ this.log("Flashing complete");
243
+ return partial;
244
+ }
245
+ // Perform full flash of micro:bit's ROM using daplink.
246
+ async fullFlashAsync(data, updateProgress) {
247
+ this.log("Full flash");
248
+ const fullFlashProgress = (progress) => {
249
+ updateProgress(progress, false);
250
+ };
251
+ this.dapwrapper.daplink.on(DAPLinkValue.EVENT_PROGRESS, fullFlashProgress);
252
+ try {
253
+ data = this.convertDataToHexString(data);
254
+ await this.dapwrapper.transport.open();
255
+ await this.dapwrapper.daplink.flash(new TextEncoder().encode(data));
256
+ this.logging.event({
257
+ type: "WebUSB-info",
258
+ message: "full-flash-successful",
259
+ });
260
+ }
261
+ finally {
262
+ this.dapwrapper.daplink.removeListener(DAPLinkValue.EVENT_PROGRESS, fullFlashProgress);
263
+ }
264
+ }
265
+ // Flash the micro:bit's ROM with the provided image, resetting the micro:bit first.
266
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L439
267
+ async flashAsync(data, updateProgress) {
268
+ let resetPromise = (async () => {
269
+ // Reset micro:bit to ensure interface responds correctly.
270
+ this.log("Begin reset");
271
+ try {
272
+ await this.dapwrapper.reset(true);
273
+ }
274
+ catch (e) {
275
+ this.log("Retrying reset");
276
+ await this.dapwrapper.reconnectAsync();
277
+ await this.dapwrapper.reset(true);
278
+ }
279
+ })();
280
+ try {
281
+ try {
282
+ await (0, async_util_js_1.withTimeout)(resetPromise, 1000);
283
+ this.log("Begin flashing");
284
+ return await this.partialFlashAsync(data, updateProgress);
285
+ }
286
+ catch (e) {
287
+ if (e instanceof async_util_js_1.TimeoutError) {
288
+ this.log("Resetting micro:bit timed out");
289
+ this.log("Partial flashing failed. Attempting full flash");
290
+ this.logging.event({
291
+ type: "WebUSB-info",
292
+ message: "flash-failed/attempting-full-flash",
293
+ });
294
+ await this.fullFlashAsync(data, updateProgress);
295
+ return false;
296
+ }
297
+ else {
298
+ throw e;
299
+ }
300
+ }
301
+ }
302
+ finally {
303
+ // NB cannot return Promises above!
304
+ await this.dapwrapper.disconnectAsync();
305
+ }
306
+ }
307
+ convertDataToHexString(data) {
308
+ if (typeof data === "string") {
309
+ return data;
310
+ }
311
+ if (data instanceof Uint8Array) {
312
+ return this.paddedBytesToHexString(data);
313
+ }
314
+ return data.asHexString();
315
+ }
316
+ convertDataToPaddedBytes(data) {
317
+ if (data instanceof Uint8Array) {
318
+ return data;
319
+ }
320
+ if (typeof data === "string") {
321
+ return this.hexStringToPaddedBytes(data);
322
+ }
323
+ return this.memoryMapToPaddedBytes(data);
324
+ }
325
+ hexStringToPaddedBytes(hex) {
326
+ const m = nrf_intel_hex_1.default.fromHex(hex);
327
+ return this.memoryMapToPaddedBytes(m);
328
+ }
329
+ paddedBytesToHexString(data) {
330
+ return nrf_intel_hex_1.default.fromPaddedUint8Array(data).asHexString();
331
+ }
332
+ memoryMapToPaddedBytes(memoryMap) {
333
+ const flashSize = {
334
+ V1: 256 * 1024,
335
+ V2: 512 * 1024,
336
+ }[this.boardVersion];
337
+ return memoryMap.slicePad(0, flashSize);
338
+ }
339
+ }
340
+ exports.PartialFlashing = PartialFlashing;
341
+ //# sourceMappingURL=usb-partial-flashing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usb-partial-flashing.js","sourceRoot":"","sources":["../../lib/usb-partial-flashing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors
3
+ *
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { DeviceConnection } from "./device.js";
7
+ import { Logging } from "./logging.js";
8
+ import { ServiceConnectionEventMap } from "./service-events.js";
9
+ import { MicrobitWebUSBConnection } from "./usb.js";
10
+ export interface MicrobitRadioBridgeConnectionOptions {
11
+ logging: Logging;
12
+ }
13
+ export interface MicrobitRadioBridgeConnection extends DeviceConnection<ServiceConnectionEventMap> {
14
+ /**
15
+ * Sets remote device.
16
+ *
17
+ * @param deviceId The device id of remote micro:bit.
18
+ */
19
+ setRemoteDeviceId(deviceId: number): void;
20
+ }
21
+ /**
22
+ * A radio bridge connection factory.
23
+ */
24
+ export declare const createRadioBridgeConnection: (delegate: MicrobitWebUSBConnection, options?: MicrobitRadioBridgeConnectionOptions) => MicrobitRadioBridgeConnection;