summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/parse-xml.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/core/parse-xml.c b/core/parse-xml.c
index 9cc5270e7..df05f5535 100644
--- a/core/parse-xml.c
+++ b/core/parse-xml.c
@@ -1682,6 +1682,12 @@ int parse_dlf_buffer(unsigned char *buffer, size_t size, struct dive_table *tabl
unsigned int time = 0;
int i;
char serial[6];
+ struct {
+ uint16_t volt1;
+ uint8_t percent1;
+ uint16_t volt2;
+ uint8_t percent2;
+ } battery = {0, 0, 0, 0};
target_table = table;
@@ -1980,8 +1986,12 @@ int parse_dlf_buffer(unsigned char *buffer, size_t size, struct dive_table *tabl
/* measure record */
switch (ptr[2] >> 5) {
case 1:
- /* Measure Battery */
- //printf("B1: %dmV %d% B2: %dmV %d%\n", (ptr[5] << 8) + ptr[4], (ptr[7] << 8) + ptr[6], (ptr[9] << 8) + ptr[8], (ptr[11] << 8) + ptr[10]);
+ /* Measure Battery, recording the last reading only */
+ battery.volt1 = (ptr[5] << 8) + ptr[4];
+ battery.percent1 = ptr[6];
+ battery.volt2 = (ptr[9] << 8) + ptr[8];
+ battery.percent2 = ptr[10];
+ break;
case 3:
/* Measure Oxygen */
//printf("o2 cells(0.01 mV): %d %d %d %d\n", (ptr[5] << 8) + ptr[4], (ptr[7] << 8) + ptr[6], (ptr[9] << 8) + ptr[8], (ptr[11] << 8) + ptr[10]);
@@ -2004,6 +2014,27 @@ int parse_dlf_buffer(unsigned char *buffer, size_t size, struct dive_table *tabl
break;
}
}
+
+ /* Recording the ending battery status to extra data */
+ if (battery.volt1) {
+ size_t size = snprintf(NULL, 0, "%dmV (%d%%)", battery.volt1, battery.percent1) + 1;
+ char *ptr = malloc(size);
+
+ if (ptr) {
+ snprintf(ptr, size, "%dmV (%d%%)", battery.volt1, battery.percent1);
+ add_extra_data(cur_dc, "Battery 1", ptr);
+ free(ptr);
+ }
+
+ size = snprintf(NULL, 0, "%dmV (%d%%)", battery.volt2, battery.percent2) + 1;
+ ptr = malloc(size);
+ if (ptr) {
+ snprintf(ptr, size, "%dmV (%d%%)", battery.volt2, battery.percent2);
+ add_extra_data(cur_dc, "Battery 2", ptr);
+ free(ptr);
+ }
+ }
+
divecomputer_end();
dive_end();
return 0;