mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-08-23 15:27:40 +00:00
Abstract packet type/implementation details.
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#include <functional>
|
||||
|
||||
#include "bit_pattern.hpp"
|
||||
#include "packet.hpp"
|
||||
|
||||
struct NeverMatch {
|
||||
bool operator()(const BitHistory&, const size_t) const {
|
||||
@@ -46,8 +47,7 @@ struct FixedLength {
|
||||
template<typename PreambleMatcher, typename UnstuffMatcher, typename EndMatcher>
|
||||
class PacketBuilder {
|
||||
public:
|
||||
using PayloadType = std::bitset<1024>;
|
||||
using PayloadHandlerFunc = std::function<void(const PayloadType& payload, const size_t bits_received)>;
|
||||
using PayloadHandlerFunc = std::function<void(const ::Packet& packet)>;
|
||||
|
||||
PacketBuilder(
|
||||
const PreambleMatcher preamble_matcher,
|
||||
@@ -78,18 +78,18 @@ public:
|
||||
|
||||
switch(state) {
|
||||
case State::Preamble:
|
||||
if( preamble(bit_history, bits_received) ) {
|
||||
if( preamble(bit_history, packet.size()) ) {
|
||||
state = State::Payload;
|
||||
}
|
||||
break;
|
||||
|
||||
case State::Payload:
|
||||
if( !unstuff(bit_history, bits_received) ) {
|
||||
payload[bits_received++] = symbol;
|
||||
if( !unstuff(bit_history, packet.size()) ) {
|
||||
packet.add(symbol);
|
||||
}
|
||||
|
||||
if( end(bit_history, bits_received) ) {
|
||||
payload_handler(payload, bits_received);
|
||||
if( end(bit_history, packet.size()) ) {
|
||||
payload_handler(packet);
|
||||
reset_state();
|
||||
} else {
|
||||
if( packet_truncated() ) {
|
||||
@@ -111,7 +111,7 @@ private:
|
||||
};
|
||||
|
||||
bool packet_truncated() const {
|
||||
return bits_received >= payload.size();
|
||||
return packet.size() >= packet.capacity();
|
||||
}
|
||||
|
||||
const PayloadHandlerFunc payload_handler;
|
||||
@@ -121,12 +121,11 @@ private:
|
||||
UnstuffMatcher unstuff;
|
||||
EndMatcher end;
|
||||
|
||||
size_t bits_received { 0 };
|
||||
State state { State::Preamble };
|
||||
PayloadType payload;
|
||||
::Packet packet;
|
||||
|
||||
void reset_state() {
|
||||
bits_received = 0;
|
||||
packet.clear();
|
||||
state = State::Preamble;
|
||||
}
|
||||
};
|
||||
|
@@ -60,11 +60,9 @@ void AISProcessor::consume_symbol(
|
||||
}
|
||||
|
||||
void AISProcessor::payload_handler(
|
||||
const std::bitset<1024>& payload,
|
||||
const size_t bits_received
|
||||
const ::Packet& packet
|
||||
) {
|
||||
AISPacketMessage message;
|
||||
message.packet.payload = payload;
|
||||
message.packet.bits_received = bits_received;
|
||||
message.packet.packet = packet;
|
||||
shared_memory.application_queue.push(message);
|
||||
}
|
||||
|
@@ -30,6 +30,7 @@
|
||||
#include "clock_recovery.hpp"
|
||||
#include "symbol_coding.hpp"
|
||||
#include "packet_builder.hpp"
|
||||
#include "packet.hpp"
|
||||
|
||||
#include "message.hpp"
|
||||
|
||||
@@ -41,8 +42,6 @@
|
||||
|
||||
class AISProcessor : public BasebandProcessor {
|
||||
public:
|
||||
using payload_t = std::bitset<1024>;
|
||||
|
||||
void execute(buffer_c8_t buffer) override;
|
||||
|
||||
private:
|
||||
@@ -58,13 +57,13 @@ private:
|
||||
{ 0b0101010101111110, 16, 1 },
|
||||
{ 0b111110, 6 },
|
||||
{ 0b01111110, 8 },
|
||||
[this](const payload_t& payload, const size_t bits_received) {
|
||||
this->payload_handler(payload, bits_received);
|
||||
[this](const ::Packet& packet) {
|
||||
this->payload_handler(packet);
|
||||
}
|
||||
};
|
||||
|
||||
void consume_symbol(const float symbol);
|
||||
void payload_handler(const payload_t& payload, const size_t bits_received);
|
||||
void payload_handler(const ::Packet& packet);
|
||||
};
|
||||
|
||||
#endif/*__PROC_AIS_H__*/
|
||||
|
@@ -95,23 +95,19 @@ void ERTProcessor::consume_symbol(
|
||||
}
|
||||
|
||||
void ERTProcessor::scm_handler(
|
||||
const std::bitset<1024>& payload,
|
||||
const size_t bits_received
|
||||
const ::Packet& packet
|
||||
) {
|
||||
ERTPacketMessage message;
|
||||
message.packet.type = ERTPacket::Type::SCM;
|
||||
message.packet.payload = payload;
|
||||
message.packet.bits_received = bits_received;
|
||||
message.packet.packet = packet;
|
||||
shared_memory.application_queue.push(message);
|
||||
}
|
||||
|
||||
void ERTProcessor::idm_handler(
|
||||
const std::bitset<1024>& payload,
|
||||
const size_t bits_received
|
||||
const ::Packet& packet
|
||||
) {
|
||||
ERTPacketMessage message;
|
||||
message.packet.type = ERTPacket::Type::IDM;
|
||||
message.packet.payload = payload;
|
||||
message.packet.bits_received = bits_received;
|
||||
message.packet.packet = packet;
|
||||
shared_memory.application_queue.push(message);
|
||||
}
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include "clock_recovery.hpp"
|
||||
#include "symbol_coding.hpp"
|
||||
#include "packet_builder.hpp"
|
||||
#include "packet.hpp"
|
||||
|
||||
#include "message.hpp"
|
||||
|
||||
@@ -45,13 +46,10 @@ constexpr size_t scm_payload_length_max { 150 };
|
||||
constexpr uint64_t idm_preamble_and_sync_manchester { 0b0110011001100110011001100110011001010110011010011001100101011010 };
|
||||
constexpr size_t idm_preamble_and_sync_length { 64 - 16 };
|
||||
|
||||
// TODO: Should be 1408, but need to widen pathway to application processor...
|
||||
constexpr size_t idm_payload_length_max { 960 };
|
||||
constexpr size_t idm_payload_length_max { 1408 };
|
||||
|
||||
class ERTProcessor : public BasebandProcessor {
|
||||
public:
|
||||
using payload_t = std::bitset<1024>;
|
||||
|
||||
void execute(buffer_c8_t buffer) override;
|
||||
|
||||
private:
|
||||
@@ -74,8 +72,8 @@ private:
|
||||
{ scm_preamble_and_sync_manchester, scm_preamble_and_sync_length, 1 },
|
||||
{ },
|
||||
{ scm_payload_length_max },
|
||||
[this](const payload_t& payload, const size_t bits_received) {
|
||||
this->scm_handler(payload, bits_received);
|
||||
[this](const ::Packet& packet) {
|
||||
this->scm_handler(packet);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -83,14 +81,14 @@ private:
|
||||
{ idm_preamble_and_sync_manchester, idm_preamble_and_sync_length, 1 },
|
||||
{ },
|
||||
{ idm_payload_length_max },
|
||||
[this](const payload_t& payload, const size_t bits_received) {
|
||||
this->idm_handler(payload, bits_received);
|
||||
[this](const ::Packet& packet) {
|
||||
this->idm_handler(packet);
|
||||
}
|
||||
};
|
||||
|
||||
void consume_symbol(const float symbol);
|
||||
void scm_handler(const payload_t& payload, const size_t bits_received);
|
||||
void idm_handler(const payload_t& payload, const size_t bits_received);
|
||||
void scm_handler(const ::Packet& packet);
|
||||
void idm_handler(const ::Packet& packet);
|
||||
|
||||
float sum_half_period[2];
|
||||
float sum_period[3];
|
||||
|
@@ -58,11 +58,9 @@ void TPMSProcessor::consume_symbol(
|
||||
}
|
||||
|
||||
void TPMSProcessor::payload_handler(
|
||||
const std::bitset<1024>& payload,
|
||||
const size_t bits_received
|
||||
const ::Packet& packet
|
||||
) {
|
||||
TPMSPacketMessage message;
|
||||
message.packet.payload = payload;
|
||||
message.packet.bits_received = bits_received;
|
||||
message.packet.packet = packet;
|
||||
shared_memory.application_queue.push(message);
|
||||
}
|
||||
|
@@ -30,6 +30,7 @@
|
||||
#include "clock_recovery.hpp"
|
||||
#include "symbol_coding.hpp"
|
||||
#include "packet_builder.hpp"
|
||||
#include "packet.hpp"
|
||||
|
||||
#include "message.hpp"
|
||||
|
||||
@@ -49,8 +50,6 @@ constexpr std::array<std::complex<float>, 8> rect_taps_153k6_1t_p { {
|
||||
|
||||
class TPMSProcessor : public BasebandProcessor {
|
||||
public:
|
||||
using payload_t = std::bitset<1024>;
|
||||
|
||||
void execute(buffer_c8_t buffer) override;
|
||||
|
||||
private:
|
||||
@@ -65,13 +64,13 @@ private:
|
||||
{ 0b010101010101010101010101010110, 30, 1 },
|
||||
{ },
|
||||
{ 256 },
|
||||
[this](const payload_t& payload, const size_t bits_received) {
|
||||
this->payload_handler(payload, bits_received);
|
||||
[this](const ::Packet& packet) {
|
||||
this->payload_handler(packet);
|
||||
}
|
||||
};
|
||||
|
||||
void consume_symbol(const float symbol);
|
||||
void payload_handler(const payload_t& payload, const size_t bits_received);
|
||||
void payload_handler(const ::Packet& packet);
|
||||
};
|
||||
|
||||
#endif/*__PROC_TPMS_H__*/
|
||||
|
Reference in New Issue
Block a user