diff options
author | Gary E. Miller <gem@rellim.com> | 2018-11-28 23:48:17 -0800 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2018-11-28 23:48:17 -0800 |
commit | d388090e0341e1d66c8fbb02548c2d5612c6edee (patch) | |
tree | 65f4bb8f929daee53ef2e63083370e3eadcb3853 /driver_skytraq.c | |
parent | e35a7e3e0c91f585a09be190922bf6cd7722d677 (diff) | |
download | gpsd-d388090e0341e1d66c8fbb02548c2d5612c6edee.tar.gz |
driver_skytraq: Decode gnssID and svID.
Now cgps will show the constellation ID.
Diffstat (limited to 'driver_skytraq.c')
-rw-r--r-- | driver_skytraq.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/driver_skytraq.c b/driver_skytraq.c index 52dd55d9..17d07c51 100644 --- a/driver_skytraq.c +++ b/driver_skytraq.c @@ -201,8 +201,39 @@ static gps_mask_t sky_msg_DE(struct gps_device_t *session, unsigned short sv_stat; unsigned short chan_stat; unsigned short ura; - - session->gpsdata.skyview[st].PRN = (short)getub(buf, off + 1); + short PRN; + + PRN = (short)getub(buf, off + 1); + /* fit into gnssid:svid */ + if (0 == PRN) { + /* skip 0 PRN */ + continue; + } else if ((1 <= PRN) && (32 >= PRN)) { + /* GPS */ + session->gpsdata.skyview[st].gnssid = 0; + session->gpsdata.skyview[st].svid = PRN; + } else if ((65 <= PRN) && (96 >= PRN)) { + /* GLONASS */ + session->gpsdata.skyview[st].gnssid = 6; + session->gpsdata.skyview[st].svid = PRN - 64; + } else if ((120 <= PRN) && (158 >= PRN)) { + /* SBAS */ + session->gpsdata.skyview[st].gnssid = 1; + session->gpsdata.skyview[st].svid = PRN; + } else if ((201 <= PRN) && (239 >= PRN)) { + /* BeiDou */ + session->gpsdata.skyview[st].gnssid = 3; + session->gpsdata.skyview[st].svid = PRN - 200; + } else if ((240 <= PRN) && (251 >= PRN)) { + /* IRNSS */ + session->gpsdata.skyview[st].gnssid = 20; + session->gpsdata.skyview[st].svid = PRN - 240; + } else { + /* huh? */ + session->gpsdata.skyview[st].gnssid = 0; + session->gpsdata.skyview[st].svid = PRN; + } + session->gpsdata.skyview[st].PRN = PRN; sv_stat = (unsigned short)getub(buf, off + 2); ura = (unsigned short)getub(buf, off + 3); session->gpsdata.skyview[st].ss = (float)getub(buf, off + 4); |