src/hello.c
changeset 89 1b3cea759eff
parent 88 c923295ee520
child 90 13c2deb919d1
--- a/src/hello.c	Mon Jun 02 18:27:08 2014 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,213 +0,0 @@
-#include <avr/io.h>
-
-#include "stdlib.h"
-
-// XXX
-#include "timer.c"
-#include "serial.c"
-#include "spi.c"
-#include "led7.c"
-
-static enum state {
-    START       = '\n',
-    CMD_SET     = 's',
-    CMD_INC     = '+',
-    CMD_DEC     = '-',
-    CMD_READ    = 'r',
-    ARG_CHAR    = '0',
-    ERROR       = '!',
-} state = START, cmd = 0;
-
-static enum {
-    CMD_LED_1   = 0,
-} cmd_led = 0;
-
-static char arg_char;
-
-static unsigned char led_state = 0;
-
-int command (enum state cmd)
-{
-    switch (cmd) {
-        case CMD_SET:
-            led_state = arg_char;
-
-            return 0;
-
-        case CMD_INC:
-            if (led_state == 0xff)
-                return 1;
-
-            led_state++;
-            return 0;
-
-        case CMD_DEC:
-            if (!led_state)
-                return 1;
-
-            led_state--;
-            return 0;
-
-        case CMD_READ:
-            led_state = spi_rx[1]; // XXX
-            return 0;
-
-        default:
-            return 1;
-    }
-}
-
-char input (char c)
-{
-    if (c == '\r') {
-        char ret = '?';
-
-        // command state
-        switch (state) {
-            case START:
-                cmd = 0;
-                break;
-
-            case CMD_SET:
-            case CMD_INC:
-            case CMD_DEC:
-                break;
-
-            case ARG_CHAR:
-                break;
-
-            case ERROR:
-                cmd = 0;
-                break;
-        }
-
-        // command
-        if (!cmd) {
-            ret = ' ';
-        } else if (command(cmd)) {
-            ret = '!';
-        } else {
-            ret = '\n';
-        }
-        
-        // return to START with response
-        state = START;
-        return ret;
-
-    } else if (31 < c && c < 128) {
-        // process input char
-        switch (state) {
-            case START:
-                if (c == 's') {
-                    cmd = CMD_SET;
-                    state = ARG_CHAR;
-                    arg_char = 0;
-                } else if (c == 'S') {
-                    cmd = state = CMD_SET;
-                    arg_char = 255;
-                } else if (c == '+') {
-                    cmd = state = CMD_INC;
-                } else if (c == '-') {
-                    cmd = state = CMD_DEC;
-                } else if (c == 'r') {
-                    cmd = state = CMD_READ;
-                } else {
-                    break;
-                }
-                
-                return state;
-            break;
-
-            /* 
-            case CMD_SET:
-                if (c == '1') {
-                    cmd_led = CMD_LED_1;
-                    state = ARG_CHAR;
-                    arg_char = 0;
-                } else {
-                    state = ERROR;
-                }
-
-                break;
-            */
-            case ARG_CHAR:
-                if (c >= '0' && c <= '9') {
-                    arg_char *= 10;
-                    arg_char += (c - '0');
-                } else {
-                    break;
-                }
-                    
-                return c;
-            break;
-        }
-
-        // reject
-        state = ERROR;
-        return ERROR;
-
-    } else {
-        // ignore
-        return ' ';
-    }
-}
-
-
-#define DEBUG_DDR   DDRB
-#define DEBUG_PORT  PORTB
-#define DEBUG_LED   0
-
-int main (void)
-{
-    led7_init();
-    timer_init();
-    serial_init();
-    spi_init();
-
-    // led_init();
-    sbi(&DEBUG_DDR, DEBUG_LED);
-
-    sei();
-
-    // start
-    char c;
-    unsigned short timeout = 0;
-        
-    serial_write(state);
-
-    while (true) {
-        // TODO: SPI timer
-        led7_update(led_state);
-        spi_update();
-
-        // toggle
-        if (led_state == 0) {
-            timeout = 0;
-            cbi(&DEBUG_PORT, DEBUG_LED);
-
-        } else if (led_state == 255) {
-            timeout = 0;
-            sbi(&DEBUG_PORT, DEBUG_LED);
-
-        } else {
-            // as Hz
-            timeout = (16000 / led_state);
-            xbi(&DEBUG_PORT, DEBUG_LED);
-        }
-        
-        // sleep
-        if (timer_sleep(timeout)) {
-            c = '.';
-
-        } else if ((c = serial_read())) {
-            // got serial data
-            c = input(c);
-
-        } else {
-            c = '?';
-        }
-        
-        // output...
-        serial_write(c);
-    }
-}