use ::error::*;
use hal::handle::*;
use ::raw::*;
use std::ops::Range;
pub type RawAnalogTriggerType = HAL_AnalogTriggerType;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum AnalogTriggerType {
InWindow,
State,
RisingPulse,
FallingPulse,
}
impl AnalogTriggerType {
pub fn into_raw(&self) -> RawAnalogTriggerType {
match *self {
AnalogTriggerType::InWindow => HAL_AnalogTriggerType::HAL_Trigger_kInWindow,
AnalogTriggerType::State => HAL_AnalogTriggerType::HAL_Trigger_kState,
AnalogTriggerType::RisingPulse => HAL_AnalogTriggerType::HAL_Trigger_kRisingPulse,
AnalogTriggerType::FallingPulse => HAL_AnalogTriggerType::HAL_Trigger_kFallingPulse,
}
}
}
impl From<RawAnalogTriggerType> for AnalogTriggerType {
fn from(raw: RawAnalogTriggerType) -> Self {
match raw {
HAL_AnalogTriggerType::HAL_Trigger_kInWindow => AnalogTriggerType::InWindow,
HAL_AnalogTriggerType::HAL_Trigger_kState => AnalogTriggerType::State,
HAL_AnalogTriggerType::HAL_Trigger_kRisingPulse => AnalogTriggerType::RisingPulse,
HAL_AnalogTriggerType::HAL_Trigger_kFallingPulse => AnalogTriggerType::FallingPulse,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum AnalogTriggerLimits {
Raw(Range<i32>),
Voltage(Range<f64>)
}
pub fn initialize(handle: AnalogInputHandle, index: &mut i32) -> HalResult<AnalogTriggerHandle> {
unsafe { hal_call![ ptr HAL_InitializeAnalogTrigger(handle, index) ] }
}
pub fn clean(handle: AnalogTriggerHandle) -> HalResult<()> {
unsafe { hal_call![ ptr HAL_CleanAnalogTrigger(handle) ] }
}
pub fn set_limits(handle: AnalogTriggerHandle, limits: AnalogTriggerLimits) -> HalResult<()> {
match limits {
AnalogTriggerLimits::Raw(range) => {
unsafe { hal_call![ ptr HAL_SetAnalogTriggerLimitsRaw(handle, range.start, range.end) ] }
}
AnalogTriggerLimits::Voltage(range) => {
unsafe { hal_call![ ptr HAL_SetAnalogTriggerLimitsVoltage(handle, range.start, range.end) ] }
}
}
}
pub fn set_averaged(handle: AnalogTriggerHandle, use_averaged_value: bool) -> HalResult<()> {
unsafe { hal_call![ ptr HAL_SetAnalogTriggerAveraged(handle, use_averaged_value as HAL_Bool) ] }
}
pub fn set_filtered(handle: AnalogTriggerHandle, use_filtered_value: bool) -> HalResult<()> {
unsafe { hal_call![ ptr HAL_SetAnalogTriggerFiltered(handle, use_filtered_value as HAL_Bool) ] }
}
pub fn in_window(handle: AnalogTriggerHandle) -> HalResult<bool> {
unsafe { hal_call![ ptr HAL_GetAnalogTriggerInWindow(handle) ].map(|n| n != 0) }
}
pub fn get_state(handle: AnalogTriggerHandle) -> HalResult<bool> {
unsafe { hal_call![ ptr HAL_GetAnalogTriggerTriggerState(handle) ].map(|n| n != 0) }
}
pub fn get_output(handle: AnalogTriggerHandle, trigger_type: AnalogTriggerType) -> HalResult<bool> {
unsafe { hal_call![ ptr HAL_GetAnalogTriggerOutput(handle, trigger_type.into_raw()) ].map(|n| n != 0) }
}
pub fn if_activated<F>(handle: AnalogTriggerHandle, trigger_type: AnalogTriggerType, func: F) where F: Fn() {
match get_output(handle, trigger_type) {
Ok(true) => func(),
_ => {}
}
}