Skip to content

Commit 4263051

Browse files
committed
firmware/sagas: handle case of checksum-type == 'none'
The v2.1 spec allows this, but up to now, Pybricks code didn't handle it.
1 parent fadc3bc commit 4263051

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/firmware/sagas.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import {
88
encodeHubName,
99
metadataIsV100,
1010
metadataIsV110,
11+
metadataIsV200,
12+
metadataIsV210,
1113
} from '@pybricks/firmware';
1214
import cityHubZip from '@pybricks/firmware/build/cityhub.zip';
1315
import moveHubZip from '@pybricks/firmware/build/movehub.zip';
@@ -342,6 +344,11 @@ function* loadFirmware(
342344
return { firmware, deviceId: metadata['device-id'] };
343345
}
344346

347+
assert(
348+
metadataIsV200(metadata) || metadataIsV210(metadata),
349+
'Expected metadata to be v2.x',
350+
);
351+
345352
const firmware = new Uint8Array(firmwareBase.length + 4);
346353
const firmwareView = new DataView(firmware.buffer);
347354

@@ -360,6 +367,8 @@ function* loadFirmware(
360367
);
361368
case 'crc32':
362369
return crc32(firmwareIterator(firmwareView, metadata['checksum-size']));
370+
case 'none':
371+
return null;
363372
default:
364373
return undefined;
365374
}
@@ -380,7 +389,9 @@ function* loadFirmware(
380389
throw new Error('unreachable');
381390
}
382391

383-
firmwareView.setUint32(firmwareBase.length, checksum, true);
392+
if (checksum !== null) {
393+
firmwareView.setUint32(firmwareBase.length, checksum, true);
394+
}
384395

385396
return { firmware, deviceId: metadata['device-id'] };
386397
}

0 commit comments

Comments
 (0)