mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Core: pass dive, cylinder-id to fill_default_cylinder
The fill_default_cylinder() function calculated the MOD based on the currently displayed dive. This does not seem to make sense: - When importing dives, why would we care about the altitude and salinity of the currently displayed dive, possibly from a different trip. - The planner is supposed to be thread-safe and should not touch global variables. Of course this means that the importing-functions have to fill out altitude and salinity before creating the default cylinder, but this is their problem. For a freshly created dive they will get the default values, which still seems less random than the values from the displayed dive. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
6ce4aeb04e
commit
00944f7a02
7 changed files with 11 additions and 10 deletions
|
@ -677,7 +677,7 @@ static void cochran_parse_dive(const unsigned char *decode, unsigned mod,
|
|||
if (config.type == TYPE_GEMINI) {
|
||||
dc->model = "Gemini";
|
||||
dc->deviceid = buf[0x18c] * 256 + buf[0x18d]; // serial no
|
||||
fill_default_cylinder(&dive->cylinder[0]);
|
||||
fill_default_cylinder(dive, 0);
|
||||
dive->cylinder[0].gasmix.o2.permille = (log[CMD_O2_PERCENT] / 256
|
||||
+ log[CMD_O2_PERCENT + 1]) * 10;
|
||||
dive->cylinder[0].gasmix.he.permille = 0;
|
||||
|
@ -685,7 +685,7 @@ static void cochran_parse_dive(const unsigned char *decode, unsigned mod,
|
|||
dc->model = "Commander";
|
||||
dc->deviceid = array_uint32_le(buf + 0x31e); // serial no
|
||||
for (g = 0; g < 2; g++) {
|
||||
fill_default_cylinder(&dive->cylinder[g]);
|
||||
fill_default_cylinder(dive, g);
|
||||
dive->cylinder[g].gasmix.o2.permille = (log[CMD_O2_PERCENT + g * 2] / 256
|
||||
+ log[CMD_O2_PERCENT + g * 2 + 1]) * 10;
|
||||
dive->cylinder[g].gasmix.he.permille = 0;
|
||||
|
@ -727,7 +727,7 @@ static void cochran_parse_dive(const unsigned char *decode, unsigned mod,
|
|||
dc->model = "EMC";
|
||||
dc->deviceid = array_uint32_le(buf + 0x31e); // serial no
|
||||
for (g = 0; g < 4; g++) {
|
||||
fill_default_cylinder(&dive->cylinder[g]);
|
||||
fill_default_cylinder(dive , g);
|
||||
dive->cylinder[g].gasmix.o2.permille =
|
||||
(log[EMC_O2_PERCENT + g * 2] / 256
|
||||
+ log[EMC_O2_PERCENT + g * 2 + 1]) * 10;
|
||||
|
|
|
@ -362,7 +362,7 @@ extern void copy_cylinders(const struct dive *s, struct dive *d, bool used_only)
|
|||
extern void copy_samples(const struct divecomputer *s, struct divecomputer *d);
|
||||
extern bool is_cylinder_used(const struct dive *dive, int idx);
|
||||
extern bool is_cylinder_prot(const struct dive *dive, int idx);
|
||||
extern void fill_default_cylinder(cylinder_t *cyl);
|
||||
extern void fill_default_cylinder(struct dive *dive, int idx);
|
||||
extern void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, int time, int idx);
|
||||
extern struct event *add_event(struct divecomputer *dc, unsigned int time, int type, int flags, int value, const char *name);
|
||||
extern void remove_event(struct event *event);
|
||||
|
|
|
@ -224,7 +224,7 @@ static int parse_gasmixes(device_data_t *devdata, struct dive *dive, dc_parser_t
|
|||
if (no_volume) {
|
||||
/* for the first tank, if there is no tanksize available from the
|
||||
* dive computer, fill in the default tank information (if set) */
|
||||
fill_default_cylinder(&dive->cylinder[i]);
|
||||
fill_default_cylinder(dive, i);
|
||||
}
|
||||
/* whatever happens, make sure there is a name for the cylinder */
|
||||
if (empty_string(dive->cylinder[i].type.description))
|
||||
|
|
|
@ -149,7 +149,7 @@ static void parse_dives(int log_version, const unsigned char *buf, unsigned int
|
|||
|
||||
/* Just the main cylinder until we can handle the buddy cylinder porperly */
|
||||
for (i = 0; i < 1; i++)
|
||||
fill_default_cylinder(&dive->cylinder[i]);
|
||||
fill_default_cylinder(dive, i);
|
||||
|
||||
// Model 0=Xen, 1,2=Xeo, 4=Lynx, other=Liquivision
|
||||
model = *(buf + ptr);
|
||||
|
|
|
@ -178,9 +178,10 @@ static int tissue_at_end(struct deco_state *ds, struct dive *dive, struct deco_s
|
|||
|
||||
|
||||
/* if a default cylinder is set, use that */
|
||||
void fill_default_cylinder(cylinder_t *cyl)
|
||||
void fill_default_cylinder(struct dive *dive, int idx)
|
||||
{
|
||||
const char *cyl_name = prefs.default_cylinder;
|
||||
cylinder_t *cyl = &dive->cylinder[idx];
|
||||
struct tank_info_t *ti = tank_info;
|
||||
pressure_t pO2 = {.mbar = 1600};
|
||||
|
||||
|
@ -204,7 +205,7 @@ void fill_default_cylinder(cylinder_t *cyl)
|
|||
cyl->type.size.mliter = lrint(cuft_to_l(ti->cuft) * 1000 / bar_to_atm(psi_to_bar(ti->psi)));
|
||||
}
|
||||
// MOD of air
|
||||
cyl->depth = gas_mod(cyl->gasmix, pO2, &displayed_dive, 1);
|
||||
cyl->depth = gas_mod(cyl->gasmix, pO2, dive, 1);
|
||||
}
|
||||
|
||||
/* calculate the new end pressure of the cylinder, based on its current end pressure and the
|
||||
|
|
|
@ -426,7 +426,7 @@ void CylindersModel::add()
|
|||
}
|
||||
|
||||
int row = rows;
|
||||
fill_default_cylinder(&displayed_dive.cylinder[row]);
|
||||
fill_default_cylinder(&displayed_dive, row);
|
||||
displayed_dive.cylinder[row].start = displayed_dive.cylinder[row].type.workingpressure;
|
||||
displayed_dive.cylinder[row].manually_added = true;
|
||||
displayed_dive.cylinder[row].cylinder_use = OC_GAS;
|
||||
|
|
|
@ -165,7 +165,7 @@ void DivePlannerPointsModel::setupCylinders()
|
|||
return; // We have at least one cylinder
|
||||
}
|
||||
if (!empty_string(prefs.default_cylinder)) {
|
||||
fill_default_cylinder(&displayed_dive.cylinder[0]);
|
||||
fill_default_cylinder(&displayed_dive, 0);
|
||||
displayed_dive.cylinder[0].start = displayed_dive.cylinder[0].type.workingpressure;
|
||||
}
|
||||
if (cylinder_none(&displayed_dive.cylinder[0])) {
|
||||
|
|
Loading…
Reference in a new issue