mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-08-14 11:38:12 +00:00
Nascent support for OOK TPMS transponders.
Apparently, Subaru and GMC. No CRC or other validation, no attempt to interpret packet contents yet.
This commit is contained in:
@@ -21,8 +21,6 @@
|
|||||||
|
|
||||||
#include "proc_tpms.hpp"
|
#include "proc_tpms.hpp"
|
||||||
|
|
||||||
#include "portapack_shared_memory.hpp"
|
|
||||||
|
|
||||||
#include "dsp_fir_taps.hpp"
|
#include "dsp_fir_taps.hpp"
|
||||||
|
|
||||||
TPMSProcessor::TPMSProcessor() {
|
TPMSProcessor::TPMSProcessor() {
|
||||||
@@ -45,6 +43,18 @@ void TPMSProcessor::execute(const buffer_c8_t& buffer) {
|
|||||||
clock_recovery(mf.get_output());
|
clock_recovery(mf.get_output());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(size_t i=0; i<decim_1_out.count; i+=channel_decimation) {
|
||||||
|
const auto sliced = ook_slicer_5sps(decim_1_out.p[i]);
|
||||||
|
slicer_history = (slicer_history << 1) | sliced;
|
||||||
|
|
||||||
|
ook_clock_recovery_subaru(slicer_history, [this](const bool symbol) {
|
||||||
|
this->packet_builder_ook_subaru.execute(symbol);
|
||||||
|
});
|
||||||
|
ook_clock_recovery_gmc(slicer_history, [this](const bool symbol) {
|
||||||
|
this->packet_builder_ook_gmc.execute(symbol);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPMSProcessor::consume_symbol(
|
void TPMSProcessor::consume_symbol(
|
||||||
|
@@ -32,7 +32,10 @@
|
|||||||
#include "packet_builder.hpp"
|
#include "packet_builder.hpp"
|
||||||
#include "baseband_packet.hpp"
|
#include "baseband_packet.hpp"
|
||||||
|
|
||||||
|
#include "ook.hpp"
|
||||||
|
|
||||||
#include "message.hpp"
|
#include "message.hpp"
|
||||||
|
#include "portapack_shared_memory.hpp"
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
@@ -83,6 +86,38 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static constexpr float channel_rate_in = 307200.0f;
|
||||||
|
static constexpr size_t channel_decimation = 8;
|
||||||
|
static constexpr float channel_sample_rate = channel_rate_in / channel_decimation;
|
||||||
|
OOKSlicerMagSquaredInt ook_slicer_5sps { 5 };
|
||||||
|
uint32_t slicer_history { 0 };
|
||||||
|
|
||||||
|
OOKClockRecovery ook_clock_recovery_subaru {
|
||||||
|
channel_sample_rate / 8192.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
PacketBuilder<BitPattern, NeverMatch, FixedLength> packet_builder_ook_subaru {
|
||||||
|
{ 0b010101010101010101011110, 24, 0 },
|
||||||
|
{ },
|
||||||
|
{ 80 },
|
||||||
|
[](const baseband::Packet& packet) {
|
||||||
|
const TPMSPacketMessage message { tpms::SignalType::Subaru, packet };
|
||||||
|
shared_memory.application_queue.push(message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OOKClockRecovery ook_clock_recovery_gmc {
|
||||||
|
channel_sample_rate / 8400.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
PacketBuilder<BitPattern, NeverMatch, FixedLength> packet_builder_ook_gmc {
|
||||||
|
{ 0b01010101010101010101010101100101, 32, 0 },
|
||||||
|
{ },
|
||||||
|
{ 192 },
|
||||||
|
[](const baseband::Packet& packet) {
|
||||||
|
const TPMSPacketMessage message { tpms::SignalType::GMC, packet };
|
||||||
|
shared_memory.application_queue.push(message);
|
||||||
|
}
|
||||||
|
};
|
||||||
void consume_symbol(const float symbol);
|
void consume_symbol(const float symbol);
|
||||||
void payload_handler(const baseband::Packet& packet);
|
void payload_handler(const baseband::Packet& packet);
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user