diff --git a/events/equeue/equeue_mbed.cpp b/events/equeue/equeue_mbed.cpp index bb30c64f3b..db8af73ffd 100644 --- a/events/equeue/equeue_mbed.cpp +++ b/events/equeue/equeue_mbed.cpp @@ -86,18 +86,21 @@ void equeue_mutex_unlock(equeue_mutex_t *m) { #ifdef MBED_CONF_RTOS_PRESENT int equeue_sema_create(equeue_sema_t *s) { - MBED_STATIC_ASSERT(sizeof(equeue_sema_t) >= sizeof(Semaphore), - "The equeue_sema_t must fit the class Semaphore"); - new (s) Semaphore(0); - return 0; + osEventFlagsAttr_t attr; + memset(&attr, 0, sizeof(attr)); + attr.cb_mem = &s->mem; + attr.cb_size = sizeof(s->mem); + + s->id = osEventFlagsNew(&attr); + return !s->id ? -1 : 0; } void equeue_sema_destroy(equeue_sema_t *s) { - reinterpret_cast(s)->~Semaphore(); + osEventFlagsDelete(s->id); } void equeue_sema_signal(equeue_sema_t *s) { - reinterpret_cast(s)->release(); + osEventFlagsSet(s->id, 1); } bool equeue_sema_wait(equeue_sema_t *s, int ms) { @@ -105,7 +108,7 @@ bool equeue_sema_wait(equeue_sema_t *s, int ms) { ms = osWaitForever; } - return (reinterpret_cast(s)->wait(ms) > 0); + return (osEventFlagsWait(s->id, 1, osFlagsWaitAny, ms) == 1); } #else diff --git a/events/equeue/equeue_platform.h b/events/equeue/equeue_platform.h index 7bb058cd56..5a16e07e19 100644 --- a/events/equeue/equeue_platform.h +++ b/events/equeue/equeue_platform.h @@ -49,6 +49,9 @@ extern "C" { // Platform includes #if defined(EQUEUE_PLATFORM_POSIX) #include +#elif defined(EQUEUE_PLATFORM_MBED) +#include "cmsis_os2.h" +#include "rtx_lib.h" #endif @@ -112,7 +115,10 @@ typedef struct equeue_sema { bool signal; } equeue_sema_t; #elif defined(EQUEUE_PLATFORM_MBED) && defined(MBED_CONF_RTOS_PRESENT) -typedef unsigned equeue_sema_t[9]; +typedef struct equeue_sema { + osEventFlagsId_t id; + os_event_flags_t mem; +} equeue_sema_t; #elif defined(EQUEUE_PLATFORM_MBED) typedef volatile int equeue_sema_t; #endif