Skip to main content

twinleaf_tools/cli/
simulate.rs

1use clap::Parser;
2
3use super::nonneg_f64;
4
5#[derive(Parser, Debug)]
6#[command(version, about = "Simulate a Twinleaf device over UDP")]
7pub struct SimulateCli {
8    /// Sample rate in Hz
9    #[arg(
10        long = "samplerate",
11        alias = "sample-rate",
12        default_value = "1000",
13        value_parser = clap::value_parser!(u32).range(1..)
14    )]
15    pub(crate) samplerate: u32,
16
17    /// Initial sine wave frequency in Hz
18    #[arg(long = "frequency", default_value = "10", value_parser = nonneg_f64)]
19    pub(crate) frequency: f64,
20
21    /// Initial sine wave amplitude in V
22    #[arg(long = "amplitude", default_value = "1", value_parser = nonneg_f64)]
23    pub(crate) amplitude: f64,
24
25    /// Initial white noise level in V/sqrt(Hz)
26    #[arg(long = "noise", default_value = ".01", value_parser = nonneg_f64)]
27    pub(crate) noise: f64,
28
29    /// Segment duration in seconds
30    #[arg(
31        long = "segment-seconds",
32        default_value = "10",
33        value_parser = clap::value_parser!(u32).range(1..)
34    )]
35    pub(crate) segment_seconds: u32,
36
37    /// UDP port to listen on
38    #[arg(long = "port", default_value = "7855")]
39    pub(crate) port: u16,
40}