autd3_driver/firmware/driver/async/
mod.rs

1mod 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}