autd3_driver/firmware/fpga/
mod.rs

1mod fpga_state;
2mod gpio_out;
3mod pulse_width;
4mod stm_focus;
5
6pub use autd3_core::{
7    datagram::{GPIOIn, GPIOOut, LoopBehavior, Segment, TRANSITION_MODE_NONE, TransitionMode},
8    gain::{Drive, EmitIntensity, Phase},
9    sampling_config::SamplingConfig,
10};
11
12pub use fpga_state::FPGAState;
13pub(crate) use gpio_out::DebugValue;
14pub use gpio_out::GPIOOutputType;
15pub use pulse_width::PulseWidth;
16pub(crate) use stm_focus::STMFocus;
17
18use crate::{common::mm, ethercat::DcSysTime};
19
20/// The unit of the fixed-point number used in the [`FociSTM`].
21///
22/// [`FociSTM`]: crate::datagram::FociSTM
23pub const FOCI_STM_FIXED_NUM_UNIT: f32 = 0.025 * mm;
24const FOCI_STM_FIXED_NUM_WIDTH: usize = 18;
25const FOCI_STM_FIXED_NUM_UPPER: i32 = (1 << (FOCI_STM_FIXED_NUM_WIDTH - 1)) - 1;
26const FOCI_STM_FIXED_NUM_LOWER: i32 = -(1 << (FOCI_STM_FIXED_NUM_WIDTH - 1));
27const FOCI_STM_TR_X_MAX: i32 = 0x1AFC;
28const FOCI_STM_TR_Y_MAX: i32 = 0x14A3;
29pub(crate) const FOCI_STM_FIXED_NUM_UPPER_X: i32 = FOCI_STM_FIXED_NUM_UPPER;
30pub(crate) const FOCI_STM_FIXED_NUM_LOWER_X: i32 = FOCI_STM_FIXED_NUM_LOWER + FOCI_STM_TR_X_MAX;
31pub(crate) const FOCI_STM_FIXED_NUM_UPPER_Y: i32 = FOCI_STM_FIXED_NUM_UPPER;
32pub(crate) const FOCI_STM_FIXED_NUM_LOWER_Y: i32 = FOCI_STM_FIXED_NUM_LOWER + FOCI_STM_TR_Y_MAX;
33pub(crate) const FOCI_STM_FIXED_NUM_UPPER_Z: i32 = FOCI_STM_FIXED_NUM_UPPER;
34pub(crate) const FOCI_STM_FIXED_NUM_LOWER_Z: i32 = FOCI_STM_FIXED_NUM_LOWER;
35
36#[doc(hidden)]
37pub const SILENCER_STEPS_INTENSITY_DEFAULT: u16 = 10;
38#[doc(hidden)]
39pub const SILENCER_STEPS_PHASE_DEFAULT: u16 = 40;
40
41/// The minimum buffer size of [`Modulation`].
42///
43/// [`Modulation`]: autd3_core::modulation::Modulation
44pub const MOD_BUF_SIZE_MIN: usize = 2;
45/// The maximum buffer size of [`Modulation`].
46///
47/// [`Modulation`]: autd3_core::modulation::Modulation
48pub const MOD_BUF_SIZE_MAX: usize = 65536;
49
50/// The minimum buffer size of [`FociSTM`] and [`GainSTM`].
51///
52/// [`FociSTM`]: crate::datagram::FociSTM
53/// [`GainSTM`]: crate::datagram::GainSTM
54pub const STM_BUF_SIZE_MIN: usize = 2;
55/// The maximum number of foci.
56pub const FOCI_STM_FOCI_NUM_MAX: usize = 8;
57/// The maximum buffer size of [`FociSTM`].
58///
59/// [`FociSTM`]: crate::datagram::FociSTM
60pub const FOCI_STM_BUF_SIZE_MAX: usize = 65536;
61/// The maximum buffer size of [`GainSTM`].
62///
63/// [`GainSTM`]: crate::datagram::GainSTM
64pub const GAIN_STM_BUF_SIZE_MAX: usize = 1024;
65
66#[doc(hidden)]
67pub const PWE_BUF_SIZE: usize = 256;
68
69#[must_use]
70pub(crate) const fn ec_time_to_sys_time(time: &DcSysTime) -> u64 {
71    (time.sys_time() / 3125) << 6
72}