Draw 4-bit encoded radial data

This commit is contained in:
Dan Paulat 2022-04-08 21:49:10 -05:00
parent 41b491314b
commit 8d1be0f54a
7 changed files with 158 additions and 25 deletions

View file

@ -0,0 +1,37 @@
#include <scwx/wsr88d/rpg/generic_radial_data_packet.hpp>
#include <string>
#include <boost/log/trivial.hpp>
namespace scwx
{
namespace wsr88d
{
namespace rpg
{
static const std::string logPrefix_ =
"[scwx::wsr88d::rpg::generic_radial_data_packet] ";
class GenericRadialDataPacketImpl
{
public:
explicit GenericRadialDataPacketImpl() = default;
~GenericRadialDataPacketImpl() = default;
};
GenericRadialDataPacket::GenericRadialDataPacket() :
p(std::make_unique<GenericRadialDataPacketImpl>())
{
}
GenericRadialDataPacket::~GenericRadialDataPacket() = default;
GenericRadialDataPacket::GenericRadialDataPacket(
GenericRadialDataPacket&&) noexcept = default;
GenericRadialDataPacket& GenericRadialDataPacket::operator=(
GenericRadialDataPacket&&) noexcept = default;
} // namespace rpg
} // namespace wsr88d
} // namespace scwx

View file

@ -24,9 +24,14 @@ public:
uint16_t startAngle_;
uint16_t angleDelta_;
std::vector<uint8_t> data_;
std::vector<uint8_t> level_;
Radial() :
numberOfRleHalfwords_ {0}, startAngle_ {0}, angleDelta_ {0}, data_ {}
numberOfRleHalfwords_ {0},
startAngle_ {0},
angleDelta_ {0},
data_ {},
level_ {}
{
}
};
@ -103,6 +108,21 @@ uint16_t RadialDataPacket::number_of_radials() const
return p->numberOfRadials_;
}
float RadialDataPacket::start_angle(uint16_t r) const
{
return p->radial_[r].startAngle_ * 0.1f;
}
float RadialDataPacket::delta_angle(uint16_t r) const
{
return p->radial_[r].angleDelta_ * 0.1f;
}
const std::vector<uint8_t>& RadialDataPacket::level(uint16_t r) const
{
return p->radial_[r].level_;
}
size_t RadialDataPacket::data_size() const
{
return p->dataSize_;
@ -197,6 +217,14 @@ bool RadialDataPacket::Parse(std::istream& is)
{
radial.data_.pop_back();
}
radial.level_.resize(radial.data_.size());
std::transform(std::execution::par_unseq,
radial.data_.cbegin(),
radial.data_.cend(),
radial.level_.begin(),
[](uint8_t data) -> uint8_t { return data & 0x0f; });
}
}