From 3e99fa02eef9b80c903d9c7592ef2f033bd0f693 Mon Sep 17 00:00:00 2001 From: shun suzuki Date: Sat, 21 Dec 2024 09:30:28 +0900 Subject: [PATCH] reorganize stm op --- autd3-driver/src/datagram/mod.rs | 2 ++ .../src/datagram/stm/foci/implement.rs | 6 ++++-- autd3-driver/src/defined/mod.rs | 2 -- autd3-driver/src/firmware/operation/mod.rs | 14 ++++++------- .../operation/stm}/control_point.rs | 0 .../operation/{stm_foci.rs => stm/foci.rs} | 21 ++++++++++++------- .../operation/{stm_gain.rs => stm/gain.rs} | 10 ++++----- .../src/firmware/operation/stm/mod.rs | 7 +++++++ autd3-firmware-emulator/tests/op/gain.rs | 1 - .../tests/op/reads_fpga_state.rs | 1 - autd3-firmware-emulator/tests/op/stm/foci.rs | 5 +++-- autd3-firmware-emulator/tests/op/stm/gain.rs | 4 ++-- .../driver/datagram/stm/control_point.rs | 8 +++---- .../src/traits/driver/datagram/stm/foci.rs | 8 +++---- autd3/src/datagram/stm/circle.rs | 6 +++--- autd3/src/datagram/stm/line.rs | 6 +++--- autd3/src/prelude.rs | 12 +++++------ 17 files changed, 61 insertions(+), 52 deletions(-) rename autd3-driver/src/{defined => firmware/operation/stm}/control_point.rs (100%) rename autd3-driver/src/firmware/operation/{stm_foci.rs => stm/foci.rs} (98%) rename autd3-driver/src/firmware/operation/{stm_gain.rs => stm/gain.rs} (99%) create mode 100644 autd3-driver/src/firmware/operation/stm/mod.rs diff --git a/autd3-driver/src/datagram/mod.rs b/autd3-driver/src/datagram/mod.rs index a4f47a5b..ce0f810c 100644 --- a/autd3-driver/src/datagram/mod.rs +++ b/autd3-driver/src/datagram/mod.rs @@ -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; diff --git a/autd3-driver/src/datagram/stm/foci/implement.rs b/autd3-driver/src/datagram/stm/foci/implement.rs index 70b42f05..9d0167e8 100644 --- a/autd3-driver/src/datagram/stm/foci/implement.rs +++ b/autd3-driver/src/datagram/stm/foci/implement.rs @@ -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 { foci: Arc>>, diff --git a/autd3-driver/src/defined/mod.rs b/autd3-driver/src/defined/mod.rs index 845763ba..69fd8254 100644 --- a/autd3-driver/src/defined/mod.rs +++ b/autd3-driver/src/defined/mod.rs @@ -1,5 +1,4 @@ mod angle; -mod control_point; mod freq; pub use std::f32::consts::PI; @@ -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; diff --git a/autd3-driver/src/firmware/operation/mod.rs b/autd3-driver/src/firmware/operation/mod.rs index 9dda3381..e7576009 100644 --- a/autd3-driver/src/firmware/operation/mod.rs +++ b/autd3-driver/src/firmware/operation/mod.rs @@ -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::*; @@ -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}; @@ -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; fn is_done(&self) -> bool; } +#[doc(hidden)] pub trait OperationGenerator { type O1: Operation; type O2: Operation; @@ -105,6 +104,7 @@ impl Default for Box { } } +#[doc(hidden)] pub struct OperationHandler {} impl OperationHandler { @@ -185,7 +185,7 @@ pub(crate) fn write_to_tx(tx: &mut [u8], data: T) { } #[cfg(test)] -pub mod tests { +pub(crate) mod tests { use std::mem::size_of; diff --git a/autd3-driver/src/defined/control_point.rs b/autd3-driver/src/firmware/operation/stm/control_point.rs similarity index 100% rename from autd3-driver/src/defined/control_point.rs rename to autd3-driver/src/firmware/operation/stm/control_point.rs diff --git a/autd3-driver/src/firmware/operation/stm_foci.rs b/autd3-driver/src/firmware/operation/stm/foci.rs similarity index 98% rename from autd3-driver/src/firmware/operation/stm_foci.rs rename to autd3-driver/src/firmware/operation/stm/foci.rs index 7c3d460d..2d0161c0 100644 --- a/autd3-driver/src/firmware/operation/stm_foci.rs +++ b/autd3-driver/src/firmware/operation/stm/foci.rs @@ -1,14 +1,14 @@ 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, }; @@ -16,6 +16,8 @@ use crate::{ use derive_new::new; use zerocopy::{Immutable, IntoBytes}; +use super::ControlPoints; + #[derive(Clone, Copy, PartialEq, Debug, IntoBytes, Immutable)] #[repr(C)] pub struct FociSTMControlFlags(u8); @@ -97,13 +99,13 @@ impl> Operation for FociSTMOp(); (1..N).try_for_each(|i| { - super::write_to_tx( + write_to_tx( &mut tx[idx..], STMFocus::create( p[i].point(), @@ -131,7 +133,7 @@ impl> Operation for FociSTMOp> Operation for FociSTMOp() + size_of::() * send_num * N) } else { - super::write_to_tx( + write_to_tx( tx, FociSTMSubseq { tag: TypeTag::FociSTM, @@ -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}, }; diff --git a/autd3-driver/src/firmware/operation/stm_gain.rs b/autd3-driver/src/firmware/operation/stm/gain.rs similarity index 99% rename from autd3-driver/src/firmware/operation/stm_gain.rs rename to autd3-driver/src/firmware/operation/stm/gain.rs index 111fadc3..d5b2ae5a 100644 --- a/autd3-driver/src/firmware/operation/stm_gain.rs +++ b/autd3-driver/src/firmware/operation/stm/gain.rs @@ -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}; @@ -125,7 +123,7 @@ impl> Operation for GainSTM .chunks_mut(size_of::()) .zip(device.iter()) .for_each(|(dst, tr)| { - super::write_to_tx(dst, g.calc(tr)); + write_to_tx(dst, g.calc(tr)); }); send += 1; } @@ -182,7 +180,7 @@ impl> Operation for GainSTM ); if is_first { - super::write_to_tx( + write_to_tx( tx, GainSTMHead { tag: TypeTag::GainSTM, @@ -198,7 +196,7 @@ impl> Operation for GainSTM }, ); } else { - super::write_to_tx( + write_to_tx( tx, GainSTMSubseq { tag: TypeTag::GainSTM, diff --git a/autd3-driver/src/firmware/operation/stm/mod.rs b/autd3-driver/src/firmware/operation/stm/mod.rs new file mode 100644 index 00000000..c4f207b7 --- /dev/null +++ b/autd3-driver/src/firmware/operation/stm/mod.rs @@ -0,0 +1,7 @@ +mod control_point; +mod foci; +mod gain; + +pub use control_point::*; +pub use foci::*; +pub use gain::*; diff --git a/autd3-firmware-emulator/tests/op/gain.rs b/autd3-firmware-emulator/tests/op/gain.rs index c309b185..2e3e765b 100644 --- a/autd3-firmware-emulator/tests/op/gain.rs +++ b/autd3-firmware-emulator/tests/op/gain.rs @@ -2,7 +2,6 @@ use std::collections::HashMap; use autd3_driver::{ datagram::*, - defined::ControlPoint, derive::*, firmware::{ cpu::TxMessage, diff --git a/autd3-firmware-emulator/tests/op/reads_fpga_state.rs b/autd3-firmware-emulator/tests/op/reads_fpga_state.rs index b8a9b8e2..5dc56610 100644 --- a/autd3-firmware-emulator/tests/op/reads_fpga_state.rs +++ b/autd3-firmware-emulator/tests/op/reads_fpga_state.rs @@ -1,6 +1,5 @@ use autd3_driver::{ datagram::*, - defined::ControlPoint, derive::{LoopBehavior, SamplingConfig, Segment, TransitionMode}, firmware::{cpu::TxMessage, fpga::FPGAState}, geometry::Point3, diff --git a/autd3-firmware-emulator/tests/op/stm/foci.rs b/autd3-firmware-emulator/tests/op/stm/foci.rs index 2146d473..7c425870 100644 --- a/autd3-firmware-emulator/tests/op/stm/foci.rs +++ b/autd3-firmware-emulator/tests/op/stm/foci.rs @@ -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}, diff --git a/autd3-firmware-emulator/tests/op/stm/gain.rs b/autd3-firmware-emulator/tests/op/stm/gain.rs index 15b9fb42..4e1d2763 100644 --- a/autd3-firmware-emulator/tests/op/stm/gain.rs +++ b/autd3-firmware-emulator/tests/op/stm/gain.rs @@ -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}, diff --git a/autd3-protobuf/src/traits/driver/datagram/stm/control_point.rs b/autd3-protobuf/src/traits/driver/datagram/stm/control_point.rs index 5cccf493..d596f7d2 100644 --- a/autd3-protobuf/src/traits/driver/datagram/stm/control_point.rs +++ b/autd3-protobuf/src/traits/driver/datagram/stm/control_point.rs @@ -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 { @@ -15,9 +15,9 @@ impl ToMessage for autd3_driver::defined::ControlPoint { } } -impl FromMessage for autd3_driver::defined::ControlPoint { +impl FromMessage for autd3_driver::datagram::ControlPoint { fn from_msg(msg: &ControlPoint) -> Result { - 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() { @@ -27,7 +27,7 @@ impl FromMessage for autd3_driver::defined::ControlPoint { } } -impl ToMessage for autd3_driver::defined::ControlPoints { +impl ToMessage for autd3_driver::datagram::ControlPoints { type Message = ControlPoints; fn to_msg(&self, _: Option<&autd3_driver::geometry::Geometry>) -> Self::Message { diff --git a/autd3-protobuf/src/traits/driver/datagram/stm/foci.rs b/autd3-protobuf/src/traits/driver/datagram/stm/foci.rs index c504ce91..f6942de3 100644 --- a/autd3-protobuf/src/traits/driver/datagram/stm/foci.rs +++ b/autd3-protobuf/src/traits/driver/datagram/stm/foci.rs @@ -4,7 +4,7 @@ use crate::{pb::*, traits::*}; seq_macro::seq!(N in 1..=8 { #( - impl ToMessage for autd3_driver::datagram::FociSTM>> { + impl ToMessage for autd3_driver::datagram::FociSTM>> { type Message = FociStm~N; fn to_msg(&self, _: Option<&autd3_driver::geometry::Geometry>) -> Self::Message { @@ -22,7 +22,7 @@ seq_macro::seq!(N in 1..=8 { seq_macro::seq!(N in 1..=8 { #( - impl FromMessage for autd3_driver::datagram::FociSTM>> { + impl FromMessage for autd3_driver::datagram::FociSTM>> { fn from_msg(msg: &FociStm~N) -> Result { let props = msg .props @@ -39,9 +39,9 @@ seq_macro::seq!(N in 1..=8 { msg.foci .iter() .map(|f| { - let mut c = autd3_driver::defined::ControlPoints::::new( + let mut c = autd3_driver::datagram::ControlPoints::::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::, AUTDProtoBufError>>()? .as_slice() .try_into() diff --git a/autd3/src/datagram/stm/circle.rs b/autd3/src/datagram/stm/circle.rs index af68f3ae..d8e8865b 100644 --- a/autd3/src/datagram/stm/circle.rs +++ b/autd3/src/datagram/stm/circle.rs @@ -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}, }; diff --git a/autd3/src/datagram/stm/line.rs b/autd3/src/datagram/stm/line.rs index 2761e12f..4e57d3cf 100644 --- a/autd3/src/datagram/stm/line.rs +++ b/autd3/src/datagram/stm/line.rs @@ -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}, }; diff --git a/autd3/src/prelude.rs b/autd3/src/prelude.rs index a019adcd..353fc509 100644 --- a/autd3/src/prelude.rs +++ b/autd3/src/prelude.rs @@ -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::{