diff --git a/gps_tool/gps_tool.py b/gps_tool/gps_tool.py index 9f2dc33..d013e0f 100755 --- a/gps_tool/gps_tool.py +++ b/gps_tool/gps_tool.py @@ -7,6 +7,7 @@ import yaml from math import radians from datetime import datetime from time import strftime, time +from pprint import pprint from gps import * import gpxpy @@ -165,88 +166,93 @@ class QtGPSWindow(MainWindow): 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'] + try: + satellites = report['satellites'] - # 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('+')) + 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) - 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])) + prns = [] + radius = [] + theta = [] + colors = [] + markers = [] + + for satellite in 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) + 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() + + except: + pass - 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):