summaryrefslogtreecommitdiff
path: root/driver_skytraq.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2018-11-28 23:48:17 -0800
committerGary E. Miller <gem@rellim.com>2018-11-28 23:48:17 -0800
commitd388090e0341e1d66c8fbb02548c2d5612c6edee (patch)
tree65f4bb8f929daee53ef2e63083370e3eadcb3853 /driver_skytraq.c
parente35a7e3e0c91f585a09be190922bf6cd7722d677 (diff)
downloadgpsd-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.c35
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);