@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,412 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DAPWrapper = void 0;
27
+ /**
28
+ * (c) 2021, Micro:bit Educational Foundation and contributors
29
+ *
30
+ * SPDX-License-Identifier: MIT
31
+ */
32
+ const dapjs = __importStar(require("dapjs"));
33
+ const { CortexM: CortexMValue, DAPLink: DAPLinkValue, WebUSB: WebUSBValue, } = dapjs;
34
+ const constants_js_1 = require("./constants.js");
35
+ const usb_partial_flashing_utils_js_1 = require("./usb-partial-flashing-utils.js");
36
+ const board_serial_info_js_1 = require("./board-serial-info.js");
37
+ class DAPWrapper {
38
+ constructor(device, logging) {
39
+ Object.defineProperty(this, "device", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: device
44
+ });
45
+ Object.defineProperty(this, "logging", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: logging
50
+ });
51
+ Object.defineProperty(this, "transport", {
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ value: void 0
56
+ });
57
+ Object.defineProperty(this, "daplink", {
58
+ enumerable: true,
59
+ configurable: true,
60
+ writable: true,
61
+ value: void 0
62
+ });
63
+ Object.defineProperty(this, "cortexM", {
64
+ enumerable: true,
65
+ configurable: true,
66
+ writable: true,
67
+ value: void 0
68
+ });
69
+ Object.defineProperty(this, "_pageSize", {
70
+ enumerable: true,
71
+ configurable: true,
72
+ writable: true,
73
+ value: void 0
74
+ });
75
+ Object.defineProperty(this, "_numPages", {
76
+ enumerable: true,
77
+ configurable: true,
78
+ writable: true,
79
+ value: void 0
80
+ });
81
+ Object.defineProperty(this, "_deviceId", {
82
+ enumerable: true,
83
+ configurable: true,
84
+ writable: true,
85
+ value: void 0
86
+ });
87
+ Object.defineProperty(this, "loggedBoardSerialInfo", {
88
+ enumerable: true,
89
+ configurable: true,
90
+ writable: true,
91
+ value: void 0
92
+ });
93
+ Object.defineProperty(this, "initialConnectionComplete", {
94
+ enumerable: true,
95
+ configurable: true,
96
+ writable: true,
97
+ value: false
98
+ });
99
+ this.transport = new WebUSBValue(this.device);
100
+ this.daplink = new DAPLinkValue(this.transport);
101
+ this.cortexM = new CortexMValue(this.transport);
102
+ }
103
+ /**
104
+ * The page size. Throws if we've not connected.
105
+ */
106
+ get pageSize() {
107
+ if (this._pageSize === undefined) {
108
+ throw new Error("pageSize not defined until connected");
109
+ }
110
+ return this._pageSize;
111
+ }
112
+ /**
113
+ * The number of pages. Throws if we've not connected.
114
+ */
115
+ get numPages() {
116
+ if (this._numPages === undefined) {
117
+ throw new Error("numPages not defined until connected");
118
+ }
119
+ return this._numPages;
120
+ }
121
+ /**
122
+ * The number of pages. Undefined if we've not connected.
123
+ */
124
+ get deviceId() {
125
+ return this._deviceId;
126
+ }
127
+ get boardSerialInfo() {
128
+ return board_serial_info_js_1.BoardSerialInfo.parse(this.device, this.logging.log.bind(this.logging));
129
+ }
130
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L119
131
+ async reconnectAsync() {
132
+ if (this.initialConnectionComplete) {
133
+ await this.disconnectAsync();
134
+ this.transport = new WebUSBValue(this.device);
135
+ this.daplink = new DAPLinkValue(this.transport);
136
+ this.cortexM = new CortexMValue(this.transport);
137
+ }
138
+ else {
139
+ this.initialConnectionComplete = true;
140
+ }
141
+ await this.daplink.connect();
142
+ await this.cortexM.connect();
143
+ this.logging.event({
144
+ type: "WebUSB-info",
145
+ message: "connected",
146
+ });
147
+ const serialInfo = this.boardSerialInfo;
148
+ this.logging.log(`Detected board ID ${serialInfo.id}`);
149
+ if (!this.loggedBoardSerialInfo ||
150
+ !this.loggedBoardSerialInfo.eq(this.boardSerialInfo)) {
151
+ this.loggedBoardSerialInfo = this.boardSerialInfo;
152
+ this.logging.event({
153
+ type: "WebUSB-info",
154
+ message: "board-id/" + this.boardSerialInfo.id,
155
+ });
156
+ this.logging.event({
157
+ type: "WebUSB-info",
158
+ message: "board-family-hic/" +
159
+ this.boardSerialInfo.familyId +
160
+ this.boardSerialInfo.hic,
161
+ });
162
+ }
163
+ // https://support.microbit.org/support/solutions/articles/19000067679-how-to-find-the-name-of-your-micro-bit
164
+ // We wait on errors as immediately after flash the micro:bit won't be ready to respond
165
+ this._deviceId = await this.readMem32WaitOnError(constants_js_1.FICR.DEVICE_ID_1);
166
+ this._pageSize = await this.readMem32WaitOnError(constants_js_1.FICR.CODEPAGESIZE);
167
+ this._numPages = await this.readMem32WaitOnError(constants_js_1.FICR.CODESIZE);
168
+ }
169
+ async readMem32WaitOnError(register) {
170
+ let retries = 0;
171
+ let lastError;
172
+ while (retries < 20) {
173
+ try {
174
+ return await this.cortexM.readMem32(register);
175
+ }
176
+ catch (e) {
177
+ if (e instanceof Error) {
178
+ lastError = e;
179
+ if (/^Transfer/.test(e.message)) {
180
+ retries++;
181
+ await new Promise((resolve) => setTimeout(resolve, 20));
182
+ }
183
+ else {
184
+ throw e;
185
+ }
186
+ }
187
+ }
188
+ }
189
+ throw lastError;
190
+ }
191
+ async startSerial(listener) {
192
+ const currentBaud = await this.daplink.getSerialBaudrate();
193
+ if (currentBaud !== 115200) {
194
+ // Changing the baud rate causes a micro:bit reset, so only do it if necessary
195
+ await this.daplink.setSerialBaudrate(115200);
196
+ }
197
+ this.daplink.addListener(DAPLinkValue.EVENT_SERIAL_DATA, listener);
198
+ await this.daplink.startSerialRead(1);
199
+ }
200
+ stopSerial(listener) {
201
+ this.daplink.stopSerialRead();
202
+ this.daplink.removeListener(DAPLinkValue.EVENT_SERIAL_DATA, listener);
203
+ }
204
+ async disconnectAsync() {
205
+ if (this.device.opened &&
206
+ this.transport.interfaceNumber !== undefined) {
207
+ return this.daplink.disconnect();
208
+ }
209
+ }
210
+ // Send a packet to the micro:bit directly via WebUSB and return the response.
211
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/transport/cmsis_dap.ts#L161
212
+ async send(packet) {
213
+ const array = Uint8Array.from(packet);
214
+ await this.transport.write(array.buffer);
215
+ const response = await this.transport.read();
216
+ return new Uint8Array(response.buffer);
217
+ }
218
+ // Send a command along with relevant data to the micro:bit directly via WebUSB and handle the response.
219
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/transport/cmsis_dap.ts#L74
220
+ async cmdNums(op /* DapCmd */, data) {
221
+ data.unshift(op);
222
+ const buf = await this.send(data);
223
+ if (buf[0] !== op) {
224
+ throw new Error(`Bad response for ${op} -> ${buf[0]}`);
225
+ }
226
+ switch (op) {
227
+ case constants_js_1.DapCmd.DAP_CONNECT:
228
+ case constants_js_1.DapCmd.DAP_INFO:
229
+ case constants_js_1.DapCmd.DAP_TRANSFER:
230
+ case constants_js_1.DapCmd.DAP_TRANSFER_BLOCK:
231
+ break;
232
+ default:
233
+ if (buf[1] !== 0) {
234
+ throw new Error(`Bad status for ${op} -> ${buf[1]}`);
235
+ }
236
+ }
237
+ return buf;
238
+ }
239
+ // Read a certain register a specified amount of times.
240
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/dap/dap.ts#L117
241
+ async readRegRepeat(regId /* Reg */, cnt) {
242
+ const request = (0, usb_partial_flashing_utils_js_1.regRequest)(regId);
243
+ const sendargs = [0, cnt];
244
+ for (let i = 0; i < cnt; ++i) {
245
+ sendargs.push(request);
246
+ }
247
+ // Transfer the read requests to the micro:bit and retrieve the data read.
248
+ const buf = await this.cmdNums(constants_js_1.DapCmd.DAP_TRANSFER, sendargs);
249
+ if (buf[1] !== cnt) {
250
+ throw new Error("(many) Bad #trans " + buf[1]);
251
+ }
252
+ else if (buf[2] !== 1) {
253
+ throw new Error("(many) Bad transfer status " + buf[2]);
254
+ }
255
+ return buf.subarray(3, 3 + cnt * 4);
256
+ }
257
+ // Write to a certain register a specified amount of data.
258
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/dap/dap.ts#L138
259
+ async writeRegRepeat(regId /* Reg */, data) {
260
+ const request = (0, usb_partial_flashing_utils_js_1.regRequest)(regId, true);
261
+ const sendargs = [0, data.length, 0, request];
262
+ data.forEach((d) => {
263
+ // separate d into bytes
264
+ sendargs.push(d & 0xff, (d >> 8) & 0xff, (d >> 16) & 0xff, (d >> 24) & 0xff);
265
+ });
266
+ // Transfer the write requests to the micro:bit and retrieve the response status.
267
+ const buf = await this.cmdNums(constants_js_1.DapCmd.DAP_TRANSFER_BLOCK, sendargs);
268
+ if (buf[3] !== 1) {
269
+ throw new Error("(many-wr) Bad transfer status " + buf[2]);
270
+ }
271
+ }
272
+ // Core functionality reading a block of data from micro:bit RAM at a specified address.
273
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/memory/memory.ts#L181
274
+ async readBlockCore(addr, words) {
275
+ // Set up CMSIS-DAP to read/write from/to the RAM address addr using the register
276
+ // ApReg.DRW to write to or read from.
277
+ await this.cortexM.writeAP(constants_js_1.ApReg.CSW, constants_js_1.Csw.CSW_VALUE | constants_js_1.Csw.CSW_SIZE32);
278
+ await this.cortexM.writeAP(constants_js_1.ApReg.TAR, addr);
279
+ let lastSize = words % 15;
280
+ if (lastSize === 0) {
281
+ lastSize = 15;
282
+ }
283
+ const blocks = [];
284
+ for (let i = 0; i < Math.ceil(words / 15); i++) {
285
+ const b = await this.readRegRepeat((0, usb_partial_flashing_utils_js_1.apReg)(constants_js_1.ApReg.DRW, constants_js_1.DapVal.READ), i === blocks.length - 1 ? lastSize : 15);
286
+ blocks.push(b);
287
+ }
288
+ return (0, usb_partial_flashing_utils_js_1.bufferConcat)(blocks).subarray(0, words * 4);
289
+ }
290
+ // Core functionality writing a block of data to micro:bit RAM at a specified address.
291
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/memory/memory.ts#L205
292
+ async writeBlockCore(addr, words) {
293
+ try {
294
+ // Set up CMSIS-DAP to read/write from/to the RAM address addr using the register ApReg.DRW to write to or read from.
295
+ await this.cortexM.writeAP(constants_js_1.ApReg.CSW, constants_js_1.Csw.CSW_VALUE | constants_js_1.Csw.CSW_SIZE32);
296
+ await this.cortexM.writeAP(constants_js_1.ApReg.TAR, addr);
297
+ await this.writeRegRepeat((0, usb_partial_flashing_utils_js_1.apReg)(constants_js_1.ApReg.DRW, constants_js_1.DapVal.WRITE), words);
298
+ }
299
+ catch (e) {
300
+ if (e.dapWait) {
301
+ // Retry after a delay if required.
302
+ this.logging.log(`Transfer wait, write block`);
303
+ await new Promise((resolve) => setTimeout(resolve, 100));
304
+ return await this.writeBlockCore(addr, words);
305
+ }
306
+ else {
307
+ throw e;
308
+ }
309
+ }
310
+ }
311
+ // Reads a block of data from micro:bit RAM at a specified address.
312
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/memory/memory.ts#L143
313
+ async readBlockAsync(addr, words) {
314
+ const bufs = [];
315
+ const end = addr + words * 4;
316
+ let ptr = addr;
317
+ // Read a single page at a time.
318
+ while (ptr < end) {
319
+ let nextptr = ptr + this.pageSize;
320
+ if (ptr === addr) {
321
+ nextptr &= ~(this.pageSize - 1);
322
+ }
323
+ const len = Math.min(nextptr - ptr, end - ptr);
324
+ bufs.push(await this.readBlockCore(ptr, len >> 2));
325
+ ptr = nextptr;
326
+ }
327
+ const result = (0, usb_partial_flashing_utils_js_1.bufferConcat)(bufs);
328
+ return result.subarray(0, words * 4);
329
+ }
330
+ // Writes a block of data to micro:bit RAM at a specified address.
331
+ async writeBlockAsync(address, data) {
332
+ let payloadSize = this.transport.packetSize - 8;
333
+ if (data.buffer.byteLength > payloadSize) {
334
+ let start = 0;
335
+ let end = payloadSize;
336
+ // Split write up into smaller writes whose data can each be held in a single packet.
337
+ while (start !== end) {
338
+ let temp = new Uint32Array(data.buffer.slice(start, end));
339
+ await this.writeBlockCore(address + start, temp);
340
+ start = end;
341
+ end = Math.min(data.buffer.byteLength, end + payloadSize);
342
+ }
343
+ }
344
+ else {
345
+ await this.writeBlockCore(address, data);
346
+ }
347
+ }
348
+ // Execute code at a certain address with specified values in the registers.
349
+ // Waits for execution to halt.
350
+ async executeAsync(address, code, sp, pc, lr, ...registers) {
351
+ if (registers.length > 12) {
352
+ throw new Error(`Only 12 general purpose registers but got ${registers.length} values`);
353
+ }
354
+ await this.cortexM.halt(true);
355
+ await this.writeBlockAsync(address, code);
356
+ await this.cortexM.writeCoreRegister(usb_partial_flashing_utils_js_1.CoreRegister.PC, pc);
357
+ await this.cortexM.writeCoreRegister(usb_partial_flashing_utils_js_1.CoreRegister.LR, lr);
358
+ await this.cortexM.writeCoreRegister(usb_partial_flashing_utils_js_1.CoreRegister.SP, sp);
359
+ for (let i = 0; i < registers.length; ++i) {
360
+ await this.cortexM.writeCoreRegister(i, registers[i]);
361
+ }
362
+ await this.cortexM.resume(true);
363
+ return this.waitForHalt();
364
+ }
365
+ // Checks whether the micro:bit has halted or timeout has been reached.
366
+ // Recurses otherwise.
367
+ async waitForHaltCore(halted, deadline) {
368
+ if (new Date().getTime() > deadline) {
369
+ throw new Error("timeout");
370
+ }
371
+ if (!halted) {
372
+ const isHalted = await this.cortexM.isHalted();
373
+ // NB this is a Promise so no stack risk.
374
+ return this.waitForHaltCore(isHalted, deadline);
375
+ }
376
+ }
377
+ // Initial function to call to wait for the micro:bit halt.
378
+ async waitForHalt(timeToWait = 10000) {
379
+ const deadline = new Date().getTime() + timeToWait;
380
+ return this.waitForHaltCore(false, deadline);
381
+ }
382
+ // Resets the micro:bit in software by writing to NVIC_AIRCR.
383
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/cortex/cortex.ts#L347
384
+ async softwareReset() {
385
+ await this.cortexM.writeMem32(constants_js_1.CortexSpecialReg.NVIC_AIRCR, constants_js_1.CortexSpecialReg.NVIC_AIRCR_VECTKEY |
386
+ constants_js_1.CortexSpecialReg.NVIC_AIRCR_SYSRESETREQ);
387
+ // wait for the system to come out of reset
388
+ let dhcsr = await this.cortexM.readMem32(constants_js_1.CortexSpecialReg.DHCSR);
389
+ while ((dhcsr & constants_js_1.CortexSpecialReg.S_RESET_ST) !== 0) {
390
+ dhcsr = await this.cortexM.readMem32(constants_js_1.CortexSpecialReg.DHCSR);
391
+ }
392
+ }
393
+ // Reset the micro:bit, possibly halting the core on reset.
394
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/cortex/cortex.ts#L248
395
+ async reset(halt = false) {
396
+ if (halt) {
397
+ await this.cortexM.halt(true);
398
+ // VC_CORERESET causes the core to halt on reset.
399
+ const demcr = await this.cortexM.readMem32(constants_js_1.CortexSpecialReg.DEMCR);
400
+ await this.cortexM.writeMem32(constants_js_1.CortexSpecialReg.DEMCR, constants_js_1.CortexSpecialReg.DEMCR | constants_js_1.CortexSpecialReg.DEMCR_VC_CORERESET);
401
+ await this.softwareReset();
402
+ await this.waitForHalt();
403
+ // Unset the VC_CORERESET bit
404
+ await this.cortexM.writeMem32(constants_js_1.CortexSpecialReg.DEMCR, demcr);
405
+ }
406
+ else {
407
+ await this.softwareReset();
408
+ }
409
+ }
410
+ }
411
+ exports.DAPWrapper = DAPWrapper;
412
+ //# sourceMappingURL=usb-device-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usb-device-wrapper.js","sourceRoot":"","sources":["../../lib/usb-device-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.onlyChanged = exports.pageAlignBlocks = exports.Page = exports.regRequest = exports.apReg = exports.murmur3_core = exports.bufferConcat = exports.read32FromUInt8Array = exports.CoreRegister = void 0;
4
+ /**
5
+ * (c) 2021, Micro:bit Educational Foundation and contributors
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ */
9
+ const constants_js_1 = require("./constants.js");
10
+ // Represents the micro:bit's core registers
11
+ // Drawn from https://armmbed.github.io/dapjs/docs/enums/coreregister.html
12
+ exports.CoreRegister = {
13
+ SP: 13,
14
+ LR: 14,
15
+ PC: 15,
16
+ };
17
+ const read32FromUInt8Array = (data, i) => {
18
+ return ((data[i] |
19
+ (data[i + 1] << 8) |
20
+ (data[i + 2] << 16) |
21
+ (data[i + 3] << 24)) >>>
22
+ 0);
23
+ };
24
+ exports.read32FromUInt8Array = read32FromUInt8Array;
25
+ const bufferConcat = (bufs) => {
26
+ let len = 0;
27
+ for (const b of bufs) {
28
+ len += b.length;
29
+ }
30
+ const r = new Uint8Array(len);
31
+ len = 0;
32
+ for (const b of bufs) {
33
+ r.set(b, len);
34
+ len += b.length;
35
+ }
36
+ return r;
37
+ };
38
+ exports.bufferConcat = bufferConcat;
39
+ // Returns the MurmurHash of the data passed to it, used for checksum calculation.
40
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L14
41
+ const murmur3_core = (data) => {
42
+ let h0 = 0x2f9be6cc;
43
+ let h1 = 0x1ec3a6c8;
44
+ for (let i = 0; i < data.byteLength; i += 4) {
45
+ let k = (0, exports.read32FromUInt8Array)(data, i) >>> 0;
46
+ k = Math.imul(k, 0xcc9e2d51);
47
+ k = (k << 15) | (k >>> 17);
48
+ k = Math.imul(k, 0x1b873593);
49
+ h0 ^= k;
50
+ h1 ^= k;
51
+ h0 = (h0 << 13) | (h0 >>> 19);
52
+ h1 = (h1 << 13) | (h1 >>> 19);
53
+ h0 = (Math.imul(h0, 5) + 0xe6546b64) >>> 0;
54
+ h1 = (Math.imul(h1, 5) + 0xe6546b64) >>> 0;
55
+ }
56
+ return [h0, h1];
57
+ };
58
+ exports.murmur3_core = murmur3_core;
59
+ // Returns a representation of an Access Port Register.
60
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/util.ts#L63
61
+ const apReg = (r, mode) => {
62
+ const v = r | mode | constants_js_1.DapVal.AP_ACC;
63
+ return 4 + ((v & 0x0c) >> 2);
64
+ };
65
+ exports.apReg = apReg;
66
+ // Returns a code representing a request to read/write a certain register.
67
+ // Drawn from https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/util.ts#L92
68
+ const regRequest = (regId, isWrite = false) => {
69
+ let request = !isWrite ? 1 << 1 /* READ */ : 0 << 1; /* WRITE */
70
+ if (regId < 4) {
71
+ request |= 0 << 0 /* DP_ACC */;
72
+ }
73
+ else {
74
+ request |= 1 << 0 /* AP_ACC */;
75
+ }
76
+ request |= (regId & 3) << 2;
77
+ return request;
78
+ };
79
+ exports.regRequest = regRequest;
80
+ class Page {
81
+ constructor(targetAddr, data) {
82
+ Object.defineProperty(this, "targetAddr", {
83
+ enumerable: true,
84
+ configurable: true,
85
+ writable: true,
86
+ value: targetAddr
87
+ });
88
+ Object.defineProperty(this, "data", {
89
+ enumerable: true,
90
+ configurable: true,
91
+ writable: true,
92
+ value: data
93
+ });
94
+ }
95
+ }
96
+ exports.Page = Page;
97
+ // Split buffer into pages, each of pageSize size.
98
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L209
99
+ const pageAlignBlocks = (buffer, targetAddr, pageSize) => {
100
+ let unaligned = new Uint8Array(buffer);
101
+ let pages = [];
102
+ for (let i = 0; i < unaligned.byteLength;) {
103
+ let newbuf = new Uint8Array(pageSize).fill(0xff);
104
+ let startPad = (targetAddr + i) & (pageSize - 1);
105
+ let newAddr = targetAddr + i - startPad;
106
+ for (; i < unaligned.byteLength; ++i) {
107
+ if (targetAddr + i >= newAddr + pageSize)
108
+ break;
109
+ newbuf[targetAddr + i - newAddr] = unaligned[i];
110
+ }
111
+ let page = new Page(newAddr, newbuf);
112
+ pages.push(page);
113
+ }
114
+ return pages;
115
+ };
116
+ exports.pageAlignBlocks = pageAlignBlocks;
117
+ // Filter out all pages whose calculated checksum matches the corresponding checksum passed as an argument.
118
+ // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L523
119
+ const onlyChanged = (pages, checksums, pageSize) => {
120
+ return pages.filter((page) => {
121
+ let idx = page.targetAddr / pageSize;
122
+ if (idx * 8 + 8 > checksums.length)
123
+ return true; // out of range?
124
+ let c0 = (0, exports.read32FromUInt8Array)(checksums, idx * 8);
125
+ let c1 = (0, exports.read32FromUInt8Array)(checksums, idx * 8 + 4);
126
+ let ch = (0, exports.murmur3_core)(page.data);
127
+ if (c0 === ch[0] && c1 === ch[1])
128
+ return false;
129
+ return true;
130
+ });
131
+ };
132
+ exports.onlyChanged = onlyChanged;
133
+ //# sourceMappingURL=usb-partial-flashing-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usb-partial-flashing-utils.js","sourceRoot":"","sources":["../../lib/usb-partial-flashing-utils.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,iDAAwC;AAExC,4CAA4C;AAC5C,0EAA0E;AAC7D,QAAA,YAAY,GAAG;IAC1B,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;CACP,CAAC;AAEK,MAAM,oBAAoB,GAAG,CAAC,IAAgB,EAAE,CAAS,EAAU,EAAE;IAC1E,OAAO,CACL,CAAC,IAAI,CAAC,CAAC,CAAC;QACN,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,oBAAoB,wBAQ/B;AAEK,MAAM,YAAY,GAAG,CAAC,IAAkB,EAAc,EAAE;IAC7D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9B,GAAG,GAAG,CAAC,CAAC;IACR,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACd,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAZW,QAAA,YAAY,gBAYvB;AAEF,kFAAkF;AAClF,8HAA8H;AACvH,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAoB,EAAE;IACjE,IAAI,EAAE,GAAG,UAAU,CAAC;IACpB,IAAI,EAAE,GAAG,UAAU,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,GAAG,IAAA,4BAAoB,EAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7B,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3B,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAE7B,EAAE,IAAI,CAAC,CAAC;QACR,EAAE,IAAI,CAAC,CAAC;QACR,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9B,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9B,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3C,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC;AAlBW,QAAA,YAAY,gBAkBvB;AAEF,uDAAuD;AACvD,4GAA4G;AACrG,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,IAAY,EAAoB,EAAE;IACjE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,qBAAM,CAAC,MAAM,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AAHW,QAAA,KAAK,SAGhB;AAEF,0EAA0E;AAC1E,4GAA4G;AACrG,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,UAAmB,KAAK,EAAU,EAAE;IAC5E,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;IAEhE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAZW,QAAA,UAAU,cAYrB;AAEF,MAAa,IAAI;IACf,YACW,UAAkB,EAClB,IAAgB;QADzB;;;;mBAAS,UAAU;WAAQ;QAC3B;;;;mBAAS,IAAI;WAAY;IACxB,CAAC;CACL;AALD,oBAKC;AAED,kDAAkD;AAClD,+HAA+H;AACxH,MAAM,eAAe,GAAG,CAC7B,MAAkB,EAClB,UAAkB,EAClB,QAAgB,EACR,EAAE;IACV,IAAI,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,UAAU,GAAI,CAAC;QAC3C,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,QAAQ,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC;QACxC,OAAO,CAAC,GAAG,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC;YACrC,IAAI,UAAU,GAAG,CAAC,IAAI,OAAO,GAAG,QAAQ;gBAAE,MAAM;YAChD,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B;AAEF,2GAA2G;AAC3G,+HAA+H;AACxH,MAAM,WAAW,GAAG,CACzB,KAAa,EACb,SAAqB,EACrB,QAAgB,EACR,EAAE;IACV,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;QACrC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,CAAC,gBAAgB;QACjE,IAAI,EAAE,GAAG,IAAA,4BAAoB,EAAC,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,EAAE,GAAG,IAAA,4BAAoB,EAAC,SAAS,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,EAAE,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAdW,QAAA,WAAW,eActB"}
@@ -39,8 +39,8 @@
39
39
  */
40
40
  import { Logging } from "./logging.js";
41
41
  import { DAPWrapper } from "./usb-device-wrapper.js";
42
- import MemoryMap from "nrf-intel-hex";
43
42
  import { BoardVersion } from "./device.js";
43
+ import MemoryMap from "nrf-intel-hex";
44
44
  type ProgressCallback = (n: number, partial: boolean) => void;
45
45
  /**
46
46
  * Uses a DAPWrapper to flash the micro:bit.
@@ -58,8 +58,8 @@ export declare class PartialFlashing {
58
58
  private partialFlashPageAsync;
59
59
  private partialFlashCoreAsync;
60
60
  private partialFlashAsync;
61
- fullFlashAsync(data: string | Uint8Array | MemoryMap.default, updateProgress: ProgressCallback): Promise<void>;
62
- flashAsync(data: string | Uint8Array | MemoryMap.default, updateProgress: ProgressCallback): Promise<boolean>;
61
+ fullFlashAsync(data: string | Uint8Array | MemoryMap, updateProgress: ProgressCallback): Promise<void>;
62
+ flashAsync(data: string | Uint8Array | MemoryMap, updateProgress: ProgressCallback): Promise<boolean>;
63
63
  private convertDataToHexString;
64
64
  private convertDataToPaddedBytes;
65
65
  private hexStringToPaddedBytes;