neuromorphic_drivers/
adapters.rs1macro_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 }