Parse command line arguments.

All available parameters can be passed as arguments with clap.  Port,
baud rate, char size, parity, stop bits and flow control can now be
specified.
This commit is contained in:
finga 2021-02-11 00:27:44 +01:00
parent 556d43654b
commit 6deaff5af9
3 changed files with 290 additions and 6 deletions

View file

@ -1,23 +1,65 @@
use anyhow::Result;
use clap::{crate_authors, crate_description, crate_name, crate_version, Clap};
use serial_embedded_hal::{PortSettings, Serial};
use spidriver::SPIDriver;
use std::io;
#[derive(Clap)]
#[clap(name = crate_name!(), version = crate_version!(),
author = crate_authors!(","), about = crate_description!())]
struct Opts {
#[clap(short, long, default_value = "/dev/ttyUSB0")]
port: String,
#[clap(short, long, default_value = "460800")]
baud_rate: usize,
#[clap(short, long, default_value = "8", possible_values = &["5", "6", "7", "8"])]
char_size: u8,
#[clap(short = 'P', long, default_value = "none", possible_values = &["none", "odd", "even"])]
parity: String,
#[clap(short, long, default_value = "1", possible_values = &["1", "2"])]
stop_bits: u8,
#[clap(short, long, default_value = "none", possible_values = &["none", "software", "hardware"])]
flow_control: String,
}
fn main() -> Result<()> {
let opts: Opts = Opts::parse();
let port = Serial::new(
"/dev/ttyUSB0",
&opts.port,
&PortSettings {
baud_rate: serial_embedded_hal::BaudRate::BaudOther(460800),
char_size: serial_embedded_hal::CharSize::Bits8,
parity: serial_embedded_hal::Parity::ParityNone,
stop_bits: serial_embedded_hal::StopBits::Stop1,
flow_control: serial_embedded_hal::FlowControl::FlowNone,
baud_rate: serial_embedded_hal::BaudRate::BaudOther(opts.baud_rate),
char_size: match opts.char_size {
5 => serial_embedded_hal::CharSize::Bits5,
6 => serial_embedded_hal::CharSize::Bits6,
7 => serial_embedded_hal::CharSize::Bits7,
8 => serial_embedded_hal::CharSize::Bits8,
_ => unreachable!(),
},
parity: match opts.parity.as_str() {
"none" => serial_embedded_hal::Parity::ParityNone,
"odd" => serial_embedded_hal::Parity::ParityOdd,
"even" => serial_embedded_hal::Parity::ParityEven,
_ => unreachable!(),
},
stop_bits: match opts.stop_bits {
1 => serial_embedded_hal::StopBits::Stop1,
2 => serial_embedded_hal::StopBits::Stop2,
_ => unreachable!(),
},
flow_control: match opts.flow_control.as_str() {
"none" => serial_embedded_hal::FlowControl::FlowNone,
"software" => serial_embedded_hal::FlowControl::FlowSoftware,
"hardware" => serial_embedded_hal::FlowControl::FlowHardware,
_ => unreachable!(),
},
},
)?;
let (tx, rx) = port.split();
let mut spidriver = SPIDriver::new(tx, rx);
loop {
let mut input = String::new();
io::stdin().read_line(&mut input)?;