From 0d89f8daadcb53efdf8b1df83b72ad2f10adfb99 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 12 Apr 2021 10:34:59 -0500 Subject: [PATCH 1/4] Disable flash button when hub is connected. Fixes: https://github.com/pybricks/support/issues/299 --- src/firmware/FlashButton.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/firmware/FlashButton.tsx b/src/firmware/FlashButton.tsx index 89e73804..c8d5d4b0 100644 --- a/src/firmware/FlashButton.tsx +++ b/src/firmware/FlashButton.tsx @@ -2,6 +2,7 @@ // Copyright (c) 2020-2021 The Pybricks Authors import { connect } from 'react-redux'; +import { HubRuntimeState } from '../hub/reducers'; import { BootloaderConnectionState } from '../lwp3-bootloader/reducers'; import * as notification from '../notifications/actions'; import { RootState } from '../reducers'; @@ -19,7 +20,9 @@ type OwnProps = Pick; const mapStateToProps = (state: RootState): StateProps => ({ tooltip: state.firmware.flashing ? TooltipId.FlashProgress : TooltipId.Flash, - enabled: state.bootloader.connection === BootloaderConnectionState.Disconnected, + enabled: + state.bootloader.connection === BootloaderConnectionState.Disconnected && + state.hub.runtime === HubRuntimeState.Disconnected, showProgress: state.firmware.flashing, progress: state.firmware.progress === null ? undefined : state.firmware.progress, }); From 1964c9c4857f179d67fd3be55d28119dfb533af0 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 12 Apr 2021 13:24:10 -0500 Subject: [PATCH 2/4] Add timeout while waiting for checksum This adds a timeout while waiting for the checksum from the hub when downloading and running a program. Without this, we can get stuck in the "loading" state if the hub doesn't respond as expected. This can happen, for example, if a program is started with the hub button at the same time as the start button in Pybricks Code is pressed. Issue: https://github.com/pybricks/support/issues/301 --- src/hub/sagas.ts | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/hub/sagas.ts b/src/hub/sagas.ts index 55eedb29..cd795dcd 100644 --- a/src/hub/sagas.ts +++ b/src/hub/sagas.ts @@ -4,6 +4,7 @@ import { SagaGenerator, actionChannel, + delay, getContext, put, race, @@ -108,7 +109,19 @@ function* downloadAndRun(_action: HubDownloadAndRunAction): Generator { return; } - const checksumAction = yield* take(checksumChannel); + const { checksumAction, checksumTimeout } = yield* race({ + checksumAction: take(checksumChannel), + checksumTimeout: delay(1000), + }); + + if (checksumTimeout) { + console.error(`timeout waiting for checksum`); + yield* put(didFailToFinishDownload()); + return; + } + + defined(checksumAction); + if (checksumAction.checksum !== (0xff ^ xor8(sizeBuf))) { console.error( `bad checksum ${checksumAction.checksum} vs ${0xff ^ xor8(sizeBuf)}`, @@ -136,7 +149,20 @@ function* downloadAndRun(_action: HubDownloadAndRunAction): Generator { } // TODO: dispatch progress } - const checksumAction = yield* take(checksumChannel); + + const { checksumAction, checksumTimeout } = yield* race({ + checksumAction: take(checksumChannel), + checksumTimeout: delay(1000), + }); + + if (checksumTimeout) { + console.error(`timeout waiting for checksum`); + yield* put(didFailToFinishDownload()); + return; + } + + defined(checksumAction); + if (checksumAction.checksum !== (0xff ^ xor8(chunk))) { console.error( `bad checksum ${checksumAction.checksum} vs ${0xff ^ xor8(chunk)}`, From aa6394fdc24a8dd14f4c0affeb54dfb5e26e5c62 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 12 Apr 2021 13:49:05 -0500 Subject: [PATCH 3/4] Pybricks firmware v3.0.0b5 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ecf154fa..a5d52622 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "dependencies": { "@blueprintjs/core": "^3.41.0", "@craco/craco": "^6.1.1", - "@pybricks/firmware": "4.8.0", + "@pybricks/firmware": "4.9.0", "@pybricks/ide-docs": "1.3.1", "@pybricks/mpy-cross-v5": "^2.0.0", "@shopify/react-i18n": "^5.3.0", diff --git a/yarn.lock b/yarn.lock index fa97c3e3..69e9811f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1500,10 +1500,10 @@ schema-utils "^2.6.5" source-map "^0.7.3" -"@pybricks/firmware@4.8.0": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@pybricks/firmware/-/firmware-4.8.0.tgz#6f70d12800a449e4960bc02b702fa7bbd1de39de" - integrity sha512-w6owDDc/GhOm8AowR6Pnl/akbsM0PVgbK8bNzUv01P6lgP1h17IK3HWtHwv75vntPX+9SrsVf5myvny8VhY9Pg== +"@pybricks/firmware@4.9.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@pybricks/firmware/-/firmware-4.9.0.tgz#73854a4dd2949bb2c6faf770c893ad30f9ed7fba" + integrity sha512-TJB9232CGRDfeZzKiCnKVsNwfl+zCBKQZI9a0TotzhcZIbpVe+flGZOVXNG2J6CI8GCcrED56jv9uIgZk/zLGA== dependencies: jszip "^3.5.0" From 0f56fa0b8245a2f0c02c9c6a2c7d3cd28a87f222 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 12 Apr 2021 13:49:58 -0500 Subject: [PATCH 4/4] v1.0.0-beta.13 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a5d52622..159aeeda 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pybricks/pybricks-code", - "version": "1.0.0-beta.12", + "version": "1.0.0-beta.13", "license": "MIT", "author": "The Pybricks Authors", "repository": {