altos: Extend GPS altitudes to at least 24 bits everywhere
[fw/altos] / src / test / ao_gps_test_ublox.c
index afd4dba414f45b14a3012db4adcfaa0744ad9bee..5ea205d66792fd1e6ce4391cb516a24e6d764859 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #define AO_GPS_TEST
+#define HAS_GPS        1
 #include "ao_host.h"
 #include <termios.h>
 #include <errno.h>
@@ -26,6 +27,9 @@
 #define AO_GPS_NUM_SAT_MASK    (0xf << 0)
 #define AO_GPS_NUM_SAT_SHIFT   (0)
 
+#define AO_GPS_NEW_DATA                1
+#define AO_GPS_NEW_TRACKING    2
+
 #define AO_GPS_VALID           (1 << 4)
 #define AO_GPS_RUNNING         (1 << 5)
 #define AO_GPS_DATE_VALID      (1 << 6)
@@ -41,7 +45,7 @@ struct ao_telemetry_location {
        uint8_t                 flags;
        int32_t                 latitude;       /* degrees * 10⁷ */
        int32_t                 longitude;      /* degrees * 10⁷ */
-       int16_t                 altitude;       /* m */
+       int16_t                 altitude_low;   /* m */
        uint16_t                ground_speed;   /* cm/s */
        uint8_t                 course;         /* degrees / 2 */
        uint8_t                 pdop;           /* * 5 */
@@ -50,8 +54,14 @@ struct ao_telemetry_location {
        int16_t                 climb_rate;     /* cm/s */
        uint16_t                h_error;        /* m */
        uint16_t                v_error;        /* m */
+       int16_t                 altitude_high;  /* m */
 };
 
+typedef int32_t                gps_alt_t;
+#define AO_TELEMETRY_LOCATION_ALTITUDE(l)      (((gps_alt_t) (l)->altitude_high << 16) | ((l)->altitude_low))
+#define AO_TELEMETRY_LOCATION_SET_ALTITUDE(l,a) (((l)->altitude_high = (a) >> 16), \
+                                                ((l)->altitude_low = (a)))
+
 #define UBLOX_SAT_STATE_ACQUIRED               (1 << 0)
 #define UBLOX_SAT_STATE_CARRIER_PHASE_VALID    (1 << 1)
 #define UBLOX_SAT_BIT_SYNC_COMPLETE            (1 << 2)
@@ -130,7 +140,7 @@ static uint16_t     recv_len;
 static void check_ublox_message(char *which, uint8_t *msg);
 
 char
-ao_serial1_getchar(void)
+ao_gps_getchar(void)
 {
        char    c;
        uint8_t uc;
@@ -163,7 +173,7 @@ static int  message_len;
 static uint16_t        send_len;
 
 void
-ao_serial1_putchar(char c)
+ao_gps_putchar(char c)
 {
        int     i;
        uint8_t uc = (uint8_t) c;
@@ -196,7 +206,7 @@ ao_serial1_putchar(char c)
 #define AO_SERIAL_SPEED_115200 3
 
 static void
-ao_serial1_set_speed(uint8_t speed)
+ao_gps_set_speed(uint8_t speed)
 {
        int     fd = ao_gps_fd;
        struct termios  termios;
@@ -347,7 +357,7 @@ check_ublox_message(char *which, uint8_t *msg)
 void
 ao_dump_state(void *wchan)
 {
-       if (wchan == &ao_gps_data)
+       if (wchan == &ao_gps_new)
                ao_gps_show();
        return;
 }