mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Instead of assigning sensor ids in the order that values are reported, actually use the sensor ids reported by libdivecomputer. This will fix the problem that for some dive computers (e.g. Shearwater) the dive computer calculated ppO2 is currently reported first, thus pushing out all actual sensor values. A new fixed id (7) outside of the range of currently supported sensor IDs is used for these dive computer calculated values. Signed-off-by: Michael Keller <github@ike.ch>
38 lines
2.7 KiB
C
38 lines
2.7 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef SAMPLE_H
|
|
#define SAMPLE_H
|
|
|
|
#include "units.h"
|
|
|
|
#define MAX_SENSORS 2
|
|
#define MAX_O2_SENSORS 6
|
|
#define DC_REPORTED_PPO2 MAX_O2_SENSORS
|
|
#define NO_SENSOR -1
|
|
|
|
struct sample // BASE TYPE BYTES UNITS RANGE DESCRIPTION
|
|
{ // --------- ----- ----- ----- -----------
|
|
duration_t time; // int32_t 4 seconds (0-34 yrs) elapsed dive time up to this sample
|
|
duration_t stoptime; // int32_t 4 seconds (0-34 yrs) time duration of next deco stop
|
|
duration_t ndl = { .seconds = -1 };// int32_t 4 seconds (-1 no val, 0-34 yrs) time duration before no-deco limit
|
|
duration_t tts; // int32_t 4 seconds (0-34 yrs) time duration to reach the surface
|
|
duration_t rbt; // int32_t 4 seconds (0-34 yrs) 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; // uint32_t 4 mK (0-4 MK) ambient temperature
|
|
pressure_t pressure[MAX_SENSORS]; // int32_t 2x4 mbar (0-2 Mbar) cylinder pressures (main and CCR o2)
|
|
o2pressure_t setpoint; // uint16_t 2 mbar (0-65 bar) O2 partial pressure (will be setpoint)
|
|
o2pressure_t o2sensor[MAX_O2_SENSORS + 1]; // uint16_t 6x2 mbar (0-65 bar) Up to 6 PO2 sensor values (rebreather)
|
|
bearing_t bearing = { .degrees = -1 };// int16_t 2 degrees (-1 no val, 0-360 deg) compass bearing
|
|
int16_t sensor[MAX_SENSORS] = {}; // int16_t 2x2 sensorID (0-16k) ID of cylinder pressure sensor
|
|
uint16_t cns = 0; // uint16_t 2 % (0-64k %) cns% accumulated
|
|
uint8_t heartbeat = 0; // uint8_t 1 beats/m (0-255) heart rate measurement
|
|
volume_t sac; // 4 ml/min predefined SAC
|
|
bool in_deco = false; // bool 1 y/n y/n this sample is part of deco
|
|
bool manually_entered = false; // bool 1 y/n y/n this sample was entered by the user,
|
|
// not calculated when planning a dive
|
|
sample(); // Default constructor
|
|
}; // Total size of structure: 63 bytes, excluding padding at end
|
|
|
|
extern void add_sample_pressure(struct sample *sample, int sensor, int mbar);
|
|
|
|
#endif
|