summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/cochran.c2
-rw-r--r--core/dive.c73
-rw-r--r--core/dive.h3
-rw-r--r--core/divelist.c2
-rw-r--r--core/gaspressures.c50
-rw-r--r--core/libdivecomputer.c16
-rw-r--r--core/liquivision.c6
-rw-r--r--core/load-git.c7
-rw-r--r--core/parse-xml.c18
-rw-r--r--core/profile.c93
-rw-r--r--core/profile.h12
-rw-r--r--core/save-git.c6
-rw-r--r--core/save-xml.c6
-rw-r--r--core/statistics.c11
-rw-r--r--core/uemis.c2
-rw-r--r--profile-widget/diveprofileitem.cpp39
-rw-r--r--profile-widget/profilewidget2.cpp10
-rw-r--r--profile-widget/tankitem.cpp6
-rw-r--r--qt-models/diveplotdatamodel.cpp2
19 files changed, 175 insertions, 189 deletions
diff --git a/core/cochran.c b/core/cochran.c
index 5929a7a27..f447a846a 100644
--- a/core/cochran.c
+++ b/core/cochran.c
@@ -584,7 +584,7 @@ static void cochran_parse_samples(struct dive *dive, const unsigned char *log,
sample->stoptime.seconds = deco_time;
sample->stopdepth.mm = lrint(deco_ceiling * FEET * 1000);
sample->temperature.mkelvin = C_to_mkelvin((temp - 32) / 1.8);
- sample->sensor = 0;
+ sample->sensor[0] = 0;
sample->pressure[0].mbar = lrint(psi * PSI / 100);
finish_sample(dc);
diff --git a/core/dive.c b/core/dive.c
index 229a04eba..6406242bf 100644
--- a/core/dive.c
+++ b/core/dive.c
@@ -1207,12 +1207,6 @@ unsigned int dc_airtemp(struct divecomputer *dc)
return (sum + nr / 2) / nr;
}
-static void fixup_cylinder_use(struct dive *dive) // for CCR dives, store the indices
-{ // of the oxygen and diluent cylinders
- dive->oxygen_cylinder_index = get_cylinder_idx_by_use(dive, OXYGEN);
- dive->diluent_cylinder_index = get_cylinder_idx_by_use(dive, DILUENT);
-}
-
static void fixup_airtemp(struct dive *dive)
{
if (!dive->airtemp.mkelvin)
@@ -1354,26 +1348,25 @@ static void fixup_dc_temp(struct dive *dive, struct divecomputer *dc)
static void simplify_dc_pressures(struct divecomputer *dc)
{
int i;
- int lastindex = -1;
- int lastpressure = 0, lasto2pressure = 0;
+ int lastindex[2] = { -1, -1 };
+ int lastpressure[2] = { 0 };
for (i = 0; i < dc->samples; i++) {
+ int j;
struct sample *sample = dc->sample + i;
- int pressure = sample->pressure[0].mbar;
- int o2_pressure = sample->pressure[1].mbar;
- int index;
-
- index = sample->sensor;
- if (index == lastindex) {
- /* Remove duplicate redundant pressure information */
- if (pressure == lastpressure)
- sample->pressure[0].mbar = 0;
- if (o2_pressure == lasto2pressure)
- sample->pressure[1].mbar = 0;
+
+ for (j = 0; j < 2; j++) {
+ int pressure = sample->pressure[j].mbar;
+ int index = sample->sensor[j];
+
+ if (index == lastindex[j]) {
+ /* Remove duplicate redundant pressure information */
+ if (pressure == lastpressure[j])
+ sample->pressure[j].mbar = 0;
+ }
+ lastindex[j] = index;
+ lastpressure[j] = pressure;
}
- lastindex = index;
- lastpressure = pressure;
- lasto2pressure = o2_pressure;
}
}
@@ -1411,10 +1404,7 @@ static void fixup_end_pressure(struct dive *dive, int idx, pressure_t p)
*/
static void fixup_dive_pressures(struct dive *dive, struct divecomputer *dc)
{
- int i, o2index = -1;
-
- if (dive->dc.divemode == CCR)
- o2index = get_cylinder_idx_by_use(dive, OXYGEN);
+ int i;
/* Walk the samples from the beginning to find starting pressures.. */
for (i = 0; i < dc->samples; i++) {
@@ -1423,8 +1413,8 @@ static void fixup_dive_pressures(struct dive *dive, struct divecomputer *dc)
if (sample->depth.mm < SURFACE_THRESHOLD)
continue;
- fixup_start_pressure(dive, sample->sensor, sample->pressure[0]);
- fixup_start_pressure(dive, o2index, sample->pressure[1]);
+ fixup_start_pressure(dive, sample->sensor[0], sample->pressure[0]);
+ fixup_start_pressure(dive, sample->sensor[1], sample->pressure[1]);
}
/* ..and from the end for ending pressures */
@@ -1434,8 +1424,8 @@ static void fixup_dive_pressures(struct dive *dive, struct divecomputer *dc)
if (sample->depth.mm < SURFACE_THRESHOLD)
continue;
- fixup_end_pressure(dive, sample->sensor, sample->pressure[0]);
- fixup_end_pressure(dive, o2index, sample->pressure[1]);
+ fixup_end_pressure(dive, sample->sensor[0], sample->pressure[0]);
+ fixup_end_pressure(dive, sample->sensor[1], sample->pressure[1]);
}
simplify_dc_pressures(dc);
@@ -1575,7 +1565,6 @@ struct dive *fixup_dive(struct dive *dive)
fixup_duration(dive);
fixup_watertemp(dive);
fixup_airtemp(dive);
- fixup_cylinder_use(dive); // store indices for CCR oxygen and diluent cylinders
for (i = 0; i < MAX_CYLINDERS; i++) {
cylinder_t *cyl = dive->cylinder + i;
add_cylinder_description(&cyl->type);
@@ -1715,8 +1704,12 @@ static void merge_samples(struct divecomputer *res, struct divecomputer *a, stru
sample.temperature = as->temperature;
if (as->pressure[0].mbar)
sample.pressure[0] = as->pressure[0];
- if (as->sensor)
- sample.sensor = as->sensor;
+ if (as->sensor[0])
+ sample.sensor[0] = as->sensor[0];
+ if (as->pressure[1].mbar)
+ sample.pressure[1] = as->pressure[1];
+ if (as->sensor[1])
+ sample.sensor[1] = as->sensor[1];
if (as->cns)
sample.cns = as->cns;
if (as->setpoint.mbar)
@@ -1950,11 +1943,15 @@ void dc_cylinder_renumber(struct dive *dive, struct divecomputer *dc, int mappin
/* Remap the sensor indexes */
for (i = 0; i < dc->samples; i++) {
struct sample *s = dc->sample + i;
- int sensor;
+ int j;
- sensor = mapping[s->sensor];
- if (sensor >= 0)
- s->sensor = sensor;
+ for (j = 0; j < 2; j++) {
+ int sensor;
+
+ sensor = mapping[s->sensor[j]];
+ if (sensor >= 0)
+ s->sensor[j] = sensor;
+ }
}
/* Remap the gas change indexes */
@@ -2627,7 +2624,7 @@ static int same_sample(struct sample *a, struct sample *b)
return 0;
if (a->pressure[0].mbar != b->pressure[0].mbar)
return 0;
- return a->sensor == b->sensor;
+ return a->sensor[0] == b->sensor[0];
}
static int same_dc(struct divecomputer *a, struct divecomputer *b)
diff --git a/core/dive.h b/core/dive.h
index 73de24b61..2d1b761f0 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -198,7 +198,7 @@ struct sample // BASE TYPE BYTES UNITS RANGE DE
o2pressure_t setpoint; // uint16_t 2 mbar (0-65 bar) O2 partial pressure (will be setpoint)
o2pressure_t o2sensor[3]; // uint16_t 6 mbar (0-65 bar) Up to 3 PO2 sensor values (rebreather)
bearing_t bearing; // int16_t 2 degrees (-32k to 32k deg) compass bearing
- uint8_t sensor; // uint8_t 1 sensorID (0-255) ID of cylinder pressure sensor
+ uint8_t sensor[2]; // uint8_t 1 sensorID (0-255) ID of cylinder pressure sensor
uint8_t cns; // uint8_t 1 % (0-255 %) cns% accumulated
uint8_t heartbeat; // uint8_t 1 beats/m (0-255) heart rate measurement
volume_t sac; // 4 ml/min predefined SAC
@@ -352,7 +352,6 @@ struct dive {
struct divecomputer dc;
int id; // unique ID for this dive
struct picture *picture_list;
- int oxygen_cylinder_index, diluent_cylinder_index; // CCR dive cylinder indices
unsigned char git_id[20];
};
diff --git a/core/divelist.c b/core/divelist.c
index 4f253039b..d51aedf78 100644
--- a/core/divelist.c
+++ b/core/divelist.c
@@ -330,7 +330,7 @@ static void add_dive_to_deco(struct dive *dive)
for (j = t0; j < t1; j++) {
int depth = interpolate(psample->depth.mm, sample->depth.mm, j - t0, t1 - t0);
add_segment(depth_to_bar(depth, dive),
- &dive->cylinder[sample->sensor].gasmix, 1, sample->setpoint.mbar, dive, dive->sac);
+ &dive->cylinder[sample->sensor[0]].gasmix, 1, sample->setpoint.mbar, dive, dive->sac);
}
}
}
diff --git a/core/gaspressures.c b/core/gaspressures.c
index 77a19429f..86ea8de7a 100644
--- a/core/gaspressures.c
+++ b/core/gaspressures.c
@@ -197,7 +197,7 @@ static struct pr_interpolate_struct get_pr_interpolate_data(pr_track_t *segment,
return interpolate;
}
-static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, pr_track_t **track_pr, bool o2_flag)
+static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, pr_track_t **track_pr, int sensoridx)
{
int cyl, i;
struct plot_data *entry;
@@ -243,20 +243,12 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi,
entry = pi->entry + i;
- if (o2_flag) {
- // Find the cylinder index (cyl) and pressure
- cyl = dive->oxygen_cylinder_index;
- if (cyl < 0)
- return; // Can we do this?!?
- pressure = O2CYLINDER_PRESSURE(entry);
- save_pressure = &(entry->pressure[1][SENSOR_PR]);
- save_interpolated = &(entry->pressure[1][INTERPOLATED_PR]);
- } else {
- pressure = SENSOR_PRESSURE(entry);
- save_pressure = &(entry->pressure[0][SENSOR_PR]);
- save_interpolated = &(entry->pressure[0][INTERPOLATED_PR]);
- cyl = entry->cylinderindex;
- }
+ cyl = entry->sensor[sensoridx];
+ if (cyl < 0)
+ continue;
+ save_pressure = &(entry->pressure[sensoridx][SENSOR_PR]);
+ save_interpolated = &(entry->pressure[sensoridx][INTERPOLATED_PR]);
+ pressure = *save_pressure ? *save_pressure : *save_interpolated;
if (pressure) { // If there is a valid pressure value,
last_segment = NULL; // get rid of interpolation data,
@@ -346,7 +338,7 @@ static void debug_print_pressures(struct plot_info *pi)
* in the pr_track_alloc structures. If diluent_flag = 1, then DILUENT_PRESSURE(entry) is used instead of SENSOR_PRESSURE.
* This function is called by create_plot_info_new() in profile.c
*/
-void populate_pressure_information(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, int o2_flag)
+void populate_pressure_information(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, int sensoridx)
{
(void) dc;
int i, cylinderid, cylinderindex = -1;
@@ -369,15 +361,12 @@ void populate_pressure_information(struct dive *dive, struct divecomputer *dc, s
for (i = 0; i < pi->nr; i++) {
struct plot_data *entry = pi->entry + i;
unsigned pressure;
- if (o2_flag) { // if this is a diluent cylinder:
- pressure = O2CYLINDER_PRESSURE(entry);
- cylinderid = dive->oxygen_cylinder_index;
- if (cylinderid < 0)
- goto GIVE_UP;
- } else {
- pressure = SENSOR_PRESSURE(entry);
- cylinderid = entry->cylinderindex;
- }
+
+ pressure = SENSOR_PRESSURE(entry, sensoridx);
+ cylinderid = entry->sensor[sensoridx];
+ if (cylinderid < 0)
+ goto GIVE_UP;
+
/* If track_pr structure already exists, then update it: */
/* discrete integration of pressure over time to get the SAC rate equivalent */
if (current) {
@@ -389,10 +378,7 @@ void populate_pressure_information(struct dive *dive, struct divecomputer *dc, s
/* If 1st record or different cylinder: Create a new track_pr structure: */
/* track the segments per cylinder and their pressure/time integral */
if (cylinderid != cylinderindex) {
- if (o2_flag) // For CCR dives:
- cylinderindex = dive->oxygen_cylinder_index; // indicate o2 cylinder
- else
- cylinderindex = entry->cylinderindex;
+ cylinderindex = entry->sensor[sensoridx];
current = pr_track_alloc(pressure, entry->sec);
track_pr[cylinderindex] = list_add(track_pr[cylinderindex], current);
continue;
@@ -406,9 +392,7 @@ void populate_pressure_information(struct dive *dive, struct divecomputer *dc, s
current->end = pressure;
/* Was it continuous? */
- if ((o2_flag) && (O2CYLINDER_PRESSURE(entry - 1))) // in the case of CCR o2 pressure
- continue;
- else if (SENSOR_PRESSURE(entry - 1)) // for all other cylinders
+ if (SENSOR_PRESSURE(entry - 1, sensoridx))
continue;
/* transmitter stopped transmitting cylinder pressure data */
@@ -418,7 +402,7 @@ void populate_pressure_information(struct dive *dive, struct divecomputer *dc, s
}
if (missing_pr) {
- fill_missing_tank_pressures(dive, pi, track_pr, o2_flag);
+ fill_missing_tank_pressures(dive, pi, track_pr, sensoridx);
}
#ifdef PRINT_PRESSURES_DEBUG
diff --git a/core/libdivecomputer.c b/core/libdivecomputer.c
index 2d7778346..c935ecbce 100644
--- a/core/libdivecomputer.c
+++ b/core/libdivecomputer.c
@@ -352,17 +352,15 @@ sample_cb(dc_sample_type_t type, dc_sample_value_t value, void *userdata)
case DC_SAMPLE_DEPTH:
sample->depth.mm = lrint(value.depth * 1000);
break;
- case DC_SAMPLE_PRESSURE:
+ case DC_SAMPLE_PRESSURE: {
+ int sensoridx = 0;
/* Do we already have a pressure reading? */
- if (sample->pressure[0].mbar) {
- /* Do we prefer the one we already have? */
- /* If so, just ignore the new one */
- if (sample->sensor == current_gas_index)
- break;
- }
- sample->sensor = value.pressure.tank;
- sample->pressure[0].mbar = lrint(value.pressure.value * 1000);
+ if (sample->pressure[0].mbar)
+ sensoridx = 1;
+ sample->sensor[sensoridx] = value.pressure.tank;
+ sample->pressure[sensoridx].mbar = lrint(value.pressure.value * 1000);
break;
+ }
case DC_SAMPLE_GASMIX:
handle_gasmix(dc, sample, value.gasmix);
break;
diff --git a/core/liquivision.c b/core/liquivision.c
index 3406bd3ab..dae9ae81b 100644
--- a/core/liquivision.c
+++ b/core/liquivision.c
@@ -334,7 +334,7 @@ static void parse_dives (int log_version, const unsigned char *buf, unsigned int
sample->time.seconds = event.time;
sample->depth.mm = array_uint16_le(ds + (d - 1) * 2) * 10; // cm->mm
sample->temperature.mkelvin = C_to_mkelvin((float) array_uint16_le(ts + (d - 1) * 2) / 10); // dC->mK
- sample->sensor = event.pressure.sensor;
+ sample->sensor[0] = event.pressure.sensor;
sample->pressure[0].mbar = event.pressure.mbar;
finish_sample(dc);
@@ -352,7 +352,7 @@ static void parse_dives (int log_version, const unsigned char *buf, unsigned int
sample->time.seconds = sample_time;
sample->depth.mm = depth_mm;
sample->temperature.mkelvin = temp_mk;
- sample->sensor = event.pressure.sensor;
+ sample->sensor[0] = event.pressure.sensor;
sample->pressure[0].mbar = event.pressure.mbar;
finish_sample(dc);
d++;
@@ -360,7 +360,7 @@ static void parse_dives (int log_version, const unsigned char *buf, unsigned int
break;
} else { // Event is prior to sample
sample->time.seconds = event.time;
- sample->sensor = event.pressure.sensor;
+ sample->sensor[0] = event.pressure.sensor;
sample->pressure[0].mbar = event.pressure.mbar;
if (last_time == sample_time) {
sample->depth.mm = depth_mm;
diff --git a/core/load-git.c b/core/load-git.c
index 4357e8f31..87f6ecb25 100644
--- a/core/load-git.c
+++ b/core/load-git.c
@@ -485,7 +485,7 @@ static void parse_sample_keyvalue(void *_sample, const char *key, const char *va
struct sample *sample = _sample;
if (!strcmp(key, "sensor")) {
- sample->sensor = atoi(value);
+ sample->sensor[0] = atoi(value);
return;
}
if (!strcmp(key, "ndl")) {
@@ -540,6 +540,11 @@ static void parse_sample_keyvalue(void *_sample, const char *key, const char *va
}
if (!strcmp(key, "o2pressure")) {
pressure_t p = get_pressure(value);
+ //
+ // FIXME!!! What's the O2 cylinder index?
+ // get_cylinder_idx_by_use(dive, OXYGEN)
+ //
+ sample->sensor[1] = 1;
sample->pressure[1].mbar = p.mbar;
return;
}
diff --git a/core/parse-xml.c b/core/parse-xml.c
index dd3e1cc0b..fdb2dab44 100644
--- a/core/parse-xml.c
+++ b/core/parse-xml.c
@@ -151,7 +151,7 @@ static bool in_userid = false;
static struct tm cur_tm;
static int cur_cylinder_index, cur_ws_index;
static int lastndl, laststoptime, laststopdepth, lastcns, lastpo2, lastindeco;
-static int lastcylinderindex, lastsensor, next_o2_sensor;
+static int lastcylinderindex, lastsensor, lasto2sensor = 1, next_o2_sensor;
static struct extra_data cur_extra_data;
/*
@@ -352,8 +352,12 @@ static void pressure(char *buffer, pressure_t *pressure)
static void cylinder_use(char *buffer, enum cylinderuse *cyl_use)
{
- if (trimspace(buffer))
- *cyl_use = cylinderuse_from_text(buffer);
+ if (trimspace(buffer)) {
+ int use = cylinderuse_from_text(buffer);
+ *cyl_use = use;
+ if (use == OXYGEN)
+ lasto2sensor = cur_cylinder_index;
+ }
}
static void salinity(char *buffer, int *salinity)
@@ -935,9 +939,9 @@ static void try_to_fill_sample(struct sample *sample, const char *name, char *bu
return;
if (MATCH("o2pressure.sample", pressure, &sample->pressure[1]))
return;
- if (MATCH("cylinderindex.sample", get_cylinderindex, &sample->sensor))
+ if (MATCH("cylinderindex.sample", get_cylinderindex, &sample->sensor[0]))
return;
- if (MATCH("sensor.sample", get_sensor, &sample->sensor))
+ if (MATCH("sensor.sample", get_sensor, &sample->sensor[0]))
return;
if (MATCH("depth.sample", depth, &sample->depth))
return;
@@ -1524,6 +1528,7 @@ static void reset_dc_info(struct divecomputer *dc)
(void) dc;
lastcns = lastpo2 = lastndl = laststoptime = laststopdepth = lastindeco = 0;
lastsensor = lastcylinderindex = 0;
+ lasto2sensor = 1;
}
static void reset_dc_settings(void)
@@ -1718,7 +1723,8 @@ static void sample_start(void)
cur_sample->stopdepth.mm = laststopdepth;
cur_sample->cns = lastcns;
cur_sample->setpoint.mbar = lastpo2;
- cur_sample->sensor = lastsensor;
+ cur_sample->sensor[0] = lastsensor;
+ cur_sample->sensor[1] = lasto2sensor;
next_o2_sensor = 0;
}
diff --git a/core/profile.c b/core/profile.c
index 0d3646ece..1b5c36621 100644
--- a/core/profile.c
+++ b/core/profile.c
@@ -47,7 +47,7 @@ static void dump_pi(struct plot_info *pi)
struct plot_data *entry = &pi->entry[i];
printf(" entry[%d]:{cylinderindex:%d sec:%d pressure:{%d,%d}\n"
" time:%d:%02d temperature:%d depth:%d stopdepth:%d stoptime:%d ndl:%d smoothed:%d po2:%lf phe:%lf pn2:%lf sum-pp %lf}\n",
- i, entry->cylinderindex, entry->sec,
+ i, entry->sensor[0], entry->sec,
entry->pressure[0], entry->pressure[1],
entry->sec / 60, entry->sec % 60,
entry->temperature, entry->depth, entry->stopdepth, entry->stoptime, entry->ndl, entry->smoothed,
@@ -170,19 +170,19 @@ static int get_local_sac(struct plot_data *entry1, struct plot_data *entry2, str
/* Get local sac-rate (in ml/min) between entry1 and entry2 */
static int get_local_sac(struct plot_data *entry1, struct plot_data *entry2, struct dive *dive)
{
- int index = entry1->cylinderindex;
+ int index = entry1->sensor[0];
cylinder_t *cyl;
int duration = entry2->sec - entry1->sec;
int depth, airuse;
pressure_t a, b;
double atm;
- if (entry2->cylinderindex != index)
+ if (entry2->sensor[0] != index)
return 0;
if (duration <= 0)
return 0;
- a.mbar = GET_PRESSURE(entry1);
- b.mbar = GET_PRESSURE(entry2);
+ a.mbar = GET_PRESSURE(entry1, 0);
+ b.mbar = GET_PRESSURE(entry2, 0);
if (!b.mbar || a.mbar <= b.mbar)
return 0;
@@ -368,8 +368,8 @@ static int set_cylinder_index(struct plot_info *pi, int i, int cylinderindex, in
struct plot_data *entry = pi->entry + i;
if (entry->sec > end)
break;
- if (entry->cylinderindex != cylinderindex) {
- entry->cylinderindex = cylinderindex;
+ if (entry->sensor[0] != cylinderindex) {
+ entry->sensor[0] = cylinderindex;
entry->pressure[0][0] = 0;
}
i++;
@@ -396,7 +396,7 @@ static int set_first_cylinder_index(struct plot_info *pi, int i, int cylinderind
struct plot_data *entry = pi->entry + i;
if (entry->sec > end)
break;
- entry->cylinderindex = cylinderindex;
+ entry->sensor[0] = cylinderindex;
i++;
}
return i;
@@ -545,7 +545,7 @@ struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer
entry->sec = _time; \
entry->depth = _depth; \
entry->running_sum = (entry - 1)->running_sum + (_time - (entry - 1)->sec) * (_depth + (entry - 1)->depth) / 2; \
- SENSOR_PRESSURE(entry) = 0; \
+ SENSOR_PRESSURE(entry, 0) = 0; \
entry->sac = _sac; \
entry++; \
idx++
@@ -640,9 +640,10 @@ struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *
entry->pressures.o2 = sample->setpoint.mbar / 1000.0;
}
/* FIXME! sensor index -> cylinder index translation! */
- // entry->cylinderindex = sample->sensor;
- SENSOR_PRESSURE(entry) = sample->pressure[0].mbar;
- O2CYLINDER_PRESSURE(entry) = sample->pressure[1].mbar;
+ entry->sensor[0] = sample->sensor[0];
+ entry->sensor[1] = sample->sensor[1];
+ SENSOR_PRESSURE(entry, 0) = sample->pressure[0].mbar;
+ SENSOR_PRESSURE(entry, 1) = sample->pressure[1].mbar;
if (sample->temperature.mkelvin)
entry->temperature = lasttemp = sample->temperature.mkelvin;
else
@@ -685,40 +686,34 @@ struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *
#undef INSERT_ENTRY
-static void populate_cylinder_pressure_data(int idx, int start, int end, struct plot_info *pi, bool o2flag)
+static void populate_cylinder_pressure_data(int idx, int start, int end, struct plot_info *pi, int sensoridx)
{
int i;
/* First: check that none of the entries has sensor pressure for this cylinder index */
for (i = 0; i < pi->nr; i++) {
struct plot_data *entry = pi->entry + i;
- if (entry->cylinderindex != idx && !o2flag)
+ if (entry->sensor[sensoridx] != idx)
continue;
- if (CYLINDER_PRESSURE(o2flag, entry))
+ if (SENSOR_PRESSURE(entry, sensoridx))
return;
}
/* Then: populate the first entry with the beginning cylinder pressure */
for (i = 0; i < pi->nr; i++) {
struct plot_data *entry = pi->entry + i;
- if (entry->cylinderindex != idx && !o2flag)
+ if (entry->sensor[sensoridx] != idx)
continue;
- if (o2flag)
- O2CYLINDER_PRESSURE(entry) = start;
- else
- SENSOR_PRESSURE(entry) = start;
+ SENSOR_PRESSURE(entry, sensoridx) = start;
break;
}
/* .. and the last entry with the ending cylinder pressure */
for (i = pi->nr; --i >= 0; /* nothing */) {
struct plot_data *entry = pi->entry + i;
- if (entry->cylinderindex != idx && !o2flag)
+ if (entry->sensor[sensoridx] != idx)
continue;
- if (o2flag)
- O2CYLINDER_PRESSURE(entry) = end;
- else
- SENSOR_PRESSURE(entry) = end;
+ SENSOR_PRESSURE(entry, sensoridx) = end;
break;
}
}
@@ -740,9 +735,9 @@ static int sac_between(struct dive *dive, struct plot_data *first, struct plot_d
return 0;
/* Calculate air use - trivial */
- a.mbar = GET_PRESSURE(first);
- b.mbar = GET_PRESSURE(last);
- cyl = dive->cylinder + first->cylinderindex;
+ a.mbar = GET_PRESSURE(first, 0);
+ b.mbar = GET_PRESSURE(last, 0);
+ cyl = dive->cylinder + first->sensor[0];
airuse = gas_volume(cyl, a) - gas_volume(cyl, b);
if (airuse <= 0)
return 0;
@@ -777,7 +772,7 @@ static void fill_sac(struct dive *dive, struct plot_info *pi, int idx)
if (entry->sac)
return;
- if (!GET_PRESSURE(entry))
+ if (!GET_PRESSURE(entry, 0))
return;
/*
@@ -788,13 +783,13 @@ static void fill_sac(struct dive *dive, struct plot_info *pi, int idx)
time = entry->sec - 30;
while (idx > 0) {
struct plot_data *prev = first-1;
- if (prev->cylinderindex != first->cylinderindex)
+ if (prev->sensor[0] != first->sensor[0])
break;
if (prev->depth < SURFACE_THRESHOLD && first->depth < SURFACE_THRESHOLD)
break;
if (prev->sec < time)
break;
- if (!GET_PRESSURE(prev))
+ if (!GET_PRESSURE(prev, 0))
break;
idx--;
first = prev;
@@ -805,13 +800,13 @@ static void fill_sac(struct dive *dive, struct plot_info *pi, int idx)
time = first->sec + 60;
while (++idx < pi->nr) {
struct plot_data *next = last+1;
- if (next->cylinderindex != last->cylinderindex)
+ if (next->sensor[0] != last->sensor[0])
break;
if (next->depth < SURFACE_THRESHOLD && last->depth < SURFACE_THRESHOLD)
break;
if (next->sec > time)
break;
- if (!GET_PRESSURE(next))
+ if (!GET_PRESSURE(next, 0))
break;
last = next;
}
@@ -882,7 +877,7 @@ static void calculate_ndl_tts(struct plot_data *entry, struct dive *dive, double
surface_pressure, dive, 1), deco_stepsize);
int ascent_depth = entry->depth;
/* at what time should we give up and say that we got enuff NDL? */
- int cylinderindex = entry->cylinderindex;
+ int cylinderindex = entry->sensor[0];
/* If iterating through a dive, entry->tts_calc needs to be reset */
entry->tts_calc = 0;
@@ -976,7 +971,7 @@ void calculate_deco_information(struct dive *dive, struct divecomputer *dc, stru
for (j = t0 + time_stepsize; j <= t1; j += time_stepsize) {
int depth = interpolate(entry[-1].depth, entry[0].depth, j - t0, t1 - t0);
add_segment(depth_to_bar(depth, dive),
- &dive->cylinder[entry->cylinderindex].gasmix, time_stepsize, entry->o2pressure.mbar, dive, entry->sac);
+ &dive->cylinder[entry->sensor[0]].gasmix, time_stepsize, entry->o2pressure.mbar, dive, entry->sac);
if ((t1 - j < time_stepsize) && (j < t1))
time_stepsize = t1 - j;
}
@@ -1130,7 +1125,7 @@ static void calculate_gas_information_new(struct dive *dive, struct plot_info *p
for (i = 1; i < pi->nr; i++) {
int fn2, fhe;
struct plot_data *entry = pi->entry + i;
- int cylinderindex = entry->cylinderindex;
+ int cylinderindex = entry->sensor[0];
amb_pressure = depth_to_bar(entry->depth, dive);
@@ -1299,8 +1294,8 @@ static void plot_string(struct plot_info *pi, struct plot_data *entry, struct me
depthvalue = get_depth_units(entry->depth, NULL, &depth_unit);
put_format(b, translate("gettextFromC", "@: %d:%02d\nD: %.1f%s\n"), FRACTION(entry->sec, 60), depthvalue, depth_unit);
- if (GET_PRESSURE(entry)) {
- pressurevalue = get_pressure_units(GET_PRESSURE(entry), &pressure_unit);
+ if (GET_PRESSURE(entry, 0)) {
+ pressurevalue = get_pressure_units(GET_PRESSURE(entry, 0), &pressure_unit);
put_format(b, translate("gettextFromC", "P: %d%s\n"), pressurevalue, pressure_unit);
}
if (entry->temperature) {
@@ -1481,8 +1476,8 @@ void compare_samples(struct plot_data *e1, struct plot_data *e2, char *buf, int
bar_used = 0;
last_sec = start->sec;
- last_pressure = GET_PRESSURE(start);
- last_cylidx = start->cylinderindex;
+ last_pressure = GET_PRESSURE(start, 0);
+ last_cylidx = start->sensor[0];
data = start;
while (data != stop) {
@@ -1503,16 +1498,16 @@ void compare_samples(struct plot_data *e1, struct plot_data *e2, char *buf, int
if (data->depth > max_depth)
max_depth = data->depth;
/* Try to detect gas changes - this hack might work for some side mount scenarios? */
- if (GET_PRESSURE(data) < last_pressure + 2000)
- bar_used += last_pressure - GET_PRESSURE(data);
+ if (GET_PRESSURE(data, 0) < last_pressure + 2000)
+ bar_used += last_pressure - GET_PRESSURE(data, 0);
- if (data->cylinderindex != last_cylidx)
+ if (data->sensor[0] != last_cylidx)
/* if we change tanks, don't try to do SAC rate later */
crossed_tankchange = true;
count += 1;
last_sec = data->sec;
- last_pressure = GET_PRESSURE(data);
+ last_pressure = GET_PRESSURE(data, 0);
}
avg_depth /= stop->sec - start->sec;
avg_speed /= stop->sec - start->sec;
@@ -1553,7 +1548,7 @@ void compare_samples(struct plot_data *e1, struct plot_data *e2, char *buf, int
pressurevalue = get_pressure_units(bar_used, &pressure_unit);
memcpy(buf2, buf, bufsize);
snprintf(buf, bufsize, translate("gettextFromC", "%s %sP:%d %s"), buf2, UTF8_DELTA, pressurevalue, pressure_unit);
- cylinder_t *cyl = displayed_dive.cylinder + start->cylinderindex;
+ cylinder_t *cyl = displayed_dive.cylinder + start->sensor[0];
/* if we didn't cross a tank change and know the cylidner size as well, show SAC rate */
if (!crossed_tankchange && cyl->type.size.mliter) {
double volume_value;
@@ -1561,13 +1556,13 @@ void compare_samples(struct plot_data *e1, struct plot_data *e2, char *buf, int
const char *volume_unit;
struct plot_data *first = start;
struct plot_data *last = stop;
- while (first < stop && GET_PRESSURE(first) == 0)
+ while (first < stop && GET_PRESSURE(first, 0) == 0)
first++;
- while (last > first && GET_PRESSURE(last) == 0)
+ while (last > first && GET_PRESSURE(last, 0) == 0)
last--;
- pressure_t first_pressure = { GET_PRESSURE(first) };
- pressure_t stop_pressure = { GET_PRESSURE(last) };
+ pressure_t first_pressure = { GET_PRESSURE(first, 0) };
+ pressure_t stop_pressure = { GET_PRESSURE(last, 0) };
int volume_used = gas_volume(cyl, first_pressure) - gas_volume(cyl, stop_pressure);
/* Mean pressure in ATM */
diff --git a/core/profile.h b/core/profile.h
index 42af6a845..988736f30 100644
--- a/core/profile.h
+++ b/core/profile.h
@@ -21,7 +21,7 @@ struct divecomputer;
struct plot_info;
struct plot_data {
unsigned int in_deco : 1;
- int cylinderindex;
+ char sensor[2];
int sec;
/* pressure[0] is main sensor pressure (diluent for CCR)
* pressure[1] is secondary sensor pressure (O2 for CCR)
@@ -98,13 +98,9 @@ int get_maxdepth(struct plot_info *pi);
#define SENSOR_PR 0
#define INTERPOLATED_PR 1
-#define SENSOR_PRESSURE(_entry) (_entry)->pressure[0][SENSOR_PR]
-#define O2CYLINDER_PRESSURE(_entry) (_entry)->pressure[1][SENSOR_PR]
-#define CYLINDER_PRESSURE(_o2, _entry) (_o2 ? O2CYLINDER_PRESSURE(_entry) : SENSOR_PRESSURE(_entry))
-#define INTERPOLATED_PRESSURE(_entry) (_entry)->pressure[0][INTERPOLATED_PR]
-#define INTERPOLATED_O2CYLINDER_PRESSURE(_entry) (_entry)->pressure[1][INTERPOLATED_PR]
-#define GET_PRESSURE(_entry) (SENSOR_PRESSURE(_entry) ? SENSOR_PRESSURE(_entry) : INTERPOLATED_PRESSURE(_entry))
-#define GET_O2CYLINDER_PRESSURE(_entry) (O2CYLINDER_PRESSURE(_entry) ? O2CYLINDER_PRESSURE(_entry) : INTERPOLATED_O2CYLINDER_PRESSURE(_entry))
+#define SENSOR_PRESSURE(_entry,_idx) (_entry)->pressure[_idx][SENSOR_PR]
+#define INTERPOLATED_PRESSURE(_entry,_idx) (_entry)->pressure[_idx][INTERPOLATED_PR]
+#define GET_PRESSURE(_entry,_idx) (SENSOR_PRESSURE(_entry,_idx) ? SENSOR_PRESSURE(_entry,_idx) : INTERPOLATED_PRESSURE(_entry,_idx))
#define SAC_WINDOW 45 /* sliding window in seconds for current SAC calculation */
#ifdef __cplusplus
diff --git a/core/save-git.c b/core/save-git.c
index 30e776e2f..9979aaf00 100644
--- a/core/save-git.c
+++ b/core/save-git.c
@@ -253,9 +253,9 @@ static void save_sample(struct membuffer *b, struct sample *sample, struct sampl
* We only show sensor information for samples with pressure, and only if it
* changed from the previous sensor we showed.
*/
- if (sample->pressure[0].mbar && sample->sensor != old->sensor) {
- put_format(b, " sensor=%d", sample->sensor);
- old->sensor = sample->sensor;
+ if (sample->pressure[0].mbar && sample->sensor[0] != old->sensor[0]) {
+ put_format(b, " sensor=%d", sample->sensor[0]);
+ old->sensor[0] = sample->sensor[0];
}
/* the deco/ndl values are stored whenever they change */
diff --git a/core/save-xml.c b/core/save-xml.c
index f0583fb6b..151ebf0a3 100644
--- a/core/save-xml.c
+++ b/core/save-xml.c
@@ -207,9 +207,9 @@ static void save_sample(struct membuffer *b, struct sample *sample, struct sampl
* We only show sensor information for samples with pressure, and only if it
* changed from the previous sensor we showed.
*/
- if (sample->pressure[0].mbar && sample->sensor != old->sensor) {
- put_format(b, " sensor='%d'", sample->sensor);
- old->sensor = sample->sensor;
+ if (sample->pressure[0].mbar && sample->sensor[0] != old->sensor[0]) {
+ put_format(b, " sensor='%d'", sample->sensor[0]);
+ old->sensor[0] = sample->sensor[0];
}
/* the deco/ndl values are stored whenever they change */
diff --git a/core/statistics.c b/core/statistics.c
index 18f247cb8..d86fe6324 100644
--- a/core/statistics.c
+++ b/core/statistics.c
@@ -305,7 +305,8 @@ void get_selected_dives_text(char *buffer, size_t size)
#define SOME_GAS 5000 // 5bar drop in cylinder pressure makes cylinder used
-bool has_gaschange_event(struct dive *dive, struct divecomputer *dc, int idx) {
+bool has_gaschange_event(struct dive *dive, struct divecomputer *dc, int idx)
+{
bool first_gas_explicit = false;
struct event *event = get_next_event(dc->events, "gaschange");
while (event) {
@@ -316,8 +317,12 @@ bool has_gaschange_event(struct dive *dive, struct divecomputer *dc, int idx) {
return true;
event = get_next_event(event->next, "gaschange");
}
- if (dc->divemode == CCR && (idx == dive->diluent_cylinder_index || idx == dive->oxygen_cylinder_index))
- return true;
+ if (dc->divemode == CCR) {
+ if (idx == get_cylinder_idx_by_use(dive, DILUENT))
+ return true;
+ if (idx == get_cylinder_idx_by_use(dive, OXYGEN))
+ return true;
+ }
return !first_gas_explicit && idx == 0;
}
diff --git a/core/uemis.c b/core/uemis.c
index 92b7cdfe9..eeb8a79c4 100644
--- a/core/uemis.c
+++ b/core/uemis.c
@@ -359,7 +359,7 @@ void uemis_parse_divelog_binary(char *base64, void *datap)
sample->time.seconds = u_sample->dive_time;
sample->depth.mm = rel_mbar_to_depth(u_sample->water_pressure, dive);
sample->temperature.mkelvin = C_to_mkelvin(u_sample->dive_temperature / 10.0);
- sample->sensor = active;
+ sample->sensor[0] = active;
sample->pressure[0].mbar =
(u_sample->tank_pressure_high * 256 + u_sample->tank_pressure_low) * 10;
sample->cns = u_sample->cns;
diff --git a/profile-widget/diveprofileitem.cpp b/profile-widget/diveprofileitem.cpp
index ee03e9e6e..096acd898 100644
--- a/profile-widget/diveprofileitem.cpp
+++ b/profile-widget/diveprofileitem.cpp
@@ -693,13 +693,13 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QMo
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
o2mbar = 0;
plot_data *entry = dataModel->data().entry + i;
- int mbar = GET_PRESSURE(entry);
+ int mbar = GET_PRESSURE(entry, 0);
if (displayed_dive.dc.divemode == CCR)
- o2mbar = GET_O2CYLINDER_PRESSURE(entry);
+ o2mbar = GET_PRESSURE(entry, 1);
- if ((int)entry->cylinderindex != last_index) {
+ if ((int)entry->sensor[0] != last_index) {
polygons.append(QPolygonF()); // this is the polygon that will be actually drawn on screen.
- last_index = entry->cylinderindex;
+ last_index = entry->sensor[0];
}
if (!mbar) {
continue;
@@ -739,15 +739,16 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QMo
double axisLog = log10(log10(axisRange));
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
entry = dataModel->data().entry + i;
- mbar = GET_PRESSURE(entry);
- if (displayed_dive.dc.divemode == CCR && displayed_dive.oxygen_cylinder_index >= 0)
- o2mbar = GET_O2CYLINDER_PRESSURE(entry);
- if (o2mbar) { // If there is an o2mbar value then this is a CCR dive. Then do:
- // The first time an o2 value is detected, see if the oxygen cyl pressure graph starts above or below the dil graph
+ dilcyl = entry->sensor[0];
+ o2cyl = entry->sensor[1];
+ mbar = GET_PRESSURE(entry, 0);
+ if (o2cyl >= 0)
+ o2mbar = GET_PRESSURE(entry, 1);
+
+ if (o2mbar) { // Do we have a second cylinder pressure? If so, do
+ // The first time an o2 value is detected, see if the oxygen cyl pressure graph starts above or below the dil graph
if (!offsets_initialised) { // Initialise the parameters for placing the text correctly near the graph line:
- o2cyl = displayed_dive.oxygen_cylinder_index;
- dilcyl = displayed_dive.diluent_cylinder_index;
if ((o2mbar > mbar)) { // If above, write o2 start cyl pressure above graph and diluent pressure below graph:
print_y_offset[o2cyl][0] = -7 * axisLog; // y offset for oxygen gas lable (above); pressure offsets=-0.5, already initialised
print_y_offset[dilcyl][0] = 5 * axisLog; // y offset for diluent gas lable (below)
@@ -760,21 +761,21 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QMo
offsets_initialised = true;
}
- if (!seen_cyl[displayed_dive.oxygen_cylinder_index]) { //For o2, on the left of profile, write lable and pressure
+ if (!seen_cyl[o2cyl]) { //For o2, on the left of profile, write lable and pressure
plotPressureValue(o2mbar, entry->sec, align_o2, print_y_offset[o2cyl][1]);
- plotGasValue(o2mbar, entry->sec, displayed_dive.cylinder[displayed_dive.oxygen_cylinder_index].gasmix, align_o2, print_y_offset[o2cyl][0]);
- seen_cyl[displayed_dive.oxygen_cylinder_index] = true;
+ plotGasValue(o2mbar, entry->sec, displayed_dive.cylinder[o2cyl].gasmix, align_o2, print_y_offset[o2cyl][0]);
+ seen_cyl[o2cyl] = true;
}
- last_pressure[displayed_dive.oxygen_cylinder_index] = o2mbar;
- last_time[displayed_dive.oxygen_cylinder_index] = entry->sec;
+ last_pressure[o2cyl] = o2mbar;
+ last_time[o2cyl] = entry->sec;
alignVar = align_dil;
}
if (!mbar)
continue;
- if (cyl != (int)entry->cylinderindex) { // Pressure value near the left hand edge of the profile - other cylinders:
- cyl = entry->cylinderindex; // For each other cylinder, write the gas lable and pressure
+ if (cyl != dilcyl) { // Pressure value near the left hand edge of the profile - other cylinders:
+ cyl = dilcyl; // For each other cylinder, write the gas lable and pressure
if (!seen_cyl[cyl]) {
plotPressureValue(mbar, entry->sec, alignVar, print_y_offset[cyl][1]);
plotGasValue(mbar, entry->sec, displayed_dive.cylinder[cyl].gasmix, align_dil, print_y_offset[cyl][0]);
@@ -786,7 +787,7 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QMo
}
for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) { // For each cylinder, on right hand side of profile, write cylinder pressure
- alignVar = ((o2cyl >= 0) && (cyl == displayed_dive.oxygen_cylinder_index)) ? align_o2 : align_dil;
+ alignVar = ((o2cyl >= 0) && (cyl == o2cyl)) ? align_o2 : align_dil;
if (last_time[cyl]) {
plotPressureValue(last_pressure[cyl], last_time[cyl], (alignVar | Qt::AlignLeft), print_y_offset[cyl][1]);
}
diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp
index 90bf6dbb2..17f3544f3 100644
--- a/profile-widget/profilewidget2.cpp
+++ b/profile-widget/profilewidget2.cpp
@@ -1407,7 +1407,7 @@ void ProfileWidget2::contextMenuEvent(QContextMenuEvent *event)
action->setText(model->data(model->index(i, 0), Qt::DisplayRole).toString() + QString(tr(" (Tank %1)")).arg(i + 1));
connect(action, SIGNAL(triggered(bool)), this, SLOT(changeGas()));
action->setData(event->globalPos());
- if (i == entry->cylinderindex)
+ if (i == entry->sensor[0])
action->setDisabled(true);
gasChange->addAction(action);
}
@@ -1457,21 +1457,21 @@ void ProfileWidget2::contextMenuEvent(QContextMenuEvent *event)
if (gasChangeEntry + 1 <= plotInfo.entry + plotInfo.nr) {
newGasEntry = gasChangeEntry + 1;
qDebug() << "after gas change at " << newGasEntry->sec << ": sensor pressure" << newGasEntry->pressure[0] << "interpolated" << newGasEntry->pressure[1];
- if (SENSOR_PRESSURE(gasChangeEntry) == 0 || displayed_dive.cylinder[gasChangeEntry->cylinderindex].sample_start.mbar == 0) {
+ if (SENSOR_PRESSURE(gasChangeEntry) == 0 || displayed_dive.cylinder[gasChangeEntry->sensor[0]].sample_start.mbar == 0) {
// if we have no sensorpressure or if we have no pressure from samples we can assume that
// we only have interpolated pressure (the pressure in the entry may be stored in the sensor
// pressure field if this is the first or last entry for this tank... see details in gaspressures.c
pressure_t pressure;
pressure.mbar = INTERPOLATED_PRESSURE(gasChangeEntry) ? : SENSOR_PRESSURE(gasChangeEntry);
QAction *adjustOldPressure = m.addAction(tr("Adjust pressure of tank %1 (currently interpolated as %2)")
- .arg(gasChangeEntry->cylinderindex + 1).arg(get_pressure_string(pressure)));
+ .arg(gasChangeEntry->sensor[0] + 1).arg(get_pressure_string(pressure)));
}
- if (SENSOR_PRESSURE(newGasEntry) == 0 || displayed_dive.cylinder[newGasEntry->cylinderindex].sample_start.mbar == 0) {
+ if (SENSOR_PRESSURE(newGasEntry) == 0 || displayed_dive.cylinder[newGasEntry->sensor[0]].sample_start.mbar == 0) {
// we only have interpolated press -- see commend above
pressure_t pressure;
pressure.mbar = INTERPOLATED_PRESSURE(newGasEntry) ? : SENSOR_PRESSURE(newGasEntry);
QAction *adjustOldPressure = m.addAction(tr("Adjust pressure of tank %1 (currently interpolated as %2)")
- .arg(newGasEntry->cylinderindex + 1).arg(get_pressure_string(pressure)));
+ .arg(newGasEntry->sensor[0] + 1).arg(get_pressure_string(pressure)));
}
}
}
diff --git a/profile-widget/tankitem.cpp b/profile-widget/tankitem.cpp
index 307d3d397..89ddffed9 100644
--- a/profile-widget/tankitem.cpp
+++ b/profile-widget/tankitem.cpp
@@ -98,7 +98,7 @@ void TankItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &b
// walk the list and figure out which tanks go where
struct plot_data *entry = pInfoEntry;
struct plot_data *lastentry = pInfoEntry;
- int cylIdx = entry->cylinderindex;
+ int cylIdx = entry->sensor[0];
int i = -1;
int startTime = 0;
struct gasmix *gas = &diveCylinderStore.cylinder[cylIdx].gasmix;
@@ -106,12 +106,12 @@ void TankItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &b
while (++i < pInfoNr) {
entry = &pInfoEntry[i];
lastentry = &pInfoEntry[i-1];
- if (entry->cylinderindex == cylIdx)
+ if (entry->sensor[0] == cylIdx)
continue;
width = hAxis->posAtValue(lastentry->sec) - hAxis->posAtValue(startTime);
left = hAxis->posAtValue(startTime);
createBar(left, width, gas);
- cylIdx = entry->cylinderindex;
+ cylIdx = entry->sensor[0];
gas = &diveCylinderStore.cylinder[cylIdx].gasmix;
startTime = lastentry->sec;
}
diff --git a/qt-models/diveplotdatamodel.cpp b/qt-models/diveplotdatamodel.cpp
index e5bb30ab0..b4e72b2df 100644
--- a/qt-models/diveplotdatamodel.cpp
+++ b/qt-models/diveplotdatamodel.cpp
@@ -40,7 +40,7 @@ QVariant DivePlotDataModel::data(const QModelIndex &index, int role) const
case USERENTERED:
return false;
case CYLINDERINDEX:
- return item.cylinderindex;
+ return item.sensor[0];
case SENSOR_PRESSURE:
return item.pressure[0][0];
case INTERPOLATED_PRESSURE: