AIS: Large refactor to separate packet decode from UI/log formatting.

This commit is contained in:
Jared Boone
2015-12-02 12:16:39 -08:00
parent 4baf2a06f2
commit b8ee19f8e6
2 changed files with 184 additions and 154 deletions
+58 -3
View File
@@ -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 */