some more colors on the remote interpreted
[moodlight.git] / main.c
diff --git a/main.c b/main.c
index 3073f335f192567a5c314c2a4005c15d78409203..b94bc1d7b7acd3d412e977e6e96b9e792c1a4704 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.1 2010/06/26 12:28:08 simimeie Exp $
+/* $Id: main.c,v 1.5 2010/07/01 23:56:19 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.
@@ -16,6 +16,9 @@
 #include <util/delay.h>
 
 #include "console.h"
+#include "ledpwm.h"
+#include "ircontrol.h"
+#include "timers.h"
 /* #include "eepromdata.h" */
 
 uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
@@ -31,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;
+  uint8_t irstate = 0;
   
   /* Load settings from EEPROM */
 #if 0
@@ -42,6 +50,9 @@ int main(void)
 
   /* Initialize stuff */
   console_init();
+  timers_init();
+  ledpwm_init();
+  ircontrol_init();
   
   wdt_enable(WDTO_2S);
 
@@ -61,5 +72,111 @@ 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 0x02: /* "Off" */
+                 ledpwm_bri = 0;
+                 break;
+      case 0x03: /* "On" */
+                 ledpwm_bri = 128;
+                 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 0x09: /* greenish cyan */
+                 ledpwm_re = 0x00; ledpwm_gr = 0xff; ledpwm_bl = 0x80;
+                 irstate = 0;
+                 break;
+      case 0x0c: /* orange */
+                 ledpwm_re = 0xff; ledpwm_gr = 0x80; ledpwm_bl = 0x00;
+                 irstate = 0;
+                 break;
+      case 0x0d: /* cyan */
+                 ledpwm_re = 0x00; ledpwm_gr = 0xff; ledpwm_bl = 0xff;
+                 irstate = 0;
+                 break;
+      case 0x10: /* bright orange */
+                 ledpwm_re = 0xff; ledpwm_gr = 0xc0; ledpwm_bl = 0x00;
+                 irstate = 0;
+                 break;
+      case 0x11: /* blueish cyan */
+                 ledpwm_re = 0x00; ledpwm_gr = 0xa0; ledpwm_bl = 0xff;
+                 irstate = 0;
+                 break;
+      case 0x14: /* yellow */
+                 ledpwm_re = 0xff; ledpwm_gr = 0xff; ledpwm_bl = 0x00;
+                 irstate = 0;
+                 break;
+      case 0x15: /* blueerish cyan */
+                 ledpwm_re = 0x00; ledpwm_gr = 0x60; ledpwm_bl = 0xff;
+                 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);
+    ledpwm_setled(LEDPWM_GREENLED, i+128);
+    ledpwm_setled(LEDPWM_BLUELED, 255-i);
+    _delay_ms(500); */
   }
 }
This page took 0.05043 seconds and 4 git commands to generate.