X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=aoview%2Faoview.h;h=62d0640b9a182b42101263cea45ff3a1936729b6;hp=028b2f162839a56aed1c598a3dd829c1197c0608;hb=d7c2d358ed8a1afc9f0ba2bd830b10f6b56dc7b1;hpb=09771c644de54ae354e8f98af7ba74289b3c0fcc diff --git a/aoview/aoview.h b/aoview/aoview.h index 028b2f16..62d0640b 100644 --- a/aoview/aoview.h +++ b/aoview/aoview.h @@ -18,8 +18,11 @@ #ifndef _AOVIEW_H_ #define _AOVIEW_H_ -#include -#include +#define _GNU_SOURCE + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include #include @@ -32,6 +35,11 @@ #include #include #include +#include + +#include +#include +#include struct usbdev { char *sys; @@ -43,7 +51,31 @@ struct usbdev { int idVendor; }; -struct aostate { +struct aogps_time { + int hour; + int minute; + int second; +}; + +struct aogps { + int nsat; + int gps_locked; + int gps_connected; + struct aogps_time gps_time; + double lat; /* degrees (+N -S) */ + double lon; /* degrees (+E -W) */ + int alt; /* m */ + + int gps_extended; /* has extra data */ + double ground_speed; /* m/s */ + int course; /* degrees */ + double climb_rate; /* m/s */ + double hdop; /* unitless? */ + int h_error; /* m */ + int v_error; /* m */ +}; + +struct aodata { char callsign[16]; int serial; int rssi; @@ -55,35 +87,87 @@ struct aostate { int batt; int drogue; int main; - int nsat; - int locked; - struct { - int hour; - int minute; - int second; - } gps_time; - double lat; - double lon; - int alt; + int flight_accel; + int ground_accel; + int flight_vel; + int flight_pres; + int ground_pres; + struct aogps gps; +}; + +struct aostate { + struct aodata data; + + /* derived data */ + + struct aodata prev_data; + + double report_time; + + gboolean ascent; /* going up? */ + + int ground_altitude; + int height; + double speed; + double acceleration; + double battery; + double temperature; + double main_sense; + double drogue_sense; + double baro_speed; + + int max_height; + double max_acceleration; + double max_speed; + + struct aogps gps; + + int gps_valid; + double pad_lat; + double pad_lon; + double pad_alt; + double pad_lat_total; + double pad_lon_total; + double pad_alt_total; + int npad; + int prev_npad; + + double distance; + double bearing; + int gps_height; + + int speak_tick; + int speak_altitude; }; +extern struct aostate aostate; + +/* GPS is 'stable' when we've seen at least this many samples */ +#define MIN_PAD_SAMPLES 10 + void aoview_monitor_disconnect(void); -void +gboolean aoview_monitor_connect(char *tty); +gboolean +aoview_monitor_parse(const char *line); + +void +aoview_monitor_reset(void); + struct aoview_serial * aoview_serial_open(const char *tty); void aoview_serial_close(struct aoview_serial *serial); +typedef void (*aoview_serial_callback)(gpointer user_data, struct aoview_serial *serial, gint revents); + void aoview_serial_set_callback(struct aoview_serial *serial, - GSourceFunc func, - gpointer data, - GDestroyNotify notify); + aoview_serial_callback func); void aoview_serial_printf(struct aoview_serial *serial, char *format, ...); @@ -104,7 +188,10 @@ void aoview_usbdev_free(struct usbdev *usbdev); void -aoview_state_notify(struct aostate *state); +aoview_state_notify(struct aodata *data); + +void +aoview_state_new(void); void aoview_state_init(GladeXML *xml); @@ -115,4 +202,110 @@ aoview_pres_to_altitude(int16_t pres); int16_t aoview_altitude_to_pres(int16_t alt); +char * +aoview_fullname (char *dir, char *file); + +char * +aoview_basename(char *file); + +GtkTreeViewColumn * +aoview_add_plain_text_column (GtkTreeView *view, const gchar *title, gint model_column, gint width); + +int +aoview_mkdir(char *dir); + +void +aoview_log_init(GladeXML *xml); + +void +aoview_log_set_serial(int serial); + +int +aoview_log_get_serial(void); + +void +aoview_log_printf(char *format, ...); + +void +aoview_log_new(void); + +void +aoview_table_start(void); + +void +aoview_table_add_row(int column, char *label, char *format, ...); + +void +aoview_table_finish(void); + +void +aoview_table_init(GladeXML *xml); + +void +aoview_table_clear(void); + +struct aoview_file; + +extern char *aoview_file_dir; + +void +aoview_file_finish(struct aoview_file *file); + +gboolean +aoview_file_start(struct aoview_file *file); + +const char * +aoview_file_name(struct aoview_file *file); + +void +aoview_file_set_serial(struct aoview_file *file, int serial); + +int +aoview_file_get_serial(struct aoview_file *file); + +void +aoview_file_printf(struct aoview_file *file, char *format, ...); + +void +aoview_file_vprintf(struct aoview_file *file, char *format, va_list ap); + +struct aoview_file * +aoview_file_new(char *ext); + +void +aoview_file_destroy(struct aoview_file *file); + +void +aoview_file_init(GladeXML *xml); + +/* aoview_eeprom.c */ + +gboolean +aoview_eeprom_save(const char *device); + +void +aoview_eeprom_init(GladeXML *xml); + +/* aoview_voice.c */ +void aoview_voice_open(void); + +void aoview_voice_close(void); + +void aoview_voice_speak(char *format, ...); + +/* aoview_label.c */ + +void aoview_label_init(GladeXML *xml); + +void +aoview_label_show(struct aostate *state); + +/* aoview_flite.c */ + +FILE * +aoview_flite_start(void); + +void +aoview_flite_stop(void); + #endif /* _AOVIEW_H_ */