From d1e6d1d7f18d8438b0df4bd3c0587ad3b4feb318 Mon Sep 17 00:00:00 2001 From: Ezra Taimuty-Loomis Date: Sun, 1 Mar 2020 11:51:58 -0500 Subject: [PATCH] Timer fixes --- src/cubic/demod/DemodulatorPreThread.cpp | 7 +++++-- src/piScan_backend.cpp | 2 +- src/server/SocketServer.cpp | 10 ++++++++++ src/sigproc/Demodulator.cpp | 14 +++++++++----- src/sigproc/Demodulator.h | 2 +- src/tests/testclient.cpp | 22 +++++++++++----------- src/util/IntervalTimer.h | 11 +++++++---- 7 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/cubic/demod/DemodulatorPreThread.cpp b/src/cubic/demod/DemodulatorPreThread.cpp index 92042c8..9b295c1 100644 --- a/src/cubic/demod/DemodulatorPreThread.cpp +++ b/src/cubic/demod/DemodulatorPreThread.cpp @@ -15,7 +15,7 @@ #include "loguru.hpp" #include "threadname.h" -#define DMDPRE_THREAD_NAME "Demod Pre Proc" +#define DMDPRE_THREAD_NAME "Pre Proc" //50 ms #define HEARTBEAT_CHECK_PERIOD_MICROS (50 * 1000) @@ -67,7 +67,10 @@ void DemodulatorPreThread::run() { #endif //std::cout << "Demodulator preprocessor thread started.." << std::endl; - setThreadName(DMDPRE_THREAD_NAME); + { + std::string tname = newDemodType + " " + DMDPRE_THREAD_NAME; + setThreadName(tname.c_str()); + } LOG_F(INFO, "Demodulator prepocessing thread started"); ReBuffer buffers("DemodulatorPreThreadBuffers"); diff --git a/src/piScan_backend.cpp b/src/piScan_backend.cpp index bc333af..a211944 100644 --- a/src/piScan_backend.cpp +++ b/src/piScan_backend.cpp @@ -383,7 +383,7 @@ const SystemInfo app::getSystemInfo(){ SystemInfo info = { .version = "debug", .buildNumber = 0, - .squelchRange = {0, 100}, + .squelchRange = {-100, 0}, .supportedModulations = {"FM", "AM"}, }; return info; diff --git a/src/server/SocketServer.cpp b/src/server/SocketServer.cpp index e864ba0..1a59f42 100644 --- a/src/server/SocketServer.cpp +++ b/src/server/SocketServer.cpp @@ -137,6 +137,16 @@ void SocketConnection::handleSystemInfo(const SystemInfo info){ void SocketConnection::handleSignalLevel(const int level){ //TODO (void) level; + auto ctx = new piscan_pb::SignalLevel(); + ctx->set_level(level); + + piscan_pb::ServerToClient msg; + msg.set_type(piscan_pb::ServerToClient_Type_SIGNAL_LEVEL); + msg.set_allocated_signallevel(ctx); + + msg.SerializeToArray(_writeBuffer, WRITE_BUFFER_LENGTH); + _startWrite(_writeBuffer, msg.ByteSize()); + delete ctx; } void SocketConnection::_startRead() { diff --git a/src/sigproc/Demodulator.cpp b/src/sigproc/Demodulator.cpp index 5ca51ba..380ea66 100644 --- a/src/sigproc/Demodulator.cpp +++ b/src/sigproc/Demodulator.cpp @@ -153,7 +153,8 @@ void Demodulator::start(){ LOG_F(7, "Signal strength %i", level); app::signalLevelUpdate(level); }); - _sigLevelRefresher.create(SIGLEVEL_REFRESH_INTERVAL, func); + _sigLevelRefresher = new IntervalTimer(); + _sigLevelRefresher->create(SIGLEVEL_REFRESH_INTERVAL, func); //auto message = std::make_shared(DEMOD, ControllerMessage::NOTIFY_READY); //_centralQueue.giveMessage(message); @@ -169,6 +170,9 @@ void Demodulator::stop(){ state.gain = _gain; state.squelch = _squelchLevel; + _sigLevelRefresher->stop(); + delete _sigLevelRefresher; + //auto message = std::make_shared(DEMOD, ControllerMessage::NOTIFY_STOPPED); //_centralQueue.giveMessage(message); LOG_F(1, "Demodulator stopped"); @@ -216,12 +220,12 @@ float Demodulator::getDecodedPL() { return 0; } unsigned int Demodulator::getDecodedDC() { return 0; } bool Demodulator::squelchThresholdMet() { - //return (getSignalLevel() >= _squelchLevel); //dBm comparison + return (getSignalLevel() >= _squelchLevel); //dBm comparison //return (getSignalStrength() >= _squelchLevel); //SNR - return (std::abs( + /*return (std::abs( _demodMgr.getActiveContextModem()->getSignalLevel() - _demodMgr.getActiveContextModem()->getSignalFloor()) - >= _squelchLevel); + >= _squelchLevel);*/ } bool Demodulator::setModem(Modulation mode) { @@ -346,7 +350,7 @@ float Demodulator::getSquelch(){ void Demodulator::squelchBreak(bool mute){ //mute = !mute; - mute ? _sigLevelRefresher.start() : _sigLevelRefresher.stop(); + mute ? _sigLevelRefresher->start() : _sigLevelRefresher->stop(); _demodMgr.getCurrentModem()->setMuted(!mute); } diff --git a/src/sigproc/Demodulator.h b/src/sigproc/Demodulator.h index d05e9ab..93c0fcd 100644 --- a/src/sigproc/Demodulator.h +++ b/src/sigproc/Demodulator.h @@ -81,7 +81,7 @@ private: std::map _demods; - IntervalTimer _sigLevelRefresher; + IntervalTimer* _sigLevelRefresher; void _handleMessage(std::shared_ptr message); void _handleRequest(ClientRequest& request); diff --git a/src/tests/testclient.cpp b/src/tests/testclient.cpp index de0cfd6..2c3543e 100644 --- a/src/tests/testclient.cpp +++ b/src/tests/testclient.cpp @@ -15,8 +15,8 @@ #define READ_BUFFER_LENGTH 1024 #define WRITE_BUFFER_LENGTH 1024 -using namespace boost::asio; -using ip::tcp; +using namespace boost; +using asio::ip::tcp; using std::string; using std::cout; using std::endl; @@ -27,7 +27,7 @@ namespace piscan { class TestClient : public ServerInterface, public boost::enable_shared_from_this{ public: - TestClient(io_service& io_service, tcp::socket& socket) : _console(*this), _io_service(io_service), _socket(socket) { + TestClient(asio::io_service& io_service, tcp::socket& socket) : _console(*this), _io_service(io_service), _socket(socket) { //_console(this); } @@ -40,14 +40,14 @@ public: _startRead(); } - static boost::shared_ptr create(io_service& io_service, tcp::socket& socket){ + static boost::shared_ptr create(asio::io_service& io_service, tcp::socket& socket){ return boost::shared_ptr(new TestClient(io_service, socket)); } private: DebugServer _console; - io_service& _io_service; + asio::io_service& _io_service; tcp::socket& _socket; unsigned char _readBuffer[READ_BUFFER_LENGTH]; unsigned char _writeBuffer[WRITE_BUFFER_LENGTH]; @@ -57,15 +57,15 @@ private: void _startRead() { _socket.async_read_some(boost::asio::buffer(_readBuffer, READ_BUFFER_LENGTH), boost::bind(&TestClient::_handleRead, shared_from_this(), - placeholders::error, - placeholders::bytes_transferred)); + asio::placeholders::error, + asio::placeholders::bytes_transferred)); } void _startWrite(uint8_t* buffer, size_t length) { _socket.async_write_some(boost::asio::buffer(buffer, length), boost::bind(&TestClient::_handleWrite, shared_from_this(), - placeholders::error, - placeholders::bytes_transferred)); + asio::placeholders::error, + asio::placeholders::bytes_transferred)); } void _handleRead(const boost::system::error_code& err, @@ -226,7 +226,7 @@ using namespace piscan; int main(int argc, char **argv) { loguru::init(argc, argv); - io_service io_service; + asio::io_service io_service; tcp::socket socket(io_service); std::string address; @@ -234,7 +234,7 @@ int main(int argc, char **argv) { std::cin >> address; socket.connect( - tcp::endpoint(ip::address::from_string(address), + tcp::endpoint(asio::ip::address::from_string(address), 1234)); boost::shared_ptr client = TestClient::create(io_service, diff --git a/src/util/IntervalTimer.h b/src/util/IntervalTimer.h index e377ff8..f71c3b5 100644 --- a/src/util/IntervalTimer.h +++ b/src/util/IntervalTimer.h @@ -85,7 +85,6 @@ public: } } }); - _timerThread.detach(); } @@ -111,9 +110,13 @@ private: inline void destroy(){ //std::cout << "\tdestroy timer\n"; _execute = false; - unique_lock lock(_mtx); - _cv.notify_all(); - stop(); + if(_runTimer.load()) + stop(); + else{ + unique_lock lock(_mtx); + _cv.notify_all(); + } + _timerThread.join(); } private: