#define AO_LOG_GPS_LAT 'N'
#define AO_LOG_GPS_LON 'W'
#define AO_LOG_GPS_ALT 'H'
+#define AO_LOG_GPS_SAT 'V'
#define AO_LOG_POS_NONE (~0UL)
int16_t altitude;
uint16_t unused;
} gps_altitude;
+ struct {
+ uint16_t svid;
+ uint8_t state;
+ uint8_t c_n;
+ uint8_t unused;
+ } gps_sat;
struct {
uint16_t d0;
uint16_t d1;
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_RUNNING (1 << 5)
struct ao_gps_data {
uint8_t hour;
uint8_t minute;
uint8_t second;
uint8_t flags;
- int32_t latitude;
- int32_t 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 */
+};
+
+#define SIRF_SAT_STATE_ACQUIRED (1 << 0)
+#define SIRF_SAT_STATE_CARRIER_PHASE_VALID (1 << 1)
+#define SIRF_SAT_BIT_SYNC_COMPLETE (1 << 2)
+#define SIRF_SAT_SUBFRAME_SYNC_COMPLETE (1 << 3)
+#define SIRF_SAT_CARRIER_PULLIN_COMPLETE (1 << 4)
+#define SIRF_SAT_CODE_LOCKED (1 << 5)
+#define SIRF_SAT_ACQUISITION_FAILED (1 << 6)
+#define SIRF_SAT_EPHEMERIS_AVAILABLE (1 << 7)
+
+struct ao_gps_sat_data {
+ uint8_t svid;
+ uint8_t state;
+ uint8_t c_n_1;
+};
+
+struct ao_gps_tracking_data {
+ uint8_t channels;
+ struct ao_gps_sat_data sats[12];
};
extern __xdata uint8_t ao_gps_mutex;
extern __xdata struct ao_gps_data ao_gps_data;
+extern __xdata struct ao_gps_tracking_data ao_gps_tracking_data;
void
ao_gps(void);
void
ao_gps_print(__xdata struct ao_gps_data *gps_data);
+void
+ao_gps_tracking_print(__xdata struct ao_gps_tracking_data *gps_tracking_data);
+
void
ao_gps_init(void);
struct ao_adc adc;
struct ao_gps_data gps;
char callsign[AO_MAX_CALLSIGN];
+ struct ao_gps_tracking_data gps_tracking;
};
/* Set delay between telemetry reports (0 to disable) */