mirror of
https://github.com/pybricks/pybricks-code.git
synced 2026-09-15 11:04:49 +00:00
firmware: add windows BLE hacks
This works around some issues that have been observed on a specific Windows computer. Issue: https://github.com/pybricks/support/issues/256
This commit is contained in:
@@ -136,7 +136,7 @@ describe('flashFirmware', () => {
|
||||
// erase first
|
||||
|
||||
action = await saga.take();
|
||||
expect(action).toEqual(eraseRequest(1));
|
||||
expect(action).toEqual(eraseRequest(1, /* isCityHub */ false));
|
||||
|
||||
saga.put(didRequest(1));
|
||||
saga.put(eraseResponse(Result.OK));
|
||||
@@ -857,7 +857,7 @@ describe('flashFirmware', () => {
|
||||
// erase first
|
||||
|
||||
action = await saga.take();
|
||||
expect(action).toEqual(eraseRequest(1));
|
||||
expect(action).toEqual(eraseRequest(1, /* isCityHub */ false));
|
||||
|
||||
saga.put(didRequest(1));
|
||||
saga.put(eraseResponse(Result.Error));
|
||||
@@ -958,7 +958,7 @@ describe('flashFirmware', () => {
|
||||
// erase first
|
||||
|
||||
action = await saga.take();
|
||||
expect(action).toEqual(eraseRequest(1));
|
||||
expect(action).toEqual(eraseRequest(1, /* isCityHub */ false));
|
||||
|
||||
saga.put(didRequest(1));
|
||||
saga.put(eraseResponse(Result.OK));
|
||||
@@ -1068,7 +1068,7 @@ describe('flashFirmware', () => {
|
||||
// erase first
|
||||
|
||||
action = await saga.take();
|
||||
expect(action).toEqual(eraseRequest(1));
|
||||
expect(action).toEqual(eraseRequest(1, /* isCityHub */ false));
|
||||
|
||||
saga.put(didRequest(1));
|
||||
saga.put(eraseResponse(Result.OK));
|
||||
@@ -1218,7 +1218,7 @@ describe('flashFirmware', () => {
|
||||
// erase first
|
||||
|
||||
action = await saga.take();
|
||||
expect(action).toEqual(eraseRequest(1));
|
||||
expect(action).toEqual(eraseRequest(1, /* isCityHub */ false));
|
||||
|
||||
saga.put(didRequest(1));
|
||||
saga.put(eraseResponse(Result.OK));
|
||||
@@ -1370,7 +1370,7 @@ describe('flashFirmware', () => {
|
||||
// erase first
|
||||
|
||||
action = await saga.take();
|
||||
expect(action).toEqual(eraseRequest(1));
|
||||
expect(action).toEqual(eraseRequest(1, /* isCityHub */ false));
|
||||
|
||||
saga.put(didRequest(1));
|
||||
saga.put(eraseResponse(Result.OK));
|
||||
@@ -1900,7 +1900,7 @@ describe('flashFirmware', () => {
|
||||
// erase first
|
||||
|
||||
action = await saga.take();
|
||||
expect(action).toEqual(eraseRequest(1));
|
||||
expect(action).toEqual(eraseRequest(1, /* isCityHub */ false));
|
||||
|
||||
saga.put(didRequest(1));
|
||||
saga.put(eraseResponse(Result.OK));
|
||||
|
||||
+13
-1
@@ -38,6 +38,7 @@ import {
|
||||
connect,
|
||||
disconnect,
|
||||
eraseRequest,
|
||||
eraseResponse,
|
||||
infoRequest,
|
||||
initRequest,
|
||||
programRequest,
|
||||
@@ -126,6 +127,15 @@ function* waitForResponse<T extends BootloaderResponseAction>(
|
||||
});
|
||||
|
||||
if (timedOut) {
|
||||
// istanbul ignore if: this hacks around a hardware/OS issue
|
||||
if (type === BootloaderResponseActionType.Erase) {
|
||||
// It has been observed that sometimes this response is not received
|
||||
// or gets stuck in the Bluetooth stack until another request is sent.
|
||||
// So, we ignore the timeout and continue. If there really was a
|
||||
// problem, then the next request should fail anyway.
|
||||
console.warn('Timeout waiting for erase response, continuing anyway.');
|
||||
return eraseResponse(Result.OK) as T;
|
||||
}
|
||||
yield* put(didFailToFinish(FailToFinishReasonType.TimedOut));
|
||||
yield* disconnectAndCancel();
|
||||
}
|
||||
@@ -335,7 +345,9 @@ function* flashFirmware(action: FlashFirmwareFlashAction): Generator {
|
||||
|
||||
yield* put(didStart());
|
||||
|
||||
const eraseAction = yield* put(eraseRequest(nextMessageId()));
|
||||
const eraseAction = yield* put(
|
||||
eraseRequest(nextMessageId(), deviceId === HubType.CityHub),
|
||||
);
|
||||
const { erase } = yield* all({
|
||||
sent: waitForDidRequest(eraseAction.id),
|
||||
erase: waitForResponse<BootloaderEraseResponseAction>(
|
||||
|
||||
Reference in New Issue
Block a user