Added gpsd_report check

This commit is contained in:
2024-05-15 15:56:54 -04:00
parent 31eac2cd10
commit ee44b693cf

View File

@ -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: