2021-02-11 00:08:21 +01:00
|
|
|
use anyhow::Result;
|
2021-02-11 00:27:44 +01:00
|
|
|
use clap::{crate_authors, crate_description, crate_name, crate_version, Clap};
|
2021-02-11 00:08:21 +01:00
|
|
|
use serial_embedded_hal::{PortSettings, Serial};
|
|
|
|
use spidriver::SPIDriver;
|
|
|
|
|
|
|
|
use std::io;
|
|
|
|
|
2021-02-11 00:27:44 +01:00
|
|
|
#[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,
|
|
|
|
}
|
|
|
|
|
2021-02-11 00:08:21 +01:00
|
|
|
fn main() -> Result<()> {
|
2021-02-11 00:27:44 +01:00
|
|
|
let opts: Opts = Opts::parse();
|
|
|
|
|
2021-02-11 00:08:21 +01:00
|
|
|
let port = Serial::new(
|
2021-02-11 00:27:44 +01:00
|
|
|
&opts.port,
|
2021-02-11 00:08:21 +01:00
|
|
|
&PortSettings {
|
2021-02-11 00:27:44 +01:00
|
|
|
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!(),
|
|
|
|
},
|
2021-02-11 00:08:21 +01:00
|
|
|
},
|
|
|
|
)?;
|
|
|
|
|
|
|
|
let (tx, rx) = port.split();
|
|
|
|
let mut spidriver = SPIDriver::new(tx, rx);
|
2021-02-11 00:27:44 +01:00
|
|
|
|
2021-02-11 00:08:21 +01:00
|
|
|
loop {
|
|
|
|
let mut input = String::new();
|
|
|
|
io::stdin().read_line(&mut input)?;
|
|
|
|
|
|
|
|
let mut data = input.into_bytes();
|
|
|
|
spidriver.transfer(&mut data);
|
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|