#include <stdint.h>
#include <stdio.h>
#include <string.h>
+#include <stddef.h>
#include "cc1111.h"
#define TRUE 1
void
ao_timer_init(void);
+/* Initialize the hardware clock. Must be called first */
+void
+ao_clock_init(void);
+
/*
* ao_adc.c
*/
* ao_log.c
*/
-/* Structure containing GPS position, either lat or lon */
-
-struct ao_gps_pos {
- uint8_t degrees;
- uint8_t minutes;
- uint16_t minutes_fraction; /* in units of 1/10000 minutes */
-};
-
/*
* The data log is recorded in the eeprom as a sequence
* of data packets.
uint8_t second;
uint8_t flags;
} gps_time;
- struct ao_gps_pos gps_latitude;
- struct ao_gps_pos gps_longitude;
+ int32_t gps_latitude;
+ int32_t gps_longitude;
struct {
int16_t altitude;
uint16_t unused;
enum ao_flight_state {
ao_flight_startup = 0,
ao_flight_idle = 1,
- ao_flight_launchpad = 2,
+ ao_flight_pad = 2,
ao_flight_boost = 3,
- ao_flight_coast = 4,
- ao_flight_apogee = 5,
+ ao_flight_fast = 4,
+ ao_flight_coast = 5,
ao_flight_drogue = 6,
ao_flight_main = 7,
ao_flight_landed = 8,
void
ao_serial_putchar(char c) __critical;
+#define AO_SERIAL_SPEED_4800 0
+#define AO_SERIAL_SPEED_57600 1
+
+void
+ao_serial_set_speed(uint8_t speed);
+
void
ao_serial_init(void);
#define AO_GPS_NUM_SAT_SHIFT (0)
#define AO_GPS_VALID (1 << 4)
-#define AO_GPS_LONGITUDE_MASK (1 << 5)
-#define AO_GPS_LONGITUDE_EAST (0 << 5)
-#define AO_GPS_LONGITUDE_WEST (1 << 5)
-
-#define AO_GPS_LATITUDE_MASK (1 << 6)
-#define AO_GPS_LATITUDE_NORTH (0 << 6)
-#define AO_GPS_LATITUDE_SOUTH (1 << 6)
+#define AO_GPS_RUNNING (1 << 5)
struct ao_gps_data {
uint8_t hour;
uint8_t minute;
uint8_t second;
uint8_t flags;
- struct ao_gps_pos latitude;
- struct ao_gps_pos longitude;
- int16_t altitude;
+ int32_t latitude; /* degrees * 10⁷ */
+ int32_t longitude; /* degrees * 10⁷ */
+ int16_t altitude; /* m */
+ uint16_t ground_speed; /* cm/s */
+ uint8_t course; /* degrees / 2 */
+ uint8_t hdop; /* * 5 */
+ int16_t climb_rate; /* cm/s */
+ uint16_t h_error; /* m */
+ uint16_t v_error; /* m */
};
extern __xdata uint8_t ao_gps_mutex;