@@ -401,11 +401,37 @@ pub mod msg_gnss_time_offset {
401401 /// Microseconds portion of the time offset
402402 #[ cfg_attr( feature = "serde" , serde( rename = "microseconds" ) ) ]
403403 pub microseconds : i16 ,
404- /// Status flags (reserved)
404+ /// Status flags
405405 #[ cfg_attr( feature = "serde" , serde( rename = "flags" ) ) ]
406406 pub flags : u8 ,
407407 }
408408
409+ impl MsgGnssTimeOffset {
410+ /// Gets the `reserved_set_to_zero` stored in `flags`.
411+ pub fn reserved_set_to_zero ( & self ) -> u8 {
412+ get_bit_range ! ( self . flags, u8 , u8 , 7 , 1 )
413+ }
414+
415+ /// Sets the `reserved_set_to_zero` bitrange of `flags`.
416+ pub fn set_reserved_set_to_zero ( & mut self , reserved_set_to_zero : u8 ) {
417+ set_bit_range ! ( & mut self . flags, reserved_set_to_zero, u8 , u8 , 7 , 1 ) ;
418+ }
419+
420+ /// Gets the [WeeksBehavior][self::WeeksBehavior] stored in the `flags` bitfield.
421+ ///
422+ /// Returns `Ok` if the bitrange contains a known `WeeksBehavior` variant.
423+ /// Otherwise the value of the bitrange is returned as an `Err(u8)`. This may be because of a malformed message,
424+ /// or because new variants of `WeeksBehavior` were added.
425+ pub fn weeks_behavior ( & self ) -> Result < WeeksBehavior , u8 > {
426+ get_bit_range ! ( self . flags, u8 , u8 , 0 , 0 ) . try_into ( )
427+ }
428+
429+ /// Set the bitrange corresponding to the [WeeksBehavior][WeeksBehavior] of the `flags` bitfield.
430+ pub fn set_weeks_behavior ( & mut self , weeks_behavior : WeeksBehavior ) {
431+ set_bit_range ! ( & mut self . flags, weeks_behavior, u8 , u8 , 0 , 0 ) ;
432+ }
433+ }
434+
409435 impl ConcreteMessage for MsgGnssTimeOffset {
410436 const MESSAGE_TYPE : u16 = 65287 ;
411437 const MESSAGE_NAME : & ' static str = "MSG_GNSS_TIME_OFFSET" ;
@@ -478,6 +504,40 @@ pub mod msg_gnss_time_offset {
478504 }
479505 }
480506 }
507+
508+ /// Weeks behavior
509+ #[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash ) ]
510+ pub enum WeeksBehavior {
511+ /// Not affected on local timestamp rollover
512+ NotAffectedOnLocalTimestampRollover = 0 ,
513+
514+ /// Incremented on local timestamp rollover
515+ IncrementedOnLocalTimestampRollover = 1 ,
516+ }
517+
518+ impl std:: fmt:: Display for WeeksBehavior {
519+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
520+ match self {
521+ WeeksBehavior :: NotAffectedOnLocalTimestampRollover => {
522+ f. write_str ( "Not affected on local timestamp rollover" )
523+ }
524+ WeeksBehavior :: IncrementedOnLocalTimestampRollover => {
525+ f. write_str ( "Incremented on local timestamp rollover" )
526+ }
527+ }
528+ }
529+ }
530+
531+ impl TryFrom < u8 > for WeeksBehavior {
532+ type Error = u8 ;
533+ fn try_from ( i : u8 ) -> Result < Self , u8 > {
534+ match i {
535+ 0 => Ok ( WeeksBehavior :: NotAffectedOnLocalTimestampRollover ) ,
536+ 1 => Ok ( WeeksBehavior :: IncrementedOnLocalTimestampRollover ) ,
537+ i => Err ( i) ,
538+ }
539+ }
540+ }
481541}
482542
483543pub mod msg_group_meta {
0 commit comments