void main(void) { bit test_radio = 0; bit bounce_radio = 0; /* Initialize app modules. Not reinitialized upon reset. */ message_init(); compose_init(); inbox_init(); info_init(); reset: sleepy_ = 0; state_ = STATE_VIEW; if (bounce_radio) { repeater_mode(); } /* Initialize system modules. */ clock_init(); setIOPorts(); configureSPI(); LCDReset(); radio_init(); random_init(); inbox_draw(); if (test_radio) { run_test_radio(); } /* Main loop. */ radio_listen(); while (1) { poll_keyboard(); /* Send and receive messages. */ message_tick(); /* Handle background tasks (like progress bar) */ if (compose_tick() && state_ == STATE_COMPOSE) { compose_draw(); } if (info_tick() && state_ == STATE_INFO) { info_draw(); } /* go to sleep (more or less a shutdown) if power button pressed */ if (sleepy_) { clear(); clock_delayms(1000); SSN = LOW; LCDPowerSave(); SSN = HIGH; sleep(); /* reset on wake */ goto reset; } } }
void main(void) { u16 i; pktbuf = radio_getbuf(); ch = 0; reset: centerFreq = DEFAULT_FREQ; userFreq = centerFreq; sleepy = 0; packetDone = 0; xtalClock(); setIOPorts(); configureSPI(); LCDReset(); radio_init(); clear(); printDebugHeader(); setFrequency(centerFreq); printDebugFrequency(centerFreq, ch); while (1) { poll_keyboard(); pollPacket(); /* Show current RSSI */ SSN = LOW; setCursor(5, 78); printf("%3u", (RSSI ^ 0x80)); SSN = HIGH; /* TODO Mod this when more than one channel */ if (userFreq != centerFreq) { centerFreq = setFrequency(userFreq); chan_table[ch].ss = 0; chan_table[ch].max = 0; printDebugFrequency(centerFreq, ch); } /* Go to sleep (more or less a shutdown) if power button pressed */ if (sleepy) { clear(); sleepMillis(1000); SSN = LOW; LCDPowerSave(); SSN = HIGH; while (1) { sleep(); /* Power button depressed long enough to wake? */ sleepy = 0; for (i = 0; i < DEBOUNCE_COUNT; i++) { sleepMillis(DEBOUNCE_PERIOD); if (keyscan() != KPWR) sleepy = 1; } if (!sleepy) break; } /* Reset on wake */ goto reset; } } }