libdivecomputer.c init sticky values for samples for current sample

When filling samples with values during DC import fill sticky values
like CNS, NDL, stoptime,... immediately into current sample.
Otherwise we will not fill the sticky values into the last sample
created.
Add two new sticky values: heartbeat and bearing

Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
This commit is contained in:
Stefan Fuchs 2017-11-14 12:36:40 +01:00 committed by Jan Mulder
parent 249b758b0d
commit 0895bccf49

View file

@ -41,7 +41,7 @@ const char *progress_bar_text = "";
void (*progress_callback)(const char *text) = NULL; void (*progress_callback)(const char *text) = NULL;
double progress_bar_fraction = 0.0; double progress_bar_fraction = 0.0;
static int stoptime, stopdepth, ndl, po2, cns; static int stoptime, stopdepth, ndl, po2, cns, heartbeat, bearing;
static bool in_deco, first_temp_is_air; static bool in_deco, first_temp_is_air;
static int current_gas_index; static int current_gas_index;
@ -332,22 +332,22 @@ sample_cb(dc_sample_type_t type, dc_sample_value_t value, void *userdata)
case DC_SAMPLE_TIME: case DC_SAMPLE_TIME:
nsensor = 0; nsensor = 0;
// The previous sample gets some sticky values
// that may have been around from before, even
// if there was no new data
if (sample) {
sample->in_deco = in_deco;
sample->ndl.seconds = ndl;
sample->stoptime.seconds = stoptime;
sample->stopdepth.mm = stopdepth;
sample->setpoint.mbar = po2;
sample->cns = cns;
}
// Create a new sample. // Create a new sample.
// Mark depth as negative // Mark depth as negative
sample = prepare_sample(dc); sample = prepare_sample(dc);
sample->time.seconds = value.time; sample->time.seconds = value.time;
sample->depth.mm = -1; sample->depth.mm = -1;
// The current sample gets some sticky values
// that may have been around from before, these
// values will be overwritten by new data if available
sample->in_deco = in_deco;
sample->ndl.seconds = ndl;
sample->stoptime.seconds = stoptime;
sample->stopdepth.mm = stopdepth;
sample->setpoint.mbar = po2;
sample->cns = cns;
sample->heartbeat = heartbeat;
sample->bearing.degrees = bearing;
finish_sample(dc); finish_sample(dc);
break; break;
case DC_SAMPLE_DEPTH: case DC_SAMPLE_DEPTH:
@ -369,10 +369,10 @@ sample_cb(dc_sample_type_t type, dc_sample_value_t value, void *userdata)
sample->rbt.seconds = (!strncasecmp(dc->model, "suunto", 6)) ? value.rbt : value.rbt * 60; sample->rbt.seconds = (!strncasecmp(dc->model, "suunto", 6)) ? value.rbt : value.rbt * 60;
break; break;
case DC_SAMPLE_HEARTBEAT: case DC_SAMPLE_HEARTBEAT:
sample->heartbeat = value.heartbeat; sample->heartbeat = heartbeat = value.heartbeat;
break; break;
case DC_SAMPLE_BEARING: case DC_SAMPLE_BEARING:
sample->bearing.degrees = value.bearing; sample->bearing.degrees = bearing = value.bearing;
break; break;
#ifdef DEBUG_DC_VENDOR #ifdef DEBUG_DC_VENDOR
case DC_SAMPLE_VENDOR: case DC_SAMPLE_VENDOR: