diff options
Diffstat (limited to 'src/kernel/ao_log.h')
| -rw-r--r-- | src/kernel/ao_log.h | 32 | 
1 files changed, 22 insertions, 10 deletions
| diff --git a/src/kernel/ao_log.h b/src/kernel/ao_log.h index 33cda3eb..c13a2580 100644 --- a/src/kernel/ao_log.h +++ b/src/kernel/ao_log.h @@ -51,11 +51,16 @@ extern __pdata enum ao_flight_state ao_log_state;  #define AO_LOG_FORMAT_NONE		127	/* No log at all */  extern __code uint8_t ao_log_format; +extern __code uint8_t ao_log_size;  /* Return the flight number from the given log slot, 0 if none */  uint16_t  ao_log_flight(uint8_t slot); +/* Check if there is valid log data at the specified location */ +uint8_t +ao_log_check(uint32_t pos); +  /* Flush the log */  void  ao_log_flush(void); @@ -67,7 +72,7 @@ ao_log(void);  /* functions provided in ao_log.c */  /* Figure out the current flight number */ -void +uint8_t  ao_log_scan(void) __reentrant;  /* Return the position of the start of the given log slot */ @@ -176,8 +181,8 @@ struct ao_log_record {  		int32_t		gps_latitude;  		int32_t		gps_longitude;  		struct { -			int16_t		altitude; -			uint16_t	unused; +			uint16_t	altitude_low; +			int16_t		altitude_high;  		} gps_altitude;  		struct {  			uint16_t	svid; @@ -246,7 +251,7 @@ struct ao_log_mega {  		struct {  			int32_t		latitude;	/* 4 */  			int32_t		longitude;	/* 8 */ -			int16_t		altitude;	/* 12 */ +			uint16_t	altitude_low;	/* 12 */  			uint8_t		hour;		/* 14 */  			uint8_t		minute;		/* 15 */  			uint8_t		second;		/* 16 */ @@ -261,7 +266,8 @@ struct ao_log_mega {  			uint8_t		hdop;		/* 27 */  			uint8_t		vdop;		/* 28 */  			uint8_t		mode;		/* 29 */ -		} gps;	/* 30 */ +			int16_t		altitude_high;	/* 30 */ +		} gps;	/* 32 */  		/* AO_LOG_GPS_SAT */  		struct {  			uint16_t	channels;	/* 4 */ @@ -273,6 +279,11 @@ struct ao_log_mega {  	} u;  }; +#define AO_LOG_MEGA_GPS_ALTITUDE(l)	((int32_t) ((l)->u.gps.altitude_high << 16) | ((l)->u.gps.altitude_low)) +#define AO_LOG_MEGA_SET_GPS_ALTITUDE(l,a)	(((l)->u.gps.mode |= AO_GPS_MODE_ALTITUDE_24), \ +						 ((l)->u.gps.altitude_high = (a) >> 16), \ +						 (l)->u.gps.altitude_low = (a)) +  struct ao_log_metrum {  	char			type;			/* 0 */  	uint8_t			csum;			/* 1 */ @@ -306,8 +317,9 @@ struct ao_log_metrum {  		struct {  			int32_t		latitude;	/* 4 */  			int32_t		longitude;	/* 8 */ -			int16_t		altitude;	/* 12 */ -		} gps;		/* 14 */ +			uint16_t	altitude_low;	/* 12 */ +			int16_t		altitude_high;	/* 14 */ +		} gps;		/* 16 */  		/* AO_LOG_GPS_TIME */  		struct {  			uint8_t		hour;		/* 4 */ @@ -317,7 +329,7 @@ struct ao_log_metrum {  			uint8_t		year;		/* 8 */  			uint8_t		month;		/* 9 */  			uint8_t		day;		/* 10 */ -			uint8_t		pad;		/* 11 */ +			uint8_t		pdop;		/* 11 */  		} gps_time;	/* 12 */  		/* AO_LOG_GPS_SAT (up to three packets) */  		struct { @@ -381,7 +393,7 @@ struct ao_log_gps {  		struct {  			int32_t		latitude;	/* 4 */  			int32_t		longitude;	/* 8 */ -			int16_t		altitude;	/* 12 */ +			uint16_t	altitude_low;	/* 12 */  			uint8_t		hour;		/* 14 */  			uint8_t		minute;		/* 15 */  			uint8_t		second;		/* 16 */ @@ -396,7 +408,7 @@ struct ao_log_gps {  			uint8_t		hdop;		/* 27 */  			uint8_t		vdop;		/* 28 */  			uint8_t		mode;		/* 29 */ -			uint8_t		state;		/* 30 */ +			int16_t		altitude_high;	/* 30 */  		} gps;	/* 31 */  		/* AO_LOG_GPS_SAT */  		struct { | 
