File syn_event.h¶
File List > src > syntropic > util > syn_event.h
Go to the documentation of this file
#ifndef SYN_EVENT_H
#define SYN_EVENT_H
#include "../common/syn_defs.h"
#include "../pt/syn_pt.h"
#include "../sched/syn_event_flags.h"
#include "../util/syn_bits.h"
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef SYN_EventFlags SYN_EventGroup;
static inline void syn_event_init(SYN_EventGroup *grp)
{
syn_event_flags_init(grp);
}
static inline void syn_event_set(SYN_EventGroup *grp, uint32_t mask)
{
syn_event_flags_set(grp, mask);
}
static inline void syn_event_clear(SYN_EventGroup *grp, uint32_t mask)
{
syn_event_flags_clear(grp, mask);
}
static inline uint32_t syn_event_get(const SYN_EventGroup *grp)
{
return syn_event_flags_get(grp);
}
static inline bool syn_event_check_all(const SYN_EventGroup *grp, uint32_t mask)
{
return (syn_event_flags_get(grp) & mask) == mask;
}
static inline bool syn_event_check_any(const SYN_EventGroup *grp, uint32_t mask)
{
return (syn_event_flags_get(grp) & mask) != 0;
}
/* ── Protothread integration ────────────────────────────────────────────── */
#define PT_WAIT_EVENT(pt, grp, mask) \
do { \
PT_WAIT_UNTIL(pt, syn_event_check_all(grp, mask)); \
syn_event_clear(grp, mask); \
} while (0)
#define PT_WAIT_EVENT_ANY(pt, grp, mask) \
do { \
PT_WAIT_UNTIL(pt, syn_event_check_any(grp, mask)); \
syn_event_clear(grp, syn_event_get(grp) & (mask)); \
} while (0)
#ifdef __cplusplus
}
#endif
#endif /* SYN_EVENT_H */