mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Make sample pressure helper functions available to everybody
We had a "add_sample_pressure()" helper functions that was local to just the libdivecomputer downloading code, but it really is applicable to pretty much any code that adds cylinder pressure data to a sample. Also add another helper: "legacy_format_o2pressures()" which checks the sample data to see if we can use the legacy format, and returns the o2 pressure sensor to use for that legacy format. Because both the XML and the git save format will need a way to save the compatible old-style information, when possible, but save an extended format for when we have data from multiple concurrent sensors. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
0e0b5cee22
commit
c5167f0039
3 changed files with 85 additions and 41 deletions
|
@ -307,47 +307,6 @@ static void handle_gasmix(struct divecomputer *dc, struct sample *sample, int id
|
|||
current_gas_index = idx;
|
||||
}
|
||||
|
||||
/*
|
||||
* Adding a cylinder pressure sample field is not quite as trivial as it
|
||||
* perhaps should be.
|
||||
*
|
||||
* We try to keep the same sensor index for the same sensor, so that even
|
||||
* if the dive computer doesn't give pressure information for every sample,
|
||||
* we don't move pressure information around between the different sensor
|
||||
* indexes.
|
||||
*
|
||||
* The "prepare_sample()" function will always copy the sensor indices
|
||||
* from the previous sample, so the indexes are pre-populated (but the
|
||||
* pressures obviously are not)
|
||||
*/
|
||||
static void add_sample_pressure(struct sample *sample, int sensor, int mbar)
|
||||
{
|
||||
int idx;
|
||||
|
||||
if (!mbar)
|
||||
return;
|
||||
|
||||
/* Do we already have a slot for this sensor */
|
||||
for (idx = 0; idx < MAX_SENSORS; idx++) {
|
||||
if (sensor != sample->sensor[idx])
|
||||
continue;
|
||||
sample->pressure[idx].mbar = mbar;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Pick the first unused index if we couldn't reuse one */
|
||||
for (idx = 0; idx < MAX_SENSORS; idx++) {
|
||||
if (sample->pressure[idx].mbar)
|
||||
continue;
|
||||
sample->sensor[idx] = sensor;
|
||||
sample->pressure[idx].mbar = mbar;
|
||||
return;
|
||||
}
|
||||
|
||||
/* We do not have enough slots for the pressure samples. */
|
||||
/* Should we warn the user about dropping pressure data? */
|
||||
}
|
||||
|
||||
void
|
||||
sample_cb(dc_sample_type_t type, dc_sample_value_t value, void *userdata)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue