Skip to content

Commit

Permalink
fix Shearwater PNF parsing for Petrel / Petrel 2
Browse files Browse the repository at this point in the history
At some point (possibly around v71 of their firmware), Shearwater implemented
PNF for the Petrel and Petrel 2. Those are of course not air integrated, and
apparently don't support adjustable sample rate, so the log data doesn't include
opening and closing record 5. Instead of failing when those aren't found, we
should simply only access those when they actually exist.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
  • Loading branch information
dirkhh committed Sep 19, 2020
1 parent 2e63eae commit 8e1335e
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/shearwater_predator_parser.c
Expand Up @@ -562,7 +562,10 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser)
}

// Verify the required opening/closing records.
for (unsigned int i = 0; i < NRECORDS - 2; ++i) {
// At least in firmware v71 and newer, Petrel and Petrel 2 also use PNF,
// and there opening/closing record 5 (which contains AI information plus
// the sample interval) don't appear to exist - so don't mark them as required
for (unsigned int i = 0; i <= 4; ++i) {
if (parser->opening[i] == UNDEFINED || parser->closing[i] == UNDEFINED) {
ERROR (abstract->context, "Opening or closing record %u not found.", i);
return DC_STATUS_DATAFORMAT;
Expand Down Expand Up @@ -739,7 +742,7 @@ shearwater_predator_parser_samples_foreach (dc_parser_t *abstract, dc_sample_cal
// Sample interval.
unsigned int time = 0;
unsigned int interval = 10;
if (parser->pnf && parser->logversion >= 9) {
if (parser->pnf && parser->logversion >= 9 && parser->opening[5] != UNDEFINED) {
interval = array_uint16_be (data + parser->opening[5] + 23);
if (interval % 1000 != 0) {
ERROR (abstract->context, "Unsupported sample interval (%u ms).", interval);
Expand Down

0 comments on commit 8e1335e

Please sign in to comment.