@@ -216,50 +216,96 @@ def _parse_data(sentence_type: int, data: List[str]) -> Optional[List]:
216
216
return params
217
217
218
218
219
- # lint warning about too many attributes disabled
220
- # pylint: disable-msg=R0902
221
-
222
-
219
+ # pylint: disable-msg=too-many-instance-attributes
223
220
class GPS :
224
221
"""GPS parsing module. Can parse simple NMEA data sentences from serial
225
222
GPS modules to read latitude, longitude, and more.
226
223
"""
227
224
225
+ # lint warning about too many statements disabled
226
+ # pylint: disable-msg=R0915
228
227
def __init__ (self , uart : UART , debug : bool = False ) -> None :
229
228
self ._uart = uart
230
229
# Initialize null starting values for GPS attributes.
231
230
self .timestamp_utc = None
231
+ """Timestamp in UTC"""
232
232
self .latitude = None
233
+ """Degrees latitude"""
233
234
self .latitude_degrees = None
235
+ """Degrees component of latitude measurement"""
234
236
self .latitude_minutes = None # Use for full precision minutes
237
+ """Minutes component of latitude measurement"""
235
238
self .longitude = None
239
+ """Degrees longitude"""
236
240
self .longitude_degrees = None
241
+ """Degrees component of longitude measurement"""
237
242
self .longitude_minutes = None # Use for full precision minutes
243
+ """Minutes component of longitude measurement"""
238
244
self .fix_quality = 0
245
+ """
246
+ GPS quality indicator
247
+
248
+ | 0 - fix not available
249
+ | 1 - GPS fix
250
+ | 2 - Differential GPS fix (values above 2 are 2.3 features)
251
+ | 3 - PPS fix
252
+ | 4 - Real Time Kinematic
253
+ | 5 - Float RTK
254
+ | 6 - estimated (dead reckoning)
255
+ | 7 - Manual input mode
256
+ | 8 - Simulation mode
257
+ """
239
258
self .fix_quality_3d = 0
259
+ """
260
+ The type of fix for a reading
261
+
262
+ | 1 - no fix
263
+ | 2 - 2D fix
264
+ | 3 - 3D fix
265
+ """
240
266
self .satellites = None
267
+ """The number of satellites in use, 0 - 12"""
241
268
self .satellites_prev = None
269
+ """The number of satellites in use from the previous data point, 0 - 12"""
242
270
self .horizontal_dilution = None
271
+ """Horizontal dilution of precision (GGA)"""
243
272
self .altitude_m = None
273
+ """Antenna altitude relative to mean sea level"""
244
274
self .height_geoid = None
275
+ """Geoidal separation relative to WGS 84"""
245
276
self .speed_knots = None
277
+ """Ground speed in knots"""
246
278
self .track_angle_deg = None
279
+ """Track angle in degrees"""
247
280
self ._sats = None # Temporary holder for information from GSV messages
248
- self .sats = None # Completed information from GSV messages
281
+ self .sats = None
282
+ """Information from GSV messages"""
249
283
self .isactivedata = None
250
- self .true_track = None
251
- self .mag_track = None
284
+ """Status Valid(A) or Invalid(V)"""
252
285
self .sat_prns = None
286
+ """Satellite pseudorandom noise code"""
253
287
self .sel_mode = None
288
+ """
289
+ Selection mode
290
+
291
+ | 'M' - manual
292
+ | 'A' - automatic
293
+ """
254
294
self .pdop = None
295
+ """Dilution of precision"""
255
296
self .hdop = None
297
+ """Horizontal dilution of precision (GSA)"""
256
298
self .vdop = None
299
+ """Vertical dilution of precision"""
257
300
self .total_mess_num = None
301
+ """Number of messages"""
258
302
self .mess_num = None
303
+ """Message number"""
259
304
self ._raw_sentence = None
260
305
self ._mode_indicator = None
261
306
self ._magnetic_variation = None
262
307
self .debug = debug
308
+ """Toggles debug mode. When True, prints the incoming data sentence to the console"""
263
309
264
310
def update (self ) -> bool :
265
311
"""Check for updated data from the GPS module and process it
@@ -535,15 +581,6 @@ def _parse_gga(self, data: List[str]) -> bool:
535
581
self .longitude_degrees , self .longitude_minutes = _read_int_degrees (data , 3 , "w" )
536
582
537
583
# GPS quality indicator
538
- # 0 - fix not available,
539
- # 1 - GPS fix,
540
- # 2 - Differential GPS fix (values above 2 are 2.3 features)
541
- # 3 - PPS fix
542
- # 4 - Real Time Kinematic
543
- # 5 - Float RTK
544
- # 6 - estimated (dead reckoning)
545
- # 7 - Manual input mode
546
- # 8 - Simulation mode
547
584
self .fix_quality = data [5 ]
548
585
549
586
# Number of satellites in use, 0 - 12
@@ -662,8 +699,7 @@ def _parse_gsv(self, talker: bytes, data: List[str]) -> bool:
662
699
# been seen for 30 seconds
663
700
timestamp = time .monotonic ()
664
701
old = []
665
- for i in self .sats :
666
- sat = self .sats [i ]
702
+ for sat in self .sats .items ():
667
703
if (timestamp - sat [4 ]) > 30 :
668
704
old .append (i )
669
705
for i in old :
0 commit comments