aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/parse-xml.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/core/parse-xml.c b/core/parse-xml.c
index 70407706d..7646ea2fa 100644
--- a/core/parse-xml.c
+++ b/core/parse-xml.c
@@ -1681,6 +1681,7 @@ int parse_dlf_buffer(unsigned char *buffer, size_t size, struct dive_table *tabl
};
struct battery_status battery_start = {0, 0, 0, 0};
struct battery_status battery_end = {0, 0, 0, 0};
+ uint16_t o2_sensor_calibration_values[4] = {0};
target_table = table;
@@ -1999,7 +2000,11 @@ int parse_dlf_buffer(unsigned char *buffer, size_t size, struct dive_table *tabl
break;
case 2: // CFG_OXYGEN_CALIBRATION
utc_mkdate(parse_dlf_timestamp(ptr + 12), &tm);
- snprintf(config_buf, sizeof(config_buf), "%04u,%04u,%04u,%04u,TIME=%04u-%02u-%02u %02u:%02u:%02u", (ptr[5] << 8) + ptr[4], (ptr[7] << 8) + ptr[6], (ptr[9] << 8) + ptr[8], (ptr[11] << 8) + ptr[10], tm.tm_year, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
+ o2_sensor_calibration_values[0] = (ptr[5] << 8) + ptr[4];
+ o2_sensor_calibration_values[1] = (ptr[7] << 8) + ptr[6];
+ o2_sensor_calibration_values[2] = (ptr[9] << 8) + ptr[8];
+ o2_sensor_calibration_values[3] = (ptr[11] << 8) + ptr[10];
+ snprintf(config_buf, sizeof(config_buf), "%04u,%04u,%04u,%04u,TIME=%04u-%02u-%02u %02u:%02u:%02u", o2_sensor_calibration_values[0], o2_sensor_calibration_values[1], o2_sensor_calibration_values[2], o2_sensor_calibration_values[3], tm.tm_year, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
add_extra_data(cur_dc, "CFG_OXYGEN_CALIBRATION", config_buf);
break;
case 3: // CFG_SERIAL
@@ -2074,6 +2079,16 @@ int parse_dlf_buffer(unsigned char *buffer, size_t size, struct dive_table *tabl
case 3:
/* Measure Oxygen */
//printf("%d s: o2 cells(0.01 mV): %d %d %d %d\n", time, (ptr[5] << 8) + ptr[4], (ptr[7] << 8) + ptr[6], (ptr[9] << 8) + ptr[8], (ptr[11] << 8) + ptr[10]);
+ // [Pa/mV] coeficient O2
+ // 100 Pa == 1 mbar
+ sample_start();
+ cur_sample->time.seconds = time;
+ cur_sample->o2sensor[0].mbar = ( ((ptr[5] << 8) + ptr[4]) * o2_sensor_calibration_values[0]) / 10000;
+ cur_sample->o2sensor[1].mbar = ( ((ptr[7] << 8) + ptr[6]) * o2_sensor_calibration_values[1]) / 10000;
+ cur_sample->o2sensor[2].mbar = ( ((ptr[9] << 8) + ptr[8]) * o2_sensor_calibration_values[2]) / 10000;
+ // Subsurface only handles 3 o2 sensors.
+ //cur_sample->o2sensor[3].mbar = ( ((ptr[11] << 8) + ptr[10]) * o2_sensor_calibration_values[3]) / 10000;
+ sample_end();
break;
case 4:
/* Measure GPS */