X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=ao-tools%2Fao-postflight%2Fao-postflight.c;h=48752d073d9c6950d0e105098d8517cd40d95b24;hb=a0d4c1b06d27e850d233f8ddf8fe32912bf0ec8f;hp=733eb38c0b56a60b778cccf9d2cc356906bec2f5;hpb=6391c89bd5b89f5f46255b8365c658a873e5959a;p=fw%2Faltos diff --git a/ao-tools/ao-postflight/ao-postflight.c b/ao-tools/ao-postflight/ao-postflight.c index 733eb38c..48752d07 100644 --- a/ao-tools/ao-postflight/ao-postflight.c +++ b/ao-tools/ao-postflight/ao-postflight.c @@ -208,6 +208,18 @@ analyse_flight(struct cc_flightraw *f, FILE *summary_file, FILE *detail_file, "Serial: %9d\n" "Flight: %9d\n", f->serial, f->flight); + if (f->year) { + fprintf(summary_file, + "Date: %04d-%02d-%02d\n", + f->year, f->month, f->day); + } + if (f->gps.num) { + fprintf(summary_file, + "Time: %2d:%02d:%02d\n", + f->gps.data[0].hour, + f->gps.data[0].minute, + f->gps.data[0].second); + } boost_start = f->accel.data[0].time; boost_stop = f->accel.data[f->accel.num-1].time; for (i = 0; i < f->state.num; i++) { @@ -339,10 +351,21 @@ analyse_flight(struct cc_flightraw *f, FILE *summary_file, FILE *detail_file, time, pres, accel); } } - if (gps_file) { - int j = 0; - fprintf(gps_file, "%9s %12s %12s %12s\n", - "time", "lat", "lon", "alt"); + if (gps_file || kml_file) { + int j = 0, baro_pos; + double baro_offset; + double baro = 0.0; + + if (gps_file) + fprintf(gps_file, "%9s %12s %12s %9s %8s %5s\n", + "time", "lat", "lon", "alt", "baro", "nsat"); + if (kml_file) + fprintf(kml_file, "%s", kml_header); + if (f->gps.num) + baro_offset = f->gps.data[0].alt; + else + baro_offset = 0; + baro_pos = 0; for (i = 0; i < f->gps.num; i++) { int nsat = 0; int k; @@ -352,50 +375,58 @@ analyse_flight(struct cc_flightraw *f, FILE *summary_file, FILE *detail_file, break; j++; } - fprintf(gps_file, "%12.7f %12.7f %12.7f %12.7f", - (f->gps.data[i].time - boost_start) / 100.0, - f->gps.data[i].lat, - f->gps.data[i].lon, - f->gps.data[i].alt); - nsat = 0; - for (k = 0; k < f->gps.sats[j].nsat; k++) { - fprintf (gps_file, " %12.7f", (double) f->gps.sats[j].sat[k].c_n); - if (f->gps.sats[j].sat[k].state == 0xbf) - nsat++; + if (cooked) { + while (baro_pos < cooked->pres_pos.num) { + double baro_time = cooked->accel_accel.start + baro_pos * cooked->accel_accel.step; + if (baro_time >= f->gps.data[i].time) + break; + baro_pos++; + } + if (baro_pos < cooked->pres_pos.num) + baro = cooked->pres_pos.data[baro_pos]; } - fprintf(gps_file, " %d\n", nsat); - } - } - if (kml_file) { - int j = 0; - - fprintf(kml_file, "%s", kml_header); - for (i = 0; i < f->gps.num; i++) { - int nsat = 0; - int k; - while (j < f->gps.numsats - 1) { - if (f->gps.sats[j].sat[0].time <= f->gps.data[i].time && - f->gps.data[i].time < f->gps.sats[j+1].sat[0].time) - break; - j++; + if (gps_file) + fprintf(gps_file, "%12.7f %12.7f %12.7f %7.1f %7.1f", + (f->gps.data[i].time - boost_start) / 100.0, + f->gps.data[i].lat, + f->gps.data[i].lon, + f->gps.data[i].alt, + baro + baro_offset); + if (kml_file) { + fprintf(kml_file, "%12.7f, %12.7f, %12.7f ", + f->gps.data[i].lon, + f->gps.data[i].lat, + baro + baro_offset, + f->gps.data[i].alt, + (f->gps.data[i].time - boost_start) / 100.0, + nsat); + if (i < f->gps.num - 1) + fprintf(kml_file, ",\n"); + else + fprintf(kml_file, "\n"); } + nsat = 0; - for (k = 0; k < f->gps.sats[j].nsat; k++) - if (f->gps.sats[j].sat[k].state == 0xbf) - nsat++; - - fprintf(kml_file, "%12.7f, %12.7f, %12.7f ", - f->gps.data[i].lon, - f->gps.data[i].lat, - f->gps.data[i].alt, - (f->gps.data[i].time - boost_start) / 100.0, - nsat); - if (i < f->gps.num - 1) - fprintf(kml_file, ",\n"); - else - fprintf(kml_file, "\n"); + if (f->gps.sats) { + for (k = 0; k < f->gps.sats[j].nsat; k++) { + if (f->gps.sats[j].sat[k].svid != 0) + nsat++; + } + if (gps_file) { + fprintf(gps_file, " %4d", nsat); + for (k = 0; k < f->gps.sats[j].nsat; k++) { + if (f->gps.sats[j].sat[k].svid != 0) { + fprintf (gps_file, " %3d(%4.1f)", + f->gps.sats[j].sat[k].svid, + (double) f->gps.sats[j].sat[k].c_n); + } + } + fprintf(gps_file, "\n"); + } + } } - fprintf(kml_file, "%s", kml_footer); + if (kml_file) + fprintf(kml_file, "%s", kml_footer); } if (cooked && plot_name) { struct cc_perioddata *speed; @@ -431,18 +462,20 @@ analyse_flight(struct cc_flightraw *f, FILE *summary_file, FILE *detail_file, } static const struct option options[] = { - { .name = "summary", .has_arg = 1, .val = 's' }, - { .name = "detail", .has_arg = 1, .val = 'd' }, - { .name = "plot", .has_arg = 1, .val = 'p' }, - { .name = "raw", .has_arg = 1, .val = 'r' }, - { .name = "gps", .has_arg = 1, .val = 'g' }, - { .name = "kml", .has_arg = 1, .val = 'k' }, + { .name = "summary", .has_arg = 2, .val = 's' }, + { .name = "detail", .has_arg = 2, .val = 'd' }, + { .name = "plot", .has_arg = 2, .val = 'p' }, + { .name = "raw", .has_arg = 2, .val = 'r' }, + { .name = "gps", .has_arg = 2, .val = 'g' }, + { .name = "kml", .has_arg = 2, .val = 'k' }, + { .name = "all", .has_arg = 0, .val = 'a' }, { 0, 0, 0, 0}, }; static void usage(char *program) { fprintf(stderr, "usage: %s\n" + "\t[--all] [-a]\n" "\t[--summary=] [-s ]\n" "\t[--detail=]\n" "\t[--raw= -r serial) raw->serial = serial; - analyse_flight(raw, summary_file, detail_file, raw_file, plot_name, gps_file, kml_file); + analyse_flight(raw, summary_file, detail_file, raw_file, this_plot_name, gps_file, kml_file); cc_flightraw_free(raw); + if (has_summary && !summary_name) { + fclose(summary_file); summary_file = NULL; + } + if (has_detail && !detail_name) { + fclose(detail_file); detail_file = NULL; + } + if (this_plot_name && this_plot_name != plot_name) { + free (this_plot_name); this_plot_name = NULL; + } + if (has_raw && !raw_name) { + fclose(raw_file); raw_file = NULL; + } + if (has_gps && !gps_name) { + fclose(gps_file); gps_file = NULL; + } + if (has_kml && !kml_name) { + fclose(kml_file); kml_file = NULL; + } } return ret; }