From 9f754dc563a78b9fecc6f62b26a0b97915d4eb65 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Fri, 7 Jul 2017 07:03:13 -0700 Subject: [PATCH] Shearwater: extract log version from header The earliest document I have references log version 6. There are apparently older versions, but I don't know what the differences are. Before version 7, the log version wasn't always reliably stored, so we assume 6 is the minimum and use 7 (or later) if we find it. [Jef Driesen: Initialize and reset the cache correctly.] Signed-off-by: Dirk Hohndel --- src/shearwater_predator_parser.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/shearwater_predator_parser.c b/src/shearwater_predator_parser.c index 4217f54..389c8e8 100644 --- a/src/shearwater_predator_parser.c +++ b/src/shearwater_predator_parser.c @@ -60,6 +60,7 @@ struct shearwater_predator_parser_t { unsigned int samplesize; // Cached fields. unsigned int cached; + unsigned int logversion; unsigned int headersize; unsigned int footersize; unsigned int ngasmixes; @@ -139,6 +140,7 @@ shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, unsig parser->petrel = petrel; parser->samplesize = samplesize; parser->cached = 0; + parser->logversion = 0; parser->headersize = 0; parser->footersize = 0; parser->ngasmixes = 0; @@ -175,6 +177,7 @@ shearwater_predator_parser_set_data (dc_parser_t *abstract, const unsigned char // Reset the cache. parser->cached = 0; + parser->logversion = 0; parser->headersize = 0; parser->footersize = 0; parser->ngasmixes = 0; @@ -226,6 +229,12 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser) return DC_STATUS_DATAFORMAT; } + // Log versions before 6 weren't reliably stored in the data, but + // 6 is also the oldest version that we assume in our code + unsigned int logversion = 6; + if (data[127] > 6) + logversion = data[127]; + // Adjust the footersize for the final block. if (parser->petrel || array_uint16_be (data + size - footersize) == 0xFFFD) { footersize += SZ_BLOCK; @@ -304,6 +313,7 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser) } // Cache the data for later use. + parser->logversion = logversion; parser->headersize = headersize; parser->footersize = footersize; parser->ngasmixes = ngasmixes;