summaryrefslogtreecommitdiff
path: root/ao.h
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-04-18 23:17:45 -0700
committerKeith Packard <keithp@keithp.com>2009-04-18 23:17:45 -0700
commitc4e983daa4579896b227fdcb2be43fad75e94307 (patch)
tree7300291e5bb7cdbfe4d7eac2d2c429ee4b2cb144 /ao.h
parented6f67dc47d750d5ff8bea63ae7cbb560689b9b6 (diff)
Parse GPS data locally. Add 'g' command to display recent GPS results.
This parses the GPS GGA message and stores it in a global variable, protected by a mutex.
Diffstat (limited to 'ao.h')
-rw-r--r--ao.h49
1 files changed, 40 insertions, 9 deletions
diff --git a/ao.h b/ao.h
index 20c2458c..bbf358e9 100644
--- a/ao.h
+++ b/ao.h
@@ -477,15 +477,15 @@ enum ao_flight_state {
ao_flight_invalid
};
-extern __xdata struct ao_adc ao_flight_data;
-extern __data enum flight_state ao_flight_state;
-extern __data uint16_t ao_flight_tick;
-extern __data int16_t ao_flight_accel;
-extern __data int16_t ao_flight_pres;
-extern __data int16_t ao_ground_pres;
-extern __data int16_t ao_ground_accel;
-extern __data int16_t ao_min_pres;
-extern __data uint16_t ao_launch_time;
+extern __xdata struct ao_adc ao_flight_data;
+extern __pdata enum flight_state ao_flight_state;
+extern __pdata uint16_t ao_flight_tick;
+extern __pdata int16_t ao_flight_accel;
+extern __pdata int16_t ao_flight_pres;
+extern __pdata int16_t ao_ground_pres;
+extern __pdata int16_t ao_ground_accel;
+extern __pdata int16_t ao_min_pres;
+extern __pdata uint16_t ao_launch_time;
/* Flight thread */
void
@@ -585,6 +585,37 @@ ao_serial_init(void);
* ao_gps.c
*/
+struct ao_gps_pos {
+ uint8_t degrees;
+ uint8_t minutes;
+ uint16_t minutes_fraction; /* in units of 1/10000 minutes */
+};
+
+#define AO_GPS_NUM_SAT_MASK (0xf << 0)
+#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)
+
+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;
+};
+
+extern __xdata uint8_t ao_gps_mutex;
+extern __xdata struct ao_gps_data ao_gps_data;
+
void
ao_gps(void);