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:
parent
556d43654b
commit
6deaff5af9
3 changed files with 290 additions and 6 deletions
54
src/main.rs
54
src/main.rs
|
@ -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)?;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue