autd3_driver/firmware/driver/async/
mod.rs1mod strategy;
2
3use super::{FPGAState, SenderOption};
4use crate::{error::AUTDDriverError, firmware::version::FirmwareVersion};
5
6use autd3_core::{
7 environment::Environment,
8 firmware::FirmwareLimits,
9 geometry::Geometry,
10 link::{MsgId, RxMessage},
11};
12
13pub use strategy::TimerStrategy;
14
15#[doc(hidden)]
16pub trait Sender<'a, L, S, T>: Send {
17 fn initialize_devices(self) -> impl std::future::Future<Output = Result<(), AUTDDriverError>>;
18 fn firmware_version(
19 self,
20 ) -> impl std::future::Future<Output = Result<Vec<FirmwareVersion>, AUTDDriverError>>;
21 fn close(self) -> impl std::future::Future<Output = Result<(), AUTDDriverError>>;
22}
23
24#[doc(hidden)]
25pub trait Driver {
26 type Sender<'a, L, S, T>: Sender<'a, L, S, T>
27 where
28 L: autd3_core::link::AsyncLink + 'a,
29 S: autd3_core::sleep::r#async::Sleep,
30 T: TimerStrategy<S>;
31 type FPGAState: FPGAState;
32
33 fn new() -> Self;
34
35 fn detect_version<'a, L>(
36 &mut self,
37 _msg_id: &'a mut autd3_core::link::MsgId,
38 _link: &'a mut L,
39 _geometry: &'a autd3_core::geometry::Geometry,
40 _sent_flags: &'a mut [bool],
41 _rx: &'a mut [autd3_core::link::RxMessage],
42 _env: &'a Environment,
43 ) -> impl std::future::Future<Output = Result<(), AUTDDriverError>>
44 where
45 L: autd3_core::link::AsyncLink + 'a,
46 {
47 async { Ok(()) }
48 }
49
50 #[allow(clippy::too_many_arguments)]
51 fn sender<'a, L, S, T>(
52 &self,
53 msg_id: &'a mut MsgId,
54 link: &'a mut L,
55 geometry: &'a Geometry,
56 sent_flags: &'a mut [bool],
57 rx: &'a mut [RxMessage],
58 env: &'a Environment,
59 option: SenderOption,
60 timer_strategy: T,
61 ) -> Self::Sender<'a, L, S, T>
62 where
63 L: autd3_core::link::AsyncLink + 'a,
64 S: autd3_core::sleep::r#async::Sleep,
65 T: TimerStrategy<S>;
66 fn firmware_limits(&self) -> FirmwareLimits;
67}