autd3_core/firmware/
transition_mode.rs1use crate::ethercat::DcSysTime;
2
3use super::fpga_gpio::GPIOIn;
4
5const TRANSITION_MODE_SYNC_IDX: u8 = 0x00;
6const TRANSITION_MODE_SYS_TIME: u8 = 0x01;
7const TRANSITION_MODE_GPIO: u8 = 0x02;
8const TRANSITION_MODE_EXT: u8 = 0xF0;
9const TRANSITION_MODE_NONE: u8 = 0xFE;
10const TRANSITION_MODE_IMMEDIATE: u8 = 0xFF;
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
13#[doc(hidden)]
14pub struct TransitionModeParams {
15 pub mode: u8,
16 pub value: u64,
17}
18
19pub trait TransitionMode: Clone + Copy + Send + Sync {
21 #[doc(hidden)]
22 fn params(self) -> TransitionModeParams;
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
27pub struct SyncIdx;
28impl TransitionMode for SyncIdx {
29 fn params(self) -> TransitionModeParams {
30 TransitionModeParams {
31 mode: TRANSITION_MODE_SYNC_IDX,
32 value: 0,
33 }
34 }
35}
36
37#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
39pub struct SysTime(pub DcSysTime);
40impl TransitionMode for SysTime {
41 fn params(self) -> TransitionModeParams {
42 TransitionModeParams {
43 mode: TRANSITION_MODE_SYS_TIME,
44 value: self.0.sys_time(),
45 }
46 }
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
51pub struct GPIO(pub GPIOIn);
52impl TransitionMode for GPIO {
53 fn params(self) -> TransitionModeParams {
54 TransitionModeParams {
55 mode: TRANSITION_MODE_GPIO,
56 value: self.0 as u64,
57 }
58 }
59}
60
61#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
63pub struct Immediate;
64impl TransitionMode for Immediate {
65 fn params(self) -> TransitionModeParams {
66 TransitionModeParams {
67 mode: TRANSITION_MODE_IMMEDIATE,
68 value: 0,
69 }
70 }
71}
72
73#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
75pub struct Ext;
76impl TransitionMode for Ext {
77 fn params(self) -> TransitionModeParams {
78 TransitionModeParams {
79 mode: TRANSITION_MODE_EXT,
80 value: 0,
81 }
82 }
83}
84
85#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
87pub struct Later;
88impl TransitionMode for Later {
89 fn params(self) -> TransitionModeParams {
90 TransitionModeParams {
91 mode: TRANSITION_MODE_NONE,
92 value: 0,
93 }
94 }
95}