From ee44b693cfd8a30eb12cf78edffbff95da4c0588 Mon Sep 17 00:00:00 2001 From: Neal Probert Date: Wed, 15 May 2024 15:56:54 -0400 Subject: [PATCH] Added gpsd_report check --- gps_tool/gps_tool.py | 237 ++++++++++++++++++++++--------------------- 1 file changed, 121 insertions(+), 116 deletions(-) diff --git a/gps_tool/gps_tool.py b/gps_tool/gps_tool.py index 7f417b3..9f2dc33 100755 --- a/gps_tool/gps_tool.py +++ b/gps_tool/gps_tool.py @@ -125,124 +125,129 @@ class QtGPSWindow(MainWindow): global gpsd_report report = gpsd_report + # make sure is good report try: - if report['class'] == 'TPV': - status = getattr(report, 'status', 0) - mode = getattr(report, 'mode', 0) - time = getattr(report, 'time', 0) - lat = getattr(report, 'lat', 0.0) - lon = getattr(report, 'lon', 0.0) - elev = getattr(report, 'altHAE', 0.0) # meters - heading = getattr(report, 'track', 0.0) - speed = getattr(report, 'speed', 0.0) # m/sec - - self.txtStatus.setText(fix_status[status]) - self.txtMode.setText(fix_mode[mode]) - self.txtTime.setText(time) - self.txtLatitude.setText("%10.7f" %(lat)) - self.txtLongitude.setText("%10.7f" % (lon)) - self.txtAltitude.setText("%7.2f" % (elev)) - self.txtHeading.setText("%7.2f" % (heading)) - self.txtSpeed.setText("%7.2f" % (speed)) - - self.txtGrid.setText(mh.to_maiden(lat, lon)) - - if self.log_enabled: - point = gpxpy.gpx.GPXTrackPoint(lat, lon, elevation=elev) - point.time = datetime.now() - self.gpx_segment.points.append(point) - self.num_points += 1 - self.num_count += 1 - self.txtCount.setText(str(self.num_count)) - - elif report['class'] == 'SKY': - self.txtHDOP.setText(str(getattr(report, 'hdop', 0.0))) - self.txtVDOP.setText(str(getattr(report, 'vdop', 0.0))) - satellites = getattr(report, 'satellites') - - txt = "%4s %4s %4s %3s %1s" % ('PRN', 'Azim', 'Elev', 'SNR', 'Used') - self.txtSatellites.setStyleSheet("background-color: rgb(0, 0, 0)") - self.txtSatellites.setTextColor(self.white) - self.txtSatellites.setFontWeight(QFont.Bold) - self.txtSatellites.setText(txt) - - prns = [] - radius = [] - theta = [] - colors = [] - markers = [] - - for (i, satellite) in enumerate(satellites): - prn = int(satellite['PRN']) - azim = int(satellite['az']) - elev = int(satellite['el']) - snr = int(satellite['ss']) - used = int(satellite['used']) -# health = satellite['health'] - - # don't show if not visible - if azim >= 360 or elev < -10 or elev > 90: - continue; - - cname = '#000000' - color = self.black - if snr < 12: - cname = '#808080' - color = self.gray - elif snr < 30: - cname = '#ff0000' - color = self.red - elif snr < 36: - cname = '#ffd300' - color = self.yellow - elif snr < 42: - cname = '#00ff00' - color = self.green - else: - cname = '#0000ff' - color = self.blue - - txt = "%4u %4u %4u %3u %1u" % (prn, azim, elev, snr, used) - self.txtSatellites.setTextColor(color) - if used: - self.txtSatellites.setFontWeight(QFont.Bold) - else: - self.txtSatellites.setFontWeight(QFont.Normal) - self.txtSatellites.append(txt) - - prns.append(prn) - theta.append(radians(float(azim))) - radius.append(float(elev)) - colors.append(cname) - if used: - markers.append(ord('P')) - else: - markers.append(ord('+')) - - area = 100 - figure = Figure() - polar = figure.add_subplot(111, projection='polar') - polar.scatter(theta, radius, c=colors, s=area, cmap=None, alpha=0.75) - polar.set_rorigin(90.0) - polar.set_xticklabels([]) - polar.set_yticklabels([]) - for i, prn in enumerate(prns): - polar.annotate(str(prn), (theta[i], radius[i])) - - polar.set_theta_direction(-1) - polar.set_theta_zero_location('N', offset=0) - - canvas = FigureCanvas(figure) - self.scene.clear() - self.scene.addWidget(canvas) - h = float(self.scene.height()) / 2.0 - w = float(self.scene.width()) / 2.0 - self.viewSatellites.centerOn(w,h) - self.viewSatellites.show() - - self.show() + if not 'class' in report: + return except: - pass + return + + # GPS messages + if report['class'] == 'TPV': + status = getattr(report, 'status', 0) + mode = getattr(report, 'mode', 0) + time = getattr(report, 'time', 0) + lat = getattr(report, 'lat', 0.0) + lon = getattr(report, 'lon', 0.0) + elev = getattr(report, 'altHAE', 0.0) # meters + heading = getattr(report, 'track', 0.0) + speed = getattr(report, 'speed', 0.0) # m/sec + + self.txtStatus.setText(fix_status[status]) + self.txtMode.setText(fix_mode[mode]) + self.txtTime.setText(time) + self.txtLatitude.setText("%10.7f" %(lat)) + self.txtLongitude.setText("%10.7f" % (lon)) + self.txtAltitude.setText("%7.2f" % (elev)) + self.txtHeading.setText("%7.2f" % (heading)) + self.txtSpeed.setText("%7.2f" % (speed)) + + self.txtGrid.setText(mh.to_maiden(lat, lon)) + + if self.log_enabled: + point = gpxpy.gpx.GPXTrackPoint(lat, lon, elevation=elev) + point.time = datetime.now() + self.gpx_segment.points.append(point) + self.num_points += 1 + self.num_count += 1 + self.txtCount.setText(str(self.num_count)) + + elif report['class'] == 'SKY': + self.txtHDOP.setText(str(getattr(report, 'hdop', 0.0))) + self.txtVDOP.setText(str(getattr(report, 'vdop', 0.0))) + satellites = getattr(report, 'satellites') + + txt = "%4s %4s %4s %3s %1s" % ('PRN', 'Azim', 'Elev', 'SNR', 'Used') + self.txtSatellites.setStyleSheet("background-color: rgb(0, 0, 0)") + self.txtSatellites.setTextColor(self.white) + self.txtSatellites.setFontWeight(QFont.Bold) + self.txtSatellites.setText(txt) + + prns = [] + radius = [] + theta = [] + colors = [] + markers = [] + + for (i, satellite) in enumerate(satellites): + prn = int(satellite['PRN']) + azim = int(satellite['az']) + elev = int(satellite['el']) + snr = int(satellite['ss']) + used = int(satellite['used']) +# health = satellite['health'] + + # don't show if not visible + if azim >= 360 or elev < -10 or elev > 90: + continue; + + cname = '#000000' + color = self.black + if snr < 12: + cname = '#808080' + color = self.gray + elif snr < 30: + cname = '#ff0000' + color = self.red + elif snr < 36: + cname = '#ffd300' + color = self.yellow + elif snr < 42: + cname = '#00ff00' + color = self.green + else: + cname = '#0000ff' + color = self.blue + + txt = "%4u %4u %4u %3u %1u" % (prn, azim, elev, snr, used) + self.txtSatellites.setTextColor(color) + if used: + self.txtSatellites.setFontWeight(QFont.Bold) + else: + self.txtSatellites.setFontWeight(QFont.Normal) + self.txtSatellites.append(txt) + + prns.append(prn) + theta.append(radians(float(azim))) + radius.append(float(elev)) + colors.append(cname) + if used: + markers.append(ord('P')) + else: + markers.append(ord('+')) + + area = 100 + figure = Figure() + polar = figure.add_subplot(111, projection='polar') + polar.scatter(theta, radius, c=colors, s=area, cmap=None, alpha=0.75) + polar.set_rorigin(90.0) + polar.set_xticklabels([]) + polar.set_yticklabels([]) + for i, prn in enumerate(prns): + polar.annotate(str(prn), (theta[i], radius[i])) + + polar.set_theta_direction(-1) + polar.set_theta_zero_location('N', offset=0) + + canvas = FigureCanvas(figure) + self.scene.clear() + self.scene.addWidget(canvas) + h = float(self.scene.height()) / 2.0 + w = float(self.scene.width()) / 2.0 + self.viewSatellites.centerOn(w,h) + self.viewSatellites.show() + + self.show() def toggle_logging(self): if self.log_enabled: