finga
6deaff5af9
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.
73 lines
2.6 KiB
Rust
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(())
|
|
}
|