1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-12-23 10:05:46 -05:00

AudioCATSISO: fixed CAT worker handling

This commit is contained in:
f4exb 2024-04-27 22:12:03 +02:00
parent c33c8464cd
commit 956d1e6c07
3 changed files with 51 additions and 8 deletions

View File

@ -151,7 +151,7 @@ bool AudioCATSISO::startRx()
m_catWorkerThread = new QThread(); m_catWorkerThread = new QThread();
m_catWorker = new AudioCATSISOCATWorker(); m_catWorker = new AudioCATSISOCATWorker();
m_inputWorker->moveToThread(m_catWorkerThread); m_catWorker->moveToThread(m_catWorkerThread);
QObject::connect(m_catWorkerThread, &QThread::started, m_catWorker, &AudioCATSISOCATWorker::startWork); QObject::connect(m_catWorkerThread, &QThread::started, m_catWorker, &AudioCATSISOCATWorker::startWork);
QObject::connect(m_catWorkerThread, &QThread::finished, m_catWorker, &QObject::deleteLater); QObject::connect(m_catWorkerThread, &QThread::finished, m_catWorker, &QObject::deleteLater);
@ -159,6 +159,7 @@ bool AudioCATSISO::startRx()
m_catWorker->setMessageQueueToGUI(getMessageQueueToGUI()); m_catWorker->setMessageQueueToGUI(getMessageQueueToGUI());
m_catWorker->setMessageQueueToSISO(getInputMessageQueue()); m_catWorker->setMessageQueueToSISO(getInputMessageQueue());
m_catWorker->startWork();
m_catWorkerThread->start(); m_catWorkerThread->start();
AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker *msgToCAT = AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker::create( AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker *msgToCAT = AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker::create(
@ -166,6 +167,9 @@ bool AudioCATSISO::startRx()
); );
m_catWorker->getInputMessageQueue()->push(msgToCAT); m_catWorker->getInputMessageQueue()->push(msgToCAT);
AudioCATSISOCATWorker::MsgPollTimerConnect *startTimerMsg = AudioCATSISOCATWorker::MsgPollTimerConnect::create();
m_catWorker->getInputMessageQueue()->push(startTimerMsg);
qDebug() << "AudioCATSISO::startRx: CAT started"; qDebug() << "AudioCATSISO::startRx: CAT started";
m_catRunning = true; m_catRunning = true;
@ -557,6 +561,10 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi
forwardTxChange = true; forwardTxChange = true;
} }
if (settingsKeys.contains("catPollingMs") || force) {
forwardToCAT = true;
}
if (settings.m_useReverseAPI) if (settings.m_useReverseAPI)
{ {
bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) || bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) ||

View File

@ -16,6 +16,7 @@
/////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
#include <QDebug> #include <QDebug>
#include <QTimer>
#include "audiocatsisocatworker.h" #include "audiocatsisocatworker.h"
@ -25,6 +26,7 @@
#endif #endif
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker, Message) MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker, Message)
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgPollTimerConnect, Message)
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgReportFrequency, Message) MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgReportFrequency, Message)
AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) : AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) :
@ -33,6 +35,7 @@ AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) :
m_inputMessageQueueToSISO(nullptr), m_inputMessageQueueToSISO(nullptr),
m_running(false), m_running(false),
m_connected(false), m_connected(false),
m_pollTimer(nullptr),
m_ptt(false), m_ptt(false),
m_frequency(0) m_frequency(0)
{ {
@ -42,6 +45,10 @@ AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) :
AudioCATSISOCATWorker::~AudioCATSISOCATWorker() AudioCATSISOCATWorker::~AudioCATSISOCATWorker()
{ {
stopWork(); stopWork();
if (m_pollTimer) {
delete m_pollTimer;
}
} }
void AudioCATSISOCATWorker::startWork() void AudioCATSISOCATWorker::startWork()
@ -86,7 +93,9 @@ void AudioCATSISOCATWorker::applySettings(const AudioCATSISOSettings& settings,
if (settingsKeys.contains("catPollingMs") || force) if (settingsKeys.contains("catPollingMs") || force)
{ {
m_pollTimer.setInterval(settings.m_catPollingMs); if (m_pollTimer) {
m_pollTimer->setInterval(settings.m_catPollingMs);
}
} }
if (force) { if (force) {
@ -125,6 +134,15 @@ bool AudioCATSISOCATWorker::handleMessage(const Message& message)
return true; return true;
} }
else if (MsgPollTimerConnect::match(message))
{
qDebug("AudioCATSISOCATWorker::handleMessage: MsgPollTimerConnect");
m_pollTimer = new QTimer();
connect(m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick()));
m_pollTimer->start(m_settings.m_catPollingMs);
return true;
}
return false; return false;
} }
@ -177,8 +195,6 @@ void AudioCATSISOCATWorker::catConnect()
if (retcode == RIG_OK) if (retcode == RIG_OK)
{ {
m_connected = true; m_connected = true;
connect(&m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick()));
m_pollTimer.start(m_settings.m_catPollingMs);
msg = AudioCATSISOSettings::MsgCATReportStatus::create(AudioCATSISOSettings::MsgCATReportStatus::StatusConnected); msg = AudioCATSISOSettings::MsgCATReportStatus::create(AudioCATSISOSettings::MsgCATReportStatus::StatusConnected);
} }
else else
@ -196,8 +212,12 @@ void AudioCATSISOCATWorker::catConnect()
void AudioCATSISOCATWorker::catDisconnect() void AudioCATSISOCATWorker::catDisconnect()
{ {
disconnect(&m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick())); if (m_pollTimer)
m_pollTimer.stop(); {
disconnect(m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick()));
m_pollTimer->stop();
}
m_connected = false; m_connected = false;
rig_close(m_rig); /* close port */ rig_close(m_rig); /* close port */
rig_cleanup(m_rig); /* if you care about memory */ rig_cleanup(m_rig); /* if you care about memory */

View File

@ -21,12 +21,13 @@
#include <hamlib/rig.h> #include <hamlib/rig.h>
#include <QObject> #include <QObject>
#include <QTimer>
#include "util/message.h" #include "util/message.h"
#include "util/messagequeue.h" #include "util/messagequeue.h"
#include "audiocatsisosettings.h" #include "audiocatsisosettings.h"
class QTimer;
class AudioCATSISOCATWorker : public QObject { class AudioCATSISOCATWorker : public QObject {
Q_OBJECT Q_OBJECT
@ -56,6 +57,20 @@ public:
{ } { }
}; };
class MsgPollTimerConnect : public Message {
MESSAGE_CLASS_DECLARATION
public:
static MsgPollTimerConnect* create() {
return new MsgPollTimerConnect();
}
protected:
MsgPollTimerConnect() :
Message()
{ }
};
class MsgReportFrequency : public Message { class MsgReportFrequency : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
@ -99,7 +114,7 @@ private:
bool m_connected; bool m_connected;
AudioCATSISOSettings m_settings; AudioCATSISOSettings m_settings;
RIG *m_rig; RIG *m_rig;
QTimer m_pollTimer; QTimer *m_pollTimer;
bool m_ptt; bool m_ptt;
uint64_t m_frequency; uint64_t m_frequency;