On 2018-05-23 16:47, Anton Lundin wrote:
On 23 May, 2018 - Anton Lundin wrote:
The simple solution is to just emit the average/voted ppO2 when we can't
find the calibration values.

Its a graceful degradation of functionality, and way better than not
showing any ppO2 at all.

It should be simple to write.

Something simple like:

diff --git i/src/shearwater_predator_parser.c w/src/shearwater_predator_parser.c
index dda042c..e5194e8 100644
--- i/src/shearwater_predator_parser.c
+++ w/src/shearwater_predator_parser.c
@@ -669,19 +669,19 @@ shearwater_predator_parser_samples_foreach
(dc_parser_t *abstract, dc_sample_cal
                if ((status & OC) == 0) {
                        // PPO2
                        if ((status & PPO2_EXTERNAL) == 0) {
-#ifdef SENSOR_AVERAGE
-                               sample.ppo2 = data[offset + 6] / 100.0;
-                               if (callback) callback
(DC_SAMPLE_PPO2, sample, userdata);
-#else
-                               sample.ppo2 = data[offset + 12] *
parser->calibration[0];
-                               if (callback && (parser->calibrated &
0x01)) callback (DC_SAMPLE_PPO2, sample, userdata);
-
-                               sample.ppo2 = data[offset + 14] *
parser->calibration[1];
-                               if (callback && (parser->calibrated &
0x02)) callback (DC_SAMPLE_PPO2, sample, userdata);
-
-                               sample.ppo2 = data[offset + 15] *
parser->calibration[2];
-                               if (callback && (parser->calibrated &
0x04)) callback (DC_SAMPLE_PPO2, sample, userdata);
-#endif
+                               if (!parser->calibrated & 0x07) {
+ sample.ppo2 = data[offset + 6] / 100.0;
+                                       if (callback) callback
(DC_SAMPLE_PPO2, sample, userdata);
+                               } else {
+                                       sample.ppo2 = data[offset +
12] * parser->calibration[0];
+                                       if (callback &&
(parser->calibrated & 0x01)) callback (DC_SAMPLE_PPO2, sample,
userdata);
+
+                                       sample.ppo2 = data[offset +
14] * parser->calibration[1];
+                                       if (callback &&
(parser->calibrated & 0x02)) callback (DC_SAMPLE_PPO2, sample,
userdata);
+
+                                       sample.ppo2 = data[offset +
15] * parser->calibration[2];
+                                       if (callback &&
(parser->calibrated & 0x04)) callback (DC_SAMPLE_PPO2, sample,
userdata);
+                               }
                        }

                        // Setpoint

Should be enough.

The main disadvantage is that you'll no longer know which type of ppO2 (sensor or voted/average) you are getting. Especially if you only have one sensor.

Jef
_______________________________________________
subsurface mailing list
subsurface@subsurface-divelog.org
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to