autd3capi_driver/firmware/fpga/
transition_mode.rs

1use autd3::{core::datagram::GPIOIn, driver::ethercat::DcSysTime};
2
3#[repr(u8)]
4#[derive(Debug, Clone, Copy)]
5pub enum TransitionModeTag {
6    SyncIdx = 0,
7    SysTime = 1,
8    Gpio = 2,
9    Ext = 3,
10    Immediate = 4,
11    None = 0xFF,
12}
13
14#[repr(C)]
15pub union TransitionModeValue {
16    pub null: u64,
17    pub sys_time: DcSysTime,
18    pub gpio_in: GPIOIn,
19}
20
21#[repr(C)]
22pub struct TransitionModeWrap {
23    pub tag: TransitionModeTag,
24    pub value: TransitionModeValue,
25}
26
27impl From<TransitionModeWrap> for Option<autd3::core::datagram::TransitionMode> {
28    fn from(mode: TransitionModeWrap) -> Self {
29        match mode.tag {
30            TransitionModeTag::SyncIdx => Some(autd3::core::datagram::TransitionMode::SyncIdx),
31            TransitionModeTag::SysTime => {
32                Some(autd3::core::datagram::TransitionMode::SysTime(unsafe {
33                    mode.value.sys_time
34                }))
35            }
36            TransitionModeTag::Gpio => Some(autd3::core::datagram::TransitionMode::GPIO(unsafe {
37                mode.value.gpio_in
38            })),
39            TransitionModeTag::Ext => Some(autd3::core::datagram::TransitionMode::Ext),
40            TransitionModeTag::Immediate => Some(autd3::core::datagram::TransitionMode::Immediate),
41            TransitionModeTag::None => None,
42        }
43    }
44}
45
46impl From<autd3::core::datagram::TransitionMode> for TransitionModeWrap {
47    fn from(transition_mode: autd3::core::datagram::TransitionMode) -> Self {
48        match transition_mode {
49            autd3::core::datagram::TransitionMode::SyncIdx => Self {
50                tag: TransitionModeTag::SyncIdx,
51                value: TransitionModeValue { null: 0 },
52            },
53            autd3::core::datagram::TransitionMode::SysTime(sys_time) => Self {
54                tag: TransitionModeTag::SysTime,
55                value: TransitionModeValue { sys_time },
56            },
57            autd3::core::datagram::TransitionMode::GPIO(gpio) => Self {
58                tag: TransitionModeTag::Gpio,
59                value: TransitionModeValue { gpio_in: gpio },
60            },
61            autd3::core::datagram::TransitionMode::Ext => Self {
62                tag: TransitionModeTag::Ext,
63                value: TransitionModeValue { null: 0 },
64            },
65            autd3::core::datagram::TransitionMode::Immediate => Self {
66                tag: TransitionModeTag::Immediate,
67                value: TransitionModeValue { null: 0 },
68            },
69        }
70    }
71}