X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fmware%2Fevent.h;fp=bertos%2Fmware%2Fevent.h;h=941a332f298ae3fcb251459ccf9abe2b6b2f409e;hb=24b3f2a8c8cbfe128d6057006e044177740ca677;hp=94121413e5dd690d81ef32c701defd14f74f5803;hpb=a3f0f5671733a6c3e29c49fdd9ea472a8e1637bf;p=bertos.git diff --git a/bertos/mware/event.h b/bertos/mware/event.h index 94121413..941a332f 100644 --- a/bertos/mware/event.h +++ b/bertos/mware/event.h @@ -286,58 +286,7 @@ INLINE void event_wait(Event *e) #endif } -/** - * Wait for multiple events - * - * On success return the offset in the \a evs vector of the Event that - * happened, -1 if the timeout expires. - * - * NOTE: timeout == 0 means no timeout. - */ -#if defined(CONFIG_KERN_SIGNALS) && CONFIG_KERN_SIGNALS -INLINE int event_select(Event **evs, int n, ticks_t timeout) -{ - sigmask_t mask = (1 << n) - 1; - int i; - - ASSERT(n <= SIG_USER_MAX); - for (i = 0; i < n; i++) - { - Event *e = evs[i]; - /* Map each event to a distinct signal bit */ - event_initSignal(e, proc_current(), 1 << i); - } - mask = timeout ? sig_waitTimeout(mask, timeout) : sig_wait(mask); - i = UINT8_LOG2(mask); - - return i < n ? i : -1; -} -#else -INLINE int event_select(Event **evs, int n, ticks_t timeout) -{ - ticks_t end = timer_clock() + timeout; - int i; - - while (1) - { - for (i = 0; i < n; i++) - { - Event *e = evs[i]; - if (ACCESS_SAFE(e->Ev.Gen.completed) == true) - { - e->Ev.Gen.completed = false; - MEMORY_BARRIER; - return i; - } - } - if (timeout && TIMER_AFTER(timer_clock(), end)) - break; - cpu_relax(); - } - return -1; -} -#endif - +int event_select(Event **evs, int n, ticks_t timeout); #if CONFIG_TIMER_EVENTS #include /* timer_clock() */