1#ifndef NIX_LIBS_NMEA_NMEATOOLS_HPP_
2#define NIX_LIBS_NMEA_NMEATOOLS_HPP_
12#define MINUTE_LENGTH 8
13#define KNOTS_TO_MPS 0.514444444
24 uint16_t checkSum {0};
29 for (std::string msgFiltered =
33 const char c: msgFiltered)
35 checkSum ^=
static_cast<uint8_t
>(c);
39 std::stringstream stream;
40 stream << std::uppercase << std::hex << checkSum;
42 std::string hexCheckSum = stream.str();
43 if (hexCheckSum.length() < 2)
45 hexCheckSum =
"0" + hexCheckSum;
58inline double degreesToDecimal(
const int32_t degrees,
const double minutes,
const int32_t seconds = 0)
60 return (degrees * 60) + minutes +
static_cast<float>(seconds) / 3600.0f;
63inline std::vector<std::string>
splitStringBy(
const std::string &sentence,
const char delimiter)
65 std::vector<std::string> returnVector;
66 std::stringstream ssSentence(sentence);
69 while (std::getline(ssSentence, element, delimiter))
71 returnVector.push_back(element);
90 std::string degreeArray;
91 std::string minuteArray;
94 degreeArray.assign(array.begin(), array.end() -
MINUTE_LENGTH);
154 std::string_view hours = data.substr(0, 2);
155 std::string_view minutes = data.substr(2, 2);
156 std::string_view seconds = data.substr(4, 2);
157 return fmt::format(
"Hours: {}, Minutes: {}, Seconds: {}", hours, minutes, seconds);
170 else if (data ==
"M")
186inline std::optional<iv::types::channelValue>
processValue(std::string_view stringValue,
189 std::optional<iv::types::channelValue> retValue;
191 switch (nmeaFieldType)
207 retValue = stringValue.at(0);
#define IV_ASSERT_MSG(msg,...)
Definition assert.hpp:152
eFieldType
Definition enums.hpp:328
bool getCoordinates(std::string array, double &decimalDegrees)
Converts a string with the format "D*MM.MMMM" to decimal degrees.
Definition functions.hpp:84
std::optional< float > nmea0183FieldToFloat(std::string_view data)
Converts a NMEA0183 field to a float.
Definition functions.hpp:141
double degreesToDecimal(const int32_t degrees, const double minutes, const int32_t seconds=0)
Converts degress, minutes and seconds to decimal geometric degrees.
Definition functions.hpp:58
std::optional< bool > nmea0183FieldToBoolean(std::string_view data)
Converts a NMEA0183 field to a boolean.
Definition functions.hpp:110
std::optional< std::string > nmea0183FieldToTime(std::string_view data)
Converts a NMEA0183 time field to a string representation of day time.
Definition functions.hpp:151
std::optional< uint16_t > nmea0183FieldToInteger(std::string_view data)
Converts a NMEA0183 field to an integer.
Definition functions.hpp:131
std::string nmeaChecksum(const std::string &completeMsg)
Compute the checksum of a message for NMEA0183.
Definition functions.hpp:22
std::optional< iv::comms::nmea0183::Pole > nmeaField0183ToPole(std::string_view data)
Converts a NMEA0183 field to a Pole.
Definition functions.hpp:164
std::optional< iv::types::channelValue > processValue(std::string_view stringValue, iv::comms::nmea0183::eFieldType nmeaFieldType)
parses the value of a NMEA0183 field according to it's type
Definition functions.hpp:186
std::vector< std::string > splitStringBy(const std::string &sentence, const char delimiter)
Definition functions.hpp:63
constexpr uint8_t nmeaChecksumDelimiter
Definition defines.hpp:118
constexpr uint8_t nmeaHeaderStart
Definition defines.hpp:116
std::optional< T > parseNumber(const Str &stringNumber)
Definition parsers.hpp:12
#define MINUTE_LENGTH
Definition functions.hpp:12