write method
Transmit a raw byte sequence.
Implementation
@override
Future<void> write(List<int> bytes) async {
if (!isOpen) {
throw StateError('LibserialportSerialTransport not open');
}
final buf = malloc<Uint8>(bytes.length);
try {
for (var i = 0; i < bytes.length; i++) {
buf[i] = bytes[i] & 0xFF;
}
var remaining = bytes.length;
var offset = 0;
while (remaining > 0) {
final written = _bindings.spNonblockingWrite(
_port!, buf + offset, remaining,
);
if (written < 0) {
throw StateError('sp_nonblocking_write failed: rc=$written');
}
if (written == 0) {
// Yield so the caller can retry; libserialport's non-blocking
// path returns 0 when the OS buffer is full.
await Future<void>.delayed(const Duration(milliseconds: 1));
continue;
}
remaining -= written;
offset += written;
}
} finally {
malloc.free(buf);
}
}