@@ -35,7 +35,7 @@ pub struct GllData {
35
35
pub latitude : Option < f64 > ,
36
36
pub longitude : Option < f64 > ,
37
37
#[ cfg_attr( feature = "defmt-03" , defmt( Debug2Format ) ) ]
38
- pub fix_time : NaiveTime ,
38
+ pub fix_time : Option < NaiveTime > ,
39
39
pub valid : bool ,
40
40
pub faa_mode : Option < FaaMode > ,
41
41
}
@@ -69,7 +69,7 @@ pub fn parse_gll(sentence: NmeaSentence) -> Result<GllData, Error> {
69
69
fn do_parse_gll ( i : & str ) -> IResult < & str , GllData > {
70
70
let ( i, lat_lon) = parse_lat_lon ( i) ?;
71
71
let ( i, _) = char ( ',' ) ( i) ?;
72
- let ( i, fix_time) = parse_hms ( i) ?;
72
+ let ( i, fix_time) = opt ( parse_hms) ( i) ?;
73
73
let ( i, _) = char ( ',' ) ( i) ?;
74
74
let ( i, valid) = one_of ( "AV" ) ( i) ?; // A: valid, V: invalid
75
75
let valid = match valid {
@@ -120,16 +120,21 @@ mod tests {
120
120
assert_relative_eq ! ( gll_data. longitude. unwrap( ) , -( 114.0 + ( 2.3279144 / 60.0 ) ) ) ;
121
121
assert_eq ! (
122
122
gll_data. fix_time,
123
- NaiveTime :: from_hms_milli_opt( 20 , 54 , 12 , 0 ) . expect( "invalid time" )
123
+ Some ( NaiveTime :: from_hms_milli_opt( 20 , 54 , 12 , 0 ) . expect( "invalid time" ) )
124
124
) ;
125
125
assert_eq ! ( gll_data. faa_mode, Some ( FaaMode :: Autonomous ) ) ;
126
126
127
127
let s = parse ( "$GNGLL,,,,,181604.00,V,N*5E" , 0x5e ) ;
128
128
let gll_data = parse_gll ( s) . unwrap ( ) ;
129
129
assert_eq ! (
130
- NaiveTime :: from_hms_milli_opt( 18 , 16 , 4 , 0 ) . expect( "invalid time" ) ,
130
+ Some ( NaiveTime :: from_hms_milli_opt( 18 , 16 , 4 , 0 ) . expect( "invalid time" ) ) ,
131
131
gll_data. fix_time
132
132
) ;
133
133
assert ! ( !gll_data. valid) ;
134
+
135
+ let s = parse ( "$GNGLL,,,,,,V,N*7A" , 0x7a ) ;
136
+ let gll_data = parse_gll ( s) . unwrap ( ) ;
137
+ assert_eq ! ( gll_data. fix_time, None ) ;
138
+ assert ! ( !gll_data. valid) ;
134
139
}
135
140
}
0 commit comments