X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fao_gps_print.c;h=ca071b42be360f7b21157854eac6c35af8fd76d5;hp=bef87aeadaf2c83c62ea14d2a285e945181e6fd3;hb=3336d0f726afd1d43cf62280940e5fb91dab2e91;hpb=ee4919dd771b00e2a2dd1083c9528efa7baab50f diff --git a/src/ao_gps_print.c b/src/ao_gps_print.c index bef87aea..ca071b42 100644 --- a/src/ao_gps_print.c +++ b/src/ao_gps_print.c @@ -15,55 +15,98 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#ifndef AO_GPS_TEST #include "ao.h" +#endif +#include "ao_telem.h" -struct ao_gps_split { - uint8_t positive; - uint8_t degrees; - uint8_t minutes; - uint16_t minutes_fraction; -}; - -static void -ao_gps_split(int32_t v, __xdata struct ao_gps_split *split) __reentrant +void +ao_gps_print(__xdata struct ao_gps_data *gps_data) __reentrant { - uint32_t minutes_e7; + char state; + + if (gps_data->flags & AO_GPS_VALID) + state = AO_TELEM_GPS_STATE_LOCKED; + else if (gps_data->flags & AO_GPS_RUNNING) + state = AO_TELEM_GPS_STATE_UNLOCKED; + else + state = AO_TELEM_GPS_STATE_ERROR; + printf(AO_TELEM_GPS_STATE " %c " + AO_TELEM_GPS_NUM_SAT " %d ", + state, + (gps_data->flags & AO_GPS_NUM_SAT_MASK) >> AO_GPS_NUM_SAT_SHIFT); + if (!(gps_data->flags & AO_GPS_VALID)) + return; + printf(AO_TELEM_GPS_LATITUDE " %ld " + AO_TELEM_GPS_LONGITUDE " %ld " + AO_TELEM_GPS_ALTITUDE " %d ", + gps_data->latitude, + gps_data->longitude, + gps_data->altitude); + + if (gps_data->flags & AO_GPS_DATE_VALID) + printf(AO_TELEM_GPS_YEAR " %d " + AO_TELEM_GPS_MONTH " %d " + AO_TELEM_GPS_DAY " %d ", + gps_data->year, + gps_data->month, + gps_data->day); + + printf(AO_TELEM_GPS_HOUR " %d " + AO_TELEM_GPS_MINUTE " %d " + AO_TELEM_GPS_SECOND " %d ", + gps_data->hour, + gps_data->minute, + gps_data->second); + + printf(AO_TELEM_GPS_HDOP " %d ", + gps_data->hdop * 2); - split->positive = 1; - if (v < 0) { - v = -v; - split->positive = 0; + if (gps_data->flags & AO_GPS_COURSE_VALID) { + printf(AO_TELEM_GPS_HERROR " %d " + AO_TELEM_GPS_VERROR " %d " + AO_TELEM_GPS_VERTICAL_SPEED " %d " + AO_TELEM_GPS_HORIZONTAL_SPEED " %d " + AO_TELEM_GPS_COURSE " %d ", + gps_data->h_error, + gps_data->v_error, + gps_data->climb_rate, + gps_data->ground_speed, + (int) gps_data->course * 2); } - split->degrees = v / 10000000; - minutes_e7 = (v % 10000000) * 60; - split->minutes = minutes_e7 / 10000000; - split->minutes_fraction = (minutes_e7 % 10000000) / 1000; } void -ao_gps_print(__xdata struct ao_gps_data *gps_data) __reentrant +ao_gps_tracking_print(__xdata struct ao_gps_tracking_data *gps_tracking_data) __reentrant { - printf("GPS %2d sat", - (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; - ao_gps_split(gps_data->latitude, &lat); - ao_gps_split(gps_data->longitude, &lon); - printf(" %2d:%02d:%02d %2d°%02d.%04d'%c %2d°%02d.%04d'%c %5dm\n", - gps_data->hour, - gps_data->minute, - gps_data->second, - lat.degrees, - lat.minutes, - lat.minutes_fraction, - lat.positive ? 'N' : 'S', - lon.degrees, - lon.minutes, - lon.minutes_fraction, - lon.positive ? 'E' : 'W', - gps_data->altitude, - (gps_data->flags & AO_GPS_NUM_SAT_MASK) >> AO_GPS_NUM_SAT_SHIFT); - } else { - printf(" unlocked\n"); + uint8_t c, n, v; + __xdata struct ao_gps_sat_data *sat; + + n = gps_tracking_data->channels; + if (n == 0) + return; + + sat = gps_tracking_data->sats; + v = 0; + for (c = 0; c < n; c++) { + if (sat->svid) + v++; + sat++; + } + + printf (AO_TELEM_SAT_NUM " %d ", + v); + + sat = gps_tracking_data->sats; + v = 0; + for (c = 0; c < n; c++) { + if (sat->svid) { + printf (AO_TELEM_SAT_SVID "%d %d " + AO_TELEM_SAT_C_N_0 "%d %d ", + v, sat->svid, + v, sat->c_n_1); + v++; + } + sat++; } }