diff --git a/src/external/PiScan-protobuf b/src/external/PiScan-protobuf index 745d53b..a3eaf9a 160000 --- a/src/external/PiScan-protobuf +++ b/src/external/PiScan-protobuf @@ -1 +1 @@ -Subproject commit 745d53b6edf0d68c2b92da8e5bb927182de9b569 +Subproject commit a3eaf9a87999e9a15bdcce131f5cf223c5eaa645 diff --git a/src/piScan_backend.cpp b/src/piScan_backend.cpp index a211944..bc333af 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 = {-100, 0}, + .squelchRange = {0, 100}, .supportedModulations = {"FM", "AM"}, }; return info; diff --git a/src/server/ServerManager.cpp b/src/server/ServerManager.cpp index 9dfc34e..20cad2e 100644 --- a/src/server/ServerManager.cpp +++ b/src/server/ServerManager.cpp @@ -225,7 +225,7 @@ int ServerManager::giveRequest(void* request){ void ServerManager::_handleMessage(std::shared_ptr message){ assert(message->destination == SERVER_MAN); auto msg = std::dynamic_pointer_cast(message); - int* level = nullptr; + int level = 0; switch (msg->type) { case ServerMessage::CONTEXT_UPDATE: switch(message->source){ @@ -250,9 +250,9 @@ void ServerManager::_handleMessage(std::shared_ptr message){ break; case ServerMessage::SIGNAL_LEVEL: DLOG_F(7, "Broadcast siglevel update"); - level = reinterpret_cast(msg->pData); - _broadcastSignalLevelUpdate(*level); - delete level; + level = *(reinterpret_cast(msg->pData)); + delete msg->pData; + _broadcastSignalLevelUpdate(level); break; default: break; diff --git a/src/server/SocketServer.cpp b/src/server/SocketServer.cpp index 1a59f42..5d61f7a 100644 --- a/src/server/SocketServer.cpp +++ b/src/server/SocketServer.cpp @@ -69,7 +69,7 @@ void SocketConnection::contextUpdate(const ScannerContext context){ msg.SerializeToArray(_writeBuffer, WRITE_BUFFER_LENGTH); _startWrite(_writeBuffer, msg.ByteSize()); - delete ctx; + //delete ctx; // its seems protobuf handles deletion, leaving this causes a double free error } void SocketConnection::contextUpdate(const DemodContext context){ @@ -84,7 +84,7 @@ void SocketConnection::contextUpdate(const DemodContext context){ msg.SerializeToArray(_writeBuffer, WRITE_BUFFER_LENGTH); _startWrite(_writeBuffer, msg.ByteSize()); - delete ctx; + //delete ctx; } void SocketConnection::handleSystemMessage(const GeneralMessage message) { @@ -113,7 +113,7 @@ void SocketConnection::handleSystemMessage(const GeneralMessage message) { msg.SerializeToArray(_writeBuffer, WRITE_BUFFER_LENGTH); _startWrite(_writeBuffer, msg.ByteSize()); - delete ctx; + //delete ctx; } void SocketConnection::handleSystemInfo(const SystemInfo info){ @@ -131,7 +131,7 @@ void SocketConnection::handleSystemInfo(const SystemInfo info){ msg.SerializeToArray(_writeBuffer, WRITE_BUFFER_LENGTH); _startWrite(_writeBuffer, msg.ByteSize()); - delete ctx; + //delete ctx; } void SocketConnection::handleSignalLevel(const int level){ @@ -146,7 +146,7 @@ void SocketConnection::handleSignalLevel(const int level){ msg.SerializeToArray(_writeBuffer, WRITE_BUFFER_LENGTH); _startWrite(_writeBuffer, msg.ByteSize()); - delete ctx; + //delete ctx; } void SocketConnection::_startRead() { @@ -207,25 +207,28 @@ void SocketConnection::_handleWrite(const boost::system::error_code& err, } void SocketConnection::_handleGeneralRequest(const piscan_pb::GeneralRequest& rq) { - static std::map> rqHandlers = { - {piscan_pb::GeneralRequest_RequestType_SCANNER_CONTEXT, [this]{return getScannerContext();}}, - {piscan_pb::GeneralRequest_RequestType_DEMOD_CONTEXT, [this]{return getDemodContext();}}, - {piscan_pb::GeneralRequest_RequestType_SYSTEM_INFO, [this]{return getSystemInfo();}}, - }; +// static std::map> rqHandlers = { +// {piscan_pb::GeneralRequest_RequestType_SCANNER_CONTEXT, [this]{return getScannerContext();}}, +// {piscan_pb::GeneralRequest_RequestType_DEMOD_CONTEXT, [this]{return getDemodContext();}}, +// {piscan_pb::GeneralRequest_RequestType_SYSTEM_INFO, [this]{return getSystemInfo();}}, +// }; - /*switch(rq.type()){ + switch(rq.type()){ case piscan_pb::GeneralRequest_RequestType_SCANNER_CONTEXT: getScannerContext(); break; case piscan_pb::GeneralRequest_RequestType_DEMOD_CONTEXT: getDemodContext(); break; + case piscan_pb::GeneralRequest_RequestType_SYSTEM_INFO: + getSystemInfo(); + break; default: LOG_F(WARNING, "Invalid GeneralRequest from %s", _socket.remote_endpoint().address().to_string().c_str()); break; - }*/ + } - rqHandlers[rq.type()](); +// rqHandlers[rq.type()](); } void SocketConnection::_handleScanStateRequest( diff --git a/src/sigproc/Demodulator.cpp b/src/sigproc/Demodulator.cpp index 380ea66..c8811c5 100644 --- a/src/sigproc/Demodulator.cpp +++ b/src/sigproc/Demodulator.cpp @@ -15,7 +15,7 @@ #define DEFAULT_SDR_SAMPLE_RATE 2048000 #define INIT_FREQUENCY 100000000 #define NUM_RATES_DEFAULT 4 -#define SIGLEVEL_REFRESH_INTERVAL 250 // milliseconds +#define SIGLEVEL_REFRESH_INTERVAL 100 // milliseconds using namespace piscan; @@ -150,11 +150,12 @@ void Demodulator::start(){ //create signal level refresh timer std::function func([this](){ int level = getSignalStrength(); + LOG_F(7, "Signal strength %i", level); app::signalLevelUpdate(level); }); - _sigLevelRefresher = new IntervalTimer(); - _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); @@ -163,6 +164,9 @@ void Demodulator::start(){ } void Demodulator::stop(){ + _sigLevelRefresher.stop(); + //delete _sigLevelRefresher; + _cubic->stopDevice(false, 2000); _cubic->OnExit(); @@ -170,9 +174,6 @@ 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"); @@ -220,8 +221,8 @@ float Demodulator::getDecodedPL() { return 0; } unsigned int Demodulator::getDecodedDC() { return 0; } bool Demodulator::squelchThresholdMet() { - return (getSignalLevel() >= _squelchLevel); //dBm comparison - //return (getSignalStrength() >= _squelchLevel); //SNR + //return (getSignalLevel() >= _squelchLevel); //dBm comparison + return (getSignalStrength() >= _squelchLevel); //SNR /*return (std::abs( _demodMgr.getActiveContextModem()->getSignalLevel() - _demodMgr.getActiveContextModem()->getSignalFloor()) @@ -254,12 +255,23 @@ float Demodulator::getSNR() { } int Demodulator::getSignalStrength() { - float fractional = getSNR() - 1; - int percent = 100*fractional; - if(percent >= 100) - return 100; - DRAW_LOG_F(7, "\t\t\tsigstrength %i", percent); - return percent; +// float fractional = getSNR() - 1; +// int percent = 100*fractional; +// if(percent >= 100) +// return 100; + + float signal = _demodMgr.getActiveContextModem()->getSignalLevel(); + float floor = _demodMgr.getActiveContextModem()->getSignalFloor(); + float ceiling = 0.0; + float range = ceiling - floor; + + int level = (100 * (signal - floor)) / range; + if (level > 100) + level = 100; + +// DRAW_LOG_F(7, "\t\t\tsigstrength %i", percent); +// return percent; + return level; } void Demodulator::giveMessage(std::shared_ptr message){ @@ -350,7 +362,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 93c0fcd..d05e9ab 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);