mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-31 20:33:24 +00:00
Add support for RBT reported sample value
RBT (Remaining Bottom Time) is a value calculated on the fly by some air integrated divecomputers, for example Uwatec devices. This value is an estimation based in some heuristic around time function pressure gradients. This way, RBT would be the time a diver can spend at actual depth without running out of gas (taking account of ascent, deco, if required, and rock bottom gas reserve, if set). Older Uwatec devices just made the calculus and only stored alarm events if this time value reached zero, but modern devices store the value each sample, in minutes. It seems that Suunto Eon Steel is storing RBT values too, in seconds. Libdivecomputer has supported RBT for a while, but Subsurface just printed it to stdout and dropped it. This adds support for RBT value on subsurface sample structure and shows it in the profile's info box, right under TTS(calc), if selected, where these two values can be easily compared by humans. Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
59a18ab000
commit
cfac25626b
4 changed files with 8 additions and 3 deletions
3
dive.h
3
dive.h
|
@ -176,6 +176,7 @@ struct sample // BASE TYPE BYTES UNITS RANGE DE
|
|||
duration_t stoptime; // uint32_t 4 seconds (0-18 h) time duration of next deco stop
|
||||
duration_t ndl; // uint32_t 4 seconds (0-18 h) time duration before no-deco limit
|
||||
duration_t tts; // uint32_t 4 seconds (0-18 h) time duration to reach the surface
|
||||
duration_t rbt; // uint32_t 4 seconds (0-18 h) remaining bottom time
|
||||
depth_t depth; // int32_t 4 mm (0-2000 km) dive depth of this sample
|
||||
depth_t stopdepth; // int32_t 4 mm (0-2000 km) depth of next deco stop
|
||||
temperature_t temperature; // int32_t 4 mdegrK (0-2 MdegK) ambient temperature
|
||||
|
@ -191,7 +192,7 @@ struct sample // BASE TYPE BYTES UNITS RANGE DE
|
|||
bool in_deco; // bool 1 y/n y/n this sample is part of deco
|
||||
bool manually_entered; // bool 1 y/n y/n this sample was entered by the user,
|
||||
// not calculated when planning a dive
|
||||
}; // Total size of structure: 53 bytes, excluding padding at end
|
||||
}; // Total size of structure: 57 bytes, excluding padding at end
|
||||
|
||||
struct divetag {
|
||||
/*
|
||||
|
|
|
@ -246,7 +246,7 @@ sample_cb(dc_sample_type_t type, dc_sample_value_t value, void *userdata)
|
|||
handle_event(dc, sample, value);
|
||||
break;
|
||||
case DC_SAMPLE_RBT:
|
||||
printf(" <rbt>%u</rbt>\n", value.rbt);
|
||||
sample->rbt.seconds = (!strncasecmp(dc->model, "suunto", 6)) ? value.rbt : value.rbt * 60;
|
||||
break;
|
||||
case DC_SAMPLE_HEARTBEAT:
|
||||
sample->heartbeat = value.heartbeat;
|
||||
|
|
|
@ -637,7 +637,8 @@ struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *
|
|||
entry->heartbeat = sample->heartbeat;
|
||||
entry->bearing = sample->bearing.degrees;
|
||||
entry->sac = sample->sac.mliter;
|
||||
|
||||
if (sample->rbt.seconds)
|
||||
entry->rbt = sample->rbt.seconds;
|
||||
/* skip events that happened at this time */
|
||||
while (ev && ev->time.seconds == time)
|
||||
ev = ev->next;
|
||||
|
@ -1197,6 +1198,8 @@ static void plot_string(struct plot_info *pi, struct plot_data *entry, struct me
|
|||
}
|
||||
if (entry->tts_calc)
|
||||
put_format(b, translate("gettextFromC", "TTS: %umin (calc)\n"), DIV_UP(entry->tts_calc, 60));
|
||||
if (entry->rbt)
|
||||
put_format(b, translate("gettextFromC", "RBT: %umin\n"), DIV_UP(entry->rbt, 60));
|
||||
if (entry->ceiling) {
|
||||
depthvalue = get_depth_units(entry->ceiling, NULL, &depth_unit);
|
||||
put_format(b, translate("gettextFromC", "Calculated ceiling %.0f%s\n"), depthvalue, depth_unit);
|
||||
|
|
|
@ -34,6 +34,7 @@ struct plot_data {
|
|||
int percentages[16];
|
||||
int ndl;
|
||||
int tts;
|
||||
int rbt;
|
||||
int stoptime;
|
||||
int stopdepth;
|
||||
int cns;
|
||||
|
|
Loading…
Add table
Reference in a new issue