mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
core: pass depth_t to get_depth_units()
Commit is longer than expected, because a few of the callers were converted to use depth_t instead of int. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
50c5d49d93
commit
388bd8f330
21 changed files with 82 additions and 84 deletions
|
@ -180,8 +180,8 @@ void export_TeX(const char *filename, bool selected_only, bool plain, ExportCall
|
|||
dive->mintemp.mkelvin ? put_format(&buf, "\\def\\%smintemp{%.1f\\%stemperatureunit}\n", ssrf, get_temp_units(dive->mintemp.mkelvin, &unit), ssrf) : put_format(&buf, "\\def\\%ssrfmintemp{}\n", ssrf);
|
||||
dive->watertemp.mkelvin ? put_format(&buf, "\\def\\%swatertemp{%.1f\\%stemperatureunit}\n", ssrf, get_temp_units(dive->watertemp.mkelvin, &unit), ssrf) : put_format(&buf, "\\def\\%swatertemp{}\n", ssrf);
|
||||
dive->airtemp.mkelvin ? put_format(&buf, "\\def\\%sairtemp{%.1f\\%stemperatureunit}\n", ssrf, get_temp_units(dive->airtemp.mkelvin, &unit), ssrf) : put_format(&buf, "\\def\\%sairtemp{}\n", ssrf);
|
||||
dive->maxdepth.mm ? put_format(&buf, "\\def\\%smaximumdepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->maxdepth.mm, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%smaximumdepth{}\n", ssrf);
|
||||
dive->meandepth.mm ? put_format(&buf, "\\def\\%smeandepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->meandepth.mm, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%smeandepth{}\n", ssrf);
|
||||
dive->maxdepth.mm ? put_format(&buf, "\\def\\%smaximumdepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->maxdepth, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%smaximumdepth{}\n", ssrf);
|
||||
dive->meandepth.mm ? put_format(&buf, "\\def\\%smeandepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->meandepth, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%smeandepth{}\n", ssrf);
|
||||
|
||||
std::string tags = taglist_get_tagstring(dive->tags);
|
||||
put_format(&buf, "\\def\\%stype{%s}\n", ssrf, tags.c_str());
|
||||
|
@ -242,7 +242,7 @@ void export_TeX(const char *filename, bool selected_only, bool plain, ExportCall
|
|||
put_format(&buf, "\\def\\%sspot{}\n", ssrf);
|
||||
put_format(&buf, "\\def\\%sentrance{}\n", ssrf);
|
||||
put_format(&buf, "\\def\\%splace{%s}\n", ssrf, site ? site->name.c_str() : "");
|
||||
dive->maxdepth.mm ? put_format(&buf, "\\def\\%sdepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->maxdepth.mm, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%sdepth{}\n", ssrf);
|
||||
dive->maxdepth.mm ? put_format(&buf, "\\def\\%sdepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->maxdepth, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%sdepth{}\n", ssrf);
|
||||
|
||||
put_format(&buf, "\\%spage\n", ssrf);
|
||||
}
|
||||
|
@ -280,7 +280,7 @@ void export_depths(const char *filename, bool selected_only)
|
|||
break;
|
||||
depth = s.depth;
|
||||
}
|
||||
put_format(&buf, "%s\t%.1f", picture.filename.c_str(), get_depth_units(depth.mm, NULL, &unit));
|
||||
put_format(&buf, "%s\t%.1f", picture.filename.c_str(), get_depth_units(depth, NULL, &unit));
|
||||
put_format(&buf, "%s\n", unit);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -154,7 +154,7 @@ void PlannerShared::set_decopo2(double value)
|
|||
|
||||
int PlannerShared::bestmixend()
|
||||
{
|
||||
return lrint(get_depth_units(prefs.bestmixend.mm, NULL, NULL));
|
||||
return lrint(get_depth_units(prefs.bestmixend, NULL, NULL));
|
||||
}
|
||||
void PlannerShared::set_bestmixend(int value)
|
||||
{
|
||||
|
|
|
@ -169,7 +169,7 @@ bool ConfigureDiveComputer::saveXMLBackup(const QString &fileName, const DeviceD
|
|||
|
||||
writer.writeStartElement("AlarmDepth");
|
||||
writer.writeAttribute("enabled", QString::number(details.alarmDepthEnabled));
|
||||
writer.writeCharacters(QString::number(details.alarmDepth));
|
||||
writer.writeCharacters(QString::number(details.alarmDepth.mm));
|
||||
writer.writeEndElement();
|
||||
|
||||
writer.writeEndElement();
|
||||
|
@ -474,7 +474,7 @@ bool ConfigureDiveComputer::restoreXMLBackup(const QString &fileName, DeviceDeta
|
|||
if (settingName == "AlarmDepth") {
|
||||
if (attributes.hasAttribute("enabled"))
|
||||
details.alarmDepthEnabled = attributes.value("enabled").toString().toInt();
|
||||
details.alarmDepth = keyString.toInt();
|
||||
details.alarmDepth.mm = keyString.toInt();
|
||||
}
|
||||
|
||||
if (settingName == "AlarmTime") {
|
||||
|
|
|
@ -176,7 +176,7 @@ static dc_status_t read_suunto_vyper_settings(dc_device_t *device, DeviceDetails
|
|||
return rc;
|
||||
// in ft * 128.0
|
||||
int depth = feet_to_mm(data[0] << 8 ^ data[1]) / 128;
|
||||
deviceDetails.maxDepth = depth;
|
||||
deviceDetails.maxDepth.mm = depth;
|
||||
EMIT_PROGRESS();
|
||||
|
||||
rc = dc_device_read(device, SUUNTO_VYPER_TOTAL_TIME, data, 2);
|
||||
|
@ -272,7 +272,7 @@ static dc_status_t read_suunto_vyper_settings(dc_device_t *device, DeviceDetails
|
|||
if (rc != DC_STATUS_SUCCESS)
|
||||
return rc;
|
||||
depth = feet_to_mm(data[0] << 8 ^ data[1]) / 128;
|
||||
deviceDetails.alarmDepth = depth;
|
||||
deviceDetails.alarmDepth.mm = depth;
|
||||
EMIT_PROGRESS();
|
||||
|
||||
return DC_STATUS_SUCCESS;
|
||||
|
@ -354,8 +354,8 @@ static dc_status_t write_suunto_vyper_settings(dc_device_t *device, DeviceDetail
|
|||
return rc;
|
||||
EMIT_PROGRESS();
|
||||
|
||||
data2[0] = (int)(mm_to_feet(deviceDetails.alarmDepth) * 128) >> 8;
|
||||
data2[1] = (int)(mm_to_feet(deviceDetails.alarmDepth) * 128) & 0x0FF;
|
||||
data2[0] = (int)(mm_to_feet(deviceDetails.alarmDepth.mm) * 128) >> 8;
|
||||
data2[1] = (int)(mm_to_feet(deviceDetails.alarmDepth.mm) * 128) & 0x0FF;
|
||||
rc = dc_device_write(device, SUUNTO_VYPER_ALARM_DEPTH, data2, 2);
|
||||
EMIT_PROGRESS();
|
||||
return rc;
|
||||
|
|
|
@ -41,7 +41,6 @@ DeviceDetails::DeviceDetails() :
|
|||
pressureSensorOffset(0),
|
||||
flipScreen(0),
|
||||
safetyStop(0),
|
||||
maxDepth(0),
|
||||
totalTime(0),
|
||||
numberOfDives(0),
|
||||
altitude(0),
|
||||
|
@ -52,7 +51,6 @@ DeviceDetails::DeviceDetails() :
|
|||
alarmTimeEnabled(false),
|
||||
alarmTime(0),
|
||||
alarmDepthEnabled(false),
|
||||
alarmDepth(0),
|
||||
leftButtonSensitivity(0),
|
||||
rightButtonSensitivity(0),
|
||||
buttonSensitivity(0),
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include <QObject>
|
||||
#include <QDateTime>
|
||||
#include "libdivecomputer.h"
|
||||
#include "units.h"
|
||||
|
||||
struct gas {
|
||||
unsigned char oxygen;
|
||||
|
@ -73,7 +74,7 @@ public:
|
|||
int pressureSensorOffset;
|
||||
bool flipScreen;
|
||||
bool safetyStop;
|
||||
int maxDepth;
|
||||
depth_t maxDepth;
|
||||
int totalTime;
|
||||
int numberOfDives;
|
||||
int altitude;
|
||||
|
@ -84,7 +85,7 @@ public:
|
|||
bool alarmTimeEnabled;
|
||||
int alarmTime;
|
||||
bool alarmDepthEnabled;
|
||||
int alarmDepth;
|
||||
depth_t alarmDepth;
|
||||
int leftButtonSensitivity;
|
||||
int rightButtonSensitivity;
|
||||
int buttonSensitivity;
|
||||
|
|
|
@ -456,17 +456,17 @@ static std::vector<depth_t> sort_stops(const std::vector<depth_t> &dstops, size_
|
|||
return stoplevels;
|
||||
}
|
||||
|
||||
int ascent_velocity(depth_t depth, int avg_depth, int)
|
||||
int ascent_velocity(depth_t depth, depth_t avg_depth, int)
|
||||
{
|
||||
/* We need to make this configurable */
|
||||
|
||||
/* As an example (and possibly reasonable default) this is the Tech 1 provedure according
|
||||
* to http://www.globalunderwaterexplorers.org/files/Standards_and_Procedures/SOP_Manual_Ver2.0.2.pdf */
|
||||
|
||||
if (depth.mm * 4 > avg_depth * 3) {
|
||||
if (depth.mm * 4 > avg_depth.mm * 3) {
|
||||
return prefs.ascrate75;
|
||||
} else {
|
||||
if (depth.mm * 2 > avg_depth) {
|
||||
if (depth.mm * 2 > avg_depth.mm) {
|
||||
return prefs.ascrate50;
|
||||
} else {
|
||||
if (depth.mm > 6000)
|
||||
|
@ -477,7 +477,7 @@ int ascent_velocity(depth_t depth, int avg_depth, int)
|
|||
}
|
||||
}
|
||||
|
||||
static void track_ascent_gas(depth_t depth, struct dive *dive, int cylinder_id, int avg_depth, int bottom_time, bool safety_stop, enum divemode_t divemode)
|
||||
static void track_ascent_gas(depth_t depth, struct dive *dive, int cylinder_id, depth_t avg_depth, int bottom_time, bool safety_stop, enum divemode_t divemode)
|
||||
{
|
||||
cylinder_t *cylinder = dive->get_cylinder(cylinder_id);
|
||||
while (depth.mm > 0) {
|
||||
|
@ -494,7 +494,7 @@ static void track_ascent_gas(depth_t depth, struct dive *dive, int cylinder_id,
|
|||
}
|
||||
|
||||
// Determine whether ascending to the next stop will break the ceiling. Return true if the ascent is ok, false if it isn't.
|
||||
static bool trial_ascent(struct deco_state *ds, int wait_time, depth_t trial_depth, depth_t stoplevel, int avg_depth, int bottom_time, struct gasmix gasmix, int po2, double surface_pressure, struct dive *dive, enum divemode_t divemode)
|
||||
static bool trial_ascent(struct deco_state *ds, int wait_time, depth_t trial_depth, depth_t stoplevel, depth_t avg_depth, int bottom_time, struct gasmix gasmix, int po2, double surface_pressure, struct dive *dive, enum divemode_t divemode)
|
||||
{
|
||||
|
||||
bool clear_to_ascend = true;
|
||||
|
@ -562,7 +562,7 @@ static bool enough_gas(const struct dive *dive, int current_cylinder)
|
|||
* leap is a guess for the maximum but there is no guarantee that leap is an upper limit.
|
||||
* So we always test at the upper bundary, not in the middle!
|
||||
*/
|
||||
static int wait_until(struct deco_state *ds, struct dive *dive, int clock, int min, int leap, int stepsize, depth_t depth, depth_t target_depth, int avg_depth, int bottom_time, struct gasmix gasmix, int po2, double surface_pressure, enum divemode_t divemode)
|
||||
static int wait_until(struct deco_state *ds, struct dive *dive, int clock, int min, int leap, int stepsize, depth_t depth, depth_t target_depth, depth_t avg_depth, int bottom_time, struct gasmix gasmix, int po2, double surface_pressure, enum divemode_t divemode)
|
||||
{
|
||||
// When a deco stop exceeds two days, there is something wrong...
|
||||
if (min >= 48 * 3600)
|
||||
|
@ -579,28 +579,26 @@ static int wait_until(struct deco_state *ds, struct dive *dive, int clock, int m
|
|||
return wait_until(ds, dive, clock, min, leap / 2, stepsize, depth, target_depth, avg_depth, bottom_time, gasmix, po2, surface_pressure, divemode);
|
||||
}
|
||||
|
||||
static void average_max_depth(const struct diveplan &dive, int *avg_depth, int *max_depth)
|
||||
// returns an (average_depth, maximum_depth) pair
|
||||
static std::pair<depth_t, depth_t> average_max_depth(const struct diveplan &dive)
|
||||
{
|
||||
int integral = 0;
|
||||
depth_t integral; // Strictly speaking not a depth, but depth × time. Might want to define a custom time for that.
|
||||
depth_t last_depth, max_depth;
|
||||
int last_time = 0;
|
||||
int last_depth = 0;
|
||||
|
||||
*max_depth = 0;
|
||||
|
||||
for (auto &dp: dive.dp) {
|
||||
if (dp.time) {
|
||||
/* Ignore gas indication samples */
|
||||
integral += (dp.depth.mm + last_depth) * (dp.time - last_time) / 2;
|
||||
integral += (dp.depth + last_depth) * (dp.time - last_time) / 2;
|
||||
last_time = dp.time;
|
||||
last_depth = dp.depth.mm;
|
||||
if (dp.depth.mm > *max_depth)
|
||||
*max_depth = dp.depth.mm;
|
||||
last_depth = dp.depth;
|
||||
if (dp.depth.mm > max_depth.mm)
|
||||
max_depth = dp.depth;
|
||||
}
|
||||
}
|
||||
if (last_time)
|
||||
*avg_depth = integral / last_time;
|
||||
else
|
||||
*avg_depth = *max_depth = 0;
|
||||
return { integral / last_time, max_depth };
|
||||
return { 0_m, 0_m };
|
||||
}
|
||||
|
||||
std::vector<decostop> plan(struct deco_state *ds, struct diveplan &diveplan, struct dive *dive, int dcNr, int timestep, deco_state_cache &cache, bool is_planner, bool show_disclaimer)
|
||||
|
@ -619,7 +617,6 @@ std::vector<decostop> plan(struct deco_state *ds, struct diveplan &diveplan, str
|
|||
bool stopping = false;
|
||||
bool pendinggaschange = false;
|
||||
int clock, previous_point_time;
|
||||
int avg_depth, max_depth;
|
||||
int last_ascend_rate;
|
||||
int best_first_ascend_cylinder = -1;
|
||||
struct gasmix gas, bottom_gas;
|
||||
|
@ -678,7 +675,7 @@ std::vector<decostop> plan(struct deco_state *ds, struct diveplan &diveplan, str
|
|||
|
||||
po2 = sample.setpoint.mbar;
|
||||
depth_t depth = sample.depth;
|
||||
average_max_depth(diveplan, &avg_depth, &max_depth);
|
||||
auto [avg_depth, max_depth] = average_max_depth(diveplan);
|
||||
last_ascend_rate = ascent_velocity(depth, avg_depth, bottom_time);
|
||||
|
||||
/* if all we wanted was the dive just get us back to the surface */
|
||||
|
@ -723,7 +720,7 @@ std::vector<decostop> plan(struct deco_state *ds, struct diveplan &diveplan, str
|
|||
nuclear_regeneration(ds, clock);
|
||||
vpmb_start_gradient(ds);
|
||||
if (decoMode(true) == RECREATIONAL) {
|
||||
bool safety_stop = prefs.safetystop && max_depth >= 10000;
|
||||
bool safety_stop = prefs.safetystop && max_depth.mm >= 10000;
|
||||
track_ascent_gas(depth, dive, current_cylinder, avg_depth, bottom_time, safety_stop, divemode);
|
||||
// How long can we stay at the current depth and still directly ascent to the surface?
|
||||
do {
|
||||
|
|
|
@ -58,7 +58,7 @@ struct diveplan {
|
|||
struct deco_state_cache;
|
||||
|
||||
extern int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time);
|
||||
extern int ascent_velocity(depth_t depth, int avg_depth, int);
|
||||
extern int ascent_velocity(depth_t depth, depth_t avg_depth, int);
|
||||
extern const char *get_planner_disclaimer();
|
||||
|
||||
void plan_add_segment(struct diveplan &diveplan, int duration, depth_t depth, int cylinderid, int po2, bool entered, enum divemode_t divemode);
|
||||
|
|
|
@ -202,7 +202,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne
|
|||
if (dp->time == 0)
|
||||
continue;
|
||||
gasmix = dive.get_cylinder(dp->cylinderid)->gasmix;
|
||||
depthvalue = get_depth_units(dp->depth.mm, &decimals, &depth_unit);
|
||||
depthvalue = get_depth_units(dp->depth, &decimals, &depth_unit);
|
||||
/* analyze the dive points ahead */
|
||||
while (nextdp != this->dp.end() && nextdp->time == 0)
|
||||
++nextdp;
|
||||
|
@ -443,7 +443,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne
|
|||
|
||||
{
|
||||
const char *depth_unit;
|
||||
int altitude = (int) get_depth_units(pressure_to_altitude(surface_pressure).mm, NULL, &depth_unit);
|
||||
int altitude = (int) get_depth_units(pressure_to_altitude(surface_pressure), NULL, &depth_unit);
|
||||
|
||||
buf += casprintf_loc(translate("gettextFromC", "ATM pressure: %dmbar (%d%s)<br/>\n</div>\n"), surface_pressure, altitude, depth_unit);
|
||||
}
|
||||
|
@ -519,7 +519,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne
|
|||
mingas_volume = get_volume_units(mingasv.mliter, NULL, &unit);
|
||||
mingas_pressure = get_pressure_units(lastbottomdp->minimum_gas.mbar, &pressure_unit);
|
||||
mingas_d_pressure = get_pressure_units(lrint((double)cyl.end.mbar + deco_pressure_mbar - lastbottomdp->minimum_gas.mbar), &pressure_unit);
|
||||
mingas_depth = get_depth_units(lastbottomdp->depth.mm, NULL, &depth_unit);
|
||||
mingas_depth = get_depth_units(lastbottomdp->depth, NULL, &depth_unit);
|
||||
/* Print it to results */
|
||||
if (cyl.start.mbar > lastbottomdp->minimum_gas.mbar) {
|
||||
mingas = casprintf_loc("<br/>\n — <span style='color: %s;'>%s</span> (%s %.1fx%s/+%d%s@%.0f%s): "
|
||||
|
@ -595,7 +595,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne
|
|||
if (pressures.o2 > (dp.entered ? prefs.bottompo2 : prefs.decopo2) / 1000.0) {
|
||||
const char *depth_unit;
|
||||
int decimals;
|
||||
double depth_value = get_depth_units(dp.depth.mm, &decimals, &depth_unit);
|
||||
double depth_value = get_depth_units(dp.depth, &decimals, &depth_unit);
|
||||
if (!o2warning_exist)
|
||||
buf += "<div>\n";
|
||||
o2warning_exist = true;
|
||||
|
@ -605,7 +605,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne
|
|||
} else if (pressures.o2 < 0.16) {
|
||||
const char *depth_unit;
|
||||
int decimals;
|
||||
double depth_value = get_depth_units(dp.depth.mm, &decimals, &depth_unit);
|
||||
double depth_value = get_depth_units(dp.depth, &decimals, &depth_unit);
|
||||
if (!o2warning_exist)
|
||||
buf += "<div>";
|
||||
o2warning_exist = true;
|
||||
|
|
|
@ -326,7 +326,7 @@ static void insert_entry(struct plot_info &pi, int time, depth_t depth, int sac)
|
|||
entry = prev;
|
||||
entry.sec = time;
|
||||
entry.depth = depth;
|
||||
entry.running_sum = prev.running_sum + (time - prev.sec) * (depth + prev.depth).mm / 2;
|
||||
entry.running_sum = prev.running_sum + (depth + prev.depth) * (time - prev.sec) / 2;
|
||||
entry.sac = sac;
|
||||
entry.ndl = -1;
|
||||
entry.bearing = -1;
|
||||
|
@ -401,7 +401,7 @@ static void populate_plot_entries(const struct dive *dive, const struct divecomp
|
|||
entry.sec = time;
|
||||
entry.depth = sample.depth;
|
||||
|
||||
entry.running_sum = prev.running_sum + (time - prev.sec) * (sample.depth.mm + prev.depth.mm) / 2;
|
||||
entry.running_sum = prev.running_sum + (sample.depth + prev.depth) * (time - prev.sec) / 2;
|
||||
entry.stopdepth = sample.stopdepth;
|
||||
entry.stoptime = sample.stoptime.seconds;
|
||||
entry.ndl = sample.ndl.seconds;
|
||||
|
@ -1268,7 +1268,7 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p
|
|||
const struct plot_data &entry = pi.entry[idx];
|
||||
std::vector<std::string> res;
|
||||
|
||||
depthvalue = get_depth_units(entry.depth.mm, NULL, &depth_unit);
|
||||
depthvalue = get_depth_units(entry.depth, NULL, &depth_unit);
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "@: %d:%02d"), FRACTION_TUPLE(entry.sec, 60)));
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "D: %.1f%s"), depthvalue, depth_unit));
|
||||
for (cyl = 0; cyl < pi.nr_cylinders; cyl++) {
|
||||
|
@ -1303,23 +1303,23 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p
|
|||
if (prefs.pp_graphs.phe && entry.pressures.he > 0)
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "pHe: %.2fbar"), entry.pressures.he));
|
||||
if (prefs.mod && entry.mod.mm > 0) {
|
||||
mod.mm = lrint(get_depth_units(entry.mod.mm, NULL, &depth_unit));
|
||||
mod.mm = lrint(get_depth_units(entry.mod, NULL, &depth_unit));
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "MOD: %d%s"), mod.mm, depth_unit));
|
||||
}
|
||||
eadd.mm = lrint(get_depth_units(entry.eadd.mm, NULL, &depth_unit));
|
||||
eadd.mm = lrint(get_depth_units(entry.eadd, NULL, &depth_unit));
|
||||
|
||||
if (prefs.ead) {
|
||||
switch (pi.dive_type) {
|
||||
case plot_info::NITROX:
|
||||
if (entry.ead.mm > 0) {
|
||||
ead.mm = lrint(get_depth_units(entry.ead.mm, NULL, &depth_unit));
|
||||
ead.mm = lrint(get_depth_units(entry.ead, NULL, &depth_unit));
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "EAD: %d%s"), ead.mm, depth_unit));
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "EADD: %d%s / %.1fg/ℓ"), eadd.mm, depth_unit, entry.density));
|
||||
break;
|
||||
}
|
||||
case plot_info::TRIMIX:
|
||||
if (entry.end.mm > 0) {
|
||||
end.mm = lrint(get_depth_units(entry.end.mm, NULL, &depth_unit));
|
||||
end.mm = lrint(get_depth_units(entry.end, NULL, &depth_unit));
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "END: %d%s"), end.mm, depth_unit));
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "EADD: %d%s / %.1fg/ℓ"), eadd.mm, depth_unit, entry.density));
|
||||
break;
|
||||
|
@ -1334,7 +1334,7 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p
|
|||
}
|
||||
}
|
||||
if (entry.stopdepth.mm > 0) {
|
||||
depthvalue = get_depth_units(entry.stopdepth.mm, NULL, &depth_unit);
|
||||
depthvalue = get_depth_units(entry.stopdepth, NULL, &depth_unit);
|
||||
if (entry.ndl > 0) {
|
||||
/* this is a safety stop as we still have ndl */
|
||||
if (entry.stoptime)
|
||||
|
@ -1360,7 +1360,7 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p
|
|||
if (entry.tts)
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "TTS: %umin"), div_up(entry.tts, 60)));
|
||||
if (entry.stopdepth_calc.mm > 0 && entry.stoptime_calc) {
|
||||
depthvalue = get_depth_units(entry.stopdepth_calc.mm, NULL, &depth_unit);
|
||||
depthvalue = get_depth_units(entry.stopdepth_calc, NULL, &depth_unit);
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "Deco: %umin @ %.0f%s (calc)"), div_up(entry.stoptime_calc, 60),
|
||||
depthvalue, depth_unit));
|
||||
} else if (entry.in_deco_calc) {
|
||||
|
@ -1390,13 +1390,13 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p
|
|||
if (entry.surface_gf > 0.0)
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "Surface GF %.0f%%"), entry.surface_gf));
|
||||
if (entry.ceiling.mm > 0) {
|
||||
depthvalue = get_depth_units(entry.ceiling.mm, NULL, &depth_unit);
|
||||
depthvalue = get_depth_units(entry.ceiling, NULL, &depth_unit);
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "Calculated ceiling %.1f%s"), depthvalue, depth_unit));
|
||||
if (prefs.calcalltissues) {
|
||||
int k;
|
||||
for (k = 0; k < 16; k++) {
|
||||
if (entry.ceilings[k].mm > 0) {
|
||||
depthvalue = get_depth_units(entry.ceilings[k].mm, NULL, &depth_unit);
|
||||
depthvalue = get_depth_units(entry.ceilings[k], NULL, &depth_unit);
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "Tissue %.0fmin: %.1f%s"), buehlmann_N2_t_halflife[k], depthvalue, depth_unit));
|
||||
}
|
||||
}
|
||||
|
@ -1409,7 +1409,7 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p
|
|||
res.push_back(casprintf_loc(translate("gettextFromC", "heart rate: %d"), entry.heartbeat));
|
||||
if (entry.bearing >= 0)
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "bearing: %d"), entry.bearing));
|
||||
if (entry.running_sum) {
|
||||
if (entry.running_sum.mm > 0) {
|
||||
depthvalue = get_depth_units(entry.running_sum / entry.sec, NULL, &depth_unit);
|
||||
res.push_back(casprintf_loc(translate("gettextFromC", "mean depth to here %.1f%s"), depthvalue, depth_unit));
|
||||
}
|
||||
|
@ -1458,7 +1458,8 @@ std::vector<std::string> compare_samples(const struct dive *d, const struct plot
|
|||
int max_asc_speed = 0;
|
||||
int max_desc_speed = 0;
|
||||
|
||||
int delta_depth = abs(start.depth.mm - stop.depth.mm);
|
||||
depth_t delta_depth = start.depth - stop.depth;
|
||||
delta_depth.mm = std::abs(delta_depth.mm);
|
||||
int delta_time = abs(start.sec - stop.sec);
|
||||
depth_t avg_depth;
|
||||
depth_t max_depth;
|
||||
|
@ -1527,13 +1528,13 @@ std::vector<std::string> compare_samples(const struct dive *d, const struct plot
|
|||
depthvalue = get_depth_units(delta_depth, NULL, &depth_unit);
|
||||
l += space + casprintf_loc(translate("gettextFromC", "ΔD:%.1f%s"), depthvalue, depth_unit);
|
||||
|
||||
depthvalue = get_depth_units(min_depth.mm, NULL, &depth_unit);
|
||||
depthvalue = get_depth_units(min_depth, NULL, &depth_unit);
|
||||
l += space + casprintf_loc(translate("gettextFromC", "↓D:%.1f%s"), depthvalue, depth_unit);
|
||||
|
||||
depthvalue = get_depth_units(max_depth.mm, NULL, &depth_unit);
|
||||
depthvalue = get_depth_units(max_depth, NULL, &depth_unit);
|
||||
l += space + casprintf_loc(translate("gettextFromC", "↑D:%.1f%s"), depthvalue, depth_unit);
|
||||
|
||||
depthvalue = get_depth_units(avg_depth.mm, NULL, &depth_unit);
|
||||
depthvalue = get_depth_units(avg_depth, NULL, &depth_unit);
|
||||
l += space + casprintf_loc(translate("gettextFromC", "øD:%.1f%s"), depthvalue, depth_unit);
|
||||
res.push_back(l);
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ struct plot_data {
|
|||
int cns = 0;
|
||||
depth_t smoothed;
|
||||
int sac = 0;
|
||||
int running_sum = 0;
|
||||
depth_t running_sum; // strictly speaking not a depth, but depth × time. Might define a custom type for that based on a longer integer.
|
||||
struct gas_pressures pressures;
|
||||
// TODO: make pressure_t default to 0
|
||||
pressure_t o2pressure; // for rebreathers, this is consensus measured po2, or setpoint otherwise. 0 for OC.
|
||||
|
|
|
@ -281,7 +281,7 @@ void put_HTML_depth(struct membuffer *b, const struct dive &dive, const char *pr
|
|||
put_format(b, "%s--%s", pre, post);
|
||||
return;
|
||||
}
|
||||
value = get_depth_units(dive.maxdepth.mm, NULL, &unit);
|
||||
value = get_depth_units(dive.maxdepth, NULL, &unit);
|
||||
|
||||
switch (units_p->length) {
|
||||
case units::METERS:
|
||||
|
|
|
@ -83,7 +83,7 @@ static void put_pd(struct membuffer *b, const struct plot_info &pi, int idx)
|
|||
put_int(b, entry.cns);
|
||||
put_int(b, entry.smoothed.mm);
|
||||
put_int(b, entry.sac);
|
||||
put_int(b, entry.running_sum);
|
||||
put_int(b, entry.running_sum.mm);
|
||||
put_double(b, entry.pressures.o2);
|
||||
put_double(b, entry.pressures.n2);
|
||||
put_double(b, entry.pressures.he);
|
||||
|
@ -199,7 +199,7 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next
|
|||
std::string format_string = prefs.subtitles_format_string;
|
||||
|
||||
replace_all(format_string, "[time]", format_string_std("%d:%02d", FRACTION_TUPLE(entry.sec, 60)));
|
||||
value = get_depth_units(entry.depth.mm, &decimals, &unit);
|
||||
value = get_depth_units(entry.depth, &decimals, &unit);
|
||||
replace_all(format_string, "[depth]", format_string_std("%02.2f %s", value, unit));
|
||||
|
||||
if (entry.temperature) {
|
||||
|
@ -210,7 +210,7 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next
|
|||
}
|
||||
|
||||
if (entry.ceiling.mm > 0) {
|
||||
value = get_depth_units(entry.ceiling.mm, &decimals, &unit);
|
||||
value = get_depth_units(entry.ceiling, &decimals, &unit);
|
||||
replace_all(format_string,"[ceiling]", format_string_std("%02.2f %s", value, unit));
|
||||
} else {
|
||||
replace_all(format_string, "[ceiling]", "");
|
||||
|
@ -245,7 +245,7 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next
|
|||
}
|
||||
|
||||
if (entry.stopdepth.mm > 0) {
|
||||
value = get_depth_units(entry.stopdepth.mm, &decimals, &unit);
|
||||
value = get_depth_units(entry.stopdepth, &decimals, &unit);
|
||||
replace_all(format_string, "[stopdepth]", format_string_std("%02.2f %s", value, unit));
|
||||
} else {
|
||||
replace_all(format_string, "[stopdepth]", "");
|
||||
|
@ -297,28 +297,28 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next
|
|||
}
|
||||
|
||||
if (entry.mod.mm > 0) {
|
||||
value = get_depth_units(entry.mod.mm, &decimals, &unit);
|
||||
value = get_depth_units(entry.mod, &decimals, &unit);
|
||||
replace_all(format_string, "[mod]", format_string_std("%02.2f %s", value, unit));
|
||||
} else {
|
||||
replace_all(format_string, "[mod]", "");
|
||||
}
|
||||
|
||||
if (entry.ead.mm > 0) {
|
||||
value = get_depth_units(entry.ead.mm, &decimals, &unit);
|
||||
value = get_depth_units(entry.ead, &decimals, &unit);
|
||||
replace_all(format_string, "[ead]", format_string_std("%02.2f %s", value, unit));
|
||||
} else {
|
||||
replace_all(format_string, "[ead]", "");
|
||||
}
|
||||
|
||||
if (entry.end.mm > 0) {
|
||||
value = get_depth_units(entry.end.mm, &decimals, &unit);
|
||||
value = get_depth_units(entry.end, &decimals, &unit);
|
||||
replace_all(format_string, "[end]", format_string_std("%02.2f %s", value, unit));
|
||||
} else {
|
||||
replace_all(format_string, "[end]", "");
|
||||
}
|
||||
|
||||
if (entry.eadd.mm > 0) {
|
||||
value = get_depth_units(entry.eadd.mm, &decimals, &unit);
|
||||
value = get_depth_units(entry.eadd, &decimals, &unit);
|
||||
replace_all(format_string, "[eadd]", format_string_std("%02.2f %s", value, unit));
|
||||
} else {
|
||||
replace_all(format_string, "[eadd]", "");
|
||||
|
@ -359,7 +359,7 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next
|
|||
}
|
||||
|
||||
if (entry.stopdepth_calc.mm > 0) {
|
||||
value = get_depth_units(entry.stopdepth_calc.mm, &decimals, &unit);
|
||||
value = get_depth_units(entry.stopdepth_calc, &decimals, &unit);
|
||||
replace_all(format_string, "[stopdepth_calc]", format_string_std("%02.2f %s", value, unit));
|
||||
} else {
|
||||
replace_all(format_string, "[stopdepth_calc]", "");
|
||||
|
|
|
@ -95,7 +95,7 @@ depth_t units_to_depth(double depth)
|
|||
return internaldepth;
|
||||
}
|
||||
|
||||
double get_depth_units(int mm, int *frac, const char **units)
|
||||
double get_depth_units(depth_t depth, int *frac, const char **units)
|
||||
{
|
||||
int decimals;
|
||||
double d;
|
||||
|
@ -105,12 +105,12 @@ double get_depth_units(int mm, int *frac, const char **units)
|
|||
switch (units_p->length) {
|
||||
case units::METERS:
|
||||
default:
|
||||
d = mm / 1000.0;
|
||||
d = depth.mm / 1000.0;
|
||||
unit = translate("gettextFromC", "m");
|
||||
decimals = d < 20;
|
||||
break;
|
||||
case units::FEET:
|
||||
d = mm_to_feet(mm);
|
||||
d = mm_to_feet(depth.mm);
|
||||
unit = translate("gettextFromC", "ft");
|
||||
decimals = 0;
|
||||
break;
|
||||
|
|
|
@ -498,7 +498,7 @@ extern const struct units SI_units, IMPERIAL_units;
|
|||
extern const struct units *get_units();
|
||||
|
||||
extern int get_pressure_units(int mb, const char **units);
|
||||
extern double get_depth_units(int mm, int *frac, const char **units);
|
||||
extern double get_depth_units(depth_t mm, int *frac, const char **units);
|
||||
extern double get_volume_units(unsigned int ml, int *frac, const char **units);
|
||||
extern double get_temp_units(unsigned int mk, const char **units);
|
||||
extern double get_weight_units(unsigned int grams, int *frac, const char **units);
|
||||
|
|
|
@ -753,7 +753,7 @@ void ConfigureDiveComputerDialog::populateDeviceDetailsSuuntoVyper()
|
|||
deviceDetails.lightEnabled = ui.lightCheckBox->isChecked();
|
||||
deviceDetails.light = ui.lightSpinBox->value();
|
||||
deviceDetails.alarmDepthEnabled = ui.alarmDepthCheckBox->isChecked();
|
||||
deviceDetails.alarmDepth = units_to_depth(ui.alarmDepthDoubleSpinBox->value()).mm;
|
||||
deviceDetails.alarmDepth = units_to_depth(ui.alarmDepthDoubleSpinBox->value());
|
||||
deviceDetails.alarmTimeEnabled = ui.alarmTimeCheckBox->isChecked();
|
||||
deviceDetails.alarmTime = ui.alarmTimeSpinBox->value();
|
||||
}
|
||||
|
|
|
@ -163,7 +163,7 @@ void DivePlannerWidget::settingsChanged()
|
|||
}
|
||||
ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::DEPTH, new SpinBoxDelegate(0, maxDepth, 1, this));
|
||||
ui.atmHeight->blockSignals(true);
|
||||
ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(DivePlannerPointsModel::instance()->getSurfacePressure()).mm, NULL, NULL));
|
||||
ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(DivePlannerPointsModel::instance()->getSurfacePressure()), NULL, NULL));
|
||||
ui.atmHeight->blockSignals(false);
|
||||
|
||||
ui.dateEdit->setDisplayFormat(QString::fromStdString(prefs.date_format));
|
||||
|
@ -175,7 +175,7 @@ void DivePlannerWidget::atmPressureChanged(int pressure_in_mbar)
|
|||
pressure_t pressure { .mbar = pressure_in_mbar };
|
||||
DivePlannerPointsModel::instance()->setSurfacePressure(pressure);
|
||||
ui.atmHeight->blockSignals(true);
|
||||
ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(pressure).mm, NULL, NULL));
|
||||
ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(pressure), NULL, NULL));
|
||||
ui.atmHeight->blockSignals(false);
|
||||
}
|
||||
|
||||
|
@ -457,7 +457,7 @@ void PlannerSettingsWidget::updateUnitsUI()
|
|||
ui.ascRateStops->setValue(plannerModel->ascratestopsDisplay());
|
||||
ui.ascRateLast6m->setValue(plannerModel->ascratelast6mDisplay());
|
||||
ui.descRate->setValue(lrint(plannerModel->descrateDisplay()));
|
||||
ui.bestmixEND->setValue(lrint(get_depth_units(prefs.bestmixend.mm, NULL, NULL)));
|
||||
ui.bestmixEND->setValue(lrint(get_depth_units(prefs.bestmixend, NULL, NULL)));
|
||||
}
|
||||
|
||||
PlannerSettingsWidget::~PlannerSettingsWidget()
|
||||
|
|
|
@ -142,7 +142,8 @@ void DiveEventItem::setupToolTipString(struct gasmix lastgasmix)
|
|||
name += QString(": %1bar").arg((double)value / 1000, 0, 'f', 1);
|
||||
} else if (type == SAMPLE_EVENT_CEILING && ev.name == "planned waypoint above ceiling") {
|
||||
const char *depth_unit;
|
||||
double depth_value = get_depth_units(value*1000, NULL, &depth_unit);
|
||||
depth_t depth { .mm = value * 1000 };
|
||||
double depth_value = get_depth_units(depth, NULL, &depth_unit);
|
||||
name += QString(": %1%2").arg((int) round(depth_value)).arg(depth_unit);
|
||||
} else {
|
||||
name += QString(": %1").arg(value);
|
||||
|
|
|
@ -450,9 +450,9 @@ std::pair<double,double> DiveMeanDepthItem::getMeanDepth(int i) const
|
|||
{
|
||||
for ( ; i >= 0; --i) {
|
||||
const plot_data &entry = pInfo.entry[i];
|
||||
if (entry.running_sum > 0)
|
||||
if (entry.running_sum.mm > 0)
|
||||
return { static_cast<double>(entry.sec),
|
||||
static_cast<double>(entry.running_sum) / entry.sec };
|
||||
static_cast<double>(entry.running_sum.mm) / entry.sec };
|
||||
}
|
||||
return { 0.0, 0.0 };
|
||||
}
|
||||
|
@ -462,9 +462,9 @@ std::pair<double,double> DiveMeanDepthItem::getNextMeanDepth(int first) const
|
|||
int last = pInfo.nr;
|
||||
for (int i = first + 1; i < last; ++i) {
|
||||
const plot_data &entry = pInfo.entry[i];
|
||||
if (entry.running_sum > 0)
|
||||
if (entry.running_sum.mm > 0)
|
||||
return { static_cast<double>(entry.sec),
|
||||
static_cast<double>(entry.running_sum) / entry.sec };
|
||||
static_cast<double>(entry.running_sum.mm) / entry.sec };
|
||||
}
|
||||
return getMeanDepth(first);
|
||||
}
|
||||
|
|
|
@ -117,7 +117,7 @@ ProfileScene::ProfileScene(double dpr, bool printMode, bool isGrayscale) :
|
|||
[](const plot_data &item) { return (double)item.temperature; },
|
||||
1, dpr)),
|
||||
meanDepthItem(createItem<DiveMeanDepthItem>(*profileYAxis,
|
||||
[](const plot_data &item) { return (double)item.running_sum; },
|
||||
[](const plot_data &item) { return (double)item.running_sum.mm; },
|
||||
1, dpr)),
|
||||
gasPressureItem(createItem<DiveGasPressureItem>(*cylinderPressureAxis,
|
||||
[](const plot_data &item) { return 0.0; }, // unused
|
||||
|
|
|
@ -296,7 +296,7 @@ QVariant DivePlannerPointsModel::data(const QModelIndex &index, int role) const
|
|||
case CCSETPOINT:
|
||||
return (divemode == CCR) ? (double)(p.setpoint / 1000.0) : QVariant();
|
||||
case DEPTH:
|
||||
return int_cast<int>(get_depth_units(p.depth.mm, NULL, NULL));
|
||||
return int_cast<int>(get_depth_units(p.depth, NULL, NULL));
|
||||
case RUNTIME:
|
||||
return p.time / 60;
|
||||
case DURATION:
|
||||
|
|
Loading…
Add table
Reference in a new issue