X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fao_gps_print.c;h=ca071b42be360f7b21157854eac6c35af8fd76d5;hp=49041af6f452c5c188531e9d8e6ebd1602136bed;hb=0e67b6890dd3a06665239f8dfd2e69266d055e46;hpb=d6749bf24792bb41ca700cf4b8e5e1ac1a63cbf0 diff --git a/src/ao_gps_print.c b/src/ao_gps_print.c index 49041af6..ca071b42 100644 --- a/src/ao_gps_print.c +++ b/src/ao_gps_print.c @@ -18,78 +18,95 @@ #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; - int16_t climb; - uint8_t climb_sign; + uint8_t c, n, v; + __xdata struct ao_gps_sat_data *sat; + + n = gps_tracking_data->channels; + if (n == 0) + return; - ao_gps_split(gps_data->latitude, &lat); - ao_gps_split(gps_data->longitude, &lon); - printf(" %2d:%02d:%02d", - gps_data->hour, - gps_data->minute, - gps_data->second); - printf(" %2d°%02d.%04d'%c %2d°%02d.%04d'%c %5dm", - 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); - if (gps_data->climb_rate >= 0) { - climb_sign = ' '; - climb = gps_data->climb_rate; - } else { - climb_sign = '-'; - climb = -gps_data->climb_rate; + 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++; } - printf(" %5u.%02dm/s(H) %d° %c%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) %5u(herr) %5u(verr)\n", - 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\n"); - } else { - printf (" not-connected\n"); + sat++; } }