autd3_core/modulation/
mod.rs

1mod error;
2
3use std::sync::Arc;
4
5use crate::{
6    datagram::{LoopBehavior, Segment, TransitionMode},
7    sampling_config::SamplingConfig,
8};
9pub use error::ModulationError;
10
11/// Trait for applying amplitude modulation.
12///
13/// See also [`Modulation`] derive macro.
14///
15/// [`Modulation`]: autd3_derive::Modulation
16pub trait Modulation: std::fmt::Debug {
17    /// Calculate the modulation data.
18    fn calc(self) -> Result<Vec<u8>, ModulationError>;
19
20    /// The sampling configuration.
21    #[must_use]
22    fn sampling_config(&self) -> SamplingConfig;
23}
24
25#[doc(hidden)]
26pub struct ModulationOperationGenerator {
27    pub g: Arc<Vec<u8>>,
28    pub config: SamplingConfig,
29    pub loop_behavior: LoopBehavior,
30    pub segment: Segment,
31    pub transition_mode: Option<TransitionMode>,
32}