ebyte_e32_ui/
arguments.rs

1//! A CLI interface with configuration data for running an Ebyte module.
2
3use clap::{Parser, ValueHint};
4use ebyte_e32::parameters::{
5    AirBaudRate, BaudRate, ForwardErrorCorrectionMode, IoDriveMode, Parity, Persistence,
6    TransmissionMode, TransmissionPower, WakeupTime,
7};
8use std::path::PathBuf;
9
10/// Operational mode for Ebyte module driver.
11#[derive(clap::Subcommand, Clone, Debug, Eq, PartialEq)]
12pub enum Mode {
13    /// Read Ebyte module data and print to stdout.
14    ReadModelData,
15
16    /// Read Ebyte module parameters and print to stdout.
17    ReadParameters,
18
19    /// Write Ebyte module parameters.
20    Configure(Parameters),
21
22    /// Listen for incoming data on the Ebyte module.
23    Listen,
24
25    /// Send data from stdin over the Ebyte module.
26    Send,
27}
28
29/// CLI interface definition.
30#[derive(Clone, Debug, PartialEq, Eq, Parser)]
31#[clap(author, version, about, long_about = None)]
32pub struct Args {
33    /// Configuration file.
34    #[clap(long, parse(from_os_str), default_value = "Config.toml", value_hint = ValueHint::FilePath)]
35    pub config: PathBuf,
36
37    /// Application mode.
38    #[clap(subcommand)]
39    pub mode: Mode,
40}
41
42#[derive(Clone, Debug, PartialEq, Eq, Parser)]
43pub struct Parameters {
44    /// Module Address (16 Bit).
45    #[clap(short, long, required = true)]
46    pub address: u16,
47
48    /// Channel (8 Bit).
49    #[clap(short, long, required = true)]
50    pub channel: u8,
51
52    /// Whether settings should be saved persistently on the module.
53    #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
54    pub persistence: Persistence,
55
56    /// UART Parity.
57    #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
58    pub uart_parity: Parity,
59
60    /// UART Baudrate.
61    #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
62    pub uart_rate: BaudRate,
63
64    /// Air Baudrate.
65    #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
66    pub air_rate: AirBaudRate,
67
68    /// Transmission Mode.
69    #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
70    pub transmission_mode: TransmissionMode,
71
72    /// IO drive Mode for AUX pin.
73    #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
74    pub io_drive_mode: IoDriveMode,
75
76    /// Wireless Wakeup Time.
77    #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
78    pub wakeup_time: WakeupTime,
79
80    /// Forward Error Correction Mode.
81    #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
82    pub fec: ForwardErrorCorrectionMode,
83
84    /// Transmission Power.
85    #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
86    pub transmission_power: TransmissionPower,
87}
88
89impl From<&Parameters> for ebyte_e32::Parameters {
90    fn from(params: &Parameters) -> Self {
91        Self {
92            address: params.address,
93            channel: params.channel,
94            uart_parity: params.uart_parity,
95            uart_rate: params.uart_rate,
96            air_rate: params.air_rate,
97            transmission_mode: params.transmission_mode,
98            io_drive_mode: params.io_drive_mode,
99            wakeup_time: params.wakeup_time,
100            fec: params.fec,
101            transmission_power: params.transmission_power,
102        }
103    }
104}