Stop using SiRF state info.
[fw/altos] / src / ao_gps_print.c
index 46521b107207b4a1cc8bd59a6d4b101f17a28b5f..b8b73cd2f847e8b600f079da6c61312998545784 100644 (file)
@@ -15,7 +15,9 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
+#ifndef AO_GPS_TEST
 #include "ao.h"
+#endif
 
 struct ao_gps_split {
        uint8_t positive;
@@ -47,11 +49,14 @@ ao_gps_print(__xdata struct ao_gps_data *gps_data) __reentrant
               (gps_data->flags & AO_GPS_NUM_SAT_MASK) >> AO_GPS_NUM_SAT_SHIFT);
        if (gps_data->flags & AO_GPS_VALID) {
                static __xdata struct ao_gps_split      lat, lon;
-               int16_t climb;
-               uint8_t climb_sign;
+               int16_t climb, climb_int, climb_frac;
 
                ao_gps_split(gps_data->latitude, &lat);
                ao_gps_split(gps_data->longitude, &lon);
+               printf(" 20%02d-%02d-%02d",
+                      gps_data->year,
+                      gps_data->month,
+                      gps_data->day);
                printf(" %2d:%02d:%02d",
                       gps_data->hour,
                       gps_data->minute,
@@ -66,25 +71,58 @@ ao_gps_print(__xdata struct ao_gps_data *gps_data) __reentrant
                       lon.minutes_fraction,
                       lon.positive ? 'E' : 'W',
                       gps_data->altitude);
-               if (gps_data->climb_rate >= 0) {
-                       climb_sign = ' ';
-                       climb = gps_data->climb_rate;
+               climb = gps_data->climb_rate;
+               if (climb >= 0) {
+                       climb_int = climb / 100;
+                       climb_frac = climb % 100;
                } else {
-                       climb_sign = '-';
-                       climb = -gps_data->climb_rate;
+                       climb = -climb;
+                       climb_int = -(climb / 100);
+                       climb_frac = climb % 100;
                }
-               printf(" %5u.%02dm/s(H) %d° %c%5d.%02dm/s(V)",
+               printf(" %5u.%02dm/s(H) %d° %5d.%02dm/s(V)",
                       gps_data->ground_speed / 100,
                       gps_data->ground_speed % 100,
                       gps_data->course * 2,
-                      climb_sign,
                       climb / 100,
                       climb % 100);
-               printf(" %d.%d(hdop) %5d(herr) %5d(verr)\n",
-                      gps_data->hdop,
+               printf(" %d.%d(hdop) %5u(herr) %5u(verr)",
+                      gps_data->hdop / 5,
+                      (gps_data->hdop * 2) % 10,
                       gps_data->h_error,
                       gps_data->v_error);
+       } else if (gps_data->flags & AO_GPS_RUNNING) {
+               printf(" unlocked");
        } else {
-               printf(" unlocked\n");
+               printf (" not-connected");
+       }
+}
+
+void
+ao_gps_tracking_print(__xdata struct ao_gps_tracking_data *gps_tracking_data) __reentrant
+{
+       uint8_t c, n, v;
+       __xdata struct ao_gps_sat_data  *sat;
+       printf("SAT ");
+       n = gps_tracking_data->channels;
+       if (n == 0) {
+               printf("not-connected");
+               return;
+       }
+       sat = gps_tracking_data->sats;
+       v = 0;
+       for (c = 0; c < n; c++) {
+               if (sat->svid)
+                       v++;
+               sat++;
+       }
+       printf("%d ", v);
+       sat = gps_tracking_data->sats;
+       for (c = 0; c < n; c++) {
+               if (sat->svid)
+                       printf (" %3d %3d",
+                               sat->svid,
+                               sat->c_n_1);
+               sat++;
        }
 }