Skip to content
Open
Changes from 1 commit
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 = (float)array_uint32_le(data + offset); // Longitude
coordinate_value_t lat;
lat.intval = (float)array_uint32_le(data + offset + 4); // Latitude
Copy link

Copilot AI Jun 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue here: the cast to float before storing in intval will yield incorrect floatval. Use lat.intval = array_uint32_le(data + offset + 4); or parse into floatval directly.

Suggested change
lon.intval = (float)array_uint32_le(data + offset); // Longitude
coordinate_value_t lat;
lat.intval = (float)array_uint32_le(data + offset + 4); // Latitude
lon.intval = array_uint32_le(data + offset); // Longitude
coordinate_value_t lat;
lat.intval = array_uint32_le(data + offset + 4); // Latitude

Copilot uses AI. Check for mistakes.

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