From 88c470d67e400fde5d3ecd2eb07116581fb80a6e Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Tue, 1 Mar 2011 02:05:12 -0500 Subject: Replace the crappy old RTCM3 dumper with one that emits JSON. --- driver_rtcm3.c | 369 +-------------------------------------------------------- 1 file changed, 6 insertions(+), 363 deletions(-) (limited to 'driver_rtcm3.c') diff --git a/driver_rtcm3.c b/driver_rtcm3.c index 137d1b32..6770646e 100644 --- a/driver_rtcm3.c +++ b/driver_rtcm3.c @@ -3,7 +3,7 @@ This is a decoder for RTCM-104 3.x, a serial protocol used for broadcasting pseudorange corrections from differential-GPS reference stations. The applicable specification is RTCM 10403.1: RTCM Paper -177-2006-SC104-STD. This obsolesces the esrlier RTCM-104 2.x +177-2006-SC104-STD. This obsolesces the earlier RTCM-104 2.x specifications. The specification document is proprietary; ordering instructions are accessible from under "Publications". @@ -548,372 +548,15 @@ void rtcm3_unpack( /*@out@*/ struct rtcm3_t *rtcm, char *buf) bitcount += 8 * n; assert(bitcount == (int)(72 + 8 * n)); break; - } -#undef sgrab -#undef ugrab - /*@ +evalorder +sefparams +mayaliasunique @*/ -} - -void rtcm3_dump(struct rtcm3_t *rtcm, FILE * fp) -/* dump the contents of a parsed RTCM104 message */ -{ - int i; - - char *systems[] = { "GPS", "Glonass", "Galileo", "unknown" }; - - (void)fprintf(fp, "%u (%u):\n", rtcm->type, rtcm->length); - -#define BOOL(c) (c!=0 ? 't' : 'f') -#define CODE(x) (unsigned int)(x) -#define INT(x) (unsigned int)(x) - switch (rtcm->type) { - case 1001: - (void)fprintf(fp, - " #station_id=%u, tow=%d sync=%c smoothing=%c interval=%u satcount=%u", - rtcm->rtcmtypes.rtcm3_1001.header.station_id, - (int)rtcm->rtcmtypes.rtcm3_1001.header.tow, - BOOL(rtcm->rtcmtypes.rtcm3_1001.header.sync), - BOOL(rtcm->rtcmtypes.rtcm3_1001.header.smoothing), - rtcm->rtcmtypes.rtcm3_1001.header.interval, - rtcm->rtcmtypes.rtcm3_1001.header.satcount); - for (i = 0; i < rtcm->rtcmtypes.rtcm3_1001.header.satcount; i++) { - (void)fprintf(fp, - " ident=%u\n L1: ind=%u prange=%8.1f delta=%6.4f lockt=%u\n", - rtcm->rtcmtypes.rtcm3_1001.rtk_data[i].ident, - CODE(rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L1.indicator), - rtcm->rtcmtypes.rtcm3_1001.rtk_data[i]. - L1.pseudorange, - rtcm->rtcmtypes.rtcm3_1001.rtk_data[i].L1.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1001.rtk_data[i]. - L1.locktime)); - } - break; - - case 1002: - (void)fprintf(fp, - " #station_id=%u, tow=%d sync=%c smoothing=%c interval=%u satcount=%u", - rtcm->rtcmtypes.rtcm3_1002.header.station_id, - (int)rtcm->rtcmtypes.rtcm3_1002.header.tow, - BOOL(rtcm->rtcmtypes.rtcm3_1002.header.sync), - BOOL(rtcm->rtcmtypes.rtcm3_1002.header.smoothing), - rtcm->rtcmtypes.rtcm3_1002.header.interval, - rtcm->rtcmtypes.rtcm3_1002.header.satcount); - for (i = 0; i < rtcm->rtcmtypes.rtcm3_1002.header.satcount; i++) { - (void)fprintf(fp, - " ident=%u\n L1: ind=%u prange=%8.1f delta=%6.4f lockt=%u amb=%u CNR=%.2f\n", - rtcm->rtcmtypes.rtcm3_1002.rtk_data[i].ident, - CODE(rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L1.indicator), - rtcm->rtcmtypes.rtcm3_1002.rtk_data[i]. - L1.pseudorange, - rtcm->rtcmtypes.rtcm3_1002.rtk_data[i].L1.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1002.rtk_data[i]. - L1.locktime), - INT(rtcm->rtcmtypes.rtcm3_1002.rtk_data[i]. - L1.ambiguity), - rtcm->rtcmtypes.rtcm3_1002.rtk_data[i].L1.CNR); - } - break; - - case 1003: - (void)fprintf(fp, - " #station_id=%u, tow=%d sync=%c smoothing=%c interval=%u satcount=%u", - rtcm->rtcmtypes.rtcm3_1003.header.station_id, - (int)rtcm->rtcmtypes.rtcm3_1003.header.tow, - BOOL(rtcm->rtcmtypes.rtcm3_1003.header.sync), - BOOL(rtcm->rtcmtypes.rtcm3_1003.header.smoothing), - rtcm->rtcmtypes.rtcm3_1003.header.interval, - rtcm->rtcmtypes.rtcm3_1003.header.satcount); - for (i = 0; i < rtcm->rtcmtypes.rtcm3_1003.header.satcount; i++) { - (void)fprintf(fp, - " ident=%u\n L1: ind=%u prange=%8.1f delta=%6.4f lockt=%u\n L2: ind=%u prange=%8.1f delta=%6.4f lockt=%u\n", - rtcm->rtcmtypes.rtcm3_1003.rtk_data[i].ident, - CODE(rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L1.indicator), - rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L1.pseudorange, - rtcm->rtcmtypes.rtcm3_1003.rtk_data[i].L1.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L1.locktime), - CODE(rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L2.indicator), - rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L2.pseudorange, - rtcm->rtcmtypes.rtcm3_1003.rtk_data[i].L2.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L2.locktime)); - } - break; - - case 1004: - (void)fprintf(fp, - " #station_id=%u, tow=%d sync=%c smoothing=%c interval=%u satcount=%u\n", - rtcm->rtcmtypes.rtcm3_1004.header.station_id, - (int)rtcm->rtcmtypes.rtcm3_1004.header.tow, - BOOL(rtcm->rtcmtypes.rtcm3_1004.header.sync), - BOOL(rtcm->rtcmtypes.rtcm3_1004.header.smoothing), - rtcm->rtcmtypes.rtcm3_1004.header.interval, - rtcm->rtcmtypes.rtcm3_1004.header.satcount); - for (i = 0; i < rtcm->rtcmtypes.rtcm3_1004.header.satcount; i++) { - (void)fprintf(fp, - " ident=%u\n L1: ind=%u prange=%8.1f delta=%6.4f lockt=%u amb=%u CNR=%.2f\n L2: ind=%u prange=%8.1f delta=%6.4f lockt=%u amb=%u CNR=%.2f\n", - rtcm->rtcmtypes.rtcm3_1004.rtk_data[i].ident, - CODE(rtcm->rtcmtypes.rtcm3_1004.rtk_data[i]. - L1.indicator), - rtcm->rtcmtypes.rtcm3_1004.rtk_data[i]. - L1.pseudorange, - rtcm->rtcmtypes.rtcm3_1004.rtk_data[i].L1.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1004.rtk_data[i]. - L1.locktime), - INT(rtcm->rtcmtypes.rtcm3_1002.rtk_data[i]. - L1.ambiguity), - rtcm->rtcmtypes.rtcm3_1002.rtk_data[i].L1.CNR, - CODE(rtcm->rtcmtypes.rtcm3_1004.rtk_data[i]. - L2.indicator), - rtcm->rtcmtypes.rtcm3_1004.rtk_data[i]. - L2.pseudorange, - rtcm->rtcmtypes.rtcm3_1004.rtk_data[i].L2.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1004.rtk_data[i]. - L2.locktime), - INT(rtcm->rtcmtypes.rtcm3_1004.rtk_data[i]. - L2.ambiguity), - rtcm->rtcmtypes.rtcm3_1004.rtk_data[i].L2.CNR); - } - break; - - case 1005: - (void)fprintf(fp, - " station_id=%u, %s refstation=%c sro=%c x=%f y=%f z=%f\n", - rtcm->rtcmtypes.rtcm3_1005.station_id, - systems[rtcm->rtcmtypes.rtcm3_1005.system], - BOOL(rtcm->rtcmtypes.rtcm3_1005.reference_station), - BOOL(rtcm->rtcmtypes.rtcm3_1005.single_receiver), - rtcm->rtcmtypes.rtcm3_1005.ecef_x, - rtcm->rtcmtypes.rtcm3_1005.ecef_y, - rtcm->rtcmtypes.rtcm3_1005.ecef_z); - break; - - case 1006: - (void)fprintf(fp, - " station_id=%u, %s refstation=%c sro=%c x=%f y=%f z=%f a=%f\n", - rtcm->rtcmtypes.rtcm3_1006.station_id, - systems[rtcm->rtcmtypes.rtcm3_1006.system], - BOOL(rtcm->rtcmtypes.rtcm3_1006.reference_station), - BOOL(rtcm->rtcmtypes.rtcm3_1006.single_receiver), - rtcm->rtcmtypes.rtcm3_1006.ecef_x, - rtcm->rtcmtypes.rtcm3_1006.ecef_y, - rtcm->rtcmtypes.rtcm3_1006.ecef_z, - rtcm->rtcmtypes.rtcm3_1006.height); - break; - - case 1007: - (void)fprintf(fp, - " station_id=%u, desc=%s setup-id=%u\n", - rtcm->rtcmtypes.rtcm3_1007.station_id, - rtcm->rtcmtypes.rtcm3_1007.descriptor, - INT(rtcm->rtcmtypes.rtcm3_1007.setup_id)); - break; - - case 1008: - (void)fprintf(fp, - " station_id=%u, desc=%s setup-id=%u serial=%s\n", - rtcm->rtcmtypes.rtcm3_1008.station_id, - rtcm->rtcmtypes.rtcm3_1008.descriptor, - INT(rtcm->rtcmtypes.rtcm3_1008.setup_id), - rtcm->rtcmtypes.rtcm3_1008.serial); - break; - - case 1009: - (void)fprintf(fp, - " #station_id=%u, tow=%d sync=%c smooting=%c interval=%u satcount=%u", - rtcm->rtcmtypes.rtcm3_1009.header.station_id, - (int)rtcm->rtcmtypes.rtcm3_1009.header.tow, - BOOL(rtcm->rtcmtypes.rtcm3_1009.header.sync), - BOOL(rtcm->rtcmtypes.rtcm3_1009.header.smoothing), - rtcm->rtcmtypes.rtcm3_1009.header.interval, - rtcm->rtcmtypes.rtcm3_1009.header.satcount); - for (i = 0; i < rtcm->rtcmtypes.rtcm3_1009.header.satcount; i++) { - (void)fprintf(fp, - " ident=%u\n L1: ind=%u channel=%u prange=%8.1f delta=%6.4f lockt=%u\n", - rtcm->rtcmtypes.rtcm3_1009.rtk_data[i].ident, - CODE(rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L1.indicator), - INT(rtcm->rtcmtypes.rtcm3_1009.rtk_data[i]. - L1.channel), - rtcm->rtcmtypes.rtcm3_1009.rtk_data[i]. - L1.pseudorange, - rtcm->rtcmtypes.rtcm3_1009.rtk_data[i].L1.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1009.rtk_data[i]. - L1.locktime)); - } - break; - - case 1010: - (void)fprintf(fp, - " #station_id=%u, tow=%d sync=%c smooting=%c interval=%u satcount=%u", - rtcm->rtcmtypes.rtcm3_1010.header.station_id, - (int)rtcm->rtcmtypes.rtcm3_1010.header.tow, - BOOL(rtcm->rtcmtypes.rtcm3_1010.header.sync), - BOOL(rtcm->rtcmtypes.rtcm3_1010.header.smoothing), - rtcm->rtcmtypes.rtcm3_1010.header.interval, - rtcm->rtcmtypes.rtcm3_1010.header.satcount); - for (i = 0; i < rtcm->rtcmtypes.rtcm3_1010.header.satcount; i++) { - (void)fprintf(fp, - " ident=%u\n L1: ind=%u channel=%u prange=%8.1f delta=%6.4f lockt=%u amb=%u CNR=%.2f\n", - rtcm->rtcmtypes.rtcm3_1010.rtk_data[i].ident, - CODE(rtcm->rtcmtypes.rtcm3_1003.rtk_data[i]. - L1.indicator), - INT(rtcm->rtcmtypes.rtcm3_1010.rtk_data[i]. - L1.channel), - rtcm->rtcmtypes.rtcm3_1010.rtk_data[i]. - L1.pseudorange, - rtcm->rtcmtypes.rtcm3_1010.rtk_data[i].L1.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1010.rtk_data[i]. - L1.locktime), - INT(rtcm->rtcmtypes.rtcm3_1010.rtk_data[i]. - L1.ambiguity), - rtcm->rtcmtypes.rtcm3_1010.rtk_data[i].L1.CNR); - } - break; - - case 1011: - (void)fprintf(fp, - " #station_id=%u, tow=%d sync=%c smooting=%c interval=%u satcount=%u", - rtcm->rtcmtypes.rtcm3_1011.header.station_id, - (int)rtcm->rtcmtypes.rtcm3_1011.header.tow, - BOOL(rtcm->rtcmtypes.rtcm3_1011.header.sync), - BOOL(rtcm->rtcmtypes.rtcm3_1011.header.smoothing), - rtcm->rtcmtypes.rtcm3_1011.header.interval, - rtcm->rtcmtypes.rtcm3_1011.header.satcount); - for (i = 0; i < rtcm->rtcmtypes.rtcm3_1011.header.satcount; i++) { - (void)fprintf(fp, - " ident=%u\n L1: ind=%u channel=%u prange=%8.1f delta=%6.4f lockt=%u\n L2: ind=%u prange=%8.1f delta=%6.4f lockt=%u\n", - rtcm->rtcmtypes.rtcm3_1011.rtk_data[i].ident, - CODE(rtcm->rtcmtypes.rtcm3_1011.rtk_data[i]. - L1.indicator), - INT(rtcm->rtcmtypes.rtcm3_1011.rtk_data[i]. - L1.channel), - rtcm->rtcmtypes.rtcm3_1011.rtk_data[i]. - L1.pseudorange, - rtcm->rtcmtypes.rtcm3_1011.rtk_data[i].L1.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1011.rtk_data[i]. - L1.locktime), - CODE(rtcm->rtcmtypes.rtcm3_1011.rtk_data[i]. - L2.indicator), - rtcm->rtcmtypes.rtcm3_1011.rtk_data[i]. - L2.pseudorange, - rtcm->rtcmtypes.rtcm3_1011.rtk_data[i].L2.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1011.rtk_data[i]. - L2.locktime)); - } - break; - - case 1012: - (void)fprintf(fp, - " #station_id=%u, tow=%d sync=%c smooting=%c interval=%u satcount=%u", - rtcm->rtcmtypes.rtcm3_1012.header.station_id, - (int)rtcm->rtcmtypes.rtcm3_1012.header.tow, - BOOL(rtcm->rtcmtypes.rtcm3_1012.header.sync), - BOOL(rtcm->rtcmtypes.rtcm3_1012.header.smoothing), - rtcm->rtcmtypes.rtcm3_1012.header.interval, - rtcm->rtcmtypes.rtcm3_1012.header.satcount); - for (i = 0; i < rtcm->rtcmtypes.rtcm3_1012.header.satcount; i++) { - (void)fprintf(fp, - " ident=%u\n L1: ind=%u channel=%u prange=%8.1f delta=%6.4f lockt=%u amb=%u CNR=%.2f\n L2: ind=%u prange=%8.1f delta=%6.4f lockt=%u amb=%u CNR=%.2f\n", - rtcm->rtcmtypes.rtcm3_1012.rtk_data[i].ident, - CODE(rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]. - L1.indicator), - INT(rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]. - L1.channel), - rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]. - L1.pseudorange, - rtcm->rtcmtypes.rtcm3_1012.rtk_data[i].L1.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]. - L1.locktime), - INT(rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]. - L1.ambiguity), - rtcm->rtcmtypes.rtcm3_1012.rtk_data[i].L1.CNR, - CODE(rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]. - L2.indicator), - rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]. - L2.pseudorange, - rtcm->rtcmtypes.rtcm3_1012.rtk_data[i].L2.rangediff, - INT(rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]. - L2.locktime), - INT(rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]. - L2.ambiguity), - rtcm->rtcmtypes.rtcm3_1012.rtk_data[i].L2.CNR); - } - break; - - case 1013: - (void)fprintf(fp, - " station_id=%u, mjd=%u sec=%u leapsecs=%u ncount=%u\n", - rtcm->rtcmtypes.rtcm3_1013.station_id, - rtcm->rtcmtypes.rtcm3_1013.mjd, - rtcm->rtcmtypes.rtcm3_1013.sod, - INT(rtcm->rtcmtypes.rtcm3_1013.leapsecs), - INT(rtcm->rtcmtypes.rtcm3_1013.ncount)); - for (i = 0; i < rtcm->rtcmtypes.rtcm3_1013.ncount; i++) - (void)fprintf(fp, - " id=%u sync=%c interval=%u\n", - rtcm->rtcmtypes.rtcm3_1013.announcements[i].id, - BOOL(rtcm->rtcmtypes.rtcm3_1013. - announcements[i].sync), - rtcm->rtcmtypes.rtcm3_1013. - announcements[i].interval); - break; - - case 1014: - (void)fprintf(fp, - " netid=%u subnetid=%u statcount=%u master=%u aux=%u lat=%f, lon=%f, alt=%f\n", - rtcm->rtcmtypes.rtcm3_1014.network_id, - rtcm->rtcmtypes.rtcm3_1014.subnetwork_id, - (uint) rtcm->rtcmtypes.rtcm3_1014.stationcount, - rtcm->rtcmtypes.rtcm3_1014.master_id, - rtcm->rtcmtypes.rtcm3_1014.aux_id, - rtcm->rtcmtypes.rtcm3_1014.d_lat, - rtcm->rtcmtypes.rtcm3_1014.d_lon, - rtcm->rtcmtypes.rtcm3_1014.d_alt); - break; - - case 1015: - break; - - case 1016: - break; - - case 1017: - break; - - case 1018: - break; - - case 1019: - break; - - case 1020: - break; - - case 1029: - (void)fprintf(fp, - " station_id=%u, mjd=%u sec=%u len=%u units=%u msg=%s\n", - rtcm->rtcmtypes.rtcm3_1029.station_id, - rtcm->rtcmtypes.rtcm3_1029.mjd, - rtcm->rtcmtypes.rtcm3_1029.sod, - INT(rtcm->rtcmtypes.rtcm3_1029.len), - INT(rtcm->rtcmtypes.rtcm3_1029.unicode_units), - (char *)rtcm->rtcmtypes.rtcm3_1029.text); - break; default: - (void)fprintf(fp, " Unknown content\n"); + //memcpy(tp->rtcmtypes.data, msg->msg_type.rtcm2_msgunk, + // (RTCM2_WORDS_MAX - 2) * sizeof(isgps30bits_t)); break; } -#undef CODE -#undef BOOL -#undef INT +#undef sgrab +#undef ugrab + /*@ +evalorder +sefparams +mayaliasunique @*/ } /* *INDENT-ON* */ -- cgit v1.2.1