diff options
Diffstat (limited to 'core/profile.c')
-rw-r--r-- | core/profile.c | 93 |
1 files changed, 44 insertions, 49 deletions
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 */ |