2013-05-04 20:24:23 +00:00
|
|
|
#ifndef PROFILE_H
|
|
|
|
#define PROFILE_H
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
typedef enum {
|
|
|
|
STABLE,
|
|
|
|
SLOW,
|
|
|
|
MODERATE,
|
|
|
|
FAST,
|
|
|
|
CRAZY
|
|
|
|
} velocity_t;
|
2013-05-04 22:36:40 +00:00
|
|
|
|
2014-01-19 00:21:13 +00:00
|
|
|
struct membuffer;
|
2013-05-04 20:24:23 +00:00
|
|
|
struct divecomputer;
|
|
|
|
struct graphics_context;
|
|
|
|
struct plot_info;
|
2013-05-04 22:36:40 +00:00
|
|
|
struct plot_data {
|
2014-02-28 04:09:57 +00:00
|
|
|
unsigned int in_deco : 1;
|
2013-05-10 15:56:56 +00:00
|
|
|
int cylinderindex;
|
2013-05-04 22:36:40 +00:00
|
|
|
int sec;
|
|
|
|
/* pressure[0] is sensor pressure
|
|
|
|
* pressure[1] is interpolated pressure */
|
|
|
|
int pressure[2];
|
|
|
|
int temperature;
|
|
|
|
/* Depth info */
|
|
|
|
int depth;
|
|
|
|
int ceiling;
|
2013-05-30 18:56:00 +00:00
|
|
|
int ceilings[16];
|
2013-05-04 22:36:40 +00:00
|
|
|
int ndl;
|
|
|
|
int stoptime;
|
|
|
|
int stopdepth;
|
|
|
|
int cns;
|
|
|
|
int smoothed;
|
2013-10-14 21:48:43 +00:00
|
|
|
int sac;
|
2013-05-04 22:36:40 +00:00
|
|
|
double po2, pn2, phe;
|
|
|
|
double mod, ead, end, eadd;
|
|
|
|
velocity_t velocity;
|
2013-09-25 00:07:07 +00:00
|
|
|
int speed;
|
2013-05-04 22:36:40 +00:00
|
|
|
struct plot_data *min[3];
|
|
|
|
struct plot_data *max[3];
|
|
|
|
int avg[3];
|
2013-11-13 18:20:09 +00:00
|
|
|
/* values calculated by us */
|
2014-02-28 04:09:57 +00:00
|
|
|
unsigned int in_deco_calc : 1;
|
2013-11-13 18:20:09 +00:00
|
|
|
int ndl_calc;
|
|
|
|
int tts_calc;
|
|
|
|
int stoptime_calc;
|
|
|
|
int stopdepth_calc;
|
2014-01-01 12:35:16 +00:00
|
|
|
int pressure_time;
|
2014-01-17 22:00:28 +00:00
|
|
|
int heartbeat;
|
|
|
|
int bearing;
|
2013-05-04 22:36:40 +00:00
|
|
|
};
|
2014-01-15 15:34:55 +00:00
|
|
|
//TODO: remove the calculatE_max_limits as soon as the new profile is done.
|
2013-05-04 20:24:23 +00:00
|
|
|
void calculate_max_limits(struct dive *dive, struct divecomputer *dc, struct graphics_context *gc);
|
2014-01-15 15:34:55 +00:00
|
|
|
struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer *dc);
|
2013-12-03 23:12:01 +00:00
|
|
|
struct plot_info *create_plot_info(struct dive *dive, struct divecomputer *dc, struct graphics_context *gc, bool print_mode);
|
2013-05-09 18:28:50 +00:00
|
|
|
int setup_temperature_limits(struct graphics_context *gc);
|
2013-05-09 03:24:03 +00:00
|
|
|
int get_cylinder_pressure_range(struct graphics_context *gc);
|
2013-09-25 00:07:07 +00:00
|
|
|
void compare_samples(struct plot_data *e1, struct plot_data *e2, char *buf, int bufsize, int sum);
|
2014-01-14 18:43:58 +00:00
|
|
|
struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *dc, struct plot_info *pi);
|
|
|
|
struct plot_info *analyze_plot_info(struct plot_info *pi);
|
2014-01-17 16:43:25 +00:00
|
|
|
void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plot_info *pi);
|
2014-02-04 19:34:16 +00:00
|
|
|
void calculate_deco_information(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool print_mode);
|
2014-01-19 00:21:13 +00:00
|
|
|
void get_plot_details_new(struct plot_info *pi, int time, struct membuffer *);
|
2013-05-04 20:24:23 +00:00
|
|
|
|
2013-05-06 21:58:18 +00:00
|
|
|
struct ev_select {
|
|
|
|
char *ev_name;
|
|
|
|
bool plot_ev;
|
|
|
|
};
|
|
|
|
|
2013-05-04 22:20:49 +00:00
|
|
|
/*
|
|
|
|
* When showing dive profiles, we scale things to the
|
|
|
|
* current dive. However, we don't scale past less than
|
|
|
|
* 30 minutes or 90 ft, just so that small dives show
|
|
|
|
* up as such unless zoom is enabled.
|
|
|
|
* We also need to add 180 seconds at the end so the min/max
|
|
|
|
* plots correctly
|
|
|
|
*/
|
|
|
|
int get_maxtime(struct plot_info *pi);
|
|
|
|
|
|
|
|
/* get the maximum depth to which we want to plot
|
|
|
|
* take into account the additional verical space needed to plot
|
|
|
|
* partial pressure graphs */
|
|
|
|
int get_maxdepth(struct plot_info *pi);
|
|
|
|
|
2013-05-09 18:47:39 +00:00
|
|
|
void setup_pp_limits(struct graphics_context *gc);
|
|
|
|
|
2013-05-09 03:24:03 +00:00
|
|
|
|
2013-05-06 18:35:17 +00:00
|
|
|
#define ALIGN_LEFT 1
|
|
|
|
#define ALIGN_RIGHT 2
|
|
|
|
#define INVISIBLE 4
|
|
|
|
#define UNSORTABLE 8
|
|
|
|
#define EDITABLE 16
|
|
|
|
|
|
|
|
#ifndef TEXT_SCALE
|
|
|
|
#define TEXT_SCALE 1.0
|
|
|
|
#endif
|
|
|
|
|
2013-10-15 09:54:15 +00:00
|
|
|
#define DEPTH_TEXT_SIZE (12 * TEXT_SCALE)
|
|
|
|
#define PRESSURE_TEXT_SIZE (12 * TEXT_SCALE)
|
|
|
|
#define DC_TEXT_SIZE (12 * TEXT_SCALE)
|
|
|
|
#define PP_TEXT_SIZE (12 * TEXT_SCALE)
|
2013-05-06 18:35:17 +00:00
|
|
|
#define TEMP_TEXT_SIZE (12 * TEXT_SCALE)
|
|
|
|
|
2014-02-23 23:28:31 +00:00
|
|
|
#define TEMP_TEXT_SCALE 0.8
|
|
|
|
#define HR_TEXT_CALE 0.7
|
2013-05-06 18:35:17 +00:00
|
|
|
#define RIGHT (-1.0)
|
|
|
|
#define CENTER (-0.5)
|
|
|
|
#define LEFT (0.0)
|
|
|
|
|
2013-05-28 16:57:49 +00:00
|
|
|
#define LINE_DOWN (1)
|
|
|
|
#define TOP (0)
|
|
|
|
#define MIDDLE (-0.5)
|
2013-05-06 18:35:17 +00:00
|
|
|
#define BOTTOM (-1)
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
#define SCALEXGC(x) (((x) - gc.leftx) / (gc.rightx - gc.leftx) * gc.maxx)
|
|
|
|
#define SCALEYGC(y) (((y) - gc.topy) / (gc.bottomy - gc.topy) * gc.maxy)
|
|
|
|
#define SCALEGC(x, y) SCALEXGC(x), SCALEYGC(y)
|
2013-05-08 21:56:06 +00:00
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
#define SCALEX(gc, x) (((x) - gc->leftx) / (gc->rightx - gc->leftx) * gc->maxx)
|
|
|
|
#define SCALEY(gc, y) (((y) - gc->topy) / (gc->bottomy - gc->topy) * gc->maxy)
|
|
|
|
#define SCALE(gc, x, y) SCALEX(gc, x), SCALEY(gc, y)
|
2013-05-08 20:46:28 +00:00
|
|
|
|
2013-05-09 03:24:03 +00:00
|
|
|
#define SENSOR_PR 0
|
|
|
|
#define INTERPOLATED_PR 1
|
|
|
|
#define SENSOR_PRESSURE(_entry) (_entry)->pressure[SENSOR_PR]
|
|
|
|
#define INTERPOLATED_PRESSURE(_entry) (_entry)->pressure[INTERPOLATED_PR]
|
|
|
|
#define GET_PRESSURE(_entry) (SENSOR_PRESSURE(_entry) ? SENSOR_PRESSURE(_entry) : INTERPOLATED_PRESSURE(_entry))
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
#define SAC_WINDOW 45 /* sliding window in seconds for current SAC calculation */
|
2013-05-09 03:24:03 +00:00
|
|
|
|
2013-05-04 20:24:23 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
2014-02-11 18:14:46 +00:00
|
|
|
#endif // PROFILE_H
|