altos: Switch all main() to return 'int'
[fw/altos] / src / telemini-v3.0 / ao_telemini.c
index d5fbb04e5244310ef83ea2247641f3452fa4cbf8..bb3bc05424e2083eee81bc61cbde082a8b5a8876 100644 (file)
@@ -1,9 +1,10 @@
 /*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
+ * Copyright © 2017 Keith Packard <keithp@keithp.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
 #include <ao.h>
 #include <ao_exti.h>
 
-void
+static void
+ao_check_recovery(void)
+{
+       int     i;
+       ao_enable_input(AO_RECOVERY_PORT, AO_RECOVERY_PIN, AO_RECOVERY_MODE);
+       for (i = 0; i < 100; i++)
+               ao_arch_nop();
+       if (ao_gpio_get(AO_RECOVERY_PORT, AO_RECOVERY_PIN) == AO_RECOVERY_VALUE) {
+               ao_flight_force_idle = 1;
+               ao_force_freq = 1;
+       }
+       ao_gpio_set_mode(AO_RECOVERY_PORT, AO_RECOVERY_PIN, 0);
+       ao_disable_port(AO_RECOVERY_PORT);
+}
+
+int
 main(void)
 {
+       ao_check_recovery();
+
        ao_clock_init();
        ao_task_init();
-       ao_led_init(LEDS_AVAILABLE);
-       ao_led_on(AO_LED_GREEN);
        ao_timer_init();
 
        ao_dma_init();
@@ -33,22 +49,28 @@ main(void)
 
        ao_adc_init();
 
+#if HAS_BEEP
        ao_beep_init();
+#endif
+#if HAS_SERIAL_1
+       ao_serial_init();
+#endif
+#if HAS_USB
+       ao_usb_init();
+#endif
        ao_cmd_init();
 
-//     ao_ms5607_init();
+       ao_ms5607_init();
 
        ao_storage_init();
-//     ao_flight_init();
-//     ao_log_init();
-//     ao_report_init();
-//     ao_telemetry_init();
+       ao_flight_init();
+       ao_log_init();
+       ao_report_init();
+       ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(TRUE);
-//     ao_igniter_init();
+       ao_packet_slave_init(true);
+       ao_igniter_init();
        ao_config_init();
 
-       ao_flight_force_idle = TRUE;
-
        ao_start_scheduler();
 }