Skip to content

Commit

Permalink
reorganize stm op
Browse files Browse the repository at this point in the history
  • Loading branch information
s5suzuki committed Dec 21, 2024
1 parent 16189ea commit 3e99fa0
Show file tree
Hide file tree
Showing 17 changed files with 61 additions and 52 deletions.
2 changes: 2 additions & 0 deletions autd3-driver/src/datagram/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ mod with_segment;
mod with_timeout;

pub use super::firmware::operation::SwapSegment;
#[doc(inline)]
pub use super::firmware::operation::{ControlPoint, ControlPoints};
pub use clear::Clear;
pub use cpu_gpio_out::{CpuGPIO, CpuGPIOPort};
pub use debug::DebugSettings;
Expand Down
6 changes: 4 additions & 2 deletions autd3-driver/src/datagram/stm/foci/implement.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
use std::sync::Arc;

use crate::{defined::ControlPoints, error::AUTDDriverError, geometry::Device};
use crate::{error::AUTDDriverError, geometry::Device};

use super::{FociSTMContext, FociSTMContextGenerator, FociSTMGenerator, IntoFociSTMGenerator};
use super::{
ControlPoints, FociSTMContext, FociSTMContextGenerator, FociSTMGenerator, IntoFociSTMGenerator,
};

pub struct VecFociSTMContext<const N: usize> {
foci: Arc<Vec<ControlPoints<N>>>,
Expand Down
2 changes: 0 additions & 2 deletions autd3-driver/src/defined/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
mod angle;
mod control_point;
mod freq;

pub use std::f32::consts::PI;
Expand All @@ -16,7 +15,6 @@ mod unit {
pub use unit::*;

pub use angle::*;
pub use control_point::*;
pub use freq::*;

pub const MILLIMETER: f32 = METER / 1000.0;
Expand Down
14 changes: 7 additions & 7 deletions autd3-driver/src/firmware/operation/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ mod pulse_width_encoder;
mod reads_fpga_state;
mod segment;
mod silencer;
mod stm_foci;
mod stm_gain;
mod stm;
mod sync;

pub(crate) use clear::*;
Expand All @@ -33,10 +32,8 @@ pub(crate) use reads_fpga_state::*;
pub use segment::SwapSegment;
pub(crate) use segment::*;
pub(crate) use silencer::*;
pub use stm_foci::FociSTMContext;
pub(crate) use stm_foci::*;
pub use stm_gain::GainSTMContext;
pub(crate) use stm_gain::*;
pub(crate) use stm::*;
pub use stm::{ControlPoint, ControlPoints, FociSTMContext, GainSTMContext};
pub(crate) use sync::*;
use zerocopy::{Immutable, IntoBytes};

Expand Down Expand Up @@ -73,12 +70,14 @@ pub(crate) enum TypeTag {
CpuGPIOOut = 0xF2,
}

#[doc(hidden)]
pub trait Operation: Send + Sync {
fn required_size(&self, device: &Device) -> usize;
fn pack(&mut self, device: &Device, tx: &mut [u8]) -> Result<usize, AUTDDriverError>;
fn is_done(&self) -> bool;
}

#[doc(hidden)]
pub trait OperationGenerator {
type O1: Operation;
type O2: Operation;
Expand All @@ -105,6 +104,7 @@ impl Default for Box<dyn Operation> {
}
}

#[doc(hidden)]
pub struct OperationHandler {}

impl OperationHandler {
Expand Down Expand Up @@ -185,7 +185,7 @@ pub(crate) fn write_to_tx<T: IntoBytes + Immutable>(tx: &mut [u8], data: T) {
}

#[cfg(test)]
pub mod tests {
pub(crate) mod tests {

use std::mem::size_of;

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
use std::mem::size_of;

use crate::{
defined::{ControlPoints, METER},
defined::METER,
error::AUTDDriverError,
firmware::{
fpga::{
LoopBehavior, STMFocus, SamplingConfig, Segment, TransitionMode, FOCI_STM_BUF_SIZE_MAX,
FOCI_STM_FOCI_NUM_MAX, STM_BUF_SIZE_MIN, TRANSITION_MODE_NONE,
},
operation::{Operation, TypeTag},
operation::{write_to_tx, Operation, TypeTag},
},
geometry::Device,
};

use derive_new::new;
use zerocopy::{Immutable, IntoBytes};

use super::ControlPoints;

#[derive(Clone, Copy, PartialEq, Debug, IntoBytes, Immutable)]
#[repr(C)]
pub struct FociSTMControlFlags(u8);
Expand Down Expand Up @@ -97,13 +99,13 @@ impl<const N: usize, Context: FociSTMContext<N>> Operation for FociSTMOp<N, Cont
(0..send_num).try_for_each(|_| {
let p = self.context.next();
let p = p.transform(device.inv());
super::write_to_tx(
write_to_tx(
&mut tx[idx..],
STMFocus::create(p[0].point(), p.intensity().value())?,
);
idx += size_of::<STMFocus>();
(1..N).try_for_each(|i| {
super::write_to_tx(
write_to_tx(
&mut tx[idx..],
STMFocus::create(
p[i].point(),
Expand Down Expand Up @@ -131,7 +133,7 @@ impl<const N: usize, Context: FociSTMContext<N>> Operation for FociSTMOp<N, Cont
FociSTMControlFlags::NONE
};
if is_first {
super::write_to_tx(
write_to_tx(
tx,
FociSTMHead {
tag: TypeTag::FociSTM,
Expand All @@ -152,7 +154,7 @@ impl<const N: usize, Context: FociSTMContext<N>> Operation for FociSTMOp<N, Cont
);
Ok(size_of::<FociSTMHead>() + size_of::<STMFocus>() * send_num * N)
} else {
super::write_to_tx(
write_to_tx(
tx,
FociSTMSubseq {
tag: TypeTag::FociSTM,
Expand Down Expand Up @@ -189,9 +191,12 @@ mod tests {

use super::*;
use crate::{
defined::{mm, ControlPoint},
defined::mm,
ethercat::DcSysTime,
firmware::fpga::{FOCI_STM_FIXED_NUM_UNIT, FOCI_STM_FIXED_NUM_UPPER_X},
firmware::{
fpga::{FOCI_STM_FIXED_NUM_UNIT, FOCI_STM_FIXED_NUM_UPPER_X},
operation::ControlPoint,
},
geometry::{tests::create_device, Point3},
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@ use crate::{
Drive, LoopBehavior, SamplingConfig, Segment, TransitionMode, GAIN_STM_BUF_SIZE_MAX,
STM_BUF_SIZE_MIN, TRANSITION_MODE_NONE,
},
operation::{Operation, TypeTag},
operation::{write_to_tx, GainContext, Operation, TypeTag},
},
geometry::Device,
};

use super::GainContext;

use derive_new::new;
use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout};

Expand Down Expand Up @@ -125,7 +123,7 @@ impl<G: GainContext, Context: GainSTMContext<Context = G>> Operation for GainSTM
.chunks_mut(size_of::<Drive>())
.zip(device.iter())
.for_each(|(dst, tr)| {
super::write_to_tx(dst, g.calc(tr));
write_to_tx(dst, g.calc(tr));
});
send += 1;
}
Expand Down Expand Up @@ -182,7 +180,7 @@ impl<G: GainContext, Context: GainSTMContext<Context = G>> Operation for GainSTM
);

if is_first {
super::write_to_tx(
write_to_tx(
tx,
GainSTMHead {
tag: TypeTag::GainSTM,
Expand All @@ -198,7 +196,7 @@ impl<G: GainContext, Context: GainSTMContext<Context = G>> Operation for GainSTM
},
);
} else {
super::write_to_tx(
write_to_tx(
tx,
GainSTMSubseq {
tag: TypeTag::GainSTM,
Expand Down
7 changes: 7 additions & 0 deletions autd3-driver/src/firmware/operation/stm/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
mod control_point;
mod foci;
mod gain;

pub use control_point::*;
pub use foci::*;
pub use gain::*;
1 change: 0 additions & 1 deletion autd3-firmware-emulator/tests/op/gain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use std::collections::HashMap;

use autd3_driver::{
datagram::*,
defined::ControlPoint,
derive::*,
firmware::{
cpu::TxMessage,
Expand Down
1 change: 0 additions & 1 deletion autd3-firmware-emulator/tests/op/reads_fpga_state.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use autd3_driver::{
datagram::*,
defined::ControlPoint,
derive::{LoopBehavior, SamplingConfig, Segment, TransitionMode},
firmware::{cpu::TxMessage, fpga::FPGAState},
geometry::Point3,
Expand Down
5 changes: 3 additions & 2 deletions autd3-firmware-emulator/tests/op/stm/foci.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ use std::{collections::HashMap, time::Duration};

use autd3_driver::{
datagram::{
FixedCompletionTime, FociSTM, GainSTM, IntoDatagramWithSegment, Silencer, SwapSegment,
ControlPoint, ControlPoints, FixedCompletionTime, FociSTM, GainSTM,
IntoDatagramWithSegment, Silencer, SwapSegment,
},
defined::{mm, ControlPoint, ControlPoints, METER},
defined::{mm, METER},
derive::{LoopBehavior, SamplingConfig, Segment},
error::AUTDDriverError,
ethercat::{DcSysTime, ECAT_DC_SYS_TIME_BASE},
Expand Down
4 changes: 2 additions & 2 deletions autd3-firmware-emulator/tests/op/stm/gain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ use std::collections::HashMap;

use autd3_driver::{
datagram::{
FixedCompletionTime, FociSTM, GainSTM, IntoDatagramWithSegment, Silencer, SwapSegment,
ControlPoint, FixedCompletionTime, FociSTM, GainSTM, IntoDatagramWithSegment, Silencer,
SwapSegment,
},
defined::ControlPoint,
derive::*,
firmware::{
cpu::{GainSTMMode, TxMessage},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::{
AUTDProtoBufError,
};

impl ToMessage for autd3_driver::defined::ControlPoint {
impl ToMessage for autd3_driver::datagram::ControlPoint {
type Message = ControlPoint;

fn to_msg(&self, _: Option<&autd3_driver::geometry::Geometry>) -> Self::Message {
Expand All @@ -15,9 +15,9 @@ impl ToMessage for autd3_driver::defined::ControlPoint {
}
}

impl FromMessage<ControlPoint> for autd3_driver::defined::ControlPoint {
impl FromMessage<ControlPoint> for autd3_driver::datagram::ControlPoint {
fn from_msg(msg: &ControlPoint) -> Result<Self, AUTDProtoBufError> {
let mut p = autd3_driver::defined::ControlPoint::from(
let mut p = autd3_driver::datagram::ControlPoint::from(
autd3_driver::geometry::Point3::from_msg(&msg.pos)?,
);
if let Some(offset) = msg.offset.as_ref() {
Expand All @@ -27,7 +27,7 @@ impl FromMessage<ControlPoint> for autd3_driver::defined::ControlPoint {
}
}

impl<const N: usize> ToMessage for autd3_driver::defined::ControlPoints<N> {
impl<const N: usize> ToMessage for autd3_driver::datagram::ControlPoints<N> {
type Message = ControlPoints;

fn to_msg(&self, _: Option<&autd3_driver::geometry::Geometry>) -> Self::Message {
Expand Down
8 changes: 4 additions & 4 deletions autd3-protobuf/src/traits/driver/datagram/stm/foci.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::{pb::*, traits::*};

seq_macro::seq!(N in 1..=8 {
#(
impl ToMessage for autd3_driver::datagram::FociSTM<N, Vec<autd3_driver::defined::ControlPoints<N>>> {
impl ToMessage for autd3_driver::datagram::FociSTM<N, Vec<autd3_driver::datagram::ControlPoints<N>>> {
type Message = FociStm~N;

fn to_msg(&self, _: Option<&autd3_driver::geometry::Geometry>) -> Self::Message {
Expand All @@ -22,7 +22,7 @@ seq_macro::seq!(N in 1..=8 {

seq_macro::seq!(N in 1..=8 {
#(
impl FromMessage<FociStm~N> for autd3_driver::datagram::FociSTM<N, Vec<autd3_driver::defined::ControlPoints<N>>> {
impl FromMessage<FociStm~N> for autd3_driver::datagram::FociSTM<N, Vec<autd3_driver::datagram::ControlPoints<N>>> {
fn from_msg(msg: &FociStm~N) -> Result<Self, AUTDProtoBufError> {
let props = msg
.props
Expand All @@ -39,9 +39,9 @@ seq_macro::seq!(N in 1..=8 {
msg.foci
.iter()
.map(|f| {
let mut c = autd3_driver::defined::ControlPoints::<N>::new(
let mut c = autd3_driver::datagram::ControlPoints::<N>::new(
(0..N)
.map(|i| autd3_driver::defined::ControlPoint::from_msg(&f.points[i]))
.map(|i| autd3_driver::datagram::ControlPoint::from_msg(&f.points[i]))
.collect::<Result<Vec<_>, AUTDProtoBufError>>()?
.as_slice()
.try_into()
Expand Down
6 changes: 3 additions & 3 deletions autd3/src/datagram/stm/circle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ use std::f32::consts::PI;

use autd3_driver::{
datagram::{
FociSTMContext, FociSTMContextGenerator, FociSTMGenerator, GainSTMContext,
GainSTMContextGenerator, GainSTMGenerator, IntoFociSTMGenerator, IntoGainSTMGenerator,
ControlPoint, ControlPoints, FociSTMContext, FociSTMContextGenerator, FociSTMGenerator,
GainSTMContext, GainSTMContextGenerator, GainSTMGenerator, IntoFociSTMGenerator,
IntoGainSTMGenerator,
},
defined::{ControlPoint, ControlPoints},
derive::{EmitIntensity, Phase},
geometry::{Point3, UnitVector3, Vector3},
};
Expand Down
6 changes: 3 additions & 3 deletions autd3/src/datagram/stm/line.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use autd3_driver::{
datagram::{
FociSTMContext, FociSTMContextGenerator, FociSTMGenerator, GainSTMContext,
GainSTMContextGenerator, GainSTMGenerator, IntoFociSTMGenerator, IntoGainSTMGenerator,
ControlPoint, ControlPoints, FociSTMContext, FociSTMContextGenerator, FociSTMGenerator,
GainSTMContext, GainSTMContextGenerator, GainSTMGenerator, IntoFociSTMGenerator,
IntoGainSTMGenerator,
},
defined::{ControlPoint, ControlPoints},
derive::{EmitIntensity, Phase},
geometry::{Point3, Vector3},
};
Expand Down
12 changes: 5 additions & 7 deletions autd3/src/prelude.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,12 @@ pub use crate::{
pub use autd3_driver::{
autd3_device::AUTD3,
datagram::{
Clear, DebugSettings, FixedCompletionTime, FixedUpdateRate, FociSTM, ForceFan, GainSTM,
IntoDatagramWithParallelThreshold, IntoDatagramWithSegment, IntoDatagramWithTimeout,
Modulation, ModulationProperty, PhaseCorrection, PulseWidthEncoder, ReadsFPGAState,
Silencer, SwapSegment,
},
defined::{
deg, kHz, mm, rad, ControlPoint, ControlPoints, Hz, PI, ULTRASOUND_FREQ, ULTRASOUND_PERIOD,
Clear, ControlPoint, ControlPoints, DebugSettings, FixedCompletionTime, FixedUpdateRate,
FociSTM, ForceFan, GainSTM, IntoDatagramWithParallelThreshold, IntoDatagramWithSegment,
IntoDatagramWithTimeout, Modulation, ModulationProperty, PhaseCorrection,
PulseWidthEncoder, ReadsFPGAState, Silencer, SwapSegment,
},
defined::{deg, kHz, mm, rad, Hz, PI, ULTRASOUND_FREQ, ULTRASOUND_PERIOD},
error::AUTDDriverError,
ethercat::DcSysTime,
firmware::{
Expand Down

0 comments on commit 3e99fa0

Please sign in to comment.