autd3_driver/firmware/v11/
driver.rs

1use autd3_core::{environment::Environment, link::Link, sleep::Sleep};
2
3use crate::firmware::driver::{Driver, Sender, TimerStrategy};
4
5use super::fpga::{
6    FOCI_STM_BUF_SIZE_MAX, FOCI_STM_FIXED_NUM_UNIT, FOCI_STM_FIXED_NUM_WIDTH,
7    FOCI_STM_FOCI_NUM_MAX, GAIN_STM_BUF_SIZE_MAX, MOD_BUF_SIZE_MAX,
8};
9
10/// A driver for firmware version 11.
11pub struct V11;
12
13impl<'a, L: Link, S: Sleep, T: TimerStrategy<S>> Sender<'a, L, S, T>
14    for super::transmission::Sender<'a, L, S, T>
15{
16    fn initialize_devices(self) -> Result<(), crate::error::AUTDDriverError> {
17        self.inner.initialize_devices()
18    }
19
20    fn firmware_version(
21        self,
22    ) -> Result<Vec<crate::firmware::version::FirmwareVersion>, crate::error::AUTDDriverError> {
23        self.inner.firmware_version()
24    }
25
26    fn close(self) -> Result<(), crate::error::AUTDDriverError> {
27        self.inner.close()
28    }
29}
30
31impl Driver for V11 {
32    type Sender<'a, L, S, T>
33        = super::transmission::Sender<'a, L, S, T>
34    where
35        L: autd3_core::link::Link + 'a,
36        S: autd3_core::sleep::Sleep,
37        T: TimerStrategy<S>;
38    type FPGAState = super::fpga::FPGAState;
39
40    fn new() -> Self {
41        Self
42    }
43
44    fn firmware_limits(&self) -> autd3_core::derive::FirmwareLimits {
45        autd3_core::derive::FirmwareLimits {
46            mod_buf_size_max: MOD_BUF_SIZE_MAX as _,
47            gain_stm_buf_size_max: GAIN_STM_BUF_SIZE_MAX as _,
48            foci_stm_buf_size_max: FOCI_STM_BUF_SIZE_MAX as _,
49            num_foci_max: FOCI_STM_FOCI_NUM_MAX as _,
50            foci_stm_fixed_num_unit: FOCI_STM_FIXED_NUM_UNIT,
51            foci_stm_fixed_num_width: FOCI_STM_FIXED_NUM_WIDTH as _,
52        }
53    }
54
55    fn sender<'a, L, S, T>(
56        &self,
57        msg_id: &'a mut autd3_core::link::MsgId,
58        link: &'a mut L,
59        geometry: &'a autd3_core::derive::Geometry,
60        sent_flags: &'a mut [bool],
61        rx: &'a mut [autd3_core::link::RxMessage],
62        env: &'a Environment,
63        option: crate::firmware::driver::SenderOption,
64        timer_strategy: T,
65    ) -> Self::Sender<'a, L, S, T>
66    where
67        L: autd3_core::link::Link + 'a,
68        S: autd3_core::sleep::Sleep,
69        T: TimerStrategy<S>,
70    {
71        Self::Sender {
72            inner: crate::firmware::v10::transmission::Sender {
73                msg_id,
74                link,
75                geometry,
76                sent_flags,
77                rx,
78                env,
79                option,
80                timer_strategy,
81                _phantom: std::marker::PhantomData,
82            },
83        }
84    }
85}