summaryrefslogtreecommitdiff
path: root/driver_rtcm3.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2011-03-01 02:05:12 -0500
committerEric S. Raymond <esr@thyrsus.com>2011-03-01 02:05:12 -0500
commit88c470d67e400fde5d3ecd2eb07116581fb80a6e (patch)
tree93d88c6dfc46b2cf54320afb0a3c5519cabde5d0 /driver_rtcm3.c
parent049cfc6b80f96d56eb8e1a470cbef7e66db4e8aa (diff)
downloadgpsd-88c470d67e400fde5d3ecd2eb07116581fb80a6e.tar.gz
Replace the crappy old RTCM3 dumper with one that emits JSON.
Diffstat (limited to 'driver_rtcm3.c')
-rw-r--r--driver_rtcm3.c369
1 files changed, 6 insertions, 363 deletions
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 <http://www.rtcm.org/>
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* */