18#ifndef __VSF_KERNEL_SHELL_SIMPLE_BMEVT_H__
19#define __VSF_KERNEL_SHELL_SIMPLE_BMEVT_H__
24#if VSF_KERNEL_USE_SIMPLE_SHELL == ENABLED \
25 && VSF_KERNEL_CFG_SUPPORT_BITMAP_EVENT == ENABLED \
26 && VSF_USE_KERNEL == ENABLED \
27 && VSF_KERNEL_CFG_SUPPORT_SYNC == ENABLED
29#include "../../vsf_eda.h"
38# define using_grouped_evt vsf_bmpevt_pender_t pender
40# define __declare_grouped_evts(__name) \
41 typedef vsf_bmpevt_t __name; \
42 typedef enum enum_of_##__name enum_of_##__name;
44# define declare_grouped_evts(__name) __declare_grouped_evts(__name)
46# define __def_grouped_evts(__name) \
47 enum enum_of_##__name{ \
48 __##__name##_start = __COUNTER__ + 1,
51# define __end_def_grouped_evts(__name) \
52 all_evts_msk_of_##__name = \
53 ((uint64_t)1<<(__COUNTER__ - __##__name##_start)) - 1, \
55# define end_def_grouped_evts(__name) __end_def_grouped_evts(__name)
57# define __def_evt(__name, __evt) \
58 __evt##_idx = __COUNTER__ - __##__name##_start, \
59 __evt##_msk = (uint32_t)(1<<(__evt##_idx))
60# define def_evt(__name, __evt) __def_evt(__name, __evt)
62# define def_adapter(__name, __evt) __def_evt(__name, __evt)
64# define def_grouped_evts(__name) \
65 __def_grouped_evts(__name)
68# define __implement_grouped_evts(__name, ...) \
69 static const vsf_bmpevt_adapter_t *__adapters_of_##__name[] = { \
73# define implement_grouped_evts(__name, ...) \
74 __implement_grouped_evts(__name, __VA_ARGS__)
76# define add_sync_adapter(__SYNC, __MSK, ...) \
77 &((vsf_bmpevt_adapter_sync_t){ \
79 .use_as__vsf_bmpevt_adapter_eda_t.use_as__vsf_bmpevt_adapter_t = { \
81 .op = &vsf_eda_bmpevt_adapter_sync_op, \
84 }.use_as__vsf_bmpevt_adapter_eda_t.use_as__vsf_bmpevt_adapter_t)
88# define __init_grouped_evts(__name, __evt_group, __auto_reset) \
89 __vsf_grouped_evts_init((__evt_group), \
90 (vsf_bmpevt_adapter_t **)&(__adapters_of_##__name), \
91 dimof(__adapters_of_##__name), \
94# define init_grouped_evts(__name, __evt_group, __auto_reset) \
95 __init_grouped_evts(__name, __evt_group, (__auto_reset))
97# define __grouped_evts_info(__name) __grouped_evts_##__name##_info
98# define grouped_evts_info(__name) __grouped_evts_info(__name)
99# define __grouped_evts_adapter(__name, __INDEX) \
100 __adapters_of_##__name[(__INDEX)]
101# define grouped_evts_adapter(__name, __INDEX) \
102 __grouped_evts_adapter(__name, (__INDEX))
105# define wait_for_all_timeout(__group, __msk, __timeout) \
106 vsf_this.pender.mask = (__msk); \
107 vsf_this.pender.op = VSF_BMPEVT_AND; \
108 for ( vsf_sync_reason_t reason = VSF_SYNC_CANCEL; \
109 reason == VSF_SYNC_CANCEL;) \
110 if ((reason = __vsf_bmpevt_wait_for( \
112 (vsf_bmpevt_pender_t *) \
113 &vsf_this.pender, (__timeout)), \
114 (reason == VSF_SYNC_GET || reason == VSF_SYNC_TIMEOUT)))
116# define wait_for_all_timeout_ms(__group, __msk, __timeout) \
117 wait_for_all_timeout( __group, \
119 vsf_systimer_ms_to_tick(__timeout))
121# define wait_for_all_timeout_us(__group, __msk, __timeout) \
122 wait_for_all_timeout( __group, \
124 vsf_systimer_us_to_tick(__timeout))
126# define wait_for_all(__group, __msk) \
127 wait_for_all_timeout( __group, (__msk), -1)
129# define wait_for_any_timeout(__group, __msk, __timeout) \
130 vsf_this.pender.mask = (__msk); \
131 vsf_this.pender.op = VSF_BMPEVT_OR; \
132 for ( vsf_sync_reason_t reason = VSF_SYNC_CANCEL; \
133 reason == VSF_SYNC_CANCEL;) \
134 if ((reason = __vsf_bmpevt_wait_for( \
136 (vsf_bmpevt_pender_t *) \
137 &vsf_this.pender, (__timeout)), \
138 (reason == VSF_SYNC_GET || reason == VSF_SYNC_TIMEOUT)))
140# define wait_for_any_timeout_ms(__group, __msk, __timeout) \
141 wait_for_any_timeout( __group, \
143 vsf_systimer_ms_to_tick(__timeout))
145# define wait_for_any_timeout_us(__group, __msk, __timeout) \
146 wait_for_any_timeout( __group, \
148 vsf_systimer_us_to_tick(__timeout))
150# define wait_for_any(__group, __msk) \
151 wait_for_any_timeout( __group, (__msk), -1)
153# define wait_for_one(__group, __msk) \
154 wait_for_any((__group), (__msk))
156# define wait_for_one_timeout(__group, __msk, __timeout) \
157 wait_for_any_timeout((__group), (__msk), (__timeout))
159# define wait_for_one_timeout_ms(__group, __msk, __timeout) \
160 wait_for_any_timeout_ms((__group), (__msk), (__timeout))
162# define wait_for_one_timeout_us(__group, __msk, __timeout) \
163 wait_for_any_timeout_us((__group), (__msk), (__timeout))
165# define reset_grouped_evts(__group, __msk) \
166 vsf_eda_bmpevt_reset((__group),(__msk))
168# define set_grouped_evts(__group, __msk) \
169 vsf_eda_bmpevt_set((__group),(__msk))
#define VSF_CAL_SECTION(__SEC)
Definition __compiler.h:181
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned int uint_fast32_t
Definition stdint.h:27
int int_fast32_t
Definition stdint.h:26
vsf_sync_reason_t
Definition vsf_eda.h:1053
void __vsf_grouped_evts_init(vsf_bmpevt_t *this_ptr, vsf_bmpevt_adapter_t **adapters_pptr, uint_fast8_t adapter_count, uint_fast32_t auto_reset)
Definition vsf_simple_bmpevt.c:124
vsf_sync_reason_t __vsf_bmpevt_wait_for(vsf_bmpevt_t *bmpevt_ptr, const vsf_bmpevt_pender_t *pender_ptr, int_fast32_t time_out)
Definition vsf_simple_bmpevt.c:79