1use 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#[derive(clap::Subcommand, Clone, Debug, Eq, PartialEq)]
12pub enum Mode {
13 ReadModelData,
15
16 ReadParameters,
18
19 Configure(Parameters),
21
22 Listen,
24
25 Send,
27}
28
29#[derive(Clone, Debug, PartialEq, Eq, Parser)]
31#[clap(author, version, about, long_about = None)]
32pub struct Args {
33 #[clap(long, parse(from_os_str), default_value = "Config.toml", value_hint = ValueHint::FilePath)]
35 pub config: PathBuf,
36
37 #[clap(subcommand)]
39 pub mode: Mode,
40}
41
42#[derive(Clone, Debug, PartialEq, Eq, Parser)]
43pub struct Parameters {
44 #[clap(short, long, required = true)]
46 pub address: u16,
47
48 #[clap(short, long, required = true)]
50 pub channel: u8,
51
52 #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
54 pub persistence: Persistence,
55
56 #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
58 pub uart_parity: Parity,
59
60 #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
62 pub uart_rate: BaudRate,
63
64 #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
66 pub air_rate: AirBaudRate,
67
68 #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
70 pub transmission_mode: TransmissionMode,
71
72 #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
74 pub io_drive_mode: IoDriveMode,
75
76 #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
78 pub wakeup_time: WakeupTime,
79
80 #[clap(arg_enum, long, required = false, ignore_case(true), default_value_t)]
82 pub fec: ForwardErrorCorrectionMode,
83
84 #[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}