spidrs/src/main.rs
finga 6deaff5af9 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.
2021-02-11 02:35:08 +01:00

73 lines
2.6 KiB
Rust

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(
&opts.port,
&PortSettings {
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)?;
let mut data = input.into_bytes();
spidriver.transfer(&mut data);
}
Ok(())
}