summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver_rtcm3.c11
-rw-r--r--gps.h4
-rw-r--r--gpsd_json.c18
3 files changed, 17 insertions, 16 deletions
diff --git a/driver_rtcm3.c b/driver_rtcm3.c
index 651bf6b7..3ea92163 100644
--- a/driver_rtcm3.c
+++ b/driver_rtcm3.c
@@ -59,6 +59,7 @@ BSD terms apply: see the file COPYING in the distribution root for details.
/* Other magic values */
#define GPS_INVALID_PSEUDORANGE 0x80000 /* DF012, DF018 */
#define GLONASS_INVALID_RANGEINCR 0x2000 /* DF047 */
+#define GLONASS_CHANNEL_BASE 7 /* DF040 */
/* Large case statements make GNU indent very confused */
/* *INDENT-OFF* */
@@ -255,7 +256,7 @@ void rtcm3_unpack( /*@out@*/ struct rtcm3_t *rtcm, char *buf)
for (i = 0; i < rtcm->rtcmtypes.rtcm3_1009.header.satcount; i++) {
R1009.ident = (ushort)ugrab(6);
R1009.L1.indicator = (bool)ugrab(1);
- R1009.L1.channel = (ushort)ugrab(5);
+ R1009.L1.channel = (short)ugrab(5) - GLONASS_CHANNEL_BASE;
R1009.L1.pseudorange = ugrab(25) * GLONASS_PSEUDORANGE_RESOLUTION;
RANGEDIFF(R1009.L1, 20);
R1009.L1.locktime = (unsigned char)sgrab(7);
@@ -275,7 +276,7 @@ void rtcm3_unpack( /*@out@*/ struct rtcm3_t *rtcm, char *buf)
for (i = 0; i < rtcm->rtcmtypes.rtcm3_1010.header.satcount; i++) {
R1010.ident = (ushort)ugrab(6);
R1010.L1.indicator = (bool)ugrab(1);
- R1010.L1.channel = (ushort)ugrab(5);
+ R1010.L1.channel = (short)ugrab(5) - GLONASS_CHANNEL_BASE;
R1010.L1.pseudorange = ugrab(25) * GLONASS_PSEUDORANGE_RESOLUTION;
RANGEDIFF(R1010.L1, 20);
R1010.L1.locktime = (unsigned char)sgrab(7);
@@ -297,14 +298,14 @@ void rtcm3_unpack( /*@out@*/ struct rtcm3_t *rtcm, char *buf)
for (i = 0; i < rtcm->rtcmtypes.rtcm3_1011.header.satcount; i++) {
R1011.ident = (ushort)ugrab(6);
R1011.L1.indicator = (bool)ugrab(1);
- R1011.L1.channel = (ushort)ugrab(5);
+ R1011.L1.channel = (short)ugrab(5) - GLONASS_CHANNEL_BASE;
R1011.L1.pseudorange = ugrab(25) * GLONASS_PSEUDORANGE_RESOLUTION;
RANGEDIFF(R1011.L1, 20);
R1011.L1.locktime = (unsigned char)sgrab(7);
R1011.L1.ambiguity = (unsigned char)ugrab(7);
R1011.L1.CNR = ugrab(8) * CARRIER_NOISE_RATIO_UNITS;
R1011.L2.indicator = (bool)ugrab(1);
- R1011.L2.channel = (ushort)ugrab(5);
+ R1011.L2.channel = (short)ugrab(5) - GLONASS_CHANNEL_BASE;
R1011.L2.pseudorange = ugrab(25) * GLONASS_PSEUDORANGE_RESOLUTION;
RANGEDIFF(R1011.L2, 20);
R1011.L2.locktime = (unsigned char)sgrab(7);
@@ -327,7 +328,7 @@ void rtcm3_unpack( /*@out@*/ struct rtcm3_t *rtcm, char *buf)
unsigned int rangeincr;
R1012.ident = (ushort)ugrab(6);
R1012.L1.indicator = (bool)ugrab(1);
- R1012.L1.channel = (ushort)ugrab(5);
+ R1012.L1.channel = (short)ugrab(5) - GLONASS_CHANNEL_BASE;
R1012.L1.pseudorange = ugrab(25) * GLONASS_PSEUDORANGE_RESOLUTION;
RANGEDIFF(R1012.L1, 20);
R1012.L1.locktime = (unsigned char)ugrab(7);
diff --git a/gps.h b/gps.h
index 0d93dd7c..add20f80 100644
--- a/gps.h
+++ b/gps.h
@@ -259,7 +259,7 @@ struct rtcm3_rtk_hdr { /* header data from 1001, 1002, 1003, 1004 */
struct rtcm3_basic_rtk {
unsigned char indicator; /* Indicator */
- unsigned char channel; /* Satellite Frequency Channel Number
+ short channel; /* Satellite Frequency Channel Number
(GLONASS only) */
double pseudorange; /* Pseudorange */
double rangediff; /* PhaseRange – Pseudorange in meters */
@@ -268,7 +268,7 @@ struct rtcm3_basic_rtk {
struct rtcm3_extended_rtk {
unsigned char indicator; /* Indicator */
- unsigned char channel; /* Satellite Frequency Channel Number
+ short channel; /* Satellite Frequency Channel Number
(GLONASS only) */
double pseudorange; /* Pseudorange */
double rangediff; /* PhaseRange – L1 Pseudorange */
diff --git a/gpsd_json.c b/gpsd_json.c
index ce23dc5c..bc00d932 100644
--- a/gpsd_json.c
+++ b/gpsd_json.c
@@ -1116,11 +1116,11 @@ void json_rtcm3_dump(const struct rtcm3_t *rtcm,
for (i = 0; i < rtcm->rtcmtypes.rtcm3_1009.header.satcount; i++) {
#define R1009 rtcm->rtcmtypes.rtcm3_1009.rtk_data[i]
(void)snprintf(buf + strlen(buf), buflen - strlen(buf),
- "{\"ident\":%u,\"ind\":%u,\"channel\":%u,"
+ "{\"ident\":%u,\"ind\":%u,\"channel\":%hd,"
"\"prange\":%8.2f,\"delta\":%6.4f,\"lockt\":%u},",
R1009.ident,
CODE(R1009.L1.indicator),
- INT(R1009.L1.channel),
+ R1009.L1.channel,
R1009.L1.pseudorange,
R1009.L1.rangediff,
INT(R1009.L1.locktime));
@@ -1144,12 +1144,12 @@ void json_rtcm3_dump(const struct rtcm3_t *rtcm,
for (i = 0; i < rtcm->rtcmtypes.rtcm3_1010.header.satcount; i++) {
#define R1010 rtcm->rtcmtypes.rtcm3_1010.rtk_data[i]
(void)snprintf(buf + strlen(buf), buflen - strlen(buf),
- "{\"ident\":%u,\"ind\":%u,\"channel\":%u,"
+ "{\"ident\":%u,\"ind\":%u,\"channel\":%hd,"
"\"prange\":%8.2f,\"delta\":%6.4f,\"lockt\":%u,"
"\"amb\":%u,\"CNR\":%.2f},",
R1010.ident,
CODE(R1010.L1.indicator),
- INT(R1010.L1.channel),
+ R1010.L1.channel,
R1010.L1.pseudorange,
R1010.L1.rangediff,
INT(R1010.L1.locktime),
@@ -1176,14 +1176,14 @@ void json_rtcm3_dump(const struct rtcm3_t *rtcm,
#define R1011 rtcm->rtcmtypes.rtcm3_1011.rtk_data[i]
(void)snprintf(buf + strlen(buf), buflen - strlen(buf),
"{\"ident\":%u,"
- "\"L1\":{\"ind\":%u,\"channel\":%u,"
+ "\"L1\":{\"ind\":%u,\"channel\":%hd,"
"\"prange\":%8.2f,\"delta\":%6.4f,\"lockt\":%u},"
"\"L2:{\"ind\":%u,\"prange\":%8.2f,"
"\"delta\":%6.4f,\"lockt\":%u}"
"}",
R1011.ident,
CODE(R1011.L1.indicator),
- INT(R1011.L1.channel),
+ R1011.L1.channel,
R1011.L1.pseudorange,
R1011.L1.rangediff,
INT(R1011.L1.locktime),
@@ -1211,8 +1211,8 @@ void json_rtcm3_dump(const struct rtcm3_t *rtcm,
for (i = 0; i < rtcm->rtcmtypes.rtcm3_1012.header.satcount; i++) {
#define R1012 rtcm->rtcmtypes.rtcm3_1012.rtk_data[i]
(void)snprintf(buf + strlen(buf), buflen - strlen(buf),
- "{\"ident\":%u,"
- "\"L1\":{\"ind\":%u,\"channel\":%u,\"prange\":%8.2f,"
+ "{\"ident\":%u,\"channel\":%hd,"
+ "\"L1\":{\"ind\":%u,\"prange\":%8.2f,"
"\"delta\":%6.4f,\"lockt\":%u,\"amb\":%u,"
"\"CNR\":%.2f},"
"\"L2\":{\"ind\":%u,\"prange\":%8.2f,"
@@ -1220,8 +1220,8 @@ void json_rtcm3_dump(const struct rtcm3_t *rtcm,
"\"CNR\":%.2f},"
"},",
R1012.ident,
+ R1012.L1.channel,
CODE(R1012.L1.indicator),
- INT(R1012.L1.channel),
R1012.L1.pseudorange,
R1012.L1.rangediff,
INT(R1012.L1.locktime),