From d0e6a0887a615209c3ff147efa7b4c869f4eb264 Mon Sep 17 00:00:00 2001 From: Ezra Taimuty-Loomis Date: Wed, 29 Apr 2020 14:41:15 -0400 Subject: [PATCH] Fix squelch timing --- src/CMakeLists.txt | 2 +- src/core/PiScan.h | 1 + src/core/ScannerSM.cpp | 2 +- src/cubic/demod/DemodulatorThread.cpp | 3 +++ src/cubic/sdr/SoapySDRThread.cpp | 2 +- src/piScan_backend.cpp | 16 ++++++++++------ src/server/ServerManager.cpp | 2 +- 7 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 740e8da..150b296 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required (VERSION 2.6) project (piScan_backend) set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra") set(CMAKE_BUILD_TYPE Debug) add_executable(piScan_backend piScan_backend.cpp) diff --git a/src/core/PiScan.h b/src/core/PiScan.h index a2472db..ea10f71 100644 --- a/src/core/PiScan.h +++ b/src/core/PiScan.h @@ -19,6 +19,7 @@ public: bool stopSystem(); const SystemInfo getSystemInfo(); inline Configuration& getConfig() { return Configuration::getConfig(); }; +void softAbort(); /* scanner functions */ void startScan(); diff --git a/src/core/ScannerSM.cpp b/src/core/ScannerSM.cpp index e3bf26a..fbf21b7 100644 --- a/src/core/ScannerSM.cpp +++ b/src/core/ScannerSM.cpp @@ -213,7 +213,7 @@ void ScannerSM::ST_Hold(EventData* data){ else if(_currentEntry->delayMS()){ auto current = time_point_cast(system_clock::now()); - if((current- timeoutStart).count() < _currentEntry->delayMS()){ + if(std::chrono::duration_cast>(current- timeoutStart).count() < _currentEntry->delayMS()){ InternalEvent(ST_HOLD); } else if(!evtSrcExternal){ diff --git a/src/cubic/demod/DemodulatorThread.cpp b/src/cubic/demod/DemodulatorThread.cpp index ab0496a..cdfea86 100644 --- a/src/cubic/demod/DemodulatorThread.cpp +++ b/src/cubic/demod/DemodulatorThread.cpp @@ -210,6 +210,9 @@ void DemodulatorThread::run() { bool squelched = squelchEnabled && (signalLevel < squelchLevel); + // + signalLevel = currentSignalLevel; + if (squelchEnabled) { if (!squelched && !squelchBreak) { if (wxGetApp().getSoloMode() /*&& !wxGetApp().getAppFrame()->isUserDemodBusy()*/) { diff --git a/src/cubic/sdr/SoapySDRThread.cpp b/src/cubic/sdr/SoapySDRThread.cpp index 41ec8a4..e6a096d 100644 --- a/src/cubic/sdr/SoapySDRThread.cpp +++ b/src/cubic/sdr/SoapySDRThread.cpp @@ -103,7 +103,7 @@ bool SDRThread::init() { if (!stream) { wxGetApp().sdrThreadNotify(SDRThread::SDR_THREAD_FAILED, std::string("Stream setup failed, stream is null. ") + streamExceptionStr); //std::cout << "Stream setup failed, stream is null. " << streamExceptionStr << std::endl; - LOG_F(ERROR, "Stream setup failed, stream is null"); + ABORT_F("Stream setup failed, stream is null"); return false; } diff --git a/src/piScan_backend.cpp b/src/piScan_backend.cpp index 0035330..23d0302 100644 --- a/src/piScan_backend.cpp +++ b/src/piScan_backend.cpp @@ -290,23 +290,27 @@ static SystemController sysControl(messageManager, scanSystems, scanner, connect static std::atomic_bool steadyState(false); -void terminate(){ +void hardTerminate(){ LOG_F(WARNING, "Terminating - resources may not be properly released"); std::terminate(); } void sigTermHandler(int signal){ - - sysRun = false; - //exit(1); - piscan::terminate(); + // SIGTERM is raised by the kernel during shutdown + if(sysRun){ + app::stopSystem(); + sysRun = false; + } + // SIGTERM called after exit process has started - possibly because the program locked up and the user wants to force quit + else + piscan::hardTerminate(); } void sigIntHandler(int signal){ LOG_F(INFO, "Stop triggered by interrupt"); if(!sysRun) - piscan::terminate(); + piscan::hardTerminate(); sysRun = false; } diff --git a/src/server/ServerManager.cpp b/src/server/ServerManager.cpp index 20cad2e..d0f3892 100644 --- a/src/server/ServerManager.cpp +++ b/src/server/ServerManager.cpp @@ -251,8 +251,8 @@ void ServerManager::_handleMessage(std::shared_ptr message){ case ServerMessage::SIGNAL_LEVEL: DLOG_F(7, "Broadcast siglevel update"); level = *(reinterpret_cast(msg->pData)); - delete msg->pData; _broadcastSignalLevelUpdate(level); + delete &level; break; default: break;