Example #1
0
        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);
        }