autd3_driver/firmware/fpga/
transition_mode.rsuse crate::ethercat::DcSysTime;
use super::GPIOIn;
pub(crate) const TRANSITION_MODE_SYNC_IDX: u8 = 0x00;
pub(crate) const TRANSITION_MODE_SYS_TIME: u8 = 0x01;
pub(crate) const TRANSITION_MODE_GPIO: u8 = 0x02;
pub(crate) const TRANSITION_MODE_EXT: u8 = 0xF0;
pub(crate) const TRANSITION_MODE_NONE: u8 = 0xFE;
pub(crate) const TRANSITION_MODE_IMMEDIATE: u8 = 0xFF;
#[non_exhaustive]
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum TransitionMode {
SyncIdx,
SysTime(DcSysTime),
GPIO(GPIOIn),
Ext,
Immediate,
}
impl TransitionMode {
pub(crate) const fn mode(&self) -> u8 {
match self {
TransitionMode::SyncIdx => TRANSITION_MODE_SYNC_IDX,
TransitionMode::SysTime(_) => TRANSITION_MODE_SYS_TIME,
TransitionMode::GPIO(_) => TRANSITION_MODE_GPIO,
TransitionMode::Ext => TRANSITION_MODE_EXT,
TransitionMode::Immediate => TRANSITION_MODE_IMMEDIATE,
}
}
pub(crate) const fn value(&self) -> u64 {
match self {
TransitionMode::SyncIdx | TransitionMode::Ext | TransitionMode::Immediate => 0,
TransitionMode::GPIO(gpio) => *gpio as u64,
TransitionMode::SysTime(time) => time.sys_time(),
}
}
}