Welcome, guest | Sign In | My Account | Store | Cart
#!/usr/bin/env python

import re

""" Calculate  the checksum for NMEA sentence
    from a GPS device. An NMEA sentence comprises
    a number of comma separated fields followed by
    a checksum (in hex) after a "
*". An example
    of NMEA sentence with a correct checksum (of
    0x76) is:
   
      GPGSV,3,3,10,26,37,134,00,29,25,136,00*76"

"""

def checksum(sentence):

    """
Remove any newlines """
    if re.search("
\n$", sentence):
        sentence = sentence[:-1]

    nmeadata,cksum = re.split('\*', sentence)

    calc_cksum = 0
    for s in nmeadata:
        calc_cksum ^= ord(s)

    """
Return the nmeadata, the checksum from
        sentence
, and the calculated checksum
   
"""
    return nmeadata,'0x'+cksum,hex(calc_cksum)

if __name__=='__main__':

    """
NMEA sentence with checksum error (3rd field
       should be
10 not 20)
   
"""
    line = "
GPGSV,3,3,20,26,37,134,00,29,25,136,00*76\n"

    """
Get NMEA data and checksums """

    data,cksum,calc_cksum = checksum(line)

    """
Verify checksum (will report checksum error) """
    if cksum != calc_cksum:
        print "
Error in checksum for: %s" % (data)
        print "
Checksums are %s and %s" % (cksum,calc_cksum)

History