mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2026-09-11 00:59:28 +00:00
AIS: Large refactor to separate packet decode from UI/log formatting.
This commit is contained in:
@@ -25,14 +25,69 @@
|
||||
#include "ui_console.hpp"
|
||||
#include "message.hpp"
|
||||
#include "log_file.hpp"
|
||||
#include "field_reader.hpp"
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <bitset>
|
||||
#include <utility>
|
||||
|
||||
namespace baseband {
|
||||
namespace ais {
|
||||
|
||||
using decoded_packet = std::pair<std::string, std::string>;
|
||||
struct BitRemap {
|
||||
size_t operator()(const size_t bit_index) const {
|
||||
return bit_index ^ 7;
|
||||
}
|
||||
};
|
||||
|
||||
using FieldReader = ::FieldReader<std::bitset<1024>, BitRemap>;
|
||||
|
||||
struct DateTime {
|
||||
uint16_t year;
|
||||
uint8_t month;
|
||||
uint8_t day;
|
||||
uint8_t hour;
|
||||
uint8_t minute;
|
||||
uint8_t second;
|
||||
};
|
||||
|
||||
using Latitude = int32_t;
|
||||
using Longitude = int32_t;
|
||||
|
||||
class Packet {
|
||||
public:
|
||||
constexpr Packet(
|
||||
const std::bitset<1024>& payload,
|
||||
const size_t payload_length
|
||||
) : payload_ { payload },
|
||||
payload_length_ { payload_length },
|
||||
field_ { payload_ }
|
||||
{
|
||||
}
|
||||
|
||||
size_t length() const;
|
||||
|
||||
bool is_valid() const;
|
||||
|
||||
uint32_t message_id() const;
|
||||
uint32_t source_id() const;
|
||||
|
||||
uint32_t read(const size_t start_bit, const size_t length) const;
|
||||
|
||||
std::string text(const size_t start_bit, const size_t character_count) const;
|
||||
|
||||
DateTime datetime(const size_t start_bit) const;
|
||||
|
||||
Latitude latitude(const size_t start_bit) const;
|
||||
Longitude longitude(const size_t start_bit) const;
|
||||
|
||||
private:
|
||||
const std::bitset<1024> payload_;
|
||||
const size_t payload_length_;
|
||||
const FieldReader field_;
|
||||
};
|
||||
|
||||
} /* namespace ais */
|
||||
} /* namespace baseband */
|
||||
@@ -41,7 +96,7 @@ class AISModel {
|
||||
public:
|
||||
AISModel();
|
||||
|
||||
baseband::ais::decoded_packet on_packet(const AISPacketMessage& message);
|
||||
bool on_packet(const baseband::ais::Packet& packet);
|
||||
|
||||
private:
|
||||
LogFile log_file;
|
||||
@@ -57,7 +112,7 @@ public:
|
||||
private:
|
||||
AISModel model;
|
||||
|
||||
void log(const baseband::ais::decoded_packet decoded);
|
||||
void log(const baseband::ais::Packet& packet);
|
||||
};
|
||||
|
||||
} /* namespace ui */
|
||||
|
||||
Reference in New Issue
Block a user