diff options
-rw-r--r-- | core/display.h | 1 | ||||
-rw-r--r-- | core/profile.c | 3 | ||||
-rw-r--r-- | core/profile.h | 13 | ||||
-rw-r--r-- | qt-models/diveplotdatamodel.cpp | 9 |
4 files changed, 19 insertions, 7 deletions
diff --git a/core/display.h b/core/display.h index 6b773a496..3e3a9531e 100644 --- a/core/display.h +++ b/core/display.h @@ -21,6 +21,7 @@ struct plot_info { double endtempcoord; double maxpp; struct plot_data *entry; + struct plot_pressure_data *pressures; /* MAX_CYLINDERS blocks of nr entries. */ }; extern struct divecomputer *select_dc(struct dive *); diff --git a/core/profile.c b/core/profile.c index 9fb2566bf..e27bcfd36 100644 --- a/core/profile.c +++ b/core/profile.c @@ -501,7 +501,6 @@ static void insert_entry(struct plot_info *pi, int idx, int time, int depth, int entry->sec = time; entry->depth = depth; entry->running_sum = prev->running_sum + (time - prev->sec) * (depth + prev->depth) / 2; - memset(entry->pressure, 0, sizeof(entry->pressure)); entry->sac = sac; entry->ndl = -1; entry->bearing = -1; @@ -510,6 +509,7 @@ static void insert_entry(struct plot_info *pi, int idx, int time, int depth, int void free_plot_info_data(struct plot_info *pi) { free(pi->entry); + free(pi->pressures); pi->entry = NULL; } @@ -534,6 +534,7 @@ static void populate_plot_entries(struct dive *dive, struct divecomputer *dc, st nr = dc->samples + 6 + maxtime / 10 + count_events(dc); plot_data = calloc(nr, sizeof(struct plot_data)); pi->entry = plot_data; + pi->pressures = calloc(nr * MAX_CYLINDERS, sizeof(struct plot_pressure_data)); if (!plot_data) return; pi->nr = nr; diff --git a/core/profile.h b/core/profile.h index 0153ccf94..953cfdcc8 100644 --- a/core/profile.h +++ b/core/profile.h @@ -28,11 +28,16 @@ struct deco_state; struct divecomputer; struct plot_info; +/* + * sensor data for a given cylinder + */ +struct plot_pressure_data { + int data[NUM_PLOT_PRESSURES]; +}; + struct plot_data { unsigned int in_deco : 1; int sec; - /* One pressure item per cylinder and pressure type */ - int pressure[MAX_CYLINDERS][NUM_PLOT_PRESSURES]; int temperature; /* Depth info */ int depth; @@ -104,12 +109,12 @@ extern int get_maxdepth(struct plot_info *pi); static inline int get_plot_pressure_data(const struct plot_info *pi, int idx, enum plot_pressure sensor, int cylinder) { - return pi->entry[idx].pressure[cylinder][sensor]; + return pi->pressures[cylinder * pi->nr + idx].data[sensor]; } static inline void set_plot_pressure_data(struct plot_info *pi, int idx, enum plot_pressure sensor, int cylinder, int value) { - pi->entry[idx].pressure[cylinder][sensor] = value; + pi->pressures[cylinder * pi->nr + idx].data[sensor] = value; } static inline int get_plot_sensor_pressure(const struct plot_info *pi, int idx, int cylinder) diff --git a/qt-models/diveplotdatamodel.cpp b/qt-models/diveplotdatamodel.cpp index c8f086867..d89ab6f31 100644 --- a/qt-models/diveplotdatamodel.cpp +++ b/qt-models/diveplotdatamodel.cpp @@ -167,7 +167,9 @@ void DivePlotDataModel::clear() beginResetModel(); pInfo.nr = 0; free(pInfo.entry); - pInfo.entry = 0; + free(pInfo.pressures); + pInfo.entry = nullptr; + pInfo.pressures = nullptr; diveId = -1; dcNr = -1; endResetModel(); @@ -179,9 +181,12 @@ void DivePlotDataModel::setDive(dive *d, const plot_info &info) diveId = d->id; dcNr = dc_number; free(pInfo.entry); + free(pInfo.pressures); pInfo = info; - pInfo.entry = (struct plot_data *)malloc(sizeof(struct plot_data) * pInfo.nr); + pInfo.entry = (plot_data *)malloc(sizeof(plot_data) * pInfo.nr); memcpy(pInfo.entry, info.entry, sizeof(plot_data) * pInfo.nr); + pInfo.pressures = (plot_pressure_data *)malloc(sizeof(plot_pressure_data) * MAX_CYLINDERS * pInfo.nr); + memcpy(pInfo.pressures, info.pressures, sizeof(plot_pressure_data) * MAX_CYLINDERS * pInfo.nr); endResetModel(); } |