Available on crate feature
derive
only.Expand description
Utilities for user-common Gain
and Modulation
.
§Example
The following example shows how to define a custom Gain
that generates a single focal point.
use autd3_core::derive::*;
use autd3_core::geometry::Point3;
use autd3_core::common::rad;
#[derive(Gain, Debug)]
pub struct FocalPoint {
pos: Point3,
}
#[derive(Clone, Copy)]
pub struct Impl {
pos: Point3,
wavenumber: f32,
}
impl<'a> GainCalculator<'a> for Impl {
fn calc(&self, tr: &'a Transducer) -> Drive {
Drive {
phase: Phase::from(-(self.pos - tr.position()).norm() * self.wavenumber * rad),
intensity: Intensity::MAX,
}
}
}
impl<'a> GainCalculatorGenerator<'a> for Impl {
type Calculator = Self;
fn generate(&mut self, _: &'a Device) -> Self::Calculator {
*self
}
}
impl<'a> Gain<'a> for FocalPoint {
type G = Impl;
fn init(
self,
_geometry: &'a Geometry,
env: &Environment,
_filter: &TransducerMask ,
) -> Result<Self::G, GainError> {
Ok(Impl {
pos: self.pos,
wavenumber: env.wavenumber(),
})
}
}
The following example shows how to define a modulation that outputs the maximum value only for a moment.
use autd3_core::common::kHz;
use autd3_core::derive::*;
#[derive(Modulation, Debug)]
pub struct Burst {
}
impl Burst {
pub fn new() -> Self {
Self {}
}
}
impl Modulation for Burst {
fn calc(self, _limits: &FirmwareLimits) -> Result<Vec<u8>, ModulationError> {
Ok((0..4000)
.map(|i| if i == 3999 { u8::MAX } else { u8::MIN })
.collect())
}
fn sampling_config(&self) -> SamplingConfig {
SamplingConfig::new(4. * kHz)
}
}
Re-exports§
pub use crate::datagram::DatagramOption;
pub use crate::datagram::DeviceMask;
pub use crate::datagram::Inspectable;
pub use crate::datagram::InspectionResult;
pub use crate::firmware::FirmwareLimits;
pub use crate::firmware::Segment;
pub use crate::firmware::transition_mode;
pub use crate::geometry::Geometry;
pub use crate::datagram::DatagramS;
pub use crate::firmware::Drive;
pub use crate::firmware::Intensity;
pub use crate::firmware::Phase;
pub use crate::gain::DeviceTransducerMask;
pub use crate::gain::Gain;
pub use crate::gain::GainCalculator;
pub use crate::gain::GainCalculatorGenerator;
pub use crate::gain::GainError;
pub use crate::gain::GainInspectionResult;
pub use crate::gain::TransducerMask;
pub use crate::geometry::Device;
pub use crate::geometry::Transducer;
pub use crate::datagram::Datagram;
pub use crate::datagram::DatagramL;
pub use crate::firmware::SamplingConfig;
pub use crate::firmware::SamplingConfigError;
pub use crate::modulation::Modulation;
pub use crate::modulation::ModulationError;
pub use crate::modulation::ModulationInspectionResult;