mirror of
https://github.com/pybricks/pybricks-code.git
synced 2026-09-12 01:23:52 +00:00
don't expect response on disconnect commands
The LWP3 bootloader disconnect and reboot commands cause the device to disconnect before sending a response, so we must always use write without response for these, otherwise the program can hang waiting for a response.
This commit is contained in:
@@ -121,6 +121,11 @@ describe('message encoder', () => {
|
||||
],
|
||||
],
|
||||
])('encode %s request', async (_n, request, expected) => {
|
||||
const messageTypesThatShouldBeCalledWithoutResponse = [
|
||||
BootloaderRequestActionType.Program,
|
||||
BootloaderRequestActionType.Reboot,
|
||||
BootloaderRequestActionType.Disconnect,
|
||||
];
|
||||
const saga = new AsyncSaga(bootloader);
|
||||
saga.put(request);
|
||||
const message = new Uint8Array(expected);
|
||||
@@ -128,7 +133,7 @@ describe('message encoder', () => {
|
||||
expect(action).toEqual(
|
||||
send(
|
||||
message,
|
||||
/* withResponse */ request.type !== BootloaderRequestActionType.Program,
|
||||
!messageTypesThatShouldBeCalledWithoutResponse.includes(request.type),
|
||||
),
|
||||
);
|
||||
await saga.end();
|
||||
|
||||
@@ -81,7 +81,7 @@ function* encodeRequest(): Generator {
|
||||
);
|
||||
break;
|
||||
case BootloaderRequestActionType.Reboot:
|
||||
yield put(send(createStartAppRequest()));
|
||||
yield put(send(createStartAppRequest(), /* withResponse */ false));
|
||||
break;
|
||||
case BootloaderRequestActionType.Init:
|
||||
yield put(send(createInitLoaderRequest(action.firmwareSize)));
|
||||
@@ -96,7 +96,7 @@ function* encodeRequest(): Generator {
|
||||
yield put(send(createGetFlashStateRequest()));
|
||||
break;
|
||||
case BootloaderRequestActionType.Disconnect:
|
||||
yield put(send(createDisconnectRequest()));
|
||||
yield put(send(createDisconnectRequest(), /* withResponse */ false));
|
||||
break;
|
||||
/* istanbul ignore next: should not be possible to reach */
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user