+
+ /* LED blink */
+ if (global_ms & 0x80)
+ LED1_ON();
+ else
+ LED1_OFF();
+
+ if (cpt & beep_mask)
+ BUZZER_ON();
+ else
+ BUZZER_OFF();
+
+ /* call scheduler every 682us with interrupt unlocked */
+ sei();
+ if ((cpt & 0x3) == 0)
+ scheduler_interrupt();
+}
+
+int main(void)
+{
+ //struct callout t1;
+ FILE *xbee_file;
+ int8_t err;
+ struct xbee_dev dev;
+
+ DDRA = 0x07 /* LEDs */ | 0x10 /* buzzer */;
+
+ uart_init();
+ uart_register_rx_event(CMDLINE_UART, emergency);
+
+ fdevopen(cmdline_dev_send, cmdline_dev_recv);
+ xbee_file = fdevopen(xbee_dev_send, xbee_dev_recv);
+ scheduler_init();
+ timer_init();
+ timer0_register_OV_intr(main_timer_interrupt);
+
+ cmdline_init();
+ spi_servo_init();
+ beep_init();
+
+ callout_manager_init(&cm, get_time_ms);
+ //callout_reset(&cm, &t1, 500, PERIODICAL, do_led_blink, NULL);
+
+ /* initialize libxbee */
+ err = xbee_init();
+ if (err < 0)
+ return -1;
+
+ xbee_dev = &dev;
+
+ /* open xbee device */
+ if (xbee_open(xbee_dev, xbee_file) < 0)
+ return -1;
+
+ /* register default channel with a callback */
+ if (xbee_register_channel(xbee_dev, XBEE_DEFAULT_CHANNEL,
+ xbeeapp_rx, NULL) < 0) {
+ fprintf(stderr, "cannot register default channel\n");
+ return -1;
+ }
+ sei();
+
+ eeprom_load_config();
+
+ printf_P(PSTR("\r\n"));
+ rdline_newline(&xbeeboard.rdl, xbeeboard.prompt);
+
+ xbee_mainloop();
+ return 0;