autd3_driver/firmware/driver/
parallel_mode.rs

1/// The parallel processing mode.
2#[repr(u8)]
3#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
4pub enum ParallelMode {
5    /// Automatically select the processing mode. If the number of devices is greater than the parallel threshold of the [`Datagram::option`], the parallel processing is used.
6    ///
7    /// [`Datagram::option`]: autd3_core::datagram::Datagram::option
8    #[default]
9    Auto = 0,
10    /// Force to use the parallel processing.
11    On = 1,
12    /// Force to use the serial processing.
13    Off = 2,
14}
15
16impl ParallelMode {
17    #[must_use]
18    pub(crate) const fn is_parallel(self, num_devices: usize, parallel_threshold: usize) -> bool {
19        match self {
20            ParallelMode::On => true,
21            ParallelMode::Off => false,
22            ParallelMode::Auto => num_devices > parallel_threshold,
23        }
24    }
25}
26
27#[cfg(test)]
28mod tests {
29    use super::*;
30
31    #[rstest::rstest]
32    #[case(true, ParallelMode::On, 1, 1)]
33    #[case(true, ParallelMode::On, 2, 1)]
34    #[case(true, ParallelMode::On, 1, 2)]
35    #[case(false, ParallelMode::Off, 1, 1)]
36    #[case(false, ParallelMode::Off, 2, 1)]
37    #[case(false, ParallelMode::Off, 1, 2)]
38    #[case(false, ParallelMode::Auto, 1, 1)]
39    #[case(true, ParallelMode::Auto, 2, 1)]
40    #[case(false, ParallelMode::Auto, 1, 2)]
41    #[test]
42    fn parallel_mode(
43        #[case] expect: bool,
44        #[case] mode: ParallelMode,
45        #[case] num_devices: usize,
46        #[case] threshold: usize,
47    ) {
48        assert_eq!(expect, mode.is_parallel(num_devices, threshold));
49    }
50}