1use base::AsRawDescriptor;
6use base::AsRawDescriptors;
7use base::Event;
8use base::RawDescriptor;
9use base::Result;
10use serde::Deserialize;
11use serde::Serialize;
12
13pub struct IrqEdgeEvent(Event);
15
16impl IrqEdgeEvent {
17 pub fn new() -> Result<IrqEdgeEvent> {
18 Event::new().map(IrqEdgeEvent)
19 }
20
21 pub fn try_clone(&self) -> Result<IrqEdgeEvent> {
22 self.0.try_clone().map(IrqEdgeEvent)
23 }
24
25 pub fn from_event(trigger_evt: Event) -> IrqEdgeEvent {
27 IrqEdgeEvent(trigger_evt)
28 }
29
30 pub fn get_trigger(&self) -> &Event {
31 &self.0
32 }
33
34 pub fn trigger(&self) -> Result<()> {
35 self.0.signal()
36 }
37
38 pub fn clear_trigger(&self) {
39 let _ = self.0.wait();
40 }
41}
42
43#[derive(Debug, Serialize, Deserialize)]
51pub struct IrqLevelEvent {
52 trigger_evt: Event,
55 resample_evt: Event,
59}
60
61impl IrqLevelEvent {
62 pub fn new() -> Result<IrqLevelEvent> {
63 let trigger_evt = Event::new()?;
64 let resample_evt = Event::new()?;
65 Ok(IrqLevelEvent {
66 trigger_evt,
67 resample_evt,
68 })
69 }
70
71 pub fn try_clone(&self) -> Result<IrqLevelEvent> {
72 let trigger_evt = self.trigger_evt.try_clone()?;
73 let resample_evt = self.resample_evt.try_clone()?;
74 Ok(IrqLevelEvent {
75 trigger_evt,
76 resample_evt,
77 })
78 }
79
80 pub fn from_event_pair(trigger_evt: Event, resample_evt: Event) -> IrqLevelEvent {
82 IrqLevelEvent {
83 trigger_evt,
84 resample_evt,
85 }
86 }
87
88 pub fn get_trigger(&self) -> &Event {
89 &self.trigger_evt
90 }
91
92 pub fn get_resample(&self) -> &Event {
93 &self.resample_evt
94 }
95
96 pub fn trigger(&self) -> Result<()> {
98 self.trigger_evt.signal()
99 }
100
101 pub fn clear_trigger(&self) {
103 let _ = self.trigger_evt.wait();
104 }
105
106 pub fn trigger_resample(&self) -> Result<()> {
111 self.resample_evt.signal()
112 }
113
114 pub fn clear_resample(&self) {
116 let _ = self.resample_evt.wait();
117 }
118}
119
120impl AsRawDescriptors for IrqEdgeEvent {
121 fn as_raw_descriptors(&self) -> Vec<RawDescriptor> {
122 vec![self.0.as_raw_descriptor()]
123 }
124}
125
126impl AsRawDescriptors for IrqLevelEvent {
127 fn as_raw_descriptors(&self) -> Vec<RawDescriptor> {
128 vec![
129 self.trigger_evt.as_raw_descriptor(),
130 self.resample_evt.as_raw_descriptor(),
131 ]
132 }
133}