diff --git a/events/equeue/equeue_mbed.cpp b/events/equeue/equeue_mbed.cpp index db8af73ffd..7b1fd2f03f 100644 --- a/events/equeue/equeue_mbed.cpp +++ b/events/equeue/equeue_mbed.cpp @@ -23,27 +23,36 @@ #include #include "mbed.h" +#if MBED_CONF_EVENTS_USE_LOWPOWER_TIMER_TICKER +#define ALIAS_TIMER LowPowerTimer +#define ALIAS_TICKER LowPowerTicker +#define ALIAS_TIMEOUT LowPowerTimeout +#else +#define ALIAS_TIMER Timer +#define ALIAS_TICKER Ticker +#define ALIAS_TIMEOUT Timeout +#endif // Ticker operations static bool equeue_tick_inited = false; static volatile unsigned equeue_minutes = 0; static unsigned equeue_timer[ - (sizeof(Timer)+sizeof(unsigned)-1)/sizeof(unsigned)]; + (sizeof(ALIAS_TIMER)+sizeof(unsigned)-1)/sizeof(unsigned)]; static unsigned equeue_ticker[ - (sizeof(Ticker)+sizeof(unsigned)-1)/sizeof(unsigned)]; + (sizeof(ALIAS_TICKER)+sizeof(unsigned)-1)/sizeof(unsigned)]; static void equeue_tick_update() { - equeue_minutes += reinterpret_cast(equeue_timer)->read_ms(); - reinterpret_cast(equeue_timer)->reset(); + equeue_minutes += reinterpret_cast(equeue_timer)->read_ms(); + reinterpret_cast(equeue_timer)->reset(); } static void equeue_tick_init() { - MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(Timer), + MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(ALIAS_TIMER), "The equeue_timer buffer must fit the class Timer"); - MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(Ticker), + MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(ALIAS_TICKER), "The equeue_ticker buffer must fit the class Ticker"); - Timer *timer = new (equeue_timer) Timer; - Ticker *ticker = new (equeue_ticker) Ticker; + ALIAS_TIMER *timer = new (equeue_timer) ALIAS_TIMER; + ALIAS_TICKER *ticker = new (equeue_ticker) ALIAS_TICKER; equeue_minutes = 0; timer->start(); @@ -62,7 +71,7 @@ unsigned equeue_tick() { do { minutes = equeue_minutes; - ms = reinterpret_cast(equeue_timer)->read_ms(); + ms = reinterpret_cast(equeue_timer)->read_ms(); } while (minutes != equeue_minutes); return minutes + ms; @@ -132,7 +141,7 @@ static void equeue_sema_timeout(equeue_sema_t *s) { bool equeue_sema_wait(equeue_sema_t *s, int ms) { int signal = 0; - Timeout timeout; + ALIAS_TIMEOUT timeout; if (ms == 0) { return false; } else if (ms > 0) { diff --git a/events/mbed_lib.json b/events/mbed_lib.json index 0f786f6637..1dbc1794b4 100644 --- a/events/mbed_lib.json +++ b/events/mbed_lib.json @@ -21,6 +21,10 @@ "shared-highprio-eventsize": { "help": "Event buffer size (bytes) for shared high-priority event queue", "value": 256 + }, + "use-lowpower-timer-ticker": { + "help": "Enable use of low power timer and ticker classes. May reduce the accuracy of the event queue.", + "value": 0 } } }