diff --git a/examples/universal.c b/examples/universal.c index 48d0fb1..227fb6f 100644 --- a/examples/universal.c +++ b/examples/universal.c @@ -319,7 +319,7 @@ doparse (FILE *fp, device_data_t *devdata, const unsigned char data[], unsigned rc = oceanic_vtpro_parser_create (&parser); break; case DEVICE_TYPE_OCEANIC_VEO250: - rc = oceanic_veo250_parser_create (&parser); + rc = oceanic_veo250_parser_create (&parser, devdata->devinfo.model); break; case DEVICE_TYPE_OCEANIC_ATOM2: rc = oceanic_atom2_parser_create (&parser, devdata->devinfo.model); diff --git a/src/oceanic_veo250.h b/src/oceanic_veo250.h index b61aef8..c678556 100644 --- a/src/oceanic_veo250.h +++ b/src/oceanic_veo250.h @@ -36,7 +36,7 @@ device_status_t oceanic_veo250_device_keepalive (device_t *device); parser_status_t -oceanic_veo250_parser_create (parser_t **parser); +oceanic_veo250_parser_create (parser_t **parser, unsigned int model); #ifdef __cplusplus } diff --git a/src/oceanic_veo250_parser.c b/src/oceanic_veo250_parser.c index 5954566..ebb2c53 100644 --- a/src/oceanic_veo250_parser.c +++ b/src/oceanic_veo250_parser.c @@ -33,6 +33,7 @@ typedef struct oceanic_veo250_parser_t oceanic_veo250_parser_t; struct oceanic_veo250_parser_t { parser_t base; + unsigned int model; }; static parser_status_t oceanic_veo250_parser_set_data (parser_t *abstract, const unsigned char *data, unsigned int size); @@ -60,7 +61,7 @@ parser_is_oceanic_veo250 (parser_t *abstract) parser_status_t -oceanic_veo250_parser_create (parser_t **out) +oceanic_veo250_parser_create (parser_t **out, unsigned int model) { if (out == NULL) return PARSER_STATUS_ERROR; @@ -75,6 +76,9 @@ oceanic_veo250_parser_create (parser_t **out) // Initialize the base class. parser_init (&parser->base, &oceanic_veo250_parser_backend); + // Set the default values. + parser->model = model; + *out = (parser_t*) parser; return PARSER_STATUS_SUCCESS; @@ -107,18 +111,23 @@ oceanic_veo250_parser_set_data (parser_t *abstract, const unsigned char *data, u static parser_status_t oceanic_veo250_parser_get_datetime (parser_t *abstract, dc_datetime_t *datetime) { + oceanic_veo250_parser_t *parser = (oceanic_veo250_parser_t *) abstract; + if (abstract->size < 8) return PARSER_STATUS_ERROR; const unsigned char *p = abstract->data; if (datetime) { - datetime->year = ((p[5] & 0xF0) >> 4) + ((p[1] & 0xE0) >> 1) + 2003; + datetime->year = ((p[5] & 0xF0) >> 4) + ((p[1] & 0xE0) >> 1) + 2000; datetime->month = ((p[7] & 0xF0) >> 4); datetime->day = p[1] & 0x1F; datetime->hour = p[3]; datetime->minute = p[2]; datetime->second = 0; + + if (parser->model == 0x424B || parser->model == 0x424C) + datetime->year += 3; } return PARSER_STATUS_SUCCESS;