async Task SimpleCommandTxRxAsync(ISweepCommand cmd) { var buffer = new byte[cmd.ExpectedAnswerLength]; // throwaway stuff in the RX buffer! serialPort.DiscardInBuffer(); // TX then RX await serialPort.WriteAsync(cmd.Command.Select(x => (byte)x).ToArray(), 0, cmd.Command.Length); var bytesRead = await serialPort.ReadAsync(buffer, 0, cmd.ExpectedAnswerLength); if(bytesRead == cmd.ExpectedAnswerLength) { cmd.ProcessResponse(buffer.Select(x => (char)x).ToArray()); } else { throw new SweepProtocolErrorException( $"Answer was {bytesRead} bytes long instead of expected {cmd.ExpectedAnswerLength}", buffer.Select(x => (char)x).ToArray()); } }
void SimpleCommandTxRx(ISweepCommand cmd) { SimpleCommandTxRxAsync(cmd).Wait(); }