mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Fix issues in CCR handling
In commit 0d7c192e6e
("For CCR dives, the diluent cylinder is the
current cylinder") a few things got broken. This tries to undo those
changes and adds expanded XML output.
1) Calculate correct partial pressure of oxygen to be plotted on
dive profile, taking into account the oxygen sensor data.
Currently, erroneously, OC PO2 values are shown, due to an
erroneous calling parameter to fill_pressures().
2) Read start and end cylinder pressured correctly. some wrong
assignments were done in file.c. This is now corrected and the correct
cylinder pressures are shown in the equipment tab.
3) Write correct cylinder pressures to XML. Currently the data for
the two cylinders are written to XML the wrong way round
(diluent pressures = oxygen and vice versa).
4) Expand XML output:
a) Write oxygen sensor data to XML
b) Write no_of_02sensors to XML
Signed-off-by: willem ferguson <willemferguson@zoology.up.ac.za>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
55763d3da1
commit
514a0e582a
3 changed files with 22 additions and 5 deletions
4
file.c
4
file.c
|
@ -597,7 +597,7 @@ int parse_txt_file(const char *filename, const char *csv)
|
|||
case 13:
|
||||
add_sample_data(sample, POSEIDON_O2CYLINDER, value);
|
||||
if (!o2cylinder_pressure) {
|
||||
dive->cylinder[1].sample_start.mbar = value * 1000;
|
||||
dive->cylinder[0].sample_start.mbar = value * 1000;
|
||||
o2cylinder_pressure = value;
|
||||
} else
|
||||
o2cylinder_pressure = value;
|
||||
|
@ -605,7 +605,7 @@ int parse_txt_file(const char *filename, const char *csv)
|
|||
case 14:
|
||||
add_sample_data(sample, POSEIDON_PRESSURE, value);
|
||||
if (!cylinder_pressure) {
|
||||
dive->cylinder[0].sample_start.mbar = value * 1000;
|
||||
dive->cylinder[1].sample_start.mbar = value * 1000;
|
||||
cylinder_pressure = value;
|
||||
} else
|
||||
cylinder_pressure = value;
|
||||
|
|
|
@ -905,7 +905,7 @@ static void calculate_gas_information_new(struct dive *dive, struct plot_info *p
|
|||
|
||||
amb_pressure = depth_to_mbar(entry->depth, dive) / 1000.0;
|
||||
|
||||
fill_pressures(&entry->pressures, amb_pressure, &dive->cylinder[cylinderindex].gasmix, entry->pressures.o2, dive->dc.dctype, entry->sac);
|
||||
fill_pressures(&entry->pressures, amb_pressure, &dive->cylinder[cylinderindex].gasmix, entry->o2pressure, dive->dc.dctype, entry->sac);
|
||||
fn2 = (int) (1000.0 * entry->pressures.n2 / amb_pressure);
|
||||
fhe = (int) (1000.0 * entry->pressures.he / amb_pressure);
|
||||
|
||||
|
|
21
save-xml.c
21
save-xml.c
|
@ -214,8 +214,8 @@ static void save_sample(struct membuffer *b, struct sample *sample, struct sampl
|
|||
put_format(b, " <sample time='%u:%02u min'", FRACTION(sample->time.seconds, 60));
|
||||
put_milli(b, " depth='", sample->depth.mm, " m'");
|
||||
put_temperature(b, sample->temperature, " temp='", " C'");
|
||||
put_pressure(b, sample->cylinderpressure, " pressure='", " bar'");
|
||||
put_pressure(b, sample->o2cylinderpressure, " pdiluent='", " bar'");
|
||||
put_pressure(b, sample->cylinderpressure, " pdiluent='", " bar'");
|
||||
put_pressure(b, sample->o2cylinderpressure, " pressure='", " bar'");
|
||||
|
||||
/*
|
||||
* We only show sensor information for samples with pressure, and only if it
|
||||
|
@ -254,6 +254,21 @@ static void save_sample(struct membuffer *b, struct sample *sample, struct sampl
|
|||
old->cns = sample->cns;
|
||||
}
|
||||
|
||||
if ((sample->o2sensor[0].mbar) && (sample->o2sensor[0].mbar != old->o2sensor[0].mbar)) {
|
||||
put_milli(b, " sensor1='", sample->o2sensor[0].mbar, " bar'");
|
||||
old->o2sensor[0] = sample->o2sensor[0];
|
||||
}
|
||||
|
||||
if ((sample->o2sensor[1].mbar) && (sample->o2sensor[1].mbar != old->o2sensor[1].mbar)) {
|
||||
put_milli(b, " sensor2='", sample->o2sensor[1].mbar, " bar'");
|
||||
old->o2sensor[1] = sample->o2sensor[1];
|
||||
}
|
||||
|
||||
if ((sample->o2sensor[2].mbar) && (sample->o2sensor[2].mbar != old->o2sensor[2].mbar)) {
|
||||
put_milli(b, " sensor3='", sample->o2sensor[2].mbar, " bar'");
|
||||
old->o2sensor[2] = sample->o2sensor[2];
|
||||
}
|
||||
|
||||
if (sample->setpoint.mbar != old->setpoint.mbar) {
|
||||
put_milli(b, " po2='", sample->setpoint.mbar, " bar'");
|
||||
old->setpoint = sample->setpoint;
|
||||
|
@ -355,6 +370,8 @@ static void save_dc(struct membuffer *b, struct dive *dive, struct divecomputer
|
|||
for (enum dive_comp_type i = 0; i < NUM_DC_TYPE; i++)
|
||||
if (dc->dctype == i)
|
||||
show_utf8(b, dctype_text[i], " dctype='", "'", 1);
|
||||
if (dc->no_o2sensors)
|
||||
put_format(b," no_o2sensors='%d'", dc->no_o2sensors);
|
||||
}
|
||||
put_format(b, ">\n");
|
||||
save_depths(b, dc);
|
||||
|
|
Loading…
Add table
Reference in a new issue