autd3_driver/datagram/
segment.rs

1use std::convert::Infallible;
2
3use autd3_core::{
4    datagram::{Datagram, DeviceFilter, Segment, TransitionMode},
5    derive::FirmwareLimits,
6    geometry::Geometry,
7};
8
9/// [`Datagram`] to change the segment.
10///
11/// [`Datagram`]: autd3_core::datagram::Datagram
12#[derive(Debug, Clone, Copy)]
13pub enum SwapSegment {
14    /// Change the [`Gain`] segment.
15    ///
16    /// [`Gain`]: autd3_core::gain::Gain
17    Gain(Segment, TransitionMode),
18    /// Change the [`Modulation`] segment.
19    ///
20    /// [`Modulation`]: autd3_core::modulation::Modulation
21    Modulation(Segment, TransitionMode),
22    /// Change the [`FociSTM`] segment.
23    ///
24    /// [`FociSTM`]: crate::datagram::FociSTM
25    FociSTM(Segment, TransitionMode),
26    /// Change the [`GainSTM`] segment.
27    ///
28    /// [`GainSTM`]: crate::datagram::GainSTM
29    GainSTM(Segment, TransitionMode),
30}
31
32impl Datagram for SwapSegment {
33    type G = Self;
34    type Error = Infallible;
35
36    fn operation_generator(
37        self,
38        _: &Geometry,
39        _: &DeviceFilter,
40        _: &FirmwareLimits,
41    ) -> Result<Self::G, Self::Error> {
42        Ok(self)
43    }
44}