diff --git a/firmware/inc/gps.h b/firmware/inc/gps.h index 335c753..2db5fba 100644 --- a/firmware/inc/gps.h +++ b/firmware/inc/gps.h @@ -68,8 +68,6 @@ struct ubx_nav_posllh gps_get_nav_posllh(); struct ubx_nav_sol gps_get_nav_sol(); struct ubx_nav_timeutc gps_get_nav_timeutc(); -uint8_t gps_is_locked(void); - void gps_set_powersave(bool powersave_on); void gps_set_power_state(bool gnss_running); @@ -119,8 +117,6 @@ struct gps_data_t { uint8_t time_to_first_fix; /* seconds / counts */ }; -uint8_t gps_is_locked(void); - enum gps_error_t gps_get_error_state(void); struct gps_data_t gps_get_data(void); @@ -128,8 +124,9 @@ void gps_setup(void); #endif /* GPS_TYPE_DUMMY */ -/* Both ------------------------------------------------------------ */ +/* All ------------------------------------------------------------ */ enum gps_flight_state_t gps_get_flight_state(void); +uint8_t gps_is_locked(void); void gps_usart_init_enable(uint32_t baud_rate); void gps_reset(void); diff --git a/firmware/src/gps_dummy.c b/firmware/src/gps_dummy.c index 5da0c3e..02041d7 100644 --- a/firmware/src/gps_dummy.c +++ b/firmware/src/gps_dummy.c @@ -324,7 +324,8 @@ void gps_setup(void) ; } -uint8_t gps_is_locked(void) { +uint8_t gps_is_locked(void) +{ return 1; /* locked */ } diff --git a/firmware/src/gps_osp.c b/firmware/src/gps_osp.c index 4d98870..6b5c9fb 100644 --- a/firmware/src/gps_osp.c +++ b/firmware/src/gps_osp.c @@ -72,6 +72,11 @@ enum gps_power_state_t gps_power_state = GPS_HIBERNATE; */ enum gps_flight_state_t gps_flight_state = GPS_FLIGHT_STATE_LAUNCH; +/** + * Lock State + */ +uint8_t gps_is_locked_priv = 0; + /** * OSP Output Ack/Nack */ @@ -518,6 +523,19 @@ void gps_make_hibernate(void) } } +/** + * ============================================================================= + * Lock State ================================================================== + * ============================================================================= + */ + +/** + * Lock state. Set by gps_get_data + */ +uint8_t gps_is_locked(void) +{ + return gps_is_locked_priv; +} /** * ============================================================================= @@ -574,6 +592,7 @@ struct gps_data_t gps_get_data(void) gps_make_hibernate(); data.is_locked = 1; /* valid fix */ + gps_is_locked_priv = 1; data.latitude = osp_out_geodetic_navigation_data.payload.latitude; /* hndeg */ data.longitude = osp_out_geodetic_navigation_data.payload.longitude; /* hndeg */ data.altitude = osp_out_geodetic_navigation_data.payload.altitude_from_msl*10; /* cm -> mm */ @@ -600,6 +619,7 @@ struct gps_data_t gps_get_data(void) /* invalid */ memset(&data, 0, sizeof(struct gps_data_t)); + gps_is_locked_priv = 0; /* not locked */ data.time_to_first_fix = i; return data;