From 2beffedeea0ea9b3a4499ca2683b0788c0136ab1 Mon Sep 17 00:00:00 2001 From: Ezra Taimuty-Loomis Date: Fri, 28 Jan 2022 16:40:44 -0500 Subject: [PATCH] Pretty event printing --- src/cubic/sdr/SoapySDRThread.cpp | 7 ++++ src/events.h | 57 ++++++++++++++++++++++++++++++++ src/piscan_server.cpp | 2 +- 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/cubic/sdr/SoapySDRThread.cpp b/src/cubic/sdr/SoapySDRThread.cpp index 540eedd..09796b0 100644 --- a/src/cubic/sdr/SoapySDRThread.cpp +++ b/src/cubic/sdr/SoapySDRThread.cpp @@ -13,6 +13,7 @@ #include "loguru.hpp" #include "threadname.h" #include "PiScan.h" +#include "events.h" #define SDR_THREAD_NAME "SDR Interface" @@ -116,10 +117,13 @@ bool SDRThread::init() { //4. Apply other settings: Frequency, PPM correction, Gains, Device-specific settings: device->setFrequency(SOAPY_SDR_RX,0,"RF",frequency - offset.load()); + //TEMP + piscan::events::publish(std::make_shared("tuner_frequency_set", frequency - offset.load())); if (devInfo->hasCORR(SOAPY_SDR_RX, 0)) { hasPPM.store(true); device->setFrequency(SOAPY_SDR_RX,0,"CORR",ppm.load()); + piscan::events::publish(std::make_shared("tuner_ppm_set", ppm.load())); } else { hasPPM.store(false); } @@ -514,6 +518,7 @@ void SDRThread::updateSettings() { if (ppm_changed.load() && hasPPM.load()) { device->setFrequency(SOAPY_SDR_RX,0,"CORR",ppm.load()); + piscan::events::publish(std::make_shared("tuner_ppm_set", ppm.load())); ppm_changed.store(false); } @@ -521,8 +526,10 @@ void SDRThread::updateSettings() { if (frequency_locked.load() && !frequency_lock_init.load()) { device->setFrequency(SOAPY_SDR_RX,0,"RF",lock_freq.load()); frequency_lock_init.store(true); + piscan::events::publish(std::make_shared("tuner_frequency_set", lock_freq.load())); } else if (!frequency_locked.load()) { device->setFrequency(SOAPY_SDR_RX,0,"RF",frequency.load() - offset.load()); + piscan::events::publish(std::make_shared("tuner_frequency_set", frequency.load() - offset.load())); } freq_changed.store(false); diff --git a/src/events.h b/src/events.h index 91c7de7..1eb5dce 100644 --- a/src/events.h +++ b/src/events.h @@ -8,6 +8,11 @@ namespace piscan { struct Event { Event(std::string topic) : topic(topic) {}; virtual ~Event(){}; + + inline virtual std::string to_string() { + return "Event type: " + topic + "\n"; + } + std::string topic; }; @@ -22,6 +27,33 @@ namespace piscan { void unsubscribe(std::string topic, int subscriber); /*---------------------------------*/ + struct GenericStringEvent : public Event { + GenericStringEvent(std::string topic, std::string data) : Event(topic), data(data) {}; + virtual ~GenericStringEvent() {}; + inline virtual std::string to_string() { + return Event::to_string() + "\tData:\t" + data + "\n"; + } + std::string data; + }; + + struct GenericNumberEvent : public Event { + GenericNumberEvent(std::string topic, long long data) : Event(topic), data(data) {}; + virtual ~GenericNumberEvent() {}; + inline virtual std::string to_string() { + return Event::to_string() + "\tData:\t" + std::to_string(data) + "\n"; + } + long long data; + }; + + struct GenericBoolEvent : public Event { + GenericBoolEvent(std::string topic, bool data) : Event(topic), data(data) {}; + virtual ~GenericBoolEvent() {}; + inline virtual std::string to_string() { + return Event::to_string() + "\tData:\t" + std::to_string(data) + "\n"; + } + bool data; + }; + struct ScannerStateEvent : public Event { virtual ~ScannerStateEvent() {}; @@ -34,6 +66,20 @@ namespace piscan { ScannerStateEvent() : Event("scanner_state_change") {}; + inline virtual std::string to_string() { + std::string tail = (state == HOLD || state == RECEIVE)? + "\tSystem:\t" + systemTag + "\n" + + "\tEntry:\t" + entryTag + "\n" + + "\tFrequency:\t" + std::to_string(frequency) + "\n" + + "\tModulation:\t" + modulation + "\n" + + "\tIndex:\t" + entryIndex + "\n" + + "\tDelay:\t" + std::to_string(delayMS) + "\n" + + "\tLockout:\t" + std::to_string(lockout) + "\n" + : ""; + return Event::to_string() + + "\tState:\t" + std::to_string(state) + "\n" + tail; + } + //TODO ported from context messages ScannerState state = OTHER_STATE; std::string systemTag = ""; @@ -48,6 +94,11 @@ namespace piscan { struct DemodStateEvent : public Event { DemodStateEvent() : Event("demod_state_change") {}; virtual ~DemodStateEvent() {}; + inline virtual std::string to_string() { + return Event::to_string() + + "\tTuner gain:\t" + std::to_string(tunerGainState) + "\n" + "\tSquelch:\t" + std::to_string(squelchState) + "\n"; + } float tunerGainState; int squelchState; }; @@ -55,12 +106,18 @@ namespace piscan { struct SignalLevelEvent : public Event { SignalLevelEvent(int level) : Event("signal_level"), level(level) {}; virtual ~SignalLevelEvent(){}; + inline virtual std::string to_string() { + return Event::to_string() + "\tSignal level:\t" + std::to_string(level) + "\n"; + } int level; }; struct LoggingEvent : public Event { LoggingEvent(int level, std::string line) : Event("log_write"), level(level), line(line) {}; virtual ~LoggingEvent(){}; + inline virtual std::string to_string() { + return Event::to_string() + "\t> " + line + "\n"; + } int level; std::string line; }; diff --git a/src/piscan_server.cpp b/src/piscan_server.cpp index 1944432..e7f2dea 100644 --- a/src/piscan_server.cpp +++ b/src/piscan_server.cpp @@ -106,7 +106,7 @@ void exit(int code){ } void printEvent(events::EventPtr event) { - std::cerr << "**EVENT: " << event->topic << std::endl; + std::cerr << event->to_string(); } bool app::system::stopSystem(){