#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum RTSignalMode {
#[default]
XY = 0,
RPhi = 1,
}
impl From<RTSignalMode> for u32 {
fn from(mode: RTSignalMode) -> Self {
mode as u32
}
}
impl TryFrom<u32> for RTSignalMode {
type Error = crate::error::NanonisError;
fn try_from(value: u32) -> Result<Self, Self::Error> {
match value {
0 => Ok(RTSignalMode::XY),
1 => Ok(RTSignalMode::RPhi),
_ => Err(crate::error::NanonisError::Protocol(format!(
"Invalid RTSignalMode value: {}",
value
))),
}
}
}
#[derive(Debug, Clone)]
pub struct ModulatorConfig {
pub number: i32,
pub enabled: bool,
pub signal_index: i32,
pub phase_register: i32,
pub harmonic: i32,
pub phase_deg: f32,
pub amplitude: f32,
pub frequency_hz: f64,
}
impl Default for ModulatorConfig {
fn default() -> Self {
Self {
number: 1,
enabled: false,
signal_index: 0,
phase_register: 1,
harmonic: 1,
phase_deg: 0.0,
amplitude: 0.0,
frequency_hz: 1000.0,
}
}
}
#[derive(Debug, Clone)]
pub struct DemodulatorConfig {
pub number: i32,
pub signal_index: i32,
pub harmonic: i32,
pub hp_filter_order: i32,
pub hp_filter_cutoff_hz: f32,
pub lp_filter_order: i32,
pub lp_filter_cutoff_hz: f32,
pub phase_register: i32,
pub phase_deg: f32,
pub sync_filter: bool,
pub rt_signal_mode: RTSignalMode,
}
impl Default for DemodulatorConfig {
fn default() -> Self {
Self {
number: 1,
signal_index: 0,
harmonic: 1,
hp_filter_order: 0,
hp_filter_cutoff_hz: 10.0,
lp_filter_order: 4,
lp_filter_cutoff_hz: 100.0,
phase_register: 1,
phase_deg: 0.0,
sync_filter: false,
rt_signal_mode: RTSignalMode::XY,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct FilterConfig {
pub order: i32,
pub cutoff_hz: f32,
}
impl Default for FilterConfig {
fn default() -> Self {
Self {
order: 0,
cutoff_hz: 100.0,
}
}
}