spidrs/src/main.rs

73 lines
2.6 KiB
Rust
Raw Permalink Normal View History

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(())
}