mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 20:30:05 +00:00
Parse Performance/Maintenance Data (Message Type 3)
This commit is contained in:
parent
e440d8c657
commit
2fc12d44db
10 changed files with 2854 additions and 86 deletions
|
|
@ -10,12 +10,6 @@
|
|||
#include <boost/iostreams/filter/bzip2.hpp>
|
||||
#include <boost/log/trivial.hpp>
|
||||
|
||||
#ifdef WIN32
|
||||
# include <WinSock2.h>
|
||||
#else
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace wsr88d
|
||||
|
|
|
|||
|
|
@ -1,16 +1,9 @@
|
|||
#include <scwx/wsr88d/rda/clutter_filter_map.hpp>
|
||||
|
||||
#include <istream>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/log/trivial.hpp>
|
||||
|
||||
#ifdef WIN32
|
||||
# include <WinSock2.h>
|
||||
#else
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace wsr88d
|
||||
|
|
@ -205,7 +198,7 @@ bool ClutterFilterMap::Parse(std::istream& is)
|
|||
}
|
||||
}
|
||||
|
||||
if (!ValidateSize(is, bytesRead))
|
||||
if (!ValidateMessage(is, bytesRead))
|
||||
{
|
||||
messageValid = false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
#include <scwx/wsr88d/rda/message.hpp>
|
||||
|
||||
#include <istream>
|
||||
|
||||
#include <boost/log/trivial.hpp>
|
||||
|
||||
namespace scwx
|
||||
|
|
@ -28,12 +26,23 @@ Message::~Message() = default;
|
|||
Message::Message(Message&&) noexcept = default;
|
||||
Message& Message::operator=(Message&&) noexcept = default;
|
||||
|
||||
bool Message::ValidateSize(std::istream& is, size_t bytesRead) const
|
||||
bool Message::ValidateMessage(std::istream& is, size_t bytesRead) const
|
||||
{
|
||||
bool messageValid = true;
|
||||
size_t dataSize = header().message_size() * 2 - header().SIZE;
|
||||
|
||||
if (bytesRead != dataSize)
|
||||
if (is.eof())
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(warning) << logPrefix_ << "Reached end of file";
|
||||
messageValid = false;
|
||||
}
|
||||
else if (is.fail())
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(warning)
|
||||
<< logPrefix_ << "Could not read from input stream";
|
||||
messageValid = false;
|
||||
}
|
||||
else if (bytesRead != dataSize)
|
||||
{
|
||||
is.seekg(static_cast<std::streamoff>(dataSize) -
|
||||
static_cast<std::streamoff>(bytesRead),
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
#include <scwx/util/vectorbuf.hpp>
|
||||
#include <scwx/wsr88d/rda/clutter_filter_map.hpp>
|
||||
#include <scwx/wsr88d/rda/performance_maintenance_data.hpp>
|
||||
#include <scwx/wsr88d/rda/rda_adaptation_data.hpp>
|
||||
|
||||
#include <istream>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
|
|
@ -23,7 +23,9 @@ typedef std::function<std::unique_ptr<Message>(MessageHeader&&, std::istream&)>
|
|||
CreateMessageFunction;
|
||||
|
||||
static const std::unordered_map<uint8_t, CreateMessageFunction> create_ {
|
||||
{15, ClutterFilterMap::Create}, {18, RdaAdaptationData::Create}};
|
||||
{3, PerformanceMaintenanceData::Create},
|
||||
{15, ClutterFilterMap::Create},
|
||||
{18, RdaAdaptationData::Create}};
|
||||
|
||||
static std::vector<char> messageData_;
|
||||
static size_t bufferedSize_;
|
||||
|
|
|
|||
2483
wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp
Normal file
2483
wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue