"""
nmeatoenglish.py - Converts an NMEA data file to English
:Copyright: Copyright 2007 Dean Hall. All rights reserved.
:Author: Dean Hall
:Revision: 0.2
:Date: 2007/12/12
:usage: ./nmeatoenglish.py < NMEAFILE
:usage: ./nmeatoenglish.py NMEAFILE
"""
import os, string, sys
import nmeagram
FILE_EXTENSION = ".txt"
POSITION_FIX = {'0' : "Invalid",
'1' : "GPS SPS mode",
'2' : "Differential",
'3' : "GPS PPS mode",
}
RMC_MODE = {'A' : "Autonomous",
'D' : "DGPS",
'E' : "DR",
'N' : "Not valid",
'S' : "Simulator",
}
RMC_STATUS = {'A' : "Data valid",
'V' : "Data not valid",
}
def nmeaLineToEnglish(line):
"""Read a NMEA sentence and return a string
containing pertinent data and its field name.
"""
data = []
nmeagram.parseLine(line)
sentencetype = line[3:6]
if sentencetype == "GGA":
data.append("GGA {PosFix = %s, SatsUsed = %d}\n" %
(POSITION_FIX[nmeagram.getField("PositionFix")],
nmeagram.getField("SatellitesUsed"),
)
)
elif sentencetype == "RMC":
data.append("RMC {Date = %s, Status = %s, Mode = %s}\n" %
(nmeagram.getField("Date"),
RMC_STATUS[nmeagram.getField("RmcStatus")],
RMC_MODE[nmeagram.getField("RmcMode")],
)
)
elif sentencetype == "VTG":
data.append("VTG {Course = %s, Speed = %s}\n" %
(str(nmeagram.getField("Course0")),
str(nmeagram.getField("Speed0")),
)
)
return string.join(data,'')
def main():
if len(sys.argv) == 1:
line = sys.stdin.readline()
while line:
sys.stdout.write(nmeaLineToEnglish(line))
line = sys.stdin.readline()
elif len(sys.argv) == 2:
fn = sys.argv[1]
assert os.path.exists(fn)
fi = open(fn, 'r')
for line in fi.readlines():
sys.stdout.write(nmeaLineToEnglish(line))
fi.close()
else:
sys.stderr.write(__doc__)
sys.exit(2)
if __name__ == "__main__":
main()