Dart package for accessing serial ports on Linux using dart:ffi.

Example usage

/// get the list of available serial ports
final ports = SerialPorts.ports;

/// find the serial port with the name `ttyS0`
final port = ports.singleWhere((p) => == 'ttyS0');

/// open the port, so we can read and write things to it
final handle = Baudrate.b9600);

/// set the encoding used for converting written strings to bytes and vice-versa
handle.encoding = AsciiCodec();

/// get a new serial port reader.
/// this sequential reader will buffer all incoming until we read from it.
/// We can also get another sequential reader if we want to, in that case the
/// two constructed sequential readers may emit the same strings.
final reader = handle.getNewSequentialReader();

/// write ATWS followed by a carriage return to the serial port.
/// This is an example communication with a ELM327. ATWS basically
/// reboots the ELM.
await handle.write('ATWS\r');

/// The the command (in this case, the reboot) is complete when
/// we read a carriage return and a '>' from the ELM.
/// The response we read does NOT include the '\r>'.
var response = await reader.readln('\r>');

await handle.write('ATE0\r');
response = await reader.readln('\r>');

await handle.write('ATL0\r');
response = await reader.readln('\r>');

await handle.write("ATS0");
response = await reader.readln('\r>');

await handle.write('ATI\r');
response = await reader.readln('\r>');
response = response.replaceAll('\r', '');
print('ATI: $response');

await handle.write('01001');
response = await reader.readln('\r>');
response = response.replaceAll('\r', '');
print('01001: $response');

await reader.close();
await handle.close();