diff --git a/src/hw_ostc_parser.c b/src/hw_ostc_parser.c index 160e5d1b..4727c7a3 100644 --- a/src/hw_ostc_parser.c +++ b/src/hw_ostc_parser.c @@ -153,6 +153,11 @@ typedef struct hw_ostc_parser_t { bool scrubber_warning_reported; } hw_ostc_parser_t; +typedef union { + unsigned int intval; + float floatval; +} coordinate_value_t; + static dc_status_t hw_ostc_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t hw_ostc_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t hw_ostc_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -1203,6 +1208,24 @@ hw_ostc_parser_internal_foreach (hw_ostc_parser_t *parser, dc_sample_callback_t length -= 2; } + // GNSS position update (placeholder for now) + if (events & 0x0400) { + if (length < 8) { + ERROR (abstract->context, "Buffer underflow detected!"); + return DC_STATUS_DATAFORMAT; + } + + coordinate_value_t lon; + lon.intval = array_uint32_le(data + offset); // Longitude + coordinate_value_t lat; + lat.intval = array_uint32_le(data + offset + 4); // Latitude + + INFO(abstract->context, "Received GPS coordinates %f / %f", lat.floatval, lon.floatval); + + offset += 8; + length -= 8; + } + // Scrubber state update if (events & 0x0800) { if (length < 2) {