Convert NMEA lat/lon (ddmm.mmmm) to decimal degrees.
(raw, direction)
| 41 | ) |
| 42 | |
| 43 | |
| 44 | UBX_SYNC = b'\xb5\x62' |
| 45 | |
| 46 | # Start of a plausible NMEA sentence: '$' + talker/sentence letters + ',' |
| 47 | # (e.g. $GPGGA, $GNRMC, $PUBX). Deliberately loose about the exact talker, |
| 48 | # strict that binary noise decoding to a stray '$' does not qualify. |
| 49 | _NMEA_SHAPE = re.compile(r'^\$[A-Z]{4,5}\d*,') |
| 50 | |
| 51 | |
| 52 | def _ubx_frame(msg_class, msg_id, payload=b''): |
| 53 | """Build a UBX frame with its 8-bit Fletcher checksum.""" |
| 54 | body = bytes((msg_class, msg_id)) + struct.pack('<H', len(payload)) + payload |
| 55 | ck_a = ck_b = 0 |
| 56 | for byte in body: |
| 57 | ck_a = (ck_a + byte) & 0xFF |
| 58 | ck_b = (ck_b + ck_a) & 0xFF |
| 59 | return UBX_SYNC + body + bytes((ck_a, ck_b)) |
| 60 | |
| 61 | |
| 62 | def ubx_enable_nmea_frames(save=True): |