# HG changeset patch # User Tero Marttila # Date 1411596008 -10800 # Node ID d0f29c45fe52b3344aa92116456a19fc83b02bee # Parent 87dd3b72b024e405ddec4538330290f74bd23ba0 carboard: rename from hello diff -r 87dd3b72b024 -r d0f29c45fe52 Makefile --- a/Makefile Thu Sep 25 00:56:54 2014 +0300 +++ b/Makefile Thu Sep 25 01:00:08 2014 +0300 @@ -1,11 +1,11 @@ QMSK_ARDUINO = qmsk -PROG = hello +PROG = carboard ELF = build/src/$(PROG).elf HEX = build/src/$(PROG).hex -build/src/hello.elf: build/src/hello.o \ +build/src/carboard.elf: build/src/carboard.o \ build/qmsk/src/serial.o \ build/qmsk/src/switch.o \ build/qmsk/src/timer.o diff -r 87dd3b72b024 -r d0f29c45fe52 src/carboard.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/carboard.c Thu Sep 25 01:00:08 2014 +0300 @@ -0,0 +1,111 @@ +#include +#include + +#include "stdlib.h" + +#define DEBUG_DDR DDRB +#define DEBUG_PIN 5 +#define DEBUG_PORT PORTB + +/* Relay outputs */ +#define RELAY_DDR DDRC +#define RELAY_PORT PORTC +#define RELAY_PIN PINC +#define RELAY_PINS 4 + +#define RELAY_DOWN1 0 +#define RELAY_DOWN2 1 +#define RELAY_LEFT 2 +#define RELAY_RIGHT 3 + +/* Switch inputs */ +static ioport_t *const SWITCH_DDR = &DDRD; +static ioport_t *const SWITCH_PORT = &PORTD; +static ioport_t *const SWITCH_PIN = &PIND; +static ioport_t *const SWITCH_PCMSK = &PCMSK2; +static const byte SWITCH_PCIE = PCIE2; +static const byte SWITCH_PCIF = PCIF2; + +enum switch_bits { + SWITCH_LEFT = 0b00000100, + SWITCH_RIGHT = 0b00001000, + SWITCH_HORN1 = 0b00010000, + SWITCH_HORN2 = 0b00100000, + + SWITCH_MASK = 0b00111100, +}; + +#include "debug.h" +#include "relay.h" +#include "serial.h" +#include "switch.h" +#include "timer.h" + +int main (void) +{ + debug_init(); + relay_init(RELAY_PINS); + serial_init(SERIAL_BAUD_9600, SERIAL_PARITY_N, SERIAL_STOPBITS_1); + switch_init(); + timer_init(); + + // init + char c = '.'; + byte s; + unsigned short timeout = 8000; + + debug_set(); + sei(); + + // start + while (true) { + c = s = 0; + + if (timer_sleep(timeout)) { + c = '.'; + } else if ((c = serial_read())) { + switch (c) { + case 'L': relay_open(RELAY_LEFT); break; + case 'R': relay_open(RELAY_RIGHT); break; + case 'B': + relay_open(RELAY_DOWN1); + relay_open(RELAY_DOWN2); + break; + + case 'l': relay_toggle(RELAY_LEFT); break; + case 'r': relay_toggle(RELAY_RIGHT); break; + case 'b': + relay_close(RELAY_DOWN1); + relay_close(RELAY_DOWN2); + break; + + default: + c = '!'; + break; + } + } else if (switch_read(&s)) { + c = '*'; + + if (s & SWITCH_LEFT) + c = 'l'; + + if (s & SWITCH_RIGHT) + c = 'r'; + + if (s & SWITCH_HORN1) + c = 'h'; + + if (s & SWITCH_HORN2) + c = 'h'; + + } else { + // XXX: for some reason this occasionally gets stuck in an interrupt loop here after some switch events.. + c = '?'; + } + + // out + debug_toggle(); + + serial_write(c); + } +} diff -r 87dd3b72b024 -r d0f29c45fe52 src/hello.c --- a/src/hello.c Thu Sep 25 00:56:54 2014 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -#include -#include - -#include "stdlib.h" - -#define DEBUG_DDR DDRB -#define DEBUG_PIN 5 -#define DEBUG_PORT PORTB - -/* Relay outputs */ -#define RELAY_DDR DDRC -#define RELAY_PORT PORTC -#define RELAY_PIN PINC -#define RELAY_PINS 4 - -#define RELAY_DOWN1 0 -#define RELAY_DOWN2 1 -#define RELAY_LEFT 2 -#define RELAY_RIGHT 3 - -/* Switch inputs */ -static ioport_t *const SWITCH_DDR = &DDRD; -static ioport_t *const SWITCH_PORT = &PORTD; -static ioport_t *const SWITCH_PIN = &PIND; -static ioport_t *const SWITCH_PCMSK = &PCMSK2; -static const byte SWITCH_PCIE = PCIE2; -static const byte SWITCH_PCIF = PCIF2; - -enum switch_bits { - SWITCH_LEFT = 0b00000100, - SWITCH_RIGHT = 0b00001000, - SWITCH_HORN1 = 0b00010000, - SWITCH_HORN2 = 0b00100000, - - SWITCH_MASK = 0b00111100, -}; - -#include "debug.h" -#include "relay.h" -#include "serial.h" -#include "switch.h" -#include "timer.h" - -int main (void) -{ - debug_init(); - relay_init(RELAY_PINS); - serial_init(SERIAL_BAUD_9600, SERIAL_PARITY_N, SERIAL_STOPBITS_1); - switch_init(); - timer_init(); - - // init - char c = '.'; - byte s; - unsigned short timeout = 8000; - - debug_set(); - sei(); - - // start - while (true) { - c = s = 0; - - if (timer_sleep(timeout)) { - c = '.'; - } else if ((c = serial_read())) { - switch (c) { - case 'L': relay_open(RELAY_LEFT); break; - case 'R': relay_open(RELAY_RIGHT); break; - case 'B': - relay_open(RELAY_DOWN1); - relay_open(RELAY_DOWN2); - break; - - case 'l': relay_toggle(RELAY_LEFT); break; - case 'r': relay_toggle(RELAY_RIGHT); break; - case 'b': - relay_close(RELAY_DOWN1); - relay_close(RELAY_DOWN2); - break; - - default: - c = '!'; - break; - } - } else if (switch_read(&s)) { - c = '*'; - - if (s & SWITCH_LEFT) - c = 'l'; - - if (s & SWITCH_RIGHT) - c = 'r'; - - if (s & SWITCH_HORN1) - c = 'h'; - - if (s & SWITCH_HORN2) - c = 'h'; - - } else { - // XXX: for some reason this occasionally gets stuck in an interrupt loop here after some switch events.. - c = '?'; - } - - // out - debug_toggle(); - - serial_write(c); - } -}