neuromorphic_drivers/
adapters.rs

1macro_rules! register {
2    ($($module:ident),+) => {
3        $(
4            pub mod $module;
5        )+
6
7        paste::paste! {
8            pub enum Adapter {
9                $(
10                    [<$module:camel>]($module::Adapter),
11                )+
12            }
13
14            impl Adapter {
15                pub fn state(&self) -> State {
16                    match self {
17                        $(
18                            Self::[<$module:camel>](adapter) => State::[<$module:camel>](adapter.state().clone()),
19                        )+
20                    }
21                }
22
23                pub fn events_lengths(&self, slice: &[u8]) -> EventsLengths {
24                    match self {
25                        $(
26                            Self::[<$module:camel>](adapter) => EventsLengths::[<$module:camel>](adapter.events_lengths(slice)),
27                        )+
28                    }
29                }
30
31                pub fn events_lengths_until(&mut self, slice: &[u8], threshold_t: u64) -> (EventsLengths, usize) {
32                    match self {
33                        $(
34                            Self::[<$module:camel>](adapter) => {
35                                let (events_lengths, position) = adapter.events_lengths_until(slice, threshold_t);
36                                (EventsLengths::[<$module:camel>](events_lengths), position)
37                            }
38                        )+
39                    }
40                }
41
42                pub fn current_t(&self) -> u64 {
43                    match self {
44                        $(
45                            Self::[<$module:camel>](adapter) => adapter.current_t(),
46                        )+
47                    }
48                }
49            }
50
51            $(
52                impl From<$module::Adapter> for Adapter {
53                    fn from(adapter: $module::Adapter) -> Self {
54                        Self::[<$module:camel>](adapter)
55                    }
56                }
57            )+
58
59            #[derive(Clone, Copy)]
60            #[allow(clippy::large_enum_variant)]
61            pub enum State {
62                $(
63                    [<$module:camel>]($module::State),
64                )+
65            }
66
67            impl State {
68                pub fn current_t(&self) -> u64 {
69                    match self {
70                        $(
71                            Self::[<$module:camel>](state) => state.t,
72                        )+
73                    }
74                }
75            }
76
77            pub enum EventsLengths {
78                $(
79                    [<$module:camel>]($module::EventsLengths),
80                )+
81            }
82        }
83    }
84}
85
86register! { davis346, dvxplorer, evt3 }