Add initial functionality for checking the age of the fix data

pull/4/head
inmcm 2014-12-17 22:53:57 -05:00
rodzic f49c3dc83c
commit 25f76224da
1 zmienionych plików z 35 dodań i 2 usunięć

Wyświetl plik

@ -35,6 +35,9 @@ class MicropyGPS(object):
# Max Number of Characters a valid sentence can be (based on GGA sentence)
SENTENCE_LIMIT = 76
__HEMISPHERES = ('N', 'S', 'E', 'W')
__NO_FIX = 1
__FIX_2D = 2
__FIX_3D = 3
def __init__(self, local_offset=0):
"""Setup GPS Object Status Flags, Internal Data Registers, etc"""
@ -47,6 +50,7 @@ class MicropyGPS(object):
self.gps_segments = []
self.crc_xor = 0
self.char_count = 0
self.fix_time = 0
#####################
# Sentence Statistics
@ -251,6 +255,10 @@ class MicropyGPS(object):
self.hdop = hdop
self.fix_stat = fix_stat
# If Fix is GOOD, update fix timestamp
if fix_stat:
self.new_fix_time()
return True
def gpgsa(self):
@ -287,6 +295,11 @@ class MicropyGPS(object):
# Update Object Data
self.fix_type = fix_type
# If Fix is GOOD, update fix timestamp
if fix_type > self.__NO_FIX:
self.new_fix_time()
self.satellites_used = sats_used
self.hdop = hdop
self.vdop = vdop
@ -296,7 +309,7 @@ class MicropyGPS(object):
def gpgsv(self):
"""Parse Satellites in View (GSV) sentence. Updates number of SV Sentences,the number of the last SV sentence
parsed"""
parsed, and data on each satellite present in the sentence"""
try:
num_sv_sentences = int(self.gps_segments[1])
current_sv_sentence = int(self.gps_segments[2])
@ -444,6 +457,15 @@ class MicropyGPS(object):
# Tell Host no new sentence was parsed
return None
def new_fix_time(self):
"""Updates a high resolution counter with current time when fix is updated"""
try:
import pyb
self.fix_time = pyb.millis()
except ImportError:
import time
self.fix_time = time.monotonic() * 1000
#########################################
# User Helper Functions
# These functions make working with the GPS object data easier
@ -466,6 +488,17 @@ class MicropyGPS(object):
"""
return list(self.satellite_data.keys())
def time_since_fix(self):
"""Returns number of millisecond since the last sentence with a valid fix was parsed"""
try:
import pyb
current = pyb.elapsed_millis(self.fix_time)
except ImportError:
import time
current = (time.monotonic() * 1000) - self.fix_time
return current
# All the currently supported NMEA sentences
supported_sentences = {'GPRMC': gprmc, 'GPGGA': gpgga, 'GPVTG': gpvtg, 'GPGSA': gpgsa, 'GPGSV': gpgsv}
@ -576,4 +609,4 @@ if __name__ == "__main__":
print('Sentences Attempted:', sentence_count)
print('Sentences Found:', my_gps.clean_sentences)
print('Sentences Parsed:', my_gps.parsed_sentences)
print('CRC_Fails:', my_gps.crc_fails)
print('CRC_Fails:', my_gps.crc_fails)