Initial TeleMini bits
authorKeith Packard <keithp@keithp.com>
Wed, 22 May 2013 20:03:06 +0000 (13:03 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 26 Aug 2013 05:24:00 +0000 (22:24 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
14 files changed:
src/cc1111/ao_adc.c
src/cc1111/ao_usb.c
src/core/ao_data.c
src/core/ao_data.h
src/core/ao_log_mini.c
src/core/ao_telemetry.c
src/core/ao_telemetry.h
src/drivers/ao_ms5607.c
src/drivers/ao_ms5607.h
src/drivers/ao_ms5607_convert_8051.c [new file with mode: 0644]
src/telemini-v2.0/Makefile [new file with mode: 0644]
src/telemini-v2.0/ao_pins.h [new file with mode: 0644]
src/telemini-v2.0/ao_telemini.c [new file with mode: 0644]
src/test/Makefile

index 4a58023d50474270d017167ef09240e99184775a..6cc0839914994f52a4579898d667cedee78e5729 100644 (file)
@@ -162,6 +162,11 @@ ao_adc_isr(void) __interrupt 1
 #define GOT_ADC
 #endif 
 
+#ifdef FETCH_ADC
+       FETCH_ADC()
+#define GOT_ADC
+#endif
+
 #ifndef GOT_ADC
 #error No known ADC configuration set
 #endif
index a655d1be903589374bae5c5d1af63244ac873697..b0ab409d7e72d96bbce7c3aba51231d13771ae89 100644 (file)
@@ -201,6 +201,11 @@ ao_usb_ep0_setup(void)
                                ao_usb_ep0_queue_byte(0);
                                break;
                        case AO_USB_REQ_SET_ADDRESS:
+#if USB_FORCE_FLIGHT_IDLE
+                               /* Go to idle mode if USB is connected
+                                */
+                               ao_flight_force_idle = 1;
+#endif
                                ao_usb_set_address(ao_usb_setup.value);
                                break;
                        case AO_USB_REQ_GET_DESCRIPTOR:
index 38d2f7ff44e4a6f32a6a92eff82c7473bec7e565..6a3d02a130087140eb43e9cdbc6f58d7992b7d3e 100644 (file)
@@ -22,6 +22,7 @@ volatile __xdata struct ao_data       ao_data_ring[AO_DATA_RING];
 volatile __data uint8_t                ao_data_head;
 volatile __data uint8_t                ao_data_present;
 
+#ifndef ao_data_count
 void
 ao_data_get(__xdata struct ao_data *packet)
 {
@@ -32,3 +33,4 @@ ao_data_get(__xdata struct ao_data *packet)
 #endif
        memcpy(packet, (void *) &ao_data_ring[i], sizeof (struct ao_data));
 }
+#endif
index b0f086f867285cf111d865b48bd0a684d0fd41d6..080a534f98d992fa2ccb3e77420278cdb65f69bd 100644 (file)
@@ -101,7 +101,7 @@ extern volatile __data uint8_t              ao_data_count;
  * signaled by the timer tick
  */
 #define AO_DATA_WAIT() do {                            \
-               ao_sleep((void *) &ao_data_count);      \
+               ao_sleep(DATA_TO_XDATA ((void *) &ao_data_count));      \
        } while (0)
 
 #endif /* AO_DATA_RING */
index 1273b0e39939fad0ba844587b0bb7f35d5ac4ac7..46b285f31868ab3ca84ac599c33f1ffdfcf3e559 100644 (file)
@@ -79,7 +79,6 @@ void
 ao_log(void)
 {
        __pdata uint16_t        next_sensor, next_other;
-       uint8_t                 i;
 
        ao_storage_setup();
 
index 03a8a273c9d24eaea09d90ba6de9853a7012e6c9..9c67303081aeb71e0cda739b9da2800fbf7b8913 100644 (file)
@@ -171,6 +171,36 @@ ao_send_mega_data(void)
 }
 #endif /* AO_SEND_MEGA */
 
+#ifdef AO_SEND_MINI
+
+static void
+ao_send_mini(void)
+{
+       __xdata struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)];
+                       
+       telemetry.generic.tick = packet->tick;
+       telemetry.generic.type = AO_TELEMETRY_MINI;
+
+       telemetry.mini.state = ao_flight_state;
+
+       telemetry.mini.v_batt = packet->adc.v_batt;
+       telemetry.mini.sense_a = packet->adc.sense_a;
+       telemetry.mini.sense_m = packet->adc.sense_m;
+
+       telemetry.mini.pres = ao_data_pres(packet);
+       telemetry.mini.temp = ao_data_temp(packet);
+
+       telemetry.mini.acceleration = ao_accel;
+       telemetry.mini.speed = ao_speed;
+       telemetry.mini.height = ao_height;
+
+       telemetry.mini.ground_pres = ao_ground_pres;
+
+       ao_radio_send(&telemetry, sizeof (telemetry));
+}
+
+#endif
+
 #ifdef AO_SEND_ALL_BARO
 static uint8_t         ao_baro_sample;
 
@@ -323,12 +353,16 @@ ao_telemetry(void)
                                ao_send_baro();
 #endif
 #if HAS_FLIGHT
-#ifdef AO_SEND_MEGA
+# ifdef AO_SEND_MEGA
                                ao_send_mega_sensor();
                                ao_send_mega_data();
-#else
+# else
+#  ifdef AO_SEND_MINI
+                               ao_send_mini();
+#  else
                                ao_send_sensor();
-#endif
+#  endif
+# endif
 #endif
 
 #if HAS_COMPANION
index f2d201ded4fc7614d048899313d3a8fc7ca32372..776015291dddde49a3d49adfb1615eb8f0bf5631 100644 (file)
@@ -207,6 +207,32 @@ struct ao_telemetry_mega_data {
 };
 
 
+#define AO_TELEMETRY_MINI              0x10
+
+struct ao_telemetry_mini {
+       uint16_t        serial;         /*  0 */
+       uint16_t        tick;           /*  2 */
+       uint8_t         type;           /*  4 */
+
+       uint8_t         state;          /*  5 flight state */
+
+       int16_t         v_batt;         /*  6 battery voltage */
+       int16_t         sense_a;        /*  8 apogee continuity */
+       int16_t         sense_m;        /* 10 main continuity */
+
+       int32_t         pres;           /* 12 Pa * 10 */
+       int16_t         temp;           /* 16 °C * 100 */
+
+       int16_t         acceleration;   /* 18 m/s² * 16 */
+       int16_t         speed;          /* 20 m/s * 16 */
+       int16_t         height;         /* 22 m */
+
+       int32_t         ground_pres;    /* 24 average pres on pad */
+
+       int32_t         pad28;          /* 28 */
+       /* 32 */
+};
+
 /* #define AO_SEND_ALL_BARO */
 
 #define AO_TELEMETRY_BARO              0x80
@@ -240,6 +266,7 @@ union ao_telemetry_all {
        struct ao_telemetry_companion           companion;
        struct ao_telemetry_mega_sensor         mega_sensor;
        struct ao_telemetry_mega_data           mega_data;
+       struct ao_telemetry_mini                mini;
        struct ao_telemetry_baro                baro;
 };
 
index 8f1dcbe1688b268c00d5f6b526a2cc8f9a62cd5e..5259b2650c4c4ed4746025c0e5380b744dff42a9 100644 (file)
@@ -21,7 +21,7 @@
 
 #if HAS_MS5607 || HAS_MS5611
 
-static struct ao_ms5607_prom   ms5607_prom;
+static __xdata struct ao_ms5607_prom   ms5607_prom;
 static uint8_t                 ms5607_configured;
 
 static void
@@ -40,7 +40,7 @@ ao_ms5607_reset(void) {
 
        cmd = AO_MS5607_RESET;
        ao_ms5607_start();
-       ao_spi_send(&cmd, 1, AO_MS5607_SPI_INDEX);
+       ao_spi_send(DATA_TO_XDATA(&cmd), 1, AO_MS5607_SPI_INDEX);
        ao_delay(AO_MS_TO_TICKS(10));
        ao_ms5607_stop();
 }
@@ -69,17 +69,17 @@ ao_ms5607_crc(uint8_t *prom)
 }
 
 static void
-ao_ms5607_prom_read(struct ao_ms5607_prom *prom)
+ao_ms5607_prom_read(__xdata struct ao_ms5607_prom *prom)
 {
-       uint8_t         addr;
-       uint8_t         crc;
-       uint16_t        *r;
+       uint8_t                 addr;
+       uint8_t                 crc;
+       __xdata uint16_t        *r;
 
-       r = (uint16_t *) prom;
+       r = (__xdata uint16_t *) prom;
        for (addr = 0; addr < 8; addr++) {
                uint8_t cmd = AO_MS5607_PROM_READ(addr);
                ao_ms5607_start();
-               ao_spi_send(&cmd, 1, AO_MS5607_SPI_INDEX);
+               ao_spi_send(DATA_TO_XDATA(&cmd), 1, AO_MS5607_SPI_INDEX);
                ao_spi_recv(r, 2, AO_MS5607_SPI_INDEX);
                ao_ms5607_stop();
                r++;
@@ -114,25 +114,25 @@ ao_ms5607_setup(void)
        ao_ms5607_prom_read(&ms5607_prom);
 }
 
-static volatile uint8_t        ao_ms5607_done;
+static __xdata volatile uint8_t        ao_ms5607_done;
 
 static void
 ao_ms5607_isr(void)
 {
        ao_exti_disable(AO_MS5607_MISO_PORT, AO_MS5607_MISO_PIN);
        ao_ms5607_done = 1;
-       ao_wakeup((void *) &ao_ms5607_done);
+       ao_wakeup((__xdata void *) &ao_ms5607_done);
 }
 
 static uint32_t
 ao_ms5607_get_sample(uint8_t cmd) {
-       uint8_t reply[3];
-       uint8_t read;
+       __xdata uint8_t reply[3];
+       __xdata uint8_t read;
 
        ao_ms5607_done = 0;
 
        ao_ms5607_start();
-       ao_spi_send(&cmd, 1, AO_MS5607_SPI_INDEX);
+       ao_spi_send(DATA_TO_XDATA(&cmd), 1, AO_MS5607_SPI_INDEX);
 
        ao_exti_enable(AO_MS5607_MISO_PORT, AO_MS5607_MISO_PIN);
 
@@ -179,10 +179,14 @@ ao_ms5607_sample(struct ao_ms5607_sample *sample)
        sample->temp = ao_ms5607_get_sample(AO_CONVERT_D2);
 }
 
+#ifdef _CC1111_H_
+#include "ao_ms5607_convert_8051.c"
+#else
 #include "ao_ms5607_convert.c"
+#endif
 
 #if HAS_TASK
-struct ao_ms5607_sample        ao_ms5607_current;
+__xdata struct ao_ms5607_sample        ao_ms5607_current;
 
 static void
 ao_ms5607(void)
@@ -191,10 +195,10 @@ ao_ms5607(void)
        for (;;)
        {
                ao_ms5607_sample(&ao_ms5607_current);
-               ao_arch_critical(
-                       AO_DATA_PRESENT(AO_DATA_MS5607);
-                       AO_DATA_WAIT();
-                       );
+               ao_arch_block_interrupts();
+               AO_DATA_PRESENT(AO_DATA_MS5607);
+               AO_DATA_WAIT();
+               ao_arch_release_interrupts();
        }
 }
 
index b2f98a59d9677397fa60e6a0fa42b94c5c6a8ded..3fd43fd44b1df1943d41f56e69e87ef3f3c913de 100644 (file)
@@ -56,7 +56,7 @@ struct ao_ms5607_value {
        int32_t         temp;   /* in °C * 100 */
 };
 
-extern struct ao_ms5607_sample ao_ms5607_current;
+extern __xdata struct ao_ms5607_sample ao_ms5607_current;
 
 void
 ao_ms5607_setup(void);
diff --git a/src/drivers/ao_ms5607_convert_8051.c b/src/drivers/ao_ms5607_convert_8051.c
new file mode 100644 (file)
index 0000000..f47972c
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright © 2012 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#include <ao_ms5607.h>
+
+void
+ao_ms5607_convert(struct ao_ms5607_sample *sample, struct ao_ms5607_value *value)
+{
+#if 0
+       int32_t dT;
+       int32_t TEMP;
+       int64_t OFF;
+       int64_t SENS;
+
+       dT = sample->temp - ((int32_t) ms5607_prom.tref << 8);
+       
+       TEMP = 2000 + (((int64_t) dT * ms5607_prom.tempsens) >> 23);
+
+#if HAS_MS5611
+       OFF = ((int64_t) ms5607_prom.off << 16) + (((int64_t) ms5607_prom.tco * dT) >> 7);
+       SENS = ((int64_t) ms5607_prom.sens << 15) + (((int64_t) ms5607_prom.tcs * dT) >> 8);
+#else
+       OFF = ((int64_t) ms5607_prom.off << 17) + (((int64_t) ms5607_prom.tco * dT) >> 6);
+       SENS = ((int64_t) ms5607_prom.sens << 16) + (((int64_t) ms5607_prom.tcs * dT) >> 7);
+#endif
+
+       if (TEMP < 2000) {
+               int32_t T2 = ((int64_t) dT * (int64_t) dT) >> 31;
+               int32_t TEMPM = TEMP - 2000;
+               int64_t OFF2 = (61 * (int64_t) TEMPM * (int64_t) TEMPM) >> 4;
+               int64_t SENS2 = 2 * (int64_t) TEMPM * (int64_t) TEMPM;
+               if (TEMP < 1500) {
+                       int32_t TEMPP = TEMP + 1500;
+                       int64_t TEMPP2 = TEMPP * TEMPP;
+                       OFF2 = OFF2 + 15 * TEMPP2;
+                       SENS2 = SENS2 + 8 * TEMPP2;
+               }
+               TEMP -= T2;
+               OFF -= OFF2;
+               SENS -= SENS2;
+       }
+
+       value->pres = ((((int64_t) sample->pres * SENS) >> 21) - OFF) >> 15;
+       value->temp = TEMP;
+#endif
+}
diff --git a/src/telemini-v2.0/Makefile b/src/telemini-v2.0/Makefile
new file mode 100644 (file)
index 0000000..afd529f
--- /dev/null
@@ -0,0 +1,108 @@
+#
+# TeleMini build file
+#
+
+TELEMINI_VER=2.0
+TELEMINI_DEF=2_0
+
+vpath %.c ..:../core:../cc1111:../drivers:../product
+vpath %.h ..:../core:../cc1111:../drivers:../product
+vpath ao-make-product.5c ../util
+
+ifndef VERSION
+include ../Version
+endif
+
+INC = \
+       ao.h \
+       ao_pins.h \
+       ao_arch.h \
+       ao_arch_funcs.h \
+       cc1111.h \
+       ao_product.h
+
+CORE_SRC = \
+       ao_cmd.c \
+       ao_config.c \
+       ao_convert.c \
+       ao_flight.c \
+       ao_kalman.c \
+       ao_log.c \
+       ao_log_mini.c \
+       ao_mutex.c \
+       ao_panic.c \
+       ao_report.c \
+       ao_sample.c \
+       ao_stdio.c \
+       ao_storage.c \
+       ao_task.c \
+       ao_telemetry.c \
+       ao_freq.c
+
+CC1111_SRC = \
+       ao_adc.c \
+       ao_dma.c \
+       ao_ignite.c \
+       ao_led.c \
+       ao_packet.c \
+       ao_packet_slave.c \
+       ao_radio.c \
+       ao_romconfig.c \
+       ao_string.c \
+       ao_spi.c \
+       ao_usb.c \
+       ao_convert_pa.c \
+       ao_data.c \
+       ao_beep.c \
+       ao_timer.c \
+       _bp.c
+
+DRIVER_SRC = \
+       ao_ms5607.c \
+       ao_m25.c
+
+PRODUCT_SRC = \
+       ao_telemini.c
+
+SRC = \
+       $(CORE_SRC) \
+       $(CC1111_SRC) \
+       $(DRIVER_SRC) \
+       $(PRODUCT_SRC)
+
+PROGNAME = telemini-v$(TELEMINI_VER)
+PROG = $(PROGNAME)-$(VERSION).ihx
+PRODUCT=TeleMini-v$(TELEMINI_VER)
+PRODUCT_DEF=-DTELEMINI_V_$(TELEMINI_DEF)
+IDPRODUCT=0x000a
+
+include ../cc1111/Makefile.cc1111
+
+NICKLE=nickle
+CHECK_STACK=sh ../util/check-stack
+
+V=0
+# The user has explicitly enabled quiet compilation.
+ifeq ($(V),0)
+quiet = @printf "  $1 $2 $@\n"; $($1)
+endif
+# Otherwise, print the full command line.
+quiet ?= $($1)
+
+all: ../$(PROG)
+
+../$(PROG): $(REL) Makefile
+       $(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $(PROG) $(REL) && cp $(PROG) $(PMAP) ..
+       $(call quiet,CHECK_STACK) ../cc1111/ao_arch.h $(PMEM) || rm $@
+
+ao_product.h: ao-make-product.5c ../Version
+       $(call quiet,NICKLE,$<) $< -m altusmetrum.org -i $(IDPRODUCT) -p $(PRODUCT) -v $(VERSION) > $@
+
+distclean:     clean
+
+clean: clean-cc1111
+
+install:
+
+uninstall:
+
diff --git a/src/telemini-v2.0/ao_pins.h b/src/telemini-v2.0/ao_pins.h
new file mode 100644 (file)
index 0000000..386c8dc
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright © 2010 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#ifndef _AO_PINS_H_
+#define _AO_PINS_H_
+
+#define HAS_RADIO      1
+
+#define HAS_FLIGHT             1
+#define HAS_USB                        1
+#define USB_FORCE_FLIGHT_IDLE  1
+#define HAS_BEEP               1
+#define HAS_GPS                        0
+#define HAS_SERIAL_1           0
+#define HAS_EEPROM             1
+#define HAS_LOG                        1
+#define USE_INTERNAL_FLASH     0
+#define HAS_DBG                        0
+#define PACKET_HAS_SLAVE       1
+#define USE_FAST_ASCENT_LOG    1
+
+#define AO_LED_GREEN           1
+#define AO_LED_RED             2
+#define LEDS_AVAILABLE         (AO_LED_RED|AO_LED_GREEN)
+#define HAS_EXTERNAL_TEMP      0
+#define HAS_ACCEL              0
+#define HAS_IGNITE             1
+#define HAS_IGNITE_REPORT 1
+#define HAS_MONITOR            0
+
+/*
+ * SPI
+ */
+
+#define SPI_CS_PORT            P1
+#define SPI_CS_SEL             P1SEL
+#define SPI_CS_DIR             P1DIR
+
+/*
+ * Flash
+ */
+#define AO_M25_SPI_CS_PORT     SPI_CS_PORT
+#define AO_M25_SPI_CS_MASK     0x04    /* cs_flash is P1_2 */
+#define M25_MAX_CHIPS          1
+
+/*
+ * MS5607
+ */
+
+#define HAS_MS5607             1
+#define HAS_MS5611             0
+#define AO_MS5607_PRIVATE_PINS 0
+#define AO_MS5607_CS_PORT      P1
+#define AO_MS5607_CS_PIN       3
+#define AO_MS5607_CS           P1_3
+#define AO_MS5607_CS_MASK      (1 << AO_MS5607_CS_PIN)
+#define AO_MS5607_MISO_PORT    P0
+#define AO_MS5607_MISO_PIN     2
+#define AO_MS5607_MISO_MASK    (1 << AO_MS5607_MISO_PIN)
+#define AO_MS5607_SPI_INDEX    0
+
+/*
+ * Igniters
+ */
+#define AO_IGNITER_PORT                P2
+#define AO_IGNITER_DROGUE_PORT AO_IGNITER_PORT
+#define AO_IGNITER_DROGUE      P2_3
+#define AO_IGNITER_MAIN                P2_4
+#define AO_IGNITER_DIR         P2DIR
+#define AO_IGNITER_DROGUE_BIT  (1 << 3)
+#define AO_IGNITER_MAIN_BIT    (1 << 4)
+#define AO_IGNITER_DROGUE_PIN  3
+#define AO_IGNITER_MAIN_PIN    4
+
+#define AO_IGNITER_DROGUE_PORT AO_IGNITER_PORT
+#define AO_IGNITER_MAIN_PORT   AO_IGNITER_PORT
+
+/* test these values with real igniters */
+#define AO_IGNITER_OPEN                1000
+#define AO_IGNITER_CLOSED      7000
+#define AO_IGNITER_FIRE_TIME   AO_MS_TO_TICKS(50)
+#define AO_IGNITER_CHARGE_TIME AO_MS_TO_TICKS(2000)
+
+#define AO_SEND_MINI
+
+/*
+ * ADC
+ */
+
+#define HAS_ADC                        1
+#define AO_ADC_FIRST_PIN       0
+
+struct ao_adc {
+       int16_t         sense_a;        /* apogee continuity sense */
+       int16_t         sense_m;        /* main continuity sense */
+       int16_t         v_batt;         /* battery voltage */
+};
+
+#define ao_data_count  ao_adc_count
+
+#define AO_SENSE_DROGUE(p)     ((p)->adc.sense_a)
+#define AO_SENSE_MAIN(p)       ((p)->adc.sense_m)
+
+#define AO_ADC_DUMP(p) \
+       printf("tick: %5u apogee: %5d main: %5d batt: %5d\n", \
+              (p)->tick, (p)->adc.sense_a, (p)->adc.sense_m, (p)->adc.v_batt)
+
+#define FETCH_ADC()                                                    \
+       a = (uint8_t __xdata *) (&ao_data_ring[ao_data_head].adc);      \
+       switch (sequence) {                                             \
+       case 4:                                                         \
+               a += 4;                                                 \
+               sequence = 0;                                           \
+               break;                                                  \
+       case 1:                                                         \
+               a += 2;                                                 \
+               sequence = 4;                                           \
+               break;                                                  \
+       case 0:                                                         \
+               sequence = 1;                                           \
+               break;                                                  \
+       }                                                               \
+       if (sequence)                                                   \
+               ;
+
+#endif /* _AO_PINS_H_ */
diff --git a/src/telemini-v2.0/ao_telemini.c b/src/telemini-v2.0/ao_telemini.c
new file mode 100644 (file)
index 0000000..84df2b8
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright © 2011 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#include "ao.h"
+#include "ao_pins.h"
+
+__xdata uint8_t ao_force_freq;
+
+void
+main(void)
+{
+       /*
+        * Reduce the transient on the ignite pins at startup by
+        * pulling the pins low as soon as possible at power up
+        */
+       ao_ignite_set_pins();
+
+       ao_clock_init();
+
+       /* Turn on the red LED until the system is stable */
+       ao_led_init(LEDS_AVAILABLE);
+       ao_led_on(AO_LED_RED);
+
+       ao_task_init();
+
+       ao_timer_init();
+       ao_adc_init();
+       ao_cmd_init();
+       ao_storage_init();
+       ao_ms5607_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_config_init();
+       ao_start_scheduler();
+}
index 75b1f8485684dbf4f2409ea582479094f510f0aa..9c304318a1f3fa7cbecf54b9f82db79502dbf570 100644 (file)
@@ -2,7 +2,7 @@ vpath % ..:../core:../drivers:../util:../micropeak:../aes
 
 PROGS=ao_flight_test ao_flight_test_baro ao_flight_test_accel ao_flight_test_noisy_accel ao_flight_test_mm \
        ao_gps_test ao_gps_test_skytraq ao_gps_test_ublox ao_convert_test ao_convert_pa_test ao_fec_test \
-       ao_aprs_test ao_micropeak_test ao_fat_test ao_aes_test
+       ao_aprs_test ao_micropeak_test ao_fat_test ao_aes_test ao_int64_test
 
 INCS=ao_kalman.h ao_ms5607.h ao_log.h ao_data.h altitude-pa.h altitude.h
 
@@ -73,3 +73,6 @@ ao_fat_test: ao_fat_test.c ao_fat.c ao_bufio.c
 
 ao_aes_test: ao_aes_test.c ao_aes.c ao_aes_tables.c
        cc $(CFLAGS) -o $@ ao_aes_test.c
+
+ao_int64_test: ao_int64_test.c ao_int64.c ao_int64.h
+       cc $(CFLAGS) -o $@ ao_int64_test.c