--- 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
--- /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 <avr/interrupt.h>
+#include <avr/io.h>
+
+#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);
+ }
+}
--- 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 <avr/interrupt.h>
-#include <avr/io.h>
-
-#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);
- }
-}