From f248a95d64a78b678a9c5b9b97d0a4e1598c7f32 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Fri, 21 Nov 2014 13:24:34 -0800 Subject: [PATCH] Oceanic Atom2: add extended string information parsing This adds the string field interface to the Oceanic Atom2 family, including the proper serial number handling. Signed-off-by: Dirk Hohndel Signed-off-by: Linus Torvalds --- src/oceanic_atom2.h | 2 +- src/oceanic_atom2_parser.c | 21 ++++++++++++++++++++- src/parser.c | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/oceanic_atom2.h b/src/oceanic_atom2.h index 25da953..657c719 100644 --- a/src/oceanic_atom2.h +++ b/src/oceanic_atom2.h @@ -37,7 +37,7 @@ dc_status_t oceanic_atom2_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream, unsigned int model); dc_status_t -oceanic_atom2_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +oceanic_atom2_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model, unsigned int serial); #ifdef __cplusplus } diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index 0550983..444ed1e 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -20,6 +20,8 @@ */ #include +#include +#include #include @@ -102,6 +104,7 @@ struct oceanic_atom2_parser_t { unsigned int model; unsigned int headersize; unsigned int footersize; + unsigned int serial; // Cached fields. unsigned int cached; unsigned int header; @@ -131,7 +134,7 @@ static const dc_parser_vtable_t oceanic_atom2_parser_vtable = { dc_status_t -oceanic_atom2_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +oceanic_atom2_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model, unsigned int serial) { oceanic_atom2_parser_t *parser = NULL; @@ -176,6 +179,7 @@ oceanic_atom2_parser_create (dc_parser_t **out, dc_context_t *context, unsigned parser->headersize = 5 * PAGESIZE; } + parser->serial = serial; parser->cached = 0; parser->header = 0; parser->footer = 0; @@ -366,6 +370,7 @@ oceanic_atom2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetim return DC_STATUS_SUCCESS; } +#define BUF_LEN 16 static dc_status_t oceanic_atom2_parser_cache (oceanic_atom2_parser_t *parser) @@ -502,6 +507,9 @@ oceanic_atom2_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, uns dc_gasmix_t *gasmix = (dc_gasmix_t *) value; dc_salinity_t *water = (dc_salinity_t *) value; + dc_field_string_t *string = (dc_field_string_t *) value; + + char buf[BUF_LEN]; if (value) { switch (type) { @@ -557,6 +565,17 @@ oceanic_atom2_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, uns return DC_STATUS_DATAFORMAT; } break; + case DC_FIELD_STRING: + switch(flags) { + case 0: /* Serial */ + string->desc = "Serial"; + snprintf(buf, BUF_LEN, "%06u", parser->serial); + break; + default: + return DC_STATUS_UNSUPPORTED; + } + string->value = strdup(buf); + break; default: return DC_STATUS_UNSUPPORTED; } diff --git a/src/parser.c b/src/parser.c index a04eb38..85247c6 100644 --- a/src/parser.c +++ b/src/parser.c @@ -120,7 +120,7 @@ dc_parser_new_internal (dc_parser_t **out, dc_context_t *context, dc_family_t fa if (model == REACTPROWHITE) rc = oceanic_veo250_parser_create (&parser, context, model); else - rc = oceanic_atom2_parser_create (&parser, context, model); + rc = oceanic_atom2_parser_create (&parser, context, model, serial); break; case DC_FAMILY_MARES_NEMO: case DC_FAMILY_MARES_PUCK: