Parse Performance/Maintenance Data (Message Type 3)

This commit is contained in:
Dan Paulat 2021-06-19 15:58:36 -05:00
parent e440d8c657
commit 2fc12d44db
10 changed files with 2854 additions and 86 deletions

View file

@ -1,18 +1,7 @@
#include <scwx/wsr88d/rda/rda_adaptation_data.hpp>
#include <array>
#include <execution>
#include <istream>
#include <map>
#include <boost/log/trivial.hpp>
#ifdef WIN32
# include <WinSock2.h>
#else
# include <arpa/inet.h>
#endif
namespace scwx
{
namespace wsr88d
@ -23,14 +12,6 @@ namespace rda
static const std::string logPrefix_ =
"[scwx::wsr88d::rda::rda_adaptation_data] ";
static void ReadBoolean(std::istream& is, bool& value);
static void ReadChar(std::istream& is, char& value);
static float SwapFloat(float f);
template<size_t _Size>
static void SwapFloatArray(std::array<float, _Size>& arr);
template<typename T>
static void SwapFloatMap(std::map<T, float>& m);
struct AntManualSetup
{
int32_t ielmin_;
@ -1757,13 +1738,7 @@ bool RdaAdaptationData::Parse(std::istream& is)
p->txbBaseline_ = SwapFloat(p->txbBaseline_);
p->txbAlarmThresh_ = SwapFloat(p->txbAlarmThresh_);
if (is.eof())
{
BOOST_LOG_TRIVIAL(warning) << logPrefix_ << "Reached end of file (1)";
messageValid = false;
}
if (!ValidateSize(is, bytesRead))
if (!ValidateMessage(is, bytesRead))
{
messageValid = false;
}
@ -1781,43 +1756,6 @@ RdaAdaptationData::Create(MessageHeader&& header, std::istream& is)
return message;
}
static void ReadBoolean(std::istream& is, bool& value)
{
std::string data(4, ' ');
is.read(reinterpret_cast<char*>(&data[0]), 4);
value = (data.at(0) == 'T');
}
static void ReadChar(std::istream& is, char& value)
{
std::string data(4, ' ');
is.read(reinterpret_cast<char*>(&data[0]), 4);
value = data.at(0);
}
static float SwapFloat(float f)
{
return ntohf(*reinterpret_cast<uint32_t*>(&f));
}
template<size_t _Size>
static void SwapFloatArray(std::array<float, _Size>& arr)
{
std::transform(std::execution::par_unseq,
arr.begin(),
arr.end(),
arr.begin(),
[](float f) { return SwapFloat(f); });
}
template<typename T>
static void SwapFloatMap(std::map<T, float>& m)
{
std::for_each(std::execution::par_unseq, m.begin(), m.end(), [](auto& p) {
p.second = SwapFloat(p.second);
});
}
} // namespace rda
} // namespace wsr88d
} // namespace scwx