Fix the year offset for some models.

This commit is contained in:
Jef Driesen 2010-08-09 12:04:33 +02:00
parent 79dfa4becb
commit 87226652df
3 changed files with 13 additions and 4 deletions

View File

@ -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);

View File

@ -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
}

View File

@ -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;