Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/hw_ostc_parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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) {
Expand Down
Loading