Skip to content

Commit 42819e2

Browse files
committed
fix(dust-sensor): validate UART firmware setup
1 parent de82479 commit 42819e2

3 files changed

Lines changed: 24 additions & 5 deletions

File tree

‎lib/communication/peripherals/uart.dart‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ class Uart2 {
3232
packetHandler.sendByte(_commands.uart2);
3333
packetHandler.sendByte(_commands.setBaud);
3434
packetHandler.sendInt(divider);
35-
await packetHandler.getAcknowledgement();
35+
final acknowledgement = await packetHandler.getAcknowledgement();
36+
if (acknowledgement != 1) {
37+
throw StateError(
38+
'UART2 rejected baud-rate configuration (ACK $acknowledgement)',
39+
);
40+
}
3641
}
3742

3843
Future<bool> hasData() async {

‎lib/providers/dust_sensor_state_provider.dart‎

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ class Sds011DustSensorSource implements DustSensorSource {
9393

9494
final ScienceLab scienceLab;
9595
Uart2? _uart;
96+
int? _uartFirmwareMajor;
9697
final Sds011FrameParser _parser = Sds011FrameParser();
9798

9899
Sds011DustSensorSource(this.scienceLab);
@@ -103,10 +104,17 @@ class Sds011DustSensorSource implements DustSensorSource {
103104
@override
104105
Future<void> initialize() async {
105106
final firmwareMajor = getIt.get<BoardStateProvider>().pslabFirmwareVersion;
106-
final uart = _uart ??= Uart2(
107-
scienceLab.mPacketHandler,
108-
requiresWriteAcknowledgement: firmwareMajor > 0 && firmwareMajor < 3,
109-
);
107+
if (firmwareMajor == 0) {
108+
throw StateError('Unable to determine the PSLab firmware version');
109+
}
110+
if (_uart == null || _uartFirmwareMajor != firmwareMajor) {
111+
_uart = Uart2(
112+
scienceLab.mPacketHandler,
113+
requiresWriteAcknowledgement: firmwareMajor < 3,
114+
);
115+
_uartFirmwareMajor = firmwareMajor;
116+
}
117+
final uart = _uart!;
110118
await uart.configure(baudRate);
111119
}
112120

‎test/uart_test.dart‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ void main() {
6565
expect(handler.writes, [5, 4, 0x82, 0x06]);
6666
});
6767

68+
test('rejects a failed baud-rate acknowledgement', () async {
69+
handler.responses.add(3);
70+
71+
await expectLater(uart.configure(9600), throwsStateError);
72+
});
73+
6874
test('reads UART status and one byte without bulk length fields', () async {
6975
handler.responses.addAll([1, 0xaa]);
7076

0 commit comments

Comments
 (0)