pxt-microbit 4.1.28 → 4.1.31
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.
- package/built/common-sim.d.ts +40 -0
- package/built/common-sim.js +93 -1
- package/built/editor.js +20 -4
- package/built/hexcache/{59d35551f2b44631972a3d427c94f81a3df457bfb6ba0fcf2a5807b139d9a32d.hex → 104bed2beca960d761185d436978a3436467a15b22c67b375bcd19c41f329866.hex} +3232 -3232
- package/built/hexcache/{15cf89efb10e1534aca2800db1c6d0d3ae906333f66684e7ae236bd69d5e6e50.hex → 2b2b36e6358c0084c241a1cb9e35fa02042257df3c415d242d9b736c24743a0f.hex} +2904 -2903
- package/built/hexcache/{e4cbdcaceec2f2ce3e23b0bd91cc6dee3dcc1a55867ad24124562b2a62325a49.hex → 3c61b581a0da61711d73a02a7ef4d13a5ff9e71d3626247f33704b8e31e2e656.hex} +10879 -10871
- package/built/hexcache/{f13cee981c6efbc97d49a7e4362956b88e3a61e457b65e49ee7d0bba51d641fd.hex → 82c722b4b5d65f525bfe0c8a1ee67c29cd8feeb26cf793c47a1ed68955bef498.hex} +10289 -10279
- package/built/target.js +41 -33
- package/built/target.json +41 -33
- package/built/targetlight.json +5 -5
- package/docs/projects/hot-potato.md +2 -2
- package/package.json +3 -3
package/built/common-sim.d.ts
CHANGED
|
@@ -728,6 +728,46 @@ declare namespace pxsim {
|
|
|
728
728
|
}
|
|
729
729
|
declare namespace pxsim.info {
|
|
730
730
|
}
|
|
731
|
+
declare namespace pxsim.multiplayer {
|
|
732
|
+
function postImage(im: pxsim.RefImage, goal: string): void;
|
|
733
|
+
function getCurrentImage(): pxsim.RefImage;
|
|
734
|
+
function setOrigin(origin: "client" | "server" | undefined): void;
|
|
735
|
+
function getOrigin(): string;
|
|
736
|
+
}
|
|
737
|
+
declare namespace pxsim {
|
|
738
|
+
interface MultiplayerBoard extends EventBusBoard {
|
|
739
|
+
multiplayerState: MultiplayerState;
|
|
740
|
+
}
|
|
741
|
+
function getMultiplayerState(): MultiplayerState;
|
|
742
|
+
interface SimulatorMultiplayerMessage extends SimulatorBroadcastMessage {
|
|
743
|
+
broadcast: true;
|
|
744
|
+
type: "multiplayer";
|
|
745
|
+
content: string;
|
|
746
|
+
origin?: "server" | "client";
|
|
747
|
+
clientNumber?: number;
|
|
748
|
+
id?: number;
|
|
749
|
+
}
|
|
750
|
+
interface MultiplayerImageMessage extends SimulatorMultiplayerMessage {
|
|
751
|
+
content: "Image";
|
|
752
|
+
goal: string;
|
|
753
|
+
image: RefImage;
|
|
754
|
+
}
|
|
755
|
+
interface MultiplayerButtonEvent extends SimulatorMultiplayerMessage {
|
|
756
|
+
content: "Button";
|
|
757
|
+
button: number;
|
|
758
|
+
state: "Pressed" | "Released" | "Held";
|
|
759
|
+
}
|
|
760
|
+
class MultiplayerState {
|
|
761
|
+
lastMessageId: number;
|
|
762
|
+
origin: string;
|
|
763
|
+
backgroundImage: RefImage;
|
|
764
|
+
constructor();
|
|
765
|
+
send(msg: SimulatorMultiplayerMessage): void;
|
|
766
|
+
init(origin: string): void;
|
|
767
|
+
setButton(key: number, isPressed: boolean): void;
|
|
768
|
+
protected messageHandler(msg: SimulatorMessage): void;
|
|
769
|
+
}
|
|
770
|
+
}
|
|
731
771
|
declare namespace pxsim.gamepad {
|
|
732
772
|
function setButton(index: number, up: boolean): void;
|
|
733
773
|
function move(index: number, x: number, y: number): void;
|
package/built/common-sim.js
CHANGED
|
@@ -699,7 +699,7 @@ var pxsim;
|
|
|
699
699
|
var pxsim;
|
|
700
700
|
(function (pxsim) {
|
|
701
701
|
function board() {
|
|
702
|
-
return pxsim.runtime.board;
|
|
702
|
+
return pxsim.runtime && pxsim.runtime.board;
|
|
703
703
|
}
|
|
704
704
|
pxsim.board = board;
|
|
705
705
|
})(pxsim || (pxsim = {}));
|
|
@@ -2395,6 +2395,98 @@ var pxsim;
|
|
|
2395
2395
|
pxsim.ToggleState = ToggleState;
|
|
2396
2396
|
})(pxsim || (pxsim = {}));
|
|
2397
2397
|
var pxsim;
|
|
2398
|
+
(function (pxsim) {
|
|
2399
|
+
var multiplayer;
|
|
2400
|
+
(function (multiplayer) {
|
|
2401
|
+
function postImage(im, goal) {
|
|
2402
|
+
const asBuf = pxsim.image.toBuffer(im);
|
|
2403
|
+
pxsim.getMultiplayerState().send({
|
|
2404
|
+
content: "Image",
|
|
2405
|
+
image: asBuf,
|
|
2406
|
+
goal
|
|
2407
|
+
});
|
|
2408
|
+
}
|
|
2409
|
+
multiplayer.postImage = postImage;
|
|
2410
|
+
function getCurrentImage() {
|
|
2411
|
+
return pxsim.getMultiplayerState().backgroundImage;
|
|
2412
|
+
}
|
|
2413
|
+
multiplayer.getCurrentImage = getCurrentImage;
|
|
2414
|
+
function setOrigin(origin) {
|
|
2415
|
+
pxsim.getMultiplayerState().origin = origin;
|
|
2416
|
+
}
|
|
2417
|
+
multiplayer.setOrigin = setOrigin;
|
|
2418
|
+
function getOrigin() {
|
|
2419
|
+
return pxsim.getMultiplayerState().origin;
|
|
2420
|
+
}
|
|
2421
|
+
multiplayer.getOrigin = getOrigin;
|
|
2422
|
+
})(multiplayer = pxsim.multiplayer || (pxsim.multiplayer = {}));
|
|
2423
|
+
})(pxsim || (pxsim = {}));
|
|
2424
|
+
(function (pxsim) {
|
|
2425
|
+
function getMultiplayerState() {
|
|
2426
|
+
return pxsim.board().multiplayerState;
|
|
2427
|
+
}
|
|
2428
|
+
pxsim.getMultiplayerState = getMultiplayerState;
|
|
2429
|
+
class MultiplayerState {
|
|
2430
|
+
constructor() {
|
|
2431
|
+
this.lastMessageId = 0;
|
|
2432
|
+
}
|
|
2433
|
+
send(msg) {
|
|
2434
|
+
pxsim.Runtime.postMessage(Object.assign(Object.assign({}, msg), { broadcast: true, toParentIFrameOnly: true, type: "multiplayer", origin: this.origin, id: this.lastMessageId++ }));
|
|
2435
|
+
}
|
|
2436
|
+
init(origin) {
|
|
2437
|
+
this.origin = origin;
|
|
2438
|
+
pxsim.runtime.board.addMessageListener(msg => this.messageHandler(msg));
|
|
2439
|
+
setInterval(() => {
|
|
2440
|
+
if (this.origin === "server") {
|
|
2441
|
+
const b = pxsim.board();
|
|
2442
|
+
const screenState = b && b.screenState;
|
|
2443
|
+
const lastImage = screenState && screenState.lastImage;
|
|
2444
|
+
lastImage && pxsim.multiplayer.postImage(lastImage, "broadcast-screen");
|
|
2445
|
+
}
|
|
2446
|
+
}, 50);
|
|
2447
|
+
}
|
|
2448
|
+
setButton(key, isPressed) {
|
|
2449
|
+
if (this.origin === "client") {
|
|
2450
|
+
this.send({
|
|
2451
|
+
content: "Button",
|
|
2452
|
+
button: key,
|
|
2453
|
+
state: isPressed ? "Pressed" : "Released"
|
|
2454
|
+
});
|
|
2455
|
+
}
|
|
2456
|
+
}
|
|
2457
|
+
messageHandler(msg) {
|
|
2458
|
+
if (!isMultiplayerMessage(msg)) {
|
|
2459
|
+
return;
|
|
2460
|
+
}
|
|
2461
|
+
if (isImageMessage(msg)) {
|
|
2462
|
+
if (this.origin === "client") {
|
|
2463
|
+
// HACK: peer js can convert Uint8Array into ArrayBuffer when transmitting; fix this.
|
|
2464
|
+
if (!ArrayBuffer.isView(msg.image.data)) {
|
|
2465
|
+
msg.image.data = new Uint8Array(msg.image.data);
|
|
2466
|
+
}
|
|
2467
|
+
this.backgroundImage = pxsim.image.ofBuffer(msg.image);
|
|
2468
|
+
}
|
|
2469
|
+
}
|
|
2470
|
+
else if (isButtonMessage(msg)) {
|
|
2471
|
+
if (this.origin === "server") {
|
|
2472
|
+
pxsim.board().setButton(msg.button + (7 * (msg.clientNumber || 1)), // + 7 to make it player 2 controls,
|
|
2473
|
+
msg.state === "Pressed" || msg.state === "Held");
|
|
2474
|
+
}
|
|
2475
|
+
}
|
|
2476
|
+
}
|
|
2477
|
+
}
|
|
2478
|
+
pxsim.MultiplayerState = MultiplayerState;
|
|
2479
|
+
function isMultiplayerMessage(msg) {
|
|
2480
|
+
return msg && msg.type === "multiplayer";
|
|
2481
|
+
}
|
|
2482
|
+
function isImageMessage(msg) {
|
|
2483
|
+
return msg && msg.content === "Image";
|
|
2484
|
+
}
|
|
2485
|
+
function isButtonMessage(msg) {
|
|
2486
|
+
return msg && msg.content === "Button";
|
|
2487
|
+
}
|
|
2488
|
+
})(pxsim || (pxsim = {}));
|
|
2489
|
+
var pxsim;
|
|
2398
2490
|
(function (pxsim) {
|
|
2399
2491
|
var gamepad;
|
|
2400
2492
|
(function (gamepad) {
|
package/built/editor.js
CHANGED
|
@@ -3167,6 +3167,7 @@ class DAPWrapper {
|
|
|
3167
3167
|
this.pageSize = 1024;
|
|
3168
3168
|
this.numPages = 256;
|
|
3169
3169
|
this.usesCODAL = false;
|
|
3170
|
+
this.jacdacInHex = false;
|
|
3170
3171
|
this.forceFullFlash = /webusbfullflash=1/.test(window.location.href);
|
|
3171
3172
|
this.onSerial = (buf, isStderr) => { };
|
|
3172
3173
|
this.onCustomEvent = (type, payload) => { };
|
|
@@ -3186,7 +3187,7 @@ class DAPWrapper {
|
|
|
3186
3187
|
this.allocDAP();
|
|
3187
3188
|
}
|
|
3188
3189
|
get useJACDAC() {
|
|
3189
|
-
return this.usesCODAL;
|
|
3190
|
+
return this.jacdacInHex && this.usesCODAL;
|
|
3190
3191
|
}
|
|
3191
3192
|
processSerialLine(line) {
|
|
3192
3193
|
if (this.onSerial) {
|
|
@@ -3321,6 +3322,7 @@ class DAPWrapper {
|
|
|
3321
3322
|
const binVersion = stringResponse(r);
|
|
3322
3323
|
log(`bin name: ${this.binName} v:${binVersion}`);
|
|
3323
3324
|
pxt.tickEvent("hid.flash.connect", { codal: this.usesCODAL ? 1 : 0, daplink: daplinkVersion, bin: binVersion });
|
|
3325
|
+
// set baud rate
|
|
3324
3326
|
const baud = new Uint8Array(5);
|
|
3325
3327
|
baud[0] = 0x82; // set baud
|
|
3326
3328
|
pxt.HF2.write32(baud, 1, 115200);
|
|
@@ -3329,6 +3331,7 @@ class DAPWrapper {
|
|
|
3329
3331
|
await pxt.Util.delay(200);
|
|
3330
3332
|
// only init after setting baud rate, in case we got reset
|
|
3331
3333
|
await this.cortexM.init();
|
|
3334
|
+
await this.cortexM.reset(true);
|
|
3332
3335
|
const res = await this.readWords(0x10000010, 2);
|
|
3333
3336
|
this.pageSize = res[0];
|
|
3334
3337
|
this.numPages = res[1];
|
|
@@ -3362,9 +3365,13 @@ class DAPWrapper {
|
|
|
3362
3365
|
.then(() => this.io.disconnectAsync());
|
|
3363
3366
|
}
|
|
3364
3367
|
reflashAsync(resp) {
|
|
3368
|
+
var _a, _b;
|
|
3369
|
+
pxt.tickEvent("hid.flash.start");
|
|
3365
3370
|
log("reflash");
|
|
3366
3371
|
startTime = 0;
|
|
3367
|
-
|
|
3372
|
+
const codalJson = resp.outfiles["codal.json"];
|
|
3373
|
+
// JACDAC_WEBUSB is defined in microsoft/pxt-jacdac/pxt.json
|
|
3374
|
+
this.jacdacInHex = codalJson && !!((_b = (_a = pxt.Util.jsonTryParse(codalJson)) === null || _a === void 0 ? void 0 : _a.definitions) === null || _b === void 0 ? void 0 : _b.JACDAC_WEBUSB);
|
|
3368
3375
|
this.flashAborted = false;
|
|
3369
3376
|
this.flashing = true;
|
|
3370
3377
|
return (this.io.isConnected() ? Promise.resolve() : this.io.reconnectAsync())
|
|
@@ -3721,8 +3728,17 @@ class DAPWrapper {
|
|
|
3721
3728
|
log(`jacdac: disabled`);
|
|
3722
3729
|
return;
|
|
3723
3730
|
}
|
|
3724
|
-
|
|
3725
|
-
const
|
|
3731
|
+
// allow jacdac to boot
|
|
3732
|
+
const now = pxt.U.now();
|
|
3733
|
+
await pxt.Util.delay(1000);
|
|
3734
|
+
let xchgRetry = 0;
|
|
3735
|
+
let xchg;
|
|
3736
|
+
while (xchg == null && xchgRetry++ < 2) {
|
|
3737
|
+
log(`jacdac: finding xchg address (retry ${xchgRetry})`);
|
|
3738
|
+
await pxt.Util.delay(100); // wait for the program to start and setup memory correctly
|
|
3739
|
+
xchg = await this.findJacdacXchgAddr();
|
|
3740
|
+
}
|
|
3741
|
+
log(`jacdac: exchange address 0x${xchg ? xchg.toString(16) : "?"}; ${xchgRetry} retries; ${(pxt.U.now() - now) | 0}ms`);
|
|
3726
3742
|
if (xchg == null) {
|
|
3727
3743
|
log("jacdac: xchg address not found");
|
|
3728
3744
|
pxt.tickEvent("hid.flash.jacdac.error.missingxchg");
|