]> oss.titaniummirror.com Git - rgblamp.git/commitdiff
Update buttons_sleep() for auto-off restart case
authorR. Steve McKown <rsmckown@gmail.com>
Wed, 7 Dec 2011 02:07:47 +0000 (19:07 -0700)
committerR. Steve McKown <rsmckown@gmail.com>
Wed, 7 Dec 2011 02:07:47 +0000 (19:07 -0700)
buttons_sleep() now first sleeps until the rocker switch is turned off
before then sleeping until it is turned on.  This allows the function to
be used for the auto-off case, where the lamp must stay in auto-off when
the rocker switch is still in position B.  To wake from auto-off manually,
one simply turns the rocker off then back to either position A or B.

buttons.c
buttons.h

index e97f8bf0e9ee9eaf5fe354803e4ddb1f28cead5c..8ddd7ee2c94ff06fe10bc8e0bb51cc9ca51bee84 100644 (file)
--- a/buttons.c
+++ b/buttons.c
@@ -7,12 +7,24 @@
 
 #include <htc.h>
 #include "buttons.h"
+#include "timer.h"
 
 void buttons_sleep()
 {
+    /* If the rocker is on, sleep until it is placed in the off position */
+    IOCBN4 = 0; IOCBP4 = 1;
+    IOCBN5 = 0; IOCBP5 = 1;
+    while ((buttons_read() & (IN_ROCKERA | IN_ROCKERB))) {
+        IOCIE = 1;
+        SLEEP();
+        IOCIE = 0;
+        timer_mwait(50); /* debounce */
+    }
+
+    /* Now that the rocker is off, sleep until it is turned on */
+    IOCBN4 = 1; IOCBP4 = 0; IOCBF4 = 0;
+    IOCBN5 = 1; IOCBP5 = 0; IOCBF5 = 0;
     if ((buttons_read() & (IN_ROCKERA | IN_ROCKERB)) == 0) {
-        IOCBF4 = 0;
-        IOCBF5 = 0;
         IOCIE = 1;
         SLEEP();
         IOCIE = 0;
index 39b96e12050dd48f2e8b48940c1adeef17165c80..63791acb0bcdea9b534e9445fae7fde766f945eb 100644 (file)
--- a/buttons.h
+++ b/buttons.h
@@ -20,8 +20,6 @@
  */
 #define buttons_init() do { \
     nWPUEN = 0; /* enable weak pull-ups on PortB */ \
-    IOCBN4 = 1; \
-    IOCBN5 = 1; \
     TRISB |= IN_MASK; \
     ANSELB &= ~IN_MASK; \
 } while (0)