From 547b1cfd156c9679cae3f245d51ed5ef80c4113a Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Thu, 8 Dec 2022 19:04:44 +0100 Subject: [PATCH] Parse the timezone setting Since firmware version 5B and later, a timezone offset is available. --- src/deepsix_excursion_parser.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/deepsix_excursion_parser.c b/src/deepsix_excursion_parser.c index 8f14708..8e68702 100644 --- a/src/deepsix_excursion_parser.c +++ b/src/deepsix_excursion_parser.c @@ -41,6 +41,10 @@ #define DENSITY 1024.0 +#define FWVERSION(major,minor) ( \ + ((((major) + '0') & 0xFF) << 8) | \ + ((minor) & 0xFF)) + typedef struct deepsix_excursion_parser_t { dc_parser_t base; } deepsix_excursion_parser_t; @@ -98,6 +102,8 @@ deepsix_excursion_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *dat if (size < HEADERSIZE) return DC_STATUS_DATAFORMAT; + unsigned int firmware = array_uint16_be (data + 48 + 4); + if (datetime) { datetime->year = data[12] + 2000; datetime->month = data[13]; @@ -105,7 +111,12 @@ deepsix_excursion_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *dat datetime->hour = data[15]; datetime->minute = data[16]; datetime->second = data[17]; - datetime->timezone = DC_TIMEZONE_NONE; + + if (firmware >= FWVERSION(5, 'B')) { + datetime->timezone = (data[18] - 12) * 3600; + } else { + datetime->timezone = DC_TIMEZONE_NONE; + } } return DC_STATUS_SUCCESS;