1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * main() method
- */
-
- #include <avr/interrupt.h>
- #include <avr/wdt.h>
-
- #include "spi.h"
- #include "timer.h"
- #include "cppm.h"
- #include "rx.h"
- #include "main.h"
-
- void watchdogBoot(void) __attribute__((naked)) __attribute__((section(".init3")));
- void watchdogBoot(void) {
- MCUSR = 0;
- wdt_disable();
- }
-
- #ifdef DEBUG
- void uartMenu(void) {
- if (!serialHasChar(0)) {
- return;
- }
-
- uint8_t c = serialGet(0);
- time_t time = timerGet();
- switch (c) {
- case 't': case 'T':
- debugWrite("Uptime: ");
- serialWriteUnsigned64(0, time);
- debugWrite("ms / ");
- serialWriteUnsigned64(0, time / 1000);
- debugWrite("s\n");
- break;
-
- case 'q': case 'Q':
- debugWrite("Resetting...\n\n");
- wdt_enable(WDTO_15MS);
- for (;;) { }
- break;
-
- default:
- debugWrite("Unknown command: '");
- serialWrite(0, c);
- debugWrite("'\n");
-
- case 'h': case 'H': case '?':
- debugWrite("Available commands:\n");
- debugWrite(" h - Help\n");
- debugWrite(" t - Time\n");
- debugWrite(" q - Reset\n");
- break;
- }
- }
- #endif
-
- void main(void) {
- cppmInit();
- timerInit();
-
- #ifdef DEBUG
- serialInit(0, BAUD(38400, F_CPU));
- #endif
-
- sei(); // Enable interrupts (required for timer)
- //wdt_enable(WDTO_250MS); // Trigger Watchdog after 250ms
- wdt_enable(WDTO_2S); // Trigger Watchdog after 2s
-
- debugWrite("RX reset.\n");
-
- spiInit();
- rxInit();
-
- debugWrite("RX ready!\n");
-
- for(;;) {
- wdt_reset();
- rxReceivePacket();
-
- #ifdef DEBUG
- uartMenu();
- #endif
- }
- }
|