send method

  1. @override
Future<void> send(
  1. CanFrame frame
)
override

Transmit a frame. Completes when the frame is handed off to the bus.

Implementation

@override
Future<void> send(CanFrame frame) async {
  if (!isOpen) throw StateError('SocketCanTransport not open');
  final bytes = frame.fd ? frame.encodeFd() : frame.encode();
  final size = bytes.length;
  final buf = malloc<Uint8>(size);
  try {
    for (var i = 0; i < size; i++) {
      buf[i] = bytes[i];
    }
    final n = _bindings.write(_fd, buf, size);
    if (n != size) {
      throw StateError(
        'write(${frame.fd ? "canfd_frame" : "can_frame"}) returned $n '
        '(expected $size)',
      );
    }
  } finally {
    malloc.free(buf);
  }
}