@microbit/microbit-connection 0.0.0-alpha.32 → 0.0.0-alpha.33

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 (221) hide show
  1. package/README.md +89 -6
  2. package/build/cjs/accelerometer-service.js +106 -0
  3. package/build/cjs/accelerometer-service.js.map +1 -0
  4. package/build/cjs/accelerometer.js +16 -0
  5. package/build/cjs/accelerometer.js.map +1 -0
  6. package/build/cjs/async-util.js +27 -0
  7. package/build/cjs/async-util.js.map +1 -0
  8. package/build/cjs/bluetooth-device-wrapper.js +467 -0
  9. package/build/cjs/bluetooth-device-wrapper.js.map +1 -0
  10. package/build/cjs/bluetooth-profile.js +86 -0
  11. package/build/cjs/bluetooth-profile.js.map +1 -0
  12. package/build/{bluetooth.d.ts → cjs/bluetooth.d.ts} +1 -2
  13. package/build/cjs/bluetooth.js +268 -0
  14. package/build/cjs/bluetooth.js.map +1 -0
  15. package/build/cjs/board-id.js +81 -0
  16. package/build/cjs/board-id.js.map +1 -0
  17. package/build/cjs/board-serial-info.js +51 -0
  18. package/build/cjs/board-serial-info.js.map +1 -0
  19. package/build/cjs/button-service.js +80 -0
  20. package/build/cjs/button-service.js.map +1 -0
  21. package/build/cjs/buttons.js +22 -0
  22. package/build/cjs/buttons.js.map +1 -0
  23. package/build/cjs/constants.js +73 -0
  24. package/build/cjs/constants.js.map +1 -0
  25. package/build/cjs/device.js +199 -0
  26. package/build/cjs/device.js.map +1 -0
  27. package/build/cjs/events.js +109 -0
  28. package/build/cjs/events.js.map +1 -0
  29. package/build/cjs/hex-flash-data-source.js +26 -0
  30. package/build/cjs/hex-flash-data-source.js.map +1 -0
  31. package/build/cjs/index.d.ts +16 -0
  32. package/build/cjs/index.js +33 -0
  33. package/build/cjs/index.js.map +1 -0
  34. package/build/cjs/led-service.js +120 -0
  35. package/build/{led-service.js.map → cjs/led-service.js.map} +1 -1
  36. package/build/cjs/led.js +3 -0
  37. package/build/cjs/led.js.map +1 -0
  38. package/build/{logging.d.ts → cjs/logging.d.ts} +3 -3
  39. package/build/cjs/logging.js +16 -0
  40. package/build/cjs/logging.js.map +1 -0
  41. package/build/cjs/magnetometer-service.js +129 -0
  42. package/build/cjs/magnetometer-service.js.map +1 -0
  43. package/build/cjs/magnetometer.js +16 -0
  44. package/build/cjs/magnetometer.js.map +1 -0
  45. package/build/cjs/package.json +1 -0
  46. package/build/cjs/promise-queue.js +78 -0
  47. package/build/cjs/promise-queue.js.map +1 -0
  48. package/build/cjs/service-events.js +39 -0
  49. package/build/cjs/service-events.js.map +1 -0
  50. package/build/cjs/setupTests.js.map +1 -0
  51. package/build/cjs/uart-service.js +76 -0
  52. package/build/cjs/uart-service.js.map +1 -0
  53. package/build/cjs/uart.js +16 -0
  54. package/build/cjs/uart.js.map +1 -0
  55. package/build/{usb-device-wrapper.d.ts → cjs/usb-device-wrapper.d.ts} +1 -6
  56. package/build/cjs/usb-device-wrapper.js +412 -0
  57. package/build/cjs/usb-device-wrapper.js.map +1 -0
  58. package/build/cjs/usb-partial-flashing-utils.js +133 -0
  59. package/build/cjs/usb-partial-flashing-utils.js.map +1 -0
  60. package/build/{usb-partial-flashing.d.ts → cjs/usb-partial-flashing.d.ts} +3 -3
  61. package/build/cjs/usb-partial-flashing.js +341 -0
  62. package/build/cjs/usb-partial-flashing.js.map +1 -0
  63. package/build/cjs/usb-radio-bridge.js +509 -0
  64. package/build/cjs/usb-radio-bridge.js.map +1 -0
  65. package/build/cjs/usb-serial-protocol.js +183 -0
  66. package/build/cjs/usb-serial-protocol.js.map +1 -0
  67. package/build/cjs/usb.js +520 -0
  68. package/build/cjs/usb.js.map +1 -0
  69. package/build/esm/accelerometer-service.d.ts +18 -0
  70. package/build/esm/accelerometer-service.js.map +1 -0
  71. package/build/esm/accelerometer.d.ts +9 -0
  72. package/build/esm/accelerometer.js.map +1 -0
  73. package/build/esm/async-util.d.ts +13 -0
  74. package/build/esm/async-util.js.map +1 -0
  75. package/build/esm/bluetooth-device-wrapper.d.ts +63 -0
  76. package/build/esm/bluetooth-device-wrapper.js.map +1 -0
  77. package/build/esm/bluetooth-profile.d.ts +139 -0
  78. package/build/esm/bluetooth-profile.js.map +1 -0
  79. package/build/esm/bluetooth.d.ts +60 -0
  80. package/build/esm/bluetooth.js.map +1 -0
  81. package/build/esm/board-id.d.ts +36 -0
  82. package/build/esm/board-id.js.map +1 -0
  83. package/build/esm/board-serial-info.d.ts +14 -0
  84. package/build/esm/board-serial-info.js.map +1 -0
  85. package/build/esm/button-service.d.ts +13 -0
  86. package/build/esm/button-service.js.map +1 -0
  87. package/build/esm/buttons.d.ts +10 -0
  88. package/build/esm/buttons.js.map +1 -0
  89. package/build/esm/constants.d.ts +48 -0
  90. package/build/esm/constants.js.map +1 -0
  91. package/build/esm/device.d.ts +208 -0
  92. package/build/esm/device.js.map +1 -0
  93. package/build/esm/events.d.ts +111 -0
  94. package/build/esm/events.js.map +1 -0
  95. package/build/esm/hex-flash-data-source.d.ts +7 -0
  96. package/build/esm/hex-flash-data-source.js.map +1 -0
  97. package/build/esm/index.d.ts +16 -0
  98. package/build/esm/index.js +11 -0
  99. package/build/esm/index.js.map +1 -0
  100. package/build/esm/led-service.d.ts +20 -0
  101. package/build/esm/led-service.js.map +1 -0
  102. package/build/esm/led.d.ts +6 -0
  103. package/build/esm/led.js.map +1 -0
  104. package/build/esm/logging.d.ts +21 -0
  105. package/build/esm/logging.js.map +1 -0
  106. package/build/esm/magnetometer-service.d.ts +22 -0
  107. package/build/esm/magnetometer-service.js.map +1 -0
  108. package/build/esm/magnetometer.d.ts +9 -0
  109. package/build/esm/magnetometer.js.map +1 -0
  110. package/build/esm/package.json +1 -0
  111. package/build/esm/promise-queue.d.ts +27 -0
  112. package/build/esm/promise-queue.js.map +1 -0
  113. package/build/esm/service-events.d.ts +17 -0
  114. package/build/esm/service-events.js.map +1 -0
  115. package/build/esm/setupTests.d.ts +6 -0
  116. package/build/{setupTests.js.map → esm/setupTests.js.map} +1 -1
  117. package/build/esm/uart-service.d.ts +13 -0
  118. package/build/esm/uart-service.js.map +1 -0
  119. package/build/esm/uart.d.ts +4 -0
  120. package/build/esm/uart.js.map +1 -0
  121. package/build/esm/usb-device-wrapper.d.ts +47 -0
  122. package/build/{usb-device-wrapper.js → esm/usb-device-wrapper.js} +10 -9
  123. package/build/esm/usb-device-wrapper.js.map +1 -0
  124. package/build/esm/usb-partial-flashing-utils.d.ts +17 -0
  125. package/build/esm/usb-partial-flashing-utils.js.map +1 -0
  126. package/build/esm/usb-partial-flashing.d.ts +69 -0
  127. package/build/{usb-partial-flashing.js → esm/usb-partial-flashing.js} +8 -10
  128. package/build/esm/usb-partial-flashing.js.map +1 -0
  129. package/build/esm/usb-radio-bridge.d.ts +41 -0
  130. package/build/esm/usb-radio-bridge.js.map +1 -0
  131. package/build/esm/usb-serial-protocol.d.ts +66 -0
  132. package/build/esm/usb-serial-protocol.js.map +1 -0
  133. package/build/esm/usb.d.ts +58 -0
  134. package/build/esm/usb.js.map +1 -0
  135. package/package.json +19 -6
  136. package/typedoc.json +13 -0
  137. package/build/accelerometer-service.js.map +0 -1
  138. package/build/accelerometer.js.map +0 -1
  139. package/build/async-util.js.map +0 -1
  140. package/build/bluetooth-device-wrapper.js.map +0 -1
  141. package/build/bluetooth-profile.js.map +0 -1
  142. package/build/bluetooth.js.map +0 -1
  143. package/build/board-id.js.map +0 -1
  144. package/build/board-serial-info.js.map +0 -1
  145. package/build/button-service.js.map +0 -1
  146. package/build/buttons.js.map +0 -1
  147. package/build/constants.js.map +0 -1
  148. package/build/device.js.map +0 -1
  149. package/build/events.js.map +0 -1
  150. package/build/hex-flash-data-source.js.map +0 -1
  151. package/build/index.d.ts +0 -13
  152. package/build/index.js +0 -10
  153. package/build/index.js.map +0 -1
  154. package/build/led.js.map +0 -1
  155. package/build/logging.js.map +0 -1
  156. package/build/magnetometer-service.js.map +0 -1
  157. package/build/magnetometer.js.map +0 -1
  158. package/build/promise-queue.js.map +0 -1
  159. package/build/service-events.js.map +0 -1
  160. package/build/uart-service.js.map +0 -1
  161. package/build/uart.js.map +0 -1
  162. package/build/usb-device-wrapper.js.map +0 -1
  163. package/build/usb-partial-flashing-utils.js.map +0 -1
  164. package/build/usb-partial-flashing.js.map +0 -1
  165. package/build/usb-radio-bridge.js.map +0 -1
  166. package/build/usb-serial-protocol.js.map +0 -1
  167. package/build/usb.js.map +0 -1
  168. package/vite.config.ts +0 -34
  169. /package/build/{accelerometer-service.d.ts → cjs/accelerometer-service.d.ts} +0 -0
  170. /package/build/{accelerometer.d.ts → cjs/accelerometer.d.ts} +0 -0
  171. /package/build/{async-util.d.ts → cjs/async-util.d.ts} +0 -0
  172. /package/build/{bluetooth-device-wrapper.d.ts → cjs/bluetooth-device-wrapper.d.ts} +0 -0
  173. /package/build/{bluetooth-profile.d.ts → cjs/bluetooth-profile.d.ts} +0 -0
  174. /package/build/{board-id.d.ts → cjs/board-id.d.ts} +0 -0
  175. /package/build/{board-serial-info.d.ts → cjs/board-serial-info.d.ts} +0 -0
  176. /package/build/{button-service.d.ts → cjs/button-service.d.ts} +0 -0
  177. /package/build/{buttons.d.ts → cjs/buttons.d.ts} +0 -0
  178. /package/build/{constants.d.ts → cjs/constants.d.ts} +0 -0
  179. /package/build/{device.d.ts → cjs/device.d.ts} +0 -0
  180. /package/build/{events.d.ts → cjs/events.d.ts} +0 -0
  181. /package/build/{hex-flash-data-source.d.ts → cjs/hex-flash-data-source.d.ts} +0 -0
  182. /package/build/{led-service.d.ts → cjs/led-service.d.ts} +0 -0
  183. /package/build/{led.d.ts → cjs/led.d.ts} +0 -0
  184. /package/build/{magnetometer-service.d.ts → cjs/magnetometer-service.d.ts} +0 -0
  185. /package/build/{magnetometer.d.ts → cjs/magnetometer.d.ts} +0 -0
  186. /package/build/{promise-queue.d.ts → cjs/promise-queue.d.ts} +0 -0
  187. /package/build/{service-events.d.ts → cjs/service-events.d.ts} +0 -0
  188. /package/build/{setupTests.d.ts → cjs/setupTests.d.ts} +0 -0
  189. /package/build/{uart-service.d.ts → cjs/uart-service.d.ts} +0 -0
  190. /package/build/{uart.d.ts → cjs/uart.d.ts} +0 -0
  191. /package/build/{usb-partial-flashing-utils.d.ts → cjs/usb-partial-flashing-utils.d.ts} +0 -0
  192. /package/build/{usb-radio-bridge.d.ts → cjs/usb-radio-bridge.d.ts} +0 -0
  193. /package/build/{usb-serial-protocol.d.ts → cjs/usb-serial-protocol.d.ts} +0 -0
  194. /package/build/{usb.d.ts → cjs/usb.d.ts} +0 -0
  195. /package/build/{accelerometer-service.js → esm/accelerometer-service.js} +0 -0
  196. /package/build/{accelerometer.js → esm/accelerometer.js} +0 -0
  197. /package/build/{async-util.js → esm/async-util.js} +0 -0
  198. /package/build/{bluetooth-device-wrapper.js → esm/bluetooth-device-wrapper.js} +0 -0
  199. /package/build/{bluetooth-profile.js → esm/bluetooth-profile.js} +0 -0
  200. /package/build/{bluetooth.js → esm/bluetooth.js} +0 -0
  201. /package/build/{board-id.js → esm/board-id.js} +0 -0
  202. /package/build/{board-serial-info.js → esm/board-serial-info.js} +0 -0
  203. /package/build/{button-service.js → esm/button-service.js} +0 -0
  204. /package/build/{buttons.js → esm/buttons.js} +0 -0
  205. /package/build/{constants.js → esm/constants.js} +0 -0
  206. /package/build/{device.js → esm/device.js} +0 -0
  207. /package/build/{events.js → esm/events.js} +0 -0
  208. /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
  209. /package/build/{led-service.js → esm/led-service.js} +0 -0
  210. /package/build/{led.js → esm/led.js} +0 -0
  211. /package/build/{logging.js → esm/logging.js} +0 -0
  212. /package/build/{magnetometer-service.js → esm/magnetometer-service.js} +0 -0
  213. /package/build/{magnetometer.js → esm/magnetometer.js} +0 -0
  214. /package/build/{promise-queue.js → esm/promise-queue.js} +0 -0
  215. /package/build/{service-events.js → esm/service-events.js} +0 -0
  216. /package/build/{uart-service.js → esm/uart-service.js} +0 -0
  217. /package/build/{uart.js → esm/uart.js} +0 -0
  218. /package/build/{usb-partial-flashing-utils.js → esm/usb-partial-flashing-utils.js} +0 -0
  219. /package/build/{usb-radio-bridge.js → esm/usb-radio-bridge.js} +0 -0
  220. /package/build/{usb-serial-protocol.js → esm/usb-serial-protocol.js} +0 -0
  221. /package/build/{usb.js → esm/usb.js} +0 -0
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ /**
3
+ * (c) 2024, Micro:bit Educational Foundation and contributors
4
+ *
5
+ * SPDX-License-Identifier: MIT
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.generateRandomRadioFrequency = exports.generateCmdRemoteMbId = exports.generateCmdRadioFrequency = exports.generateCmdStop = exports.generateCmdStart = exports.generateCmdHandshake = exports.processPeriodicMessage = exports.processResponseMessage = exports.splitMessages = exports.version = exports.ResponseTypes = exports.CommandTypes = void 0;
9
+ var MessageTypes;
10
+ (function (MessageTypes) {
11
+ MessageTypes["Command"] = "C";
12
+ MessageTypes["Response"] = "R";
13
+ MessageTypes["Periodic"] = "P";
14
+ })(MessageTypes || (MessageTypes = {}));
15
+ var CommandTypes;
16
+ (function (CommandTypes) {
17
+ CommandTypes["Handshake"] = "HS";
18
+ CommandTypes["RadioFrequency"] = "RF";
19
+ CommandTypes["RemoteMbId"] = "RMBID";
20
+ CommandTypes["SoftwareVersion"] = "SWVER";
21
+ CommandTypes["HardwareVersion"] = "HWVER";
22
+ CommandTypes["Zstart"] = "ZSTART";
23
+ CommandTypes["Stop"] = "STOP";
24
+ })(CommandTypes || (exports.CommandTypes = CommandTypes = {}));
25
+ var ResponseExtraTypes;
26
+ (function (ResponseExtraTypes) {
27
+ ResponseExtraTypes["Error"] = "ERROR";
28
+ })(ResponseExtraTypes || (ResponseExtraTypes = {}));
29
+ exports.ResponseTypes = { ...CommandTypes, ...ResponseExtraTypes };
30
+ // Currently implemented protocol version
31
+ exports.version = 1;
32
+ const splitMessages = (message) => {
33
+ if (!message) {
34
+ return {
35
+ messages: [],
36
+ remainingInput: "",
37
+ };
38
+ }
39
+ let messages = message.split("\n");
40
+ let remainingInput = messages.pop() || "";
41
+ // Throw away any empty messages and messages that don't start with a valid type
42
+ messages = messages.filter((msg) => msg.length > 0 &&
43
+ Object.values(MessageTypes).includes(msg[0]));
44
+ // Any remaining input will be the start of the next message, so if it doesn't start
45
+ // with a valid type throw it away as it'll be prepended to the next serial string
46
+ if (remainingInput.length > 0 &&
47
+ !Object.values(MessageTypes).includes(remainingInput[0])) {
48
+ remainingInput = "";
49
+ }
50
+ return {
51
+ messages,
52
+ remainingInput,
53
+ };
54
+ };
55
+ exports.splitMessages = splitMessages;
56
+ const processResponseMessage = (message) => {
57
+ // Regex for a message response with 3 groups:
58
+ // id -> The message ID, 1-8 hex characters
59
+ // cmd -> The command type, a string, only capital letters, matching CommandTypes
60
+ // value -> The response value, empty string or a word, number,
61
+ // or version (e.g 1.2.3) depending on the command type
62
+ const responseMatch = /^R\[(?<id>[0-9A-Fa-f]{1,8})\](?<cmd>[A-Z]+)\[(?<value>-?[\w.]*)\]$/.exec(message);
63
+ if (!responseMatch || !responseMatch.groups) {
64
+ return undefined;
65
+ }
66
+ const messageId = parseInt(responseMatch.groups["id"], 16);
67
+ if (isNaN(messageId)) {
68
+ return undefined;
69
+ }
70
+ const responseType = responseMatch.groups["cmd"];
71
+ if (!Object.values(exports.ResponseTypes).includes(responseType)) {
72
+ return undefined;
73
+ }
74
+ let value = responseMatch.groups["value"];
75
+ switch (responseType) {
76
+ // Commands with numeric values
77
+ case exports.ResponseTypes.Handshake:
78
+ case exports.ResponseTypes.RadioFrequency:
79
+ case exports.ResponseTypes.RemoteMbId:
80
+ case exports.ResponseTypes.HardwareVersion:
81
+ case exports.ResponseTypes.Error:
82
+ value = Number(value);
83
+ if (isNaN(value) || value < 0 || value > 0xffffffff) {
84
+ return undefined;
85
+ }
86
+ break;
87
+ // Commands without values
88
+ case exports.ResponseTypes.Zstart:
89
+ case exports.ResponseTypes.Stop:
90
+ if (value !== "") {
91
+ return undefined;
92
+ }
93
+ break;
94
+ // Semver-ish values (valid range 00.00.00 to 99.99.99)
95
+ case exports.ResponseTypes.SoftwareVersion:
96
+ if (!/^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}$/.test(value)) {
97
+ return undefined;
98
+ }
99
+ break;
100
+ }
101
+ return {
102
+ message,
103
+ messageId,
104
+ type: responseType,
105
+ value,
106
+ };
107
+ };
108
+ exports.processResponseMessage = processResponseMessage;
109
+ const processPeriodicMessage = (message) => {
110
+ // Basic checks to match the message being a compact periodic message
111
+ if (message.length !== 13 || message[0] !== MessageTypes.Periodic) {
112
+ return undefined;
113
+ }
114
+ // All characters except the first one should be hex
115
+ if (!/^[0-9A-Fa-f]+$/.test(message.substring(1))) {
116
+ return undefined;
117
+ }
118
+ // Only the two Least Significant Bits from the buttons are used
119
+ const buttons = parseInt(message[12], 16);
120
+ if (buttons > 3) {
121
+ return undefined;
122
+ }
123
+ return {
124
+ // The accelerometer data has been clamped to -2048 to 2047, and an offset
125
+ // added to make the values positive, so that needs to be reversed
126
+ accelerometerX: parseInt(message.substring(3, 6), 16) - 2048,
127
+ accelerometerY: parseInt(message.substring(6, 9), 16) - 2048,
128
+ accelerometerZ: parseInt(message.substring(9, 12), 16) - 2048,
129
+ // Button A is the LSB, button B is the next bit
130
+ buttonA: buttons & 1,
131
+ buttonB: (buttons >> 1) & 1,
132
+ };
133
+ };
134
+ exports.processPeriodicMessage = processPeriodicMessage;
135
+ const generateCommand = (cmdType, cmdData = "") => {
136
+ // Generate an random (enough) ID with max value of 8 hex digits
137
+ const msgID = Math.floor(Math.random() * 0xffffffff);
138
+ return {
139
+ message: `C[${msgID.toString(16).toUpperCase()}]${cmdType}[${cmdData}]\n`,
140
+ messageId: msgID,
141
+ type: cmdType,
142
+ value: cmdData,
143
+ };
144
+ };
145
+ const generateCmdHandshake = () => {
146
+ return generateCommand(CommandTypes.Handshake);
147
+ };
148
+ exports.generateCmdHandshake = generateCmdHandshake;
149
+ const generateCmdStart = (sensors) => {
150
+ let cmdData = "";
151
+ if (sensors.accelerometer) {
152
+ cmdData += "A";
153
+ }
154
+ if (sensors.buttons) {
155
+ cmdData += "B";
156
+ }
157
+ return generateCommand(CommandTypes.Zstart, cmdData);
158
+ };
159
+ exports.generateCmdStart = generateCmdStart;
160
+ const generateCmdStop = () => {
161
+ return generateCommand(CommandTypes.Stop);
162
+ };
163
+ exports.generateCmdStop = generateCmdStop;
164
+ const generateCmdRadioFrequency = (frequency) => {
165
+ if (frequency < 0 || frequency > 83) {
166
+ throw new Error("Radio frequency out of range");
167
+ }
168
+ return generateCommand(CommandTypes.RadioFrequency, frequency.toString());
169
+ };
170
+ exports.generateCmdRadioFrequency = generateCmdRadioFrequency;
171
+ const generateCmdRemoteMbId = (remoteMicrobitId) => {
172
+ if (remoteMicrobitId < 0 || remoteMicrobitId > 0xffffffff) {
173
+ throw new Error("Remote micro:bit ID out of range");
174
+ }
175
+ return generateCommand(CommandTypes.RemoteMbId, remoteMicrobitId.toString());
176
+ };
177
+ exports.generateCmdRemoteMbId = generateCmdRemoteMbId;
178
+ const generateRandomRadioFrequency = () => {
179
+ // The value range for radio frequencies is 0 to 83
180
+ return Math.floor(Math.random() * 84);
181
+ };
182
+ exports.generateRandomRadioFrequency = generateRandomRadioFrequency;
183
+ //# sourceMappingURL=usb-serial-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usb-serial-protocol.js","sourceRoot":"","sources":["../../lib/usb-serial-protocol.ts"],"names":[],"mappings":"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"}