X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fcommon%2Fgps.rs;h=64772c775189526e06bec8cb8b604e8e7055c427;hb=695e71b6274cf4387a1f2f39dbcfc56b5ae7f561;hp=b9fcbc3f23d9a732676082fbc3cccac4d2535310;hpb=0ed02a94b60d886b568f4803a7ec09eef29ad1ca;p=gps-watch.git diff --git a/src/common/gps.rs b/src/common/gps.rs index b9fcbc3..64772c7 100644 --- a/src/common/gps.rs +++ b/src/common/gps.rs @@ -209,13 +209,17 @@ impl Gps { let hexdigits = b"0123456789abcdef"; while let Some(received) = try_read() { + if received == b'$' { + self.state = ParseState::InPacket; + self.offset = 0; + self.checksum = 0x00; + + continue; + } + match self.state { ParseState::Start => { - if received == b'$' { - self.state = ParseState::InPacket; - self.offset = 0; - self.checksum = 0x00; - } + // Empty. }, ParseState::InPacket => { if received == b'*' { @@ -343,8 +347,16 @@ impl Gps { return false; } - if pos_fix_indicator != b"1" { - return false; + match pos_fix_indicator { + b"1" => { + // Valid standard GPS fix (low resolution). + }, + b"2" => { + // Valid differential GPS fix (high resolution). + }, + _ => { + return false; + } } if utc_time.len() < 6 {