shearwater: Report individual sensor values
This reads the reported mV values from the sensors, and based on the calibration values converts it into a ppo2 value to report. Signed-off-by: Anton Lundin <glance@acc.umu.se>
This commit is contained in:
parent
588e7e7ab4
commit
d3ca3e87bd
@ -61,6 +61,7 @@ struct shearwater_predator_parser_t {
|
|||||||
unsigned int ngasmixes;
|
unsigned int ngasmixes;
|
||||||
unsigned int oxygen[NGASMIXES];
|
unsigned int oxygen[NGASMIXES];
|
||||||
unsigned int helium[NGASMIXES];
|
unsigned int helium[NGASMIXES];
|
||||||
|
unsigned int calibration[3];
|
||||||
dc_divemode_t mode;
|
dc_divemode_t mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -281,6 +282,18 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser)
|
|||||||
offset += parser->samplesize;
|
offset += parser->samplesize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cache sensor calibration for later use
|
||||||
|
parser->calibration[0] = array_uint16_be(data + 87);
|
||||||
|
parser->calibration[1] = array_uint16_be(data + 89);
|
||||||
|
parser->calibration[2] = array_uint16_be(data + 91);
|
||||||
|
// The Predator expects the mV output of the cells to be within 30mV
|
||||||
|
// to 70mV in 100% O2 at 1 atmosphere.
|
||||||
|
// If we add 1024 (1000?) to the calibration value, then the sensors
|
||||||
|
// lines up and matches the average.
|
||||||
|
parser->calibration[0] += 1024;
|
||||||
|
parser->calibration[1] += 1024;
|
||||||
|
parser->calibration[2] += 1024;
|
||||||
|
|
||||||
// Cache the data for later use.
|
// Cache the data for later use.
|
||||||
parser->headersize = headersize;
|
parser->headersize = headersize;
|
||||||
parser->footersize = footersize;
|
parser->footersize = footersize;
|
||||||
@ -424,8 +437,19 @@ shearwater_predator_parser_samples_foreach (dc_parser_t *abstract, dc_sample_cal
|
|||||||
|
|
||||||
if ((status & OC) == 0) {
|
if ((status & OC) == 0) {
|
||||||
// PPO2
|
// PPO2
|
||||||
|
#ifdef SENSOR_AVERAGE
|
||||||
sample.ppo2 = data[offset + 6] / 100.0;
|
sample.ppo2 = data[offset + 6] / 100.0;
|
||||||
if (callback) callback (DC_SAMPLE_PPO2, sample, userdata);
|
if (callback) callback (DC_SAMPLE_PPO2, sample, userdata);
|
||||||
|
#else
|
||||||
|
sample.ppo2 = data[offset + 12] * parser->calibration[0] / 100000.0;
|
||||||
|
if (callback && (data[86] & 0x01)) callback (DC_SAMPLE_PPO2, sample, userdata);
|
||||||
|
|
||||||
|
sample.ppo2 = data[offset + 14] * parser->calibration[1] / 100000.0;
|
||||||
|
if (callback && (data[86] & 0x02)) callback (DC_SAMPLE_PPO2, sample, userdata);
|
||||||
|
|
||||||
|
sample.ppo2 = data[offset + 15] * parser->calibration[2] / 100000.0;
|
||||||
|
if (callback && (data[86] & 0x04)) callback (DC_SAMPLE_PPO2, sample, userdata);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Setpoint
|
// Setpoint
|
||||||
if (parser->petrel) {
|
if (parser->petrel) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user