readUntilQuiet function
Future<Uint8List>
readUntilQuiet(
- SerialPort port, {
- Duration timeout = const Duration(seconds: 2),
- Duration quiet = const Duration(milliseconds: 180),
Implementation
Future<Uint8List> readUntilQuiet(SerialPort port, {Duration timeout = const Duration(seconds: 2), Duration quiet = const Duration(milliseconds: 180)}) async {
final reader = SerialPortReader(port);
final out = <int>[];
final done = Completer<Uint8List>();
Timer? q;
late StreamSubscription sub;
void finish() async {
if (!done.isCompleted) done.complete(Uint8List.fromList(out));
await sub.cancel();
q?.cancel();
}
final hard = Timer(timeout, finish);
sub = reader.stream.listen(
(chunk) {
out.addAll(chunk);
q?.cancel();
q = Timer(quiet, finish);
},
onError: (_) => finish(),
onDone: finish,
);
final res = await done.future;
hard.cancel();
return res;
}