diff --git a/firmware/baseband/proc_tpms.cpp b/firmware/baseband/proc_tpms.cpp index 1ea152f6..9d401a1c 100644 --- a/firmware/baseband/proc_tpms.cpp +++ b/firmware/baseband/proc_tpms.cpp @@ -21,8 +21,6 @@ #include "proc_tpms.hpp" -#include "portapack_shared_memory.hpp" - #include "dsp_fir_taps.hpp" TPMSProcessor::TPMSProcessor() { @@ -45,6 +43,18 @@ void TPMSProcessor::execute(const buffer_c8_t& buffer) { clock_recovery(mf.get_output()); } } + + for(size_t i=0; ipacket_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( diff --git a/firmware/baseband/proc_tpms.hpp b/firmware/baseband/proc_tpms.hpp index 0c42beb7..759f7383 100644 --- a/firmware/baseband/proc_tpms.hpp +++ b/firmware/baseband/proc_tpms.hpp @@ -32,7 +32,10 @@ #include "packet_builder.hpp" #include "baseband_packet.hpp" +#include "ook.hpp" + #include "message.hpp" +#include "portapack_shared_memory.hpp" #include #include @@ -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 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 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 payload_handler(const baseband::Packet& packet); };