]> oss.titaniummirror.com Git - rgblamp.git/blobdiff - isr.c
Add candle mode
[rgblamp.git] / isr.c
diff --git a/isr.c b/isr.c
index 78291457794134af01f760a09286284a1f79af4f..4fcdbe40ac80a389c2417b14f6aa3c2ee012b9bd 100644 (file)
--- a/isr.c
+++ b/isr.c
@@ -7,25 +7,42 @@
 
 #include <htc.h>
 #include "tmr.h"
+#include "tmr32.h"
 #include "btn.h"
 #include "task.h"
 
-bit isr_gie; /* Used to store the state of GIE for nested ndi()/nei() */
-unsigned char isr_di; /* Count of nested ndi() */
+bit _isr_gie; /* Used to store the state of GIE for nested ndi()/nei() */
+unsigned char _isr_di; /* Count of nested ndi() */
+
+void ndi()
+{
+  if (_isr_di++ == 0) {
+    _isr_gie = GIE;
+    di();
+  }
+}
+
+/* Nested enable interrupts inline function.  Should be OK even in ISR. */
+void nei()
+{
+  if (--_isr_di == 0 && _isr_gie)
+    ei();
+}
 
 void interrupt isr()
 {
   tmr_isr();
   btn_isr();
+  tmr32_isr();
 
-  if (tmr_fired(TMR_AUTO_OFFON))
-    _task_post(TASK_AUTO_OFFON);
+  if (tmr_fired(TMR_BTN_PB_HELD))
+    task_post(TASK_BTN_PB_HELD);
   if (tmr_fired(TMR_FADE))
-    _task_post(TASK_FADE);
+    task_post(TASK_FADE);
   if (tmr_fired(TMR_INCOLOR))
-    _task_post(TASK_INCOLOR);
-#if 0
-  if (tmr_fired(TMR_DIM))
-    _task_post(TMR_DIM);
-#endif
+    task_post(TASK_INCOLOR);
+  if (tmr_fired(TMR_CANDLE))
+    task_post(TASK_CANDLE);
+  if (tmr_fired(TMR_CFG))
+    task_post(TASK_CFG);
 }