freertos_rust/
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 { event_group: handle }
31 }
32 #[inline]
33 pub fn raw_handle(&self) -> FreeRtosEventGroupHandle {
34 self.event_group
35 }
36
37 pub fn set_bits(&self, bits_to_set: FreeRtosEventBitsType) -> FreeRtosEventBitsType {
38 unsafe { freertos_rs_event_group_set_bits(self.event_group, bits_to_set) }
39 }
40
41 pub fn get_bits(&self) -> FreeRtosEventBitsType {
42 unsafe { freertos_rs_event_group_get_bits(self.event_group) }
43 }
44
45 pub fn clear_bits(&self, bits_to_clear: FreeRtosEventBitsType) -> FreeRtosEventBitsType {
46 unsafe { freertos_rs_event_group_clear_bits(self.event_group, bits_to_clear) }
47 }
48
49 pub fn wait_bits<D: DurationTicks>(&self, bits_to_wait_for: FreeRtosEventBitsType, clear_on_exit: FreeRtosBaseType, wait_for_all_bits: FreeRtosBaseType, duration: D) -> FreeRtosEventBitsType {
50 unsafe { freertos_rs_event_group_wait_bits(self.event_group, bits_to_wait_for, clear_on_exit, wait_for_all_bits, duration.to_ticks()) }
51 }
52
53 pub fn sync<D: DurationTicks>(&self, bits_to_set: FreeRtosEventBitsType, bits_to_wait_for: FreeRtosEventBitsType, duration: D) -> FreeRtosEventBitsType {
54 unsafe { freertos_rs_event_group_sync(self.event_group, bits_to_set, bits_to_wait_for, duration.to_ticks()) }
55 }
56}
57
58impl Drop for EventGroup {
59 fn drop(&mut self) {
60 unsafe {
61 freertos_rs_event_group_delete(self.event_group);
62 }
63 }
64}