autd3_core/modulation/
mod.rs

1mod error;
2
3use crate::firmware::{
4    FirmwareLimits, SamplingConfig, Segment, transition_mode::TransitionModeParams,
5};
6use alloc::{sync::Arc, vec::Vec};
7pub use error::ModulationError;
8
9/// Trait for applying amplitude modulation.
10///
11/// See also [`Modulation`] derive macro.
12///
13/// [`Modulation`]: autd3_derive::Modulation
14pub trait Modulation {
15    /// Calculate the modulation data.
16    fn calc(self, limits: &FirmwareLimits) -> Result<Vec<u8>, ModulationError>;
17
18    /// The sampling configuration.
19    #[must_use]
20    fn sampling_config(&self) -> SamplingConfig;
21}
22
23#[doc(hidden)]
24pub struct ModulationOperationGenerator {
25    pub g: Arc<Vec<u8>>,
26    pub config: SamplingConfig,
27    pub limits: FirmwareLimits,
28    pub rep: u16,
29    pub segment: Segment,
30    pub transition_params: TransitionModeParams,
31}
32
33#[derive(Debug, Clone, PartialEq)]
34/// The result of the [`Modulation`] inspection.
35pub struct ModulationInspectionResult {
36    /// The data of the modulation.
37    pub data: Vec<u8>,
38    /// The sampling configuration.
39    pub config: SamplingConfig,
40}