public async Task Run() { var caseInsensitiveParser = new Parser( with => { with.CaseSensitive = false; with.IgnoreUnknownArguments = false; with.HelpWriter = Console.Out; with.AutoVersion = true; with.AutoHelp = true; }); var parsedOptions = new FirmwareUploaderOptions(); try { var result = caseInsensitiveParser.ParseArguments <FirmwareUploaderOptions>(commandLineArguments); result.WithParsed(options => parsedOptions = options).WithNotParsed( errors => errors.ToList().ForEach(e => errorMessages.Add(e.ToString()))); } catch (Exception ex) { errorMessages.Add(ex.Message); } if (errorMessages.Any()) { Environment.Exit(-1); } int exitCode = await PerformUpload(parsedOptions); Environment.Exit(exitCode); }
private async Task <int> PerformUpload(FirmwareUploaderOptions options) { Console.WriteLine($"COM port: {options.PortName}"); Console.WriteLine($"File: {options.HexFile}"); var ports = SerialPortStream.GetPortNames().ToList(); // var descriptions = SerialPortStream.GetPortDescriptions().ToList(); if (!ports.Contains(options.PortName)) { throw new InvalidOperationException( "The specified port does not exist on the system. Please make sure the device is connected and try again."); } string bootloaderPort = await RunBootLoader(options.PortName, ports); if (string.IsNullOrWhiteSpace(bootloaderPort)) { throw new InvalidOperationException("Unable to detect boot-loader port. Firmware upload failed."); } Console.WriteLine($"Detected bootloader port on {bootloaderPort}"); int exitCode = await InvokeAvrDude(bootloaderPort, options.HexFile, options.Verbose); Console.WriteLine($"Programmer returned with exit code {exitCode}"); string disposition = exitCode == 0 ? "SUCCESSFUL" : "FAILED"; if (exitCode == 0) { Console.WriteLine("*******************************************************"); Console.WriteLine("* "); Console.WriteLine("* Firmware update SUCCESSFUL "); Console.WriteLine("* "); Console.WriteLine("*******************************************************"); } else { Console.Error.WriteLine("*******************************************************"); Console.Error.WriteLine("* "); Console.Error.WriteLine($"* Firmware update FAILED with code {exitCode}"); Console.Error.WriteLine("* "); Console.Error.WriteLine("*******************************************************"); } return(exitCode); }