static async Task <int> Main(string[] args) { var app = new CommandLineApplication(); var serialPortNameArgument = app.Argument("SerialPort", "Specifies the serial port to be used when reading data.", a => a.IsRequired()); var baudRateOption = app.Option <int>("-br | --baudrate", "Specifies the serial port baud rate. Default value is '2400'", CommandOptionType.SingleValue); var parityOption = app.Option <string>("-p | --parity", "Specifies the serial port parity. Default value is 'none'", CommandOptionType.SingleValue, o => o.Accepts(vb => vb.Values("none", "odd", "even", "mark", "space"))); var databitsOption = app.Option <int>("-db | --databits", "Specifies the serial port databits. Default value is '8'", CommandOptionType.SingleValue); var stopbitsOption = app.Option <string>("-sb | --stopbits", "Specifies the serial port stop bits, Default values is 'one'", CommandOptionType.SingleValue, o => o.Accepts(vb => vb.Values("none", "one", "two", "onepointfive"))); app.HelpOption("-h|--help"); app.VersionOption("-v | --version", GetCurrentVersion()); app.OnExecuteAsync(async token => { var reader = new HANSerialPortReader(new FrameReader(new HeaderReader(), new Crc16CyclicRedundancyChecker(), new DateTimeReader(), new PayloadReader())); var serialPortName = serialPortNameArgument.Value; var baudRate = baudRateOption.HasValue() ? baudRateOption.ParsedValue : 2400; var parity = parityOption.HasValue() ? Enum.Parse <Parity>(parityOption.ParsedValue, ignoreCase: true) : Parity.None; var databits = databitsOption.HasValue() ? databitsOption.ParsedValue : 8; var stopBits = stopbitsOption.HasValue() ? Enum.Parse <StopBits>(stopbitsOption.ParsedValue) : StopBits.One; var serialPort = new SerialPort(serialPortName, baudRate, parity, databits, stopBits); serialPort.Open(); await reader.StartAsync(serialPort.BaseStream, (frame) => { var json = JsonConvert.SerializeObject(frame); Console.WriteLine(json); }); }); return(await app.ExecuteAsync(args)); }
public async Task ShouldReadFromStream() { var firstframe = ByteHelper.CreateByteArray(fullFrame); var secondFrame = ByteHelper.CreateByteArray(fullFrame); TestStream testStream = new TestStream(); var writeTask = Task.Run(async() => { await Task.Delay(500); //testStream.Write(firstframe.ToArray()); testStream.Write(firstframe); await Task.Delay(500); testStream.Write(secondFrame); await Task.Delay(500); testStream.Write(Array.Empty <byte>()); }); var reader = new HANSerialPortReader(new FrameReader(new HeaderReader(new Crc16CyclicRedundancyChecker()), new Crc16CyclicRedundancyChecker(), new DateTimeReader(), new PayloadReader())); var readerTask = reader.StartAsync(testStream, frame => { Console.WriteLine(JsonConvert.SerializeObject(frame)); }); await Task.WhenAll(writeTask, readerTask); }