From 54606e494a5df63bc4a96cff17cac9133ebf22f3 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Sat, 5 Apr 2014 16:34:37 +0400 Subject: [PATCH] Fixed STM32 Event --- libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp b/libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp index 374f1cf4b0..0c94044249 100644 --- a/libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp +++ b/libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp @@ -13,14 +13,18 @@ namespace uavcan_stm32 */ bool Event::wait(uavcan::MonotonicDuration duration) { + static const uavcan::int64_t MaxDelayMSec = 0x000FFFFF; + + const uavcan::int64_t msec = duration.toMSec(); msg_t ret = msg_t(); - if (!duration.isPositive()) + + if (msec <= 0) { - sem_.waitTimeout(TIME_IMMEDIATE); + ret = sem_.waitTimeout(TIME_IMMEDIATE); } else { - sem_.waitTimeout(MS2ST(duration.toMSec())); + ret = sem_.waitTimeout((msec > MaxDelayMSec) ? MS2ST(MaxDelayMSec) : MS2ST(msec)); } return ret == RDY_OK; }