autd3_driver/datagram/
segment.rs

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