altos: Shrink ao_config_callsign_set
[fw/altos] / src / ao_gps_skytraq.c
index d286a30a8bea934aca27eb3b76811f8b499c8596..84743ff53f92da48742c1e5571ed7e483638bca2 100644 (file)
@@ -29,13 +29,13 @@ static __xdata uint8_t ao_gps_cksum;
 static __xdata uint8_t ao_gps_error;
 
 __xdata uint16_t ao_gps_tick;
-__xdata struct ao_gps_data     ao_gps_data;
-__xdata struct ao_gps_tracking_data    ao_gps_tracking_data;
+__xdata struct ao_telemetry_location   ao_gps_data;
+__xdata struct ao_telemetry_satellite  ao_gps_tracking_data;
 
 static __xdata uint16_t                                ao_gps_next_tick;
-static __xdata struct ao_gps_data              ao_gps_next;
+static __xdata struct ao_telemetry_location    ao_gps_next;
 static __xdata uint8_t                         ao_gps_date_flags;
-static __xdata struct ao_gps_tracking_data     ao_gps_tracking_next;
+static __xdata struct ao_telemetry_satellite   ao_gps_tracking_next;
 
 #define STQ_S 0xa0, 0xa1
 #define STQ_E 0x0d, 0x0a
@@ -265,7 +265,7 @@ ao_nmea_gga()
        if (!ao_gps_error) {
                ao_mutex_get(&ao_gps_mutex);
                ao_gps_tick = ao_gps_next_tick;
-               memcpy(&ao_gps_data, &ao_gps_next, sizeof (struct ao_gps_data));
+               memcpy(&ao_gps_data, &ao_gps_next, sizeof (ao_gps_data));
                ao_mutex_put(&ao_gps_mutex);
                ao_wakeup(&ao_gps_data);
        }
@@ -312,9 +312,8 @@ ao_nmea_gsv(void)
                ao_gps_skip_field();    /* azimuth */
                c = ao_gps_decimal(2);  /* C/N0 */
                if (i < AO_MAX_GPS_TRACKING) {
-                       if (!(ao_gps_tracking_next.sats[i].c_n_1 = c))
-                               ao_gps_tracking_next.sats[i].svid = 0;
-                       ao_gps_tracking_next.channels = i + 1;
+                       if ((ao_gps_tracking_next.sats[i].c_n_1 = c) != 0)
+                               ao_gps_tracking_next.channels = i + 1;
                }
        }
        if (ao_gps_char == '*') {
@@ -461,17 +460,24 @@ __xdata struct ao_task ao_gps_task;
 static void
 gps_dump(void) __reentrant
 {
+       uint8_t i;
        ao_mutex_get(&ao_gps_mutex);
        printf ("Date: %02d/%02d/%02d\n", ao_gps_data.year, ao_gps_data.month, ao_gps_data.day);
        printf ("Time: %02d:%02d:%02d\n", ao_gps_data.hour, ao_gps_data.minute, ao_gps_data.second);
        printf ("Lat/Lon: %ld %ld\n", ao_gps_data.latitude, ao_gps_data.longitude);
        printf ("Alt: %d\n", ao_gps_data.altitude);
        printf ("Flags: 0x%x\n", ao_gps_data.flags);
+       printf ("Sats: %d", ao_gps_tracking_data.channels);
+       for (i = 0; i < ao_gps_tracking_data.channels; i++)
+               printf (" %d %d",
+                       ao_gps_tracking_data.sats[i].svid,
+                       ao_gps_tracking_data.sats[i].c_n_1);
+       printf ("\ndone\n");
        ao_mutex_put(&ao_gps_mutex);
 }
 
 __code struct ao_cmds ao_gps_cmds[] = {
-       { gps_dump,     "g\0Display current GPS values" },
+       { gps_dump,     "g\0Display GPS" },
        { 0, NULL },
 };