Skip to content
Snippets Groups Projects
Commit d03325d4 authored by Adrien van den Bossche's avatar Adrien van den Bossche
Browse files

Add `valid_gnss_position` flag

parent 176daba6
Branches
No related tags found
No related merge requests found
......@@ -134,16 +134,19 @@ int Locapack::decodePacket(protocol_version_t* protocol_version, uint8_t* moveme
}
int Locapack::makeUniversalGnssPayload(float latitude, float longitude, bool altitude_present, float altitude,
int Locapack::makeUniversalGnssPayload(bool valid_gnss_position, float latitude, float longitude, bool altitude_present, float altitude,
bool dop_present, float dop, uint8_t* buffer)
{
int len = 0;
buffer[0] = (altitude_present == true ? 0x80 : 0) | (dop_present == true ? 0x40 : 0);
buffer[0] = (altitude_present == true ? 0x80 : 0) | (dop_present == true ? 0x40 : 0) | (valid_gnss_position == true ? 0x20 : 0);
len += 1;
encodeFloat(latitude, &buffer[len]); len += 4;
encodeFloat(longitude, &buffer[len]); len += 4;
if (valid_gnss_position)
{
encodeFloat(latitude, &buffer[len]); len += 4;
encodeFloat(longitude, &buffer[len]); len += 4;
}
if (altitude_present)
{
encodeFloat(altitude, &buffer[len]); len += 4;
......@@ -156,16 +159,20 @@ int Locapack::makeUniversalGnssPayload(float latitude, float longitude, bool alt
}
int Locapack::decodeUniversalGnssPayload(float* latitude, float* longitude, bool* altitude_present, float* altitude,
int Locapack::decodeUniversalGnssPayload(bool* valid_gnss_position, float* latitude, float* longitude, bool* altitude_present, float* altitude,
bool* dop_present, float* dop, uint8_t* buffer)
{
int len = 0;
if (buffer[0] & 0x80) *altitude_present = true; else *altitude_present = false;
if (buffer[0] & 0x40) *dop_present = true; else *dop_present = false;
if (buffer[0] & 0x20) *valid_gnss_position = true; else *valid_gnss_position = false;
len += 1;
*latitude = decodeFloat(&buffer[len]); len += 4;
*longitude = decodeFloat(&buffer[len]); len += 4;
if (*valid_gnss_position)
{
*latitude = decodeFloat(&buffer[len]); len += 4;
*longitude = decodeFloat(&buffer[len]); len += 4;
}
if (*altitude_present)
{
*altitude = decodeFloat(&buffer[len]); len += 4;
......@@ -185,6 +192,7 @@ int Locapack::createUniversalGnssPacket(universalGnssPacket_t* universalGnssPack
int payload_buffer_len = 0;
payload_buffer_len = makeUniversalGnssPayload(
universalGnssPacket->valid_gnss_position,
universalGnssPacket->latitude,
universalGnssPacket->longitude,
universalGnssPacket->altitude_present,
......@@ -327,7 +335,8 @@ int Locapack::parseLocaPacket(locapacket_t* locapacket, uint8_t* buffer)
switch (packet_type)
{
case PACKET_TYPE_UNIVERSAL_GNSS:
decoded_payload_len = decodeUniversalGnssPayload(&locapacket->universalGnssPacket.latitude,
decoded_payload_len = decodeUniversalGnssPayload(&locapacket->universalGnssPacket.valid_gnss_position,
&locapacket->universalGnssPacket.latitude,
&locapacket->universalGnssPacket.longitude,
&locapacket->universalGnssPacket.altitude_present,
&locapacket->universalGnssPacket.altitude,
......
......@@ -45,6 +45,7 @@ class Locapack {
/// @brief
///
typedef struct {
bool valid_gnss_position;
float latitude;
float longitude;
bool altitude_present;
......@@ -149,14 +150,14 @@ class Locapack {
/// @brief
/// @param
///
int makeUniversalGnssPayload(float latitude, float longitude, bool altitude_present, float altitude,
int makeUniversalGnssPayload(bool valid_gnss_position, float latitude, float longitude, bool altitude_present, float altitude,
bool dop_present, float dop, uint8_t* buffer);
///
/// @brief
/// @param
///
int decodeUniversalGnssPayload(float* latitude, float* longitude, bool* altitude_present, float* altitude,
int decodeUniversalGnssPayload(bool* valid_gnss_position, float* latitude, float* longitude, bool* altitude_present, float* altitude,
bool* dop_present, float* dop, uint8_t* buffer);
///
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment