-/* $Id: main.c,v 1.2 2010/06/26 19:08:18 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.
#include "console.h"
#include "ledpwm.h"
#include "ircontrol.h"
+#include "timers.h"
/* #include "eepromdata.h" */
uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
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
/* Initialize stuff */
console_init();
+ timers_init();
ledpwm_init();
ircontrol_init();
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);