+ }
+}
+
+/* return time in milliseconds on unsigned 16 bits */
+static uint16_t get_time_ms(void)
+{
+ return global_ms;
+}
+
+static void main_timer_interrupt(void)
+{
+ static uint16_t cycles;
+ static uint8_t cpt;
+
+ /* interrupt every 2048 cycles */
+ cycles += 2048;
+ if (cycles >= 12000) {
+ cycles -= 12000;
+ global_ms ++;
+ }
+
+ /* LED blink */
+ if (global_ms & 0x80)
+ LED1_ON();
+ else
+ LED1_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 */
+
+ 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();
+
+ printf_P(PSTR("\r\n"));
+ rdline_newline(&xbeeboard.rdl, xbeeboard.prompt);
+
+ callout_manager_init(&cm, get_time_ms);
+ //callout_reset(&cm, &t1, 500, PERIODICAL, do_led_blink, NULL);