quick-hack rudimentary ability to control color and brightness with
[moodlight.git] / main.c
diff --git a/main.c b/main.c
index 7ba7212cc28a39aa2c1977e66faeba3a8a6be6d3..5e9fb2220793c5d30ceb9d2433888a70a1463bd2 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.3 2010/06/27 22:19:15 simimeie Exp $
+/* $Id: main.c,v 1.4 2010/06/30 19:39:28 simimeie Exp $
  * Main file for the HaWo moodlight.
  * This is the main file that glues it all together. It also contains all
  * functionality that is too small to require an extra file.
@@ -34,9 +34,14 @@ void get_mcusr(void) {
   wdt_disable();
 }
 
+#define IRSTATE_RED       1
+#define IRSTATE_GREEN     2
+#define IRSTATE_BLUE      3
+#define IRSTATE_WHITE     4
+
 int main(void)
 {
-  uint8_t i = 0;
+  uint8_t irstate = 0;
   
   /* Load settings from EEPROM */
 #if 0
@@ -67,6 +72,84 @@ int main(void)
   
   while (1) { /* We should never exit */
     wdt_reset();
+    uint8_t k = ircontrol_getlastcommand();
+    if (k != 0xff) {
+      switch (k) {
+      case 0x00: /* "Up" */
+                 if (irstate == IRSTATE_RED) {
+                   if (ledpwm_re < 0xff) { ledpwm_re++; }
+                 } else if (irstate == IRSTATE_GREEN) {
+                   if (ledpwm_gr < 0xff) { ledpwm_gr++; }
+                 } else if (irstate == IRSTATE_BLUE) {
+                   if (ledpwm_bl < 0xff) { ledpwm_bl++; }
+                 } else {
+                   if (ledpwm_bri < 0xff) { ledpwm_bri++; }
+                 }
+                 break;
+      case 0x01: /* "Down" */
+                 if (irstate == IRSTATE_RED) {
+                   if (ledpwm_re > 0) { ledpwm_re--; }
+                 } else if (irstate == IRSTATE_GREEN) {
+                   if (ledpwm_gr > 0) { ledpwm_gr--; }
+                 } else if (irstate == IRSTATE_BLUE) {
+                   if (ledpwm_bl > 0) { ledpwm_bl--; }
+                 } else {
+                   if (ledpwm_bri > 0) { ledpwm_bri--; }
+                 }
+                 break;
+      case 0x04: /* Red */
+                 if (irstate == IRSTATE_RED) {
+                   ledpwm_re = 0xff; ledpwm_gr = 0; ledpwm_bl = 0;
+                   irstate = 0;
+                 } else {
+                   irstate = IRSTATE_RED;
+                 }
+                 break;
+      case 0x05: /* Green */
+                 if (irstate == IRSTATE_GREEN) {
+                   ledpwm_re = 0; ledpwm_gr = 0xff; ledpwm_bl = 0;
+                   irstate = 0;
+                 } else {
+                   irstate = IRSTATE_GREEN;
+                 }
+                 break;
+      case 0x06: /* Blue */
+                 if (irstate == IRSTATE_BLUE) {
+                   ledpwm_re = 0; ledpwm_gr = 0; ledpwm_bl = 0xff;
+                   irstate = 0;
+                 } else {
+                   irstate = IRSTATE_BLUE;
+                 }
+                 break;
+      case 0x07: /* White */
+                 if (irstate == IRSTATE_WHITE) {
+                   ledpwm_re = 0xff; ledpwm_gr = 0xff; ledpwm_bl = 0xff;
+                   irstate = 0;
+                 } else {
+                   irstate = IRSTATE_WHITE;
+                 }
+                 break;
+      case 0x08: /* Dark orange */
+                 ledpwm_re = 0xff; ledpwm_gr = 0x40; ledpwm_bl = 0x00;
+                 irstate = 0;
+                 break;
+      case 0x0c: /* orange */
+                 ledpwm_re = 0xff; ledpwm_gr = 0x80; ledpwm_bl = 0x00;
+                 irstate = 0;
+                 break;
+      case 0x10: /* bright orange */
+                 ledpwm_re = 0xff; ledpwm_gr = 0xc0; ledpwm_bl = 0x00;
+                 irstate = 0;
+                 break;
+      case 0x14: /* yellow */
+                 ledpwm_re = 0xff; ledpwm_gr = 0xff; ledpwm_bl = 0x00;
+                 irstate = 0;
+                 break;
+      };
+      ledpwm_setled(LEDPWM_REDLED,   (((uint16_t)ledpwm_re * ledpwm_bri) / 255));
+      ledpwm_setled(LEDPWM_GREENLED, (((uint16_t)ledpwm_gr * ledpwm_bri) / 255));
+      ledpwm_setled(LEDPWM_BLUELED,  (((uint16_t)ledpwm_bl * ledpwm_bri) / 255));
+    }
     /* i++;
     console_printhex8(i);
     ledpwm_setled(LEDPWM_REDLED, i);
This page took 0.064944 seconds and 4 git commands to generate.