timer_delayTicks(): Re-enable check for interrupts to be enabled wheen sleeping.
[bertos.git] / bertos / drv / timer.c
index fbe7c695c9ee3455cd6cdde428c4ca860b6426a8..f49f6a86ba24799b1c0a252136ea5d8a2d42b46e 100644 (file)
@@ -163,7 +163,10 @@ void timer_add(Timer *timer)
 
 
 /**
- * Remove a timer from the timer queue before it has expired.
+ * Remove a timer from the timers queue before it has expired.
+ *
+ * \note Attempting to remove a timer already expired cause
+ *       undefined behaviour.
  */
 Timer *timer_abort(Timer *timer)
 {
@@ -181,11 +184,8 @@ Timer *timer_abort(Timer *timer)
  */
 void timer_delayTicks(ticks_t delay)
 {
-#if defined(IRQ_ENABLED) && (!(ARCH & ARCH_EMUL))
        /* We shouldn't sleep with interrupts disabled */
-       ASSERT(IRQ_ENABLED());
-#endif
-
+       ASSERT_IRQ_ENABLED();
 
 #if defined(CONFIG_KERN_SIGNALS) && CONFIG_KERN_SIGNALS
        Timer t;
@@ -339,3 +339,19 @@ void timer_init(void)
 
        MOD_INIT(timer);
 }
+
+
+#if (ARCH & ARCH_EMUL)
+/**
+ * Stop timer (only used by emulator)
+ */
+void timer_cleanup(void)
+{
+       MOD_CLEANUP(timer);
+
+       timer_hw_cleanup();
+
+       // Hmmm... apparently, the demo app does not cleanup properly
+       //ASSERT(LIST_EMPTY(&timers_queue));
+}
+#endif /* ARCH_EMUL */