kopia lustrzana https://github.com/bristol-seds/pico-tracker
[flight][gps-no-lock] Change behaviour when GPS looses lock, refactor gps_is_locked to return enum
* Transmit UHF telemetery with no lock * Hibernate for <1s with no lock, regardless of flight statemain-solar-only
rodzic
bcaa65d7c3
commit
c5c9da8af4
|
@ -31,7 +31,7 @@
|
||||||
/**
|
/**
|
||||||
* GPS Error types
|
* GPS Error types
|
||||||
*/
|
*/
|
||||||
enum gps_error_t {
|
enum gps_error {
|
||||||
GPS_NOERROR,
|
GPS_NOERROR,
|
||||||
GPS_ERROR_BAD_CHECKSUM,
|
GPS_ERROR_BAD_CHECKSUM,
|
||||||
GPS_ERROR_INVALID_FRAME,
|
GPS_ERROR_INVALID_FRAME,
|
||||||
|
@ -40,11 +40,19 @@ enum gps_error_t {
|
||||||
/**
|
/**
|
||||||
* GPS Flight State
|
* GPS Flight State
|
||||||
*/
|
*/
|
||||||
enum gps_flight_state_t {
|
enum gps_flight_state {
|
||||||
GPS_FLIGHT_STATE_LAUNCH,
|
GPS_FLIGHT_STATE_LAUNCH,
|
||||||
GPS_FLIGHT_STATE_FLOAT,
|
GPS_FLIGHT_STATE_FLOAT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GPS Lock State
|
||||||
|
*/
|
||||||
|
enum gps_lock_state {
|
||||||
|
GPS_NO_LOCK = 0,
|
||||||
|
GPS_LOCKED = 1,
|
||||||
|
};
|
||||||
|
|
||||||
/* UBX ------------------------------------------------------------- */
|
/* UBX ------------------------------------------------------------- */
|
||||||
#ifdef GPS_TYPE_UBX
|
#ifdef GPS_TYPE_UBX
|
||||||
|
|
||||||
|
@ -93,7 +101,7 @@ struct gps_data_t {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
enum gps_error_t gps_get_error_state(void);
|
enum gps_error gps_get_error_state(void);
|
||||||
struct gps_data_t gps_get_data(void);
|
struct gps_data_t gps_get_data(void);
|
||||||
|
|
||||||
void gps_setup(void);
|
void gps_setup(void);
|
||||||
|
@ -117,7 +125,7 @@ struct gps_data_t {
|
||||||
uint8_t time_to_first_fix; /* seconds / counts */
|
uint8_t time_to_first_fix; /* seconds / counts */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum gps_error_t gps_get_error_state(void);
|
enum gps_error gps_get_error_state(void);
|
||||||
struct gps_data_t gps_get_data(void);
|
struct gps_data_t gps_get_data(void);
|
||||||
|
|
||||||
void gps_setup(void);
|
void gps_setup(void);
|
||||||
|
@ -125,8 +133,8 @@ void gps_setup(void);
|
||||||
#endif /* GPS_TYPE_DUMMY */
|
#endif /* GPS_TYPE_DUMMY */
|
||||||
|
|
||||||
/* All ------------------------------------------------------------ */
|
/* All ------------------------------------------------------------ */
|
||||||
enum gps_flight_state_t gps_get_flight_state(void);
|
enum gps_flight_state gps_get_flight_state(void);
|
||||||
uint8_t gps_is_locked(void);
|
enum gps_lock_state gps_is_locked(void);
|
||||||
|
|
||||||
void gps_usart_init_enable(uint32_t baud_rate);
|
void gps_usart_init_enable(uint32_t baud_rate);
|
||||||
void gps_reset(void);
|
void gps_reset(void);
|
||||||
|
|
|
@ -56,26 +56,26 @@ int32_t osp_index = SFD_WAITING;
|
||||||
uint16_t osp_payload_length = 0;
|
uint16_t osp_payload_length = 0;
|
||||||
uint8_t osp_irq_buffer[OSP_BUFFER_LEN];
|
uint8_t osp_irq_buffer[OSP_BUFFER_LEN];
|
||||||
|
|
||||||
volatile enum gps_error_t gps_error_state;
|
volatile enum gps_error gps_error_state;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GPS Active?
|
* GPS Active?
|
||||||
*/
|
*/
|
||||||
enum gps_power_state_t {
|
enum gps_power_state {
|
||||||
GPS_HIBERNATE = 0,
|
GPS_HIBERNATE = 0,
|
||||||
GPS_ACTIVE = 1,
|
GPS_ACTIVE = 1,
|
||||||
};
|
};
|
||||||
enum gps_power_state_t gps_power_state = GPS_HIBERNATE;
|
enum gps_power_state gps_power_state = GPS_HIBERNATE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flight State
|
* Flight State
|
||||||
*/
|
*/
|
||||||
enum gps_flight_state_t gps_flight_state = GPS_FLIGHT_STATE_LAUNCH;
|
enum gps_flight_state gps_flight_state = GPS_FLIGHT_STATE_LAUNCH;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lock State
|
* Lock State
|
||||||
*/
|
*/
|
||||||
uint8_t gps_is_locked_priv = 0;
|
enum gps_lock_state gps_is_locked_priv = GPS_NO_LOCK;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OSP Output Ack/Nack
|
* OSP Output Ack/Nack
|
||||||
|
@ -476,7 +476,7 @@ void _osp_send_message(osp_message_t* message, uint8_t* payload, uint16_t length
|
||||||
/**
|
/**
|
||||||
* Returns current flight state
|
* Returns current flight state
|
||||||
*/
|
*/
|
||||||
enum gps_flight_state_t gps_get_flight_state(void)
|
enum gps_flight_state gps_get_flight_state(void)
|
||||||
{
|
{
|
||||||
return gps_flight_state;
|
return gps_flight_state;
|
||||||
}
|
}
|
||||||
|
@ -532,7 +532,7 @@ void gps_make_hibernate(void)
|
||||||
/**
|
/**
|
||||||
* Lock state. Set by gps_get_data
|
* Lock state. Set by gps_get_data
|
||||||
*/
|
*/
|
||||||
uint8_t gps_is_locked(void)
|
enum gps_lock_state gps_is_locked(void)
|
||||||
{
|
{
|
||||||
return gps_is_locked_priv;
|
return gps_is_locked_priv;
|
||||||
}
|
}
|
||||||
|
@ -547,7 +547,7 @@ uint8_t gps_is_locked(void)
|
||||||
* Gets the current error state of the GPS to check validity of last
|
* Gets the current error state of the GPS to check validity of last
|
||||||
* request
|
* request
|
||||||
*/
|
*/
|
||||||
enum gps_error_t gps_get_error_state(void)
|
enum gps_error gps_get_error_state(void)
|
||||||
{
|
{
|
||||||
return gps_error_state;
|
return gps_error_state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -170,7 +170,7 @@ void aprs_telemetry(struct tracker_datapoint* dp)
|
||||||
{
|
{
|
||||||
struct tracker_datapoint* backlog_dp_ptr;
|
struct tracker_datapoint* backlog_dp_ptr;
|
||||||
|
|
||||||
if (!gps_is_locked()) return; /* Don't bother with no GPS */
|
if (gps_is_locked() == GPS_NO_LOCK) return; /* Don't bother with no GPS */
|
||||||
|
|
||||||
/* Set location */
|
/* Set location */
|
||||||
aprs_set_datapoint(dp);
|
aprs_set_datapoint(dp);
|
||||||
|
@ -215,10 +215,14 @@ uint32_t hibernate_time_s = 1;
|
||||||
*/
|
*/
|
||||||
void set_hibernate_time(void)
|
void set_hibernate_time(void)
|
||||||
{
|
{
|
||||||
if (gps_get_flight_state() == GPS_FLIGHT_STATE_LAUNCH) {
|
if (gps_is_locked() == GPS_NO_LOCK) { /* no lock */
|
||||||
hibernate_time_s = 60-20; /* approx every minute */
|
hibernate_time_s = 0; /* shortest hibernate */
|
||||||
|
|
||||||
|
} else if (gps_get_flight_state() == GPS_FLIGHT_STATE_LAUNCH) {
|
||||||
|
hibernate_time_s = 60-20; /* approx every minute */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
hibernate_time_s = 240-20; /* approx every 4 minutes */
|
hibernate_time_s = 240-20; /* approx every 4 minutes */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -55,7 +55,8 @@ void telemetry_sequence(struct tracker_datapoint* dp, uint32_t n)
|
||||||
#if RF_TX_ENABLE
|
#if RF_TX_ENABLE
|
||||||
#if TELEMETRY_ENABLE
|
#if TELEMETRY_ENABLE
|
||||||
#if TELEMETRY_USE_GEOFENCE
|
#if TELEMETRY_USE_GEOFENCE
|
||||||
if (location_telemetry_active()) {
|
if (location_telemetry_active() || /* in geofence */
|
||||||
|
(gps_is_locked() == GPS_NO_LOCK)) { /* or no lock */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Pips */
|
/* Pips */
|
||||||
|
@ -106,8 +107,8 @@ void run_sequencer(uint32_t n)
|
||||||
telemetry_sequence(dp, n);
|
telemetry_sequence(dp, n);
|
||||||
|
|
||||||
/* Backlog */
|
/* Backlog */
|
||||||
if (((n % 15) == 10) && /* Once per hour with 4 minute wakeup */
|
if (((n % 15) == 10) && /* Once per hour with 4 minute wakeup */
|
||||||
gps_is_locked()) { /* And the gps is locked */
|
gps_is_locked() == GPS_LOCKED) { /* And the gps is locked */
|
||||||
record_backlog(dp);
|
record_backlog(dp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue