freertos_next/
event_group.rs1use crate::base::*;
2use crate::shim::*;
3use crate::units::*;
4
5pub struct EventGroup {
7 event_group: FreeRtosEventGroupHandle,
8}
9
10unsafe impl Send for EventGroup {}
11unsafe impl Sync for EventGroup {}
12
13impl EventGroup {
14 pub fn new() -> Result<EventGroup, FreeRtosError> {
16 unsafe {
17 let s = freertos_rs_event_group_create();
18 if s == 0 as *const _ {
19 return Err(FreeRtosError::OutOfMemory);
20 }
21 Ok(EventGroup { event_group: s })
22 }
23 }
24
25 #[inline]
29 pub unsafe fn from_raw_handle(handle: FreeRtosEventGroupHandle) -> Self {
30 Self {
31 event_group: handle,
32 }
33 }
34 #[inline]
35 pub fn raw_handle(&self) -> FreeRtosEventGroupHandle {
36 self.event_group
37 }
38
39 pub fn set_bits(&self, bits_to_set: FreeRtosEventBitsType) -> FreeRtosEventBitsType {
40 unsafe { freertos_rs_event_group_set_bits(self.event_group, bits_to_set) }
41 }
42
43 pub fn get_bits(&self) -> FreeRtosEventBitsType {
44 unsafe { freertos_rs_event_group_get_bits(self.event_group) }
45 }
46
47 pub fn clear_bits(&self, bits_to_clear: FreeRtosEventBitsType) -> FreeRtosEventBitsType {
48 unsafe { freertos_rs_event_group_clear_bits(self.event_group, bits_to_clear) }
49 }
50
51 pub fn wait_bits<D: DurationTicks>(
52 &self,
53 bits_to_wait_for: FreeRtosEventBitsType,
54 clear_on_exit: FreeRtosBaseType,
55 wait_for_all_bits: FreeRtosBaseType,
56 duration: D,
57 ) -> FreeRtosEventBitsType {
58 unsafe {
59 freertos_rs_event_group_wait_bits(
60 self.event_group,
61 bits_to_wait_for,
62 clear_on_exit,
63 wait_for_all_bits,
64 duration.to_ticks(),
65 )
66 }
67 }
68
69 pub fn sync<D: DurationTicks>(
70 &self,
71 bits_to_set: FreeRtosEventBitsType,
72 bits_to_wait_for: FreeRtosEventBitsType,
73 duration: D,
74 ) -> FreeRtosEventBitsType {
75 unsafe {
76 freertos_rs_event_group_sync(
77 self.event_group,
78 bits_to_set,
79 bits_to_wait_for,
80 duration.to_ticks(),
81 )
82 }
83 }
84}
85
86impl Drop for EventGroup {
87 fn drop(&mut self) {
88 unsafe {
89 freertos_rs_event_group_delete(self.event_group);
90 }
91 }
92}