From 19ae8c48a89ae54bae26ed188819b2bc038ca84f Mon Sep 17 00:00:00 2001 From: Peter Antypas Date: Mon, 19 Jun 2023 06:58:10 -0700 Subject: [PATCH] Leaving this branch alone --- .../Transponder/Inc/RXPacketProcessor.hpp | 2 + .../Transponder/Src/RXPacketProcessor.cpp | 37 +++++++++++++++++-- .../Firmware/Transponder/Src/bsp/bsp_11_3.cpp | 9 +++++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/latest/Firmware/Transponder/Inc/RXPacketProcessor.hpp b/latest/Firmware/Transponder/Inc/RXPacketProcessor.hpp index 3da98ac..5b0eac1 100644 --- a/latest/Firmware/Transponder/Inc/RXPacketProcessor.hpp +++ b/latest/Firmware/Transponder/Inc/RXPacketProcessor.hpp @@ -37,6 +37,7 @@ public: private: void ensureChannelIsTracked(VHFChannel ch); + void dumpStats(); private: class PacketStats { @@ -55,6 +56,7 @@ private: NMEAEncoder mEncoder; std::vector mSentences; StationData mStationData; + PacketStats mStats; }; #endif /* RXPACKETPROCESSOR_HPP_ */ diff --git a/latest/Firmware/Transponder/Src/RXPacketProcessor.cpp b/latest/Firmware/Transponder/Src/RXPacketProcessor.cpp index 122bdca..9774392 100644 --- a/latest/Firmware/Transponder/Src/RXPacketProcessor.cpp +++ b/latest/Firmware/Transponder/Src/RXPacketProcessor.cpp @@ -40,7 +40,7 @@ RXPacketProcessor::RXPacketProcessor () { mSentences.reserve(4); // We're not going to need more than 2 sentences for the longest AIS message we report ... Configuration::instance().readStationData(mStationData); - EventQueue::instance().addObserver(this, AIS_PACKET_EVENT); + EventQueue::instance().addObserver(this, AIS_PACKET_EVENT|CLOCK_EVENT); } RXPacketProcessor::~RXPacketProcessor () @@ -53,12 +53,28 @@ void RXPacketProcessor::processEvent(const Event &e) { switch(e.type) { + case CLOCK_EVENT: + if ( e.clock.utc % 60 == 0 ) + { + dumpStats(); + } + break; case AIS_PACKET_EVENT: { ASSERT(e.rxPacket); - if (e.rxPacket->isBad() || !e.rxPacket->checkCRC ()) - return; + if ( e.rxPacket->isBad() ) + { + mStats.bad++; + return; + } + if ( !e.rxPacket->checkCRC ()) + { + mStats.invalid++; + return; + } + + mStats.good++; bsp_rx_led_on(); if ( e.rxPacket->messageType() == 15 ) @@ -157,3 +173,18 @@ void RXPacketProcessor::processEvent(const Event &e) } } + +void RXPacketProcessor::dumpStats() +{ + Event *e = EventPool::instance().newEvent(PROPR_NMEA_SENTENCE); + if ( !e ) + return; + + sprintf(e->nmeaBuffer.sentence, "$PAISTAT,%lu,%lu,%lu*", mStats.good, mStats.bad, mStats.invalid); + Utils::completeNMEA(e->nmeaBuffer.sentence); + EventQueue::instance().push(e); + + mStats.good = 0; + mStats.bad = 0; + mStats.invalid = 0; +} diff --git a/latest/Firmware/Transponder/Src/bsp/bsp_11_3.cpp b/latest/Firmware/Transponder/Src/bsp/bsp_11_3.cpp index 9913ab7..644df66 100644 --- a/latest/Firmware/Transponder/Src/bsp/bsp_11_3.cpp +++ b/latest/Firmware/Transponder/Src/bsp/bsp_11_3.cpp @@ -631,9 +631,18 @@ uint32_t bsp_get_system_clock() uint8_t bsp_tx_spi_byte(uint8_t data) { +#if 1 + while (!(SPI1->SR & SPI_SR_TXE)); + + *((__IO uint8_t *)&(SPI1->DR)) = data; + while (!(SPI1->SR & SPI_SR_RXNE)); + + return SPI1->DR; +#else uint8_t result = 0; HAL_SPI_TransmitReceive(&hspi1, &data, &result, 1, 2); return result; +#endif } void bsp_reboot()