VSF Documented
vsf_eda_bmpevt.c
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18
19/*============================ INCLUDES ======================================*/
20
22
23#if VSF_USE_KERNEL == ENABLED && defined(__EDA_GADGET__)
24
25/*============================ MACROS ========================================*/
26/*============================ MACROFIED FUNCTIONS ===========================*/
27/*============================ TYPES =========================================*/
28/*============================ GLOBAL VARIABLES ==============================*/
29/*============================ LOCAL VARIABLES ===============================*/
30/*============================ PROTOTYPES ====================================*/
31
32VSF_CAL_SECTION(".text.vsf.kernel.__vsf_teda_cancel_timer")
34
35/*============================ IMPLEMENTATION ================================*/
36
37#if VSF_KERNEL_CFG_SUPPORT_SYNC == ENABLED
38
39#if VSF_KERNEL_CFG_SUPPORT_BITMAP_EVENT == ENABLED
40/*-----------------------------------------------------------------------------*
41 * vsf_bmpevt_t *
42 *-----------------------------------------------------------------------------*/
43
44VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_adapter_set")
45static void __vsf_eda_bmpevt_adapter_set(vsf_bmpevt_adapter_t *this_ptr)
46{
47 VSF_KERNEL_ASSERT(this_ptr != NULL);
48 vsf_eda_bmpevt_set(this_ptr->bmpevt_host, this_ptr->mask);
49}
50
51VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_adapter_eda_init")
52static vsf_err_t __vsf_eda_bmpevt_adapter_eda_init(vsf_bmpevt_adapter_eda_t *this_ptr)
53{
54 VSF_KERNEL_ASSERT(this_ptr != NULL);
55 return vsf_eda_init(&this_ptr->eda);
56}
57
58VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_adapter_sync_evthander")
59static void __vsf_eda_bmpevt_adapter_sync_evthander(vsf_eda_t *eda, vsf_evt_t evt)
60{
61 VSF_KERNEL_ASSERT(eda != NULL);
64
65 switch (evt) {
66 case VSF_EVT_INIT:
67 if (vsf_eda_sync_decrease(adapter_sync->sync, -1)) {
68 break;
69 }
70 case VSF_EVT_SYNC:
71 __vsf_eda_bmpevt_adapter_set((vsf_bmpevt_adapter_t *)adapter_sync);
72 break;
73 }
74}
75
76#if __IS_COMPILER_GCC__
77# pragma GCC diagnostic push
78# pragma GCC diagnostic ignored "-Wcast-align"
79#elif __IS_COMPILER_LLVM__ || __IS_COMPILER_ARM_COMPILER_6__
80# pragma clang diagnostic push
81# pragma clang diagnostic ignored "-Wcast-align"
82#endif
83
84VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_adapter_sync_init")
85static vsf_err_t __vsf_eda_bmpevt_adapter_sync_init(vsf_bmpevt_adapter_t *this_ptr)
86{
87 VSF_KERNEL_ASSERT(this_ptr != NULL);
88 // GCC: -Wcast-align
89 vsf_bmpevt_adapter_eda_t *adapter_eda = (vsf_bmpevt_adapter_eda_t *)this_ptr;
90
91 adapter_eda->eda.fn.evthandler = __vsf_eda_bmpevt_adapter_sync_evthander;
92 return __vsf_eda_bmpevt_adapter_eda_init(adapter_eda);
93}
94
95VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_adapter_sync_reset")
96static vsf_err_t __vsf_eda_bmpevt_adapter_sync_reset(vsf_bmpevt_adapter_t *this_ptr)
97{
98 // GCC: -Wcast-align
99 vsf_bmpevt_adapter_sync_t *adapter_sync = (vsf_bmpevt_adapter_sync_t *)this_ptr;
100 VSF_KERNEL_ASSERT(this_ptr != NULL);
101 vsf_sync_t *sync = adapter_sync->sync;
102
103 if (sync->max_union.bits.manual_rst) {
104 return vsf_eda_sync_decrease(sync, -1);
105 }
106 return __vsf_eda_bmpevt_adapter_eda_init((vsf_bmpevt_adapter_eda_t *)adapter_sync);
107}
108
109VSF_CAL_SECTION(".data.vsf.kernel.vsf_eda_bmpevt_adapter_sync_op")
111 .init = __vsf_eda_bmpevt_adapter_sync_init,
112 .reset = __vsf_eda_bmpevt_adapter_sync_reset,
113};
114
115VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_adapter_bmpevt_evthander")
116static void __vsf_eda_bmpevt_adapter_bmpevt_evthander(vsf_eda_t *eda, vsf_evt_t evt)
117{
118 vsf_bmpevt_adapter_bmpevt_t *adapter_bmpevt;
119 VSF_KERNEL_ASSERT(eda != NULL);
120 adapter_bmpevt = (vsf_bmpevt_adapter_bmpevt_t *)
122
123 switch (evt) {
124 case VSF_EVT_INIT:
125 if (vsf_eda_bmpevt_pend(adapter_bmpevt->bmpevt, &adapter_bmpevt->pender, -1)) {
126 break;
127 }
128 case VSF_EVT_SYNC:
129 __vsf_eda_bmpevt_adapter_set((vsf_bmpevt_adapter_t *)adapter_bmpevt);
130 break;
131 }
132}
133
134VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_adapter_bmpevt_init")
135static vsf_err_t __vsf_eda_bmpevt_adapter_bmpevt_init(vsf_bmpevt_adapter_t *this_ptr)
136{
137 // GCC: -Wcast-align
138 vsf_bmpevt_adapter_eda_t *adapter_eda = (vsf_bmpevt_adapter_eda_t *)this_ptr;
139
140 VSF_KERNEL_ASSERT(this_ptr != NULL);
141 adapter_eda->eda.fn.evthandler = __vsf_eda_bmpevt_adapter_bmpevt_evthander;
142 return __vsf_eda_bmpevt_adapter_eda_init(adapter_eda);
143}
144
145VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_adapter_bmpevt_reset")
146static vsf_err_t __vsf_eda_bmpevt_adapter_bmpevt_reset(vsf_bmpevt_adapter_t *this_ptr)
147{
148 // GCC: -Wcast-align
149 vsf_bmpevt_adapter_bmpevt_t *adapter_bmpevt = (vsf_bmpevt_adapter_bmpevt_t *)this_ptr;
150 VSF_KERNEL_ASSERT(this_ptr != NULL);
151
152 vsf_eda_bmpevt_reset(adapter_bmpevt->bmpevt, adapter_bmpevt->pender.mask);
153 return __vsf_eda_bmpevt_adapter_eda_init((vsf_bmpevt_adapter_eda_t *)adapter_bmpevt);
154}
155#if __IS_COMPILER_GCC__
156# pragma GCC diagnostic pop
157#elif __IS_COMPILER_LLVM__ || __IS_COMPILER_ARM_COMPILER_6__
158# pragma clang diagnostic pop
159#endif
160
161VSF_CAL_SECTION(".data.vsf.kernel.vsf_eda_bmpevt_adapter_bmpevt_op")
163 .init = __vsf_eda_bmpevt_adapter_bmpevt_init,
164 .reset = __vsf_eda_bmpevt_adapter_bmpevt_reset,
165};
166
167VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_remove_pender")
168static void __vsf_eda_bmpevt_remove_pender(vsf_bmpevt_t *this_ptr, vsf_bmpevt_pender_t *pender)
169{
170 VSF_KERNEL_ASSERT((this_ptr != NULL) && (pender != NULL) && (pender->eda_pending != NULL));
171
172 vsf_protect_t lock_status = vsf_protect_sched();
173 __vsf_dlist_remove_imp(&this_ptr->pending_list, &pender->eda_pending->pending_node);
174 vsf_unprotect_sched(lock_status);
175}
176
177VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_poll")
178static bool __vsf_eda_bmpevt_poll(vsf_bmpevt_t *this_ptr, vsf_bmpevt_pender_t *pender)
179{
180 uint_fast32_t cur_mask;
182
183 VSF_KERNEL_ASSERT((this_ptr != NULL) && (pender != NULL));
184
185 cur_mask = this_ptr->value & pender->mask;
186 if (pender->op == VSF_BMPEVT_AND) {
187 if (cur_mask == pender->mask) {
188 err = VSF_ERR_NONE;
189 }
190 } else {
191 if (cur_mask) {
192 err = VSF_ERR_NONE;
193 }
194 }
195
196 if (!err) {
197 vsf_eda_bmpevt_reset(this_ptr, cur_mask & this_ptr->auto_reset);
198 }
199 return (err == VSF_ERR_NONE);
200}
201
202VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_post_evt")
203static void __vsf_eda_bmpevt_post_evt(vsf_bmpevt_t *this_ptr, vsf_dlist_node_t *node, vsf_evt_t evt)
204{
205 bool is_poll_event = evt == VSF_EVT_SYNC_POLL;
206
207 if (!node) {
208 poll_end:
209 if (is_poll_event) {
210 bool is_to_repoll;
211 vsf_protect_t lock_status = vsf_protect_sched();
212 is_to_repoll = this_ptr->state.bits.is_to_repoll;
213 if (!is_to_repoll) {
214 this_ptr->state.bits.is_polling = false;
215 }
216 vsf_unprotect_sched(lock_status);
217
218 if (is_to_repoll) {
219 goto repoll;
220 }
221 }
222 } else {
223 while (node != NULL) {
224 if (is_poll_event && this_ptr->state.bits.is_to_repoll) {
225 repoll:
226 this_ptr->state.bits.is_to_repoll = false;
227 __vsf_eda_bmpevt_post_evt(this_ptr, this_ptr->pending_list.head, evt);
228 return;
229 }
230
231 vsf_eda_t *eda = __vsf_dlist_get_host(vsf_eda_t, pending_node, node);
232 if (!vsf_eda_post_evt(eda, evt)) {
233 break;
234 } else {
235 node = node->next;
236 }
237 }
238 if (NULL == node) {
239 goto poll_end;
240 }
241 }
242}
243
244VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_cancel_start")
245static void __vsf_eda_bmpevt_cancel_start(vsf_bmpevt_t *this_ptr)
246{
247 VSF_KERNEL_ASSERT(this_ptr != NULL);
248
249 vsf_protect_t lock_status = vsf_protect_sched();
250 this_ptr->state.bits.is_cancelling = true;
251 vsf_unprotect_sched(lock_status);
252
253 __vsf_eda_bmpevt_post_evt(this_ptr, this_ptr->pending_list.head, VSF_EVT_SYNC_CANCEL);
254}
255
256VSF_CAL_SECTION(".text.vsf.kernel.__vsf_eda_bmpevt_poll_start")
257static void __vsf_eda_bmpevt_poll_start(vsf_bmpevt_t *this_ptr)
258{
259 bool is_polling;
260
261 VSF_KERNEL_ASSERT(this_ptr != NULL);
262
263 vsf_protect_t lock_status = vsf_protect_sched();
264 is_polling = this_ptr->state.bits.is_polling;
265 if (is_polling) {
266 this_ptr->state.bits.is_to_repoll = true;
267 } else {
268 this_ptr->state.bits.is_polling = true;
269 }
270 vsf_unprotect_sched(lock_status);
271
272 if (!is_polling) {
273 __vsf_eda_bmpevt_post_evt(this_ptr, this_ptr->pending_list.head, VSF_EVT_SYNC_POLL);
274 }
275}
276
277VSF_CAL_SECTION(".text.vsf.kernel.vsf_eda_bmpevt_init")
279{
280 vsf_bmpevt_adapter_t *adapter;
281 uint_fast8_t i;
282 VSF_KERNEL_ASSERT(this_ptr != NULL && adapter_count <= 32);
283
284 vsf_dlist_init(&this_ptr->pending_list);
285 this_ptr->state.flag = 0;
286 this_ptr->value = 0;
287 this_ptr->cancelled_value = 0;
288 this_ptr->state.bits.adapter_count = adapter_count;
289
290 for (i = 0; i < this_ptr->state.bits.adapter_count; i++) {
291 adapter = this_ptr->adapters[i];
292 if (adapter != NULL) {
293 adapter->bmpevt_host = this_ptr;
294 if (adapter->op->init != NULL) {
295 adapter->op->init(adapter);
296 }
297 }
298 }
299 return VSF_ERR_NONE;
300}
301
302VSF_CAL_SECTION(".text.vsf.kernel.vsf_eda_bmpevt_reset")
304{
305 vsf_bmpevt_adapter_t *adapter;
306 uint_fast8_t i;
307 VSF_KERNEL_ASSERT(this_ptr != NULL);
308
309 mask &= this_ptr->value;
310 vsf_protect_t lock_status = vsf_protect_sched();
311 this_ptr->value &= ~mask;
312 vsf_unprotect_sched(lock_status);
313
314 for (i = 0; i < this_ptr->state.bits.adapter_count; i++) {
315 adapter = this_ptr->adapters[i];
316 if ((mask & (1 << i)) && (adapter != NULL)) {
317 if (adapter->op->reset != NULL) {
318 adapter->op->reset(adapter);
319 }
320 }
321 }
322 return VSF_ERR_NONE;
323}
324
325VSF_CAL_SECTION(".text.vsf.kernel.vsf_eda_bmpevt_cancel")
327{
328 VSF_KERNEL_ASSERT(this_ptr != NULL);
329
330 vsf_protect_t lock_status = vsf_protect_sched();
331 this_ptr->cancelled_value |= mask;
332 vsf_unprotect_sched(lock_status);
333
334 __vsf_eda_bmpevt_cancel_start(this_ptr);
335 return VSF_ERR_NONE;
336}
337
338VSF_CAL_SECTION(".text.vsf.kernel.vsf_eda_bmpevt_set")
340{
341 VSF_KERNEL_ASSERT(this_ptr != NULL);
342
343 vsf_protect_t lock_status = vsf_protect_sched();
344 this_ptr->value |= mask;
345 vsf_unprotect_sched(lock_status);
346
347 __vsf_eda_bmpevt_poll_start(this_ptr);
348 return VSF_ERR_NONE;
349}
350
351VSF_CAL_SECTION(".text.vsf.kernel.vsf_eda_bmpevt_pend")
353{
354 vsf_protect_t orig;
355 vsf_eda_t *eda;
356
357 VSF_KERNEL_ASSERT((this_ptr != NULL) && (pender != NULL));
358
359 if (0 == timeout) {
360 if (__vsf_eda_bmpevt_poll(this_ptr, pender)) {
361 return VSF_ERR_NONE;
362 } else {
363 return VSF_ERR_NOT_READY;
364 }
365 }
366
367 eda = pender->eda_pending = vsf_eda_get_cur();
368 VSF_KERNEL_ASSERT(eda != NULL);
369
370 vsf_dlist_init_node(vsf_eda_t, pending_node, eda);
371
372 orig = vsf_protect_sched();
373 if (pender->mask & this_ptr->cancelled_value) {
375 return VSF_ERR_FAIL;
376 }
377
378 __vsf_dlist_add_to_tail_imp(&this_ptr->pending_list, &eda->pending_node);
379 __vsf_eda_sync_set_timeout(eda, timeout);
381
382 __vsf_eda_bmpevt_poll_start(this_ptr);
383 return VSF_ERR_NOT_READY;
384}
385
386#if __IS_COMPILER_LLVM__ || __IS_COMPILER_ARM_COMPILER_6__
387# pragma clang diagnostic push
388# pragma clang diagnostic ignored "-Wcast-align"
389#endif
390
391#if __IS_COMPILER_GCC__
392# pragma GCC diagnostic push
393# pragma GCC diagnostic ignored "-Wcast-align"
394#endif
395
396VSF_CAL_SECTION(".text.vsf.kernel.vsf_eda_bmpevt_poll")
398 vsf_bmpevt_pender_t *pender,
399 vsf_evt_t evt)
400{
402 vsf_eda_t *eda;
403
404 VSF_KERNEL_ASSERT( (this_ptr != NULL)
405 && (pender != NULL)
406 && (pender->eda_pending == vsf_eda_get_cur()));
407 eda = pender->eda_pending;
408
409#if VSF_KERNEL_CFG_EDA_SUPPORT_TIMER == ENABLED
410 if (evt == VSF_EVT_TIMER) {
411 __vsf_eda_bmpevt_remove_pender(this_ptr, pender);
412 reason = VSF_SYNC_TIMEOUT;
413 } else
414#endif
415 if (evt == VSF_EVT_SYNC_CANCEL) {
416 if (this_ptr->cancelled_value && pender->mask) {
417 __vsf_eda_bmpevt_remove_pender(this_ptr, pender);
418 reason = VSF_SYNC_CANCEL;
419 } else {
420 reason = VSF_SYNC_PENDING;
421 }
422 __vsf_eda_bmpevt_post_evt(this_ptr, eda->pending_node.next, evt);
423 } else if (evt == VSF_EVT_SYNC_POLL) {
424 if (__vsf_eda_bmpevt_poll(this_ptr, pender)) {
425 __vsf_eda_bmpevt_remove_pender(this_ptr, pender);
426 reason = VSF_SYNC_GET;
427 } else {
428 reason = VSF_SYNC_PENDING;
429 }
430 __vsf_eda_bmpevt_post_evt(this_ptr, eda->pending_node.next, evt);
431 } else {
432 VSF_KERNEL_ASSERT(false);
433 }
434 if (reason != VSF_SYNC_PENDING) {
435#if VSF_KERNEL_CFG_EDA_SUPPORT_TIMER == ENABLED
437#endif
438 eda->flag.state.is_limitted = false;
439 }
440 return reason;
441}
442
443#if __IS_COMPILER_LLVM__ || __IS_COMPILER_ARM_COMPILER_6__
444# pragma clang diagnostic pop
445#endif
446
447#if __IS_COMPILER_GCC__
448# pragma GCC diagnostic pop
449#endif
450
451
452#endif // VSF_KERNEL_CFG_SUPPORT_BITMAP_EVENT
453
454#endif
455
456
457#endif
#define VSF_CAL_SECTION(__SEC_STR)
Definition __compiler.h:189
#define vsf_container_of(__ptr, __type, __member)
Definition __type.h:164
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NONE
none error
Definition __type.h:44
@ VSF_ERR_NOT_READY
service not ready yet
Definition __type.h:43
@ VSF_ERR_FAIL
failed
Definition __type.h:51
bmpevt adapter with an internal eda
Definition vsf_eda.h:2086
Adapter mapping an IPC object (e.g. a semaphore) onto bitmap-event bits, so one task can wait on mult...
Definition vsf_eda.h:2062
const vsf_bmpevt_adapter_op_t * op
Definition vsf_eda.h:2069
Wait condition of a bitmap-event wait.
Definition vsf_eda.h:2104
uint32_t mask
Definition vsf_eda.h:2111
Bitmap-event group.
Definition vsf_eda.h:2129
The event-driven task (TCB); every VSF task is an eda at the bottom. Tasks share stacks and only occu...
Definition vsf_eda.h:1838
union vsf_eda_t::@945 fn
vsf_eda_evthandler_t evthandler
Definition vsf_eda.h:1853
Base sync IPC object; sem/mutex/trig/crit are built on it.
Definition vsf_eda.h:1964
eda with timer support (can use vsf_teda_set_timer() etc.); derived classes (task/pt/thread) inherit ...
Definition vsf_eda.h:1916
__le16 timeout
Definition ieee80211.h:94
#define NULL
Definition lvgl.h:26
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned int uint_fast32_t
Definition stdint.h:27
Adapter mapping a nested vsf_bmpevt_t onto bitmap-event bits.
Definition vsf_eda.h:2342
vsf_bmpevt_adapter_eda_t vsf_bmpevt_t * bmpevt
Definition vsf_eda.h:2344
vsf_bmpevt_pender_t pender
Definition vsf_eda.h:2345
Adapter init/reset operations, mapping an IPC object (e.g. a semaphore) onto bitmap-event bits so one...
Definition vsf_eda.h:2047
vsf_err_t(* reset)(vsf_bmpevt_adapter_t *pthis)
Definition vsf_eda.h:2049
vsf_err_t(* init)(vsf_bmpevt_adapter_t *pthis)
Definition vsf_eda.h:2048
Adapter mapping a vsf_sync_t onto bitmap-event bits.
Definition vsf_eda.h:2331
vsf_bmpevt_adapter_eda_t vsf_sync_t * sync
Definition vsf_eda.h:2333
Definition vsf_list.h:888
void sync(void)
Definition vsf_linux_fs.c:2266
uintalu_t vsf_protect_t
Definition vsf_arch_abstraction.h:60
vsf_err_t vsf_eda_post_evt(vsf_eda_t *pthis, vsf_evt_t evt)
Post an event to an eda task.
Definition vsf_eda.c:935
vsf_eda_t * vsf_eda_get_cur(void)
Get the eda task currently being dispatched.
Definition vsf_eda.c:416
int16_t vsf_evt_t
Kernel event type.
Definition vsf_eda.h:1658
vsf_err_t vsf_eda_bmpevt_reset(vsf_bmpevt_t *pthis, uint_fast32_t mask)
Reset (clear) event bits of a bitmap event, resetting the bound adapters whose bits are cleared.
vsf_err_t vsf_eda_bmpevt_cancel(vsf_bmpevt_t *pthis, uint_fast32_t mask)
Cancel the pending tasks on a bitmap event whose mask intersects the given mask; they are woken with ...
@ VSF_EVT_SYNC_CANCEL
The pending sync IPC was cancelled (e.g. by vsf_eda_sync_cancel())
Definition vsf_eda.h:1583
@ VSF_EVT_SYNC
A pending sync IPC (semaphore/mutex/trigger/queue/bmpevt) was obtained.
Definition vsf_eda.h:1577
@ VSF_EVT_SYNC_POLL
Sync poll event (used by bmpevt polling)
Definition vsf_eda.h:1588
@ VSF_EVT_INIT
Received once when a task starts.
Definition vsf_eda.h:1541
@ VSF_EVT_TIMER
teda timer expired (only for teda tasks)
Definition vsf_eda.h:1569
#define VSF_BMPEVT_AND
bmpevt pender op value: the wait completes when all bits of the mask are set
Definition vsf_eda.h:2037
vsf_err_t vsf_eda_bmpevt_set(vsf_bmpevt_t *pthis, uint_fast32_t mask)
Set event bits of a bitmap event, polling the pending tasks.
const vsf_bmpevt_adapter_op_t vsf_eda_bmpevt_adapter_bmpevt_op
Adapter operation table vsf_bmpevt_adapter_op_t used to bind another bitmap event to a bitmap event.
vsf_err_t vsf_eda_bmpevt_init(vsf_bmpevt_t *pthis, uint_fast8_t adapter_count)
Initialize a bitmap event, initializing the bound adapters as well.
vsf_err_t vsf_eda_sync_decrease(vsf_sync_t *pthis, vsf_timeout_tick_t timeout)
Decrease a sync object, pending if the resource is not available.
vsf_err_t vsf_eda_bmpevt_pend(vsf_bmpevt_t *pthis, vsf_bmpevt_pender_t *pender, vsf_timeout_tick_t timeout)
Pend on a bitmap event until the masked bits are set (in OR or AND mode according to the pender confi...
VSF_KERNEL_TIMEOUT_TICK_T vsf_timeout_tick_t
Timeout type in system timer ticks: negative means wait forever, 0 means non-blocking try,...
Definition vsf_eda.h:1491
vsf_sync_reason_t vsf_eda_bmpevt_poll(vsf_bmpevt_t *pthis, vsf_bmpevt_pender_t *pender, vsf_evt_t evt)
Retrieve the result of a bitmap event pend from the wakeup event.
const vsf_bmpevt_adapter_op_t vsf_eda_bmpevt_adapter_sync_op
Adapter operation table vsf_bmpevt_adapter_op_t used to bind a sync object to a bitmap event.
#define vsf_eda_init(__eda,...)
Initialize an eda (event-driven task) and post VSF_EVT_INIT to it.
Definition vsf_eda.h:573
vsf_err_t __vsf_teda_cancel_timer(vsf_teda_t *pthis)
Cancel the pending timer of the given teda task.
vsf_sync_reason_t
Result of a sync wait, returned by the *_get_reason() APIs and thread IPC.
Definition vsf_eda.h:2262
@ VSF_SYNC_GET
Obtained.
Definition vsf_eda.h:2282
@ VSF_SYNC_FAIL
Failed/error.
Definition vsf_eda.h:2267
@ VSF_SYNC_CANCEL
Cancelled.
Definition vsf_eda.h:2287
@ VSF_SYNC_TIMEOUT
Timed out.
Definition vsf_eda.h:2272
@ VSF_SYNC_PENDING
Still waiting, retry.
Definition vsf_eda.h:2277
#define VSF_KERNEL_ASSERT
Definition vsf_kernel_cfg.h:32
void __vsf_dlist_add_to_tail_imp(vsf_dlist_t *this_ptr, vsf_dlist_node_t *node)
Definition vsf_list.c:210
void __vsf_dlist_remove_imp(vsf_dlist_t *this_ptr, vsf_dlist_node_t *node)
Definition vsf_list.c:290
#define vsf_dlist_init_node( __host_type, __member, __item_ptr)
Definition vsf_list.h:717
#define __vsf_dlist_get_host(__host_type, __member, __node_ptr)
Definition vsf_list.h:271
#define vsf_dlist_init(__list_ptr)
Definition vsf_list.h:702
#define vsf_protect_sched()
Lock the scheduler and return the previous status as vsf_protect_t.
Definition vsf_os.h:271
#define vsf_unprotect_sched(__prot)
Restore the scheduler lock status saved by vsf_protect_sched()
Definition vsf_os.h:283
Generated from commit: vsfteam/vsf@a5104db