mirror of https://github.com/f4exb/sdrangel.git
Compare commits
2 Commits
c33c8464cd
...
217c900609
Author | SHA1 | Date |
---|---|---|
f4exb | 217c900609 | |
f4exb | 956d1e6c07 |
|
@ -144,14 +144,11 @@ bool AudioCATSISO::startRx()
|
|||
m_inputWorker->startWork();
|
||||
m_inputWorkerThread->start();
|
||||
|
||||
qDebug("AudioCATSISO::startRx: started");
|
||||
m_rxRunning = true;
|
||||
|
||||
qDebug() << "AudioCATSISO::startRx: start CAT";
|
||||
|
||||
m_catWorkerThread = new QThread();
|
||||
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::finished, m_catWorker, &QObject::deleteLater);
|
||||
|
@ -159,13 +156,23 @@ bool AudioCATSISO::startRx()
|
|||
|
||||
m_catWorker->setMessageQueueToGUI(getMessageQueueToGUI());
|
||||
m_catWorker->setMessageQueueToSISO(getInputMessageQueue());
|
||||
m_catWorker->startWork();
|
||||
m_catWorkerThread->start();
|
||||
|
||||
qDebug("AudioCATSISO::startRx: started");
|
||||
m_rxRunning = true;
|
||||
|
||||
AudioCATSISOCATWorker::MsgSetRxSampleRate *msgSetRxSampleRate = AudioCATSISOCATWorker::MsgSetRxSampleRate::create(m_rxSampleRate);
|
||||
m_catWorker->getInputMessageQueue()->push(msgSetRxSampleRate);
|
||||
|
||||
AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker *msgToCAT = AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker::create(
|
||||
m_settings, QList<QString>(), true
|
||||
);
|
||||
m_catWorker->getInputMessageQueue()->push(msgToCAT);
|
||||
|
||||
AudioCATSISOCATWorker::MsgPollTimerConnect *startTimerMsg = AudioCATSISOCATWorker::MsgPollTimerConnect::create();
|
||||
m_catWorker->getInputMessageQueue()->push(startTimerMsg);
|
||||
|
||||
qDebug() << "AudioCATSISO::startRx: CAT started";
|
||||
m_catRunning = true;
|
||||
|
||||
|
@ -466,6 +473,8 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi
|
|||
{
|
||||
audioDeviceManager->removeAudioSource(&m_inputFifo);
|
||||
audioDeviceManager->addAudioSource(&m_inputFifo, getInputMessageQueue(), m_rxAudioDeviceIndex);
|
||||
AudioCATSISOCATWorker::MsgSetRxSampleRate *msgSetRxSampleRate = AudioCATSISOCATWorker::MsgSetRxSampleRate::create(m_rxSampleRate);
|
||||
m_catWorker->getInputMessageQueue()->push(msgSetRxSampleRate);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -557,6 +566,10 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi
|
|||
forwardTxChange = true;
|
||||
}
|
||||
|
||||
if (settingsKeys.contains("catPollingMs") || force) {
|
||||
forwardToCAT = true;
|
||||
}
|
||||
|
||||
if (settings.m_useReverseAPI)
|
||||
{
|
||||
bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) ||
|
||||
|
|
|
@ -16,7 +16,9 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <QDebug>
|
||||
#include <QTimer>
|
||||
|
||||
#include "dsp/devicesamplesource.h"
|
||||
#include "audiocatsisocatworker.h"
|
||||
|
||||
// Compatibility with all versions of Hamlib
|
||||
|
@ -25,6 +27,8 @@
|
|||
#endif
|
||||
|
||||
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker, Message)
|
||||
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgPollTimerConnect, Message)
|
||||
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgSetRxSampleRate, Message)
|
||||
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgReportFrequency, Message)
|
||||
|
||||
AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) :
|
||||
|
@ -33,6 +37,7 @@ AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) :
|
|||
m_inputMessageQueueToSISO(nullptr),
|
||||
m_running(false),
|
||||
m_connected(false),
|
||||
m_pollTimer(nullptr),
|
||||
m_ptt(false),
|
||||
m_frequency(0)
|
||||
{
|
||||
|
@ -42,6 +47,10 @@ AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) :
|
|||
AudioCATSISOCATWorker::~AudioCATSISOCATWorker()
|
||||
{
|
||||
stopWork();
|
||||
|
||||
if (m_pollTimer) {
|
||||
delete m_pollTimer;
|
||||
}
|
||||
}
|
||||
|
||||
void AudioCATSISOCATWorker::startWork()
|
||||
|
@ -70,23 +79,46 @@ void AudioCATSISOCATWorker::applySettings(const AudioCATSISOSettings& settings,
|
|||
<< " force:" << force
|
||||
<< settings.getDebugString(settingsKeys, force);
|
||||
|
||||
if (settingsKeys.contains("rxCenterFrequency") || force)
|
||||
qint64 rxXlatedDeviceCenterFrequency = settings.m_rxCenterFrequency;
|
||||
rxXlatedDeviceCenterFrequency -= settings.m_transverterMode ? settings.m_transverterDeltaFrequency : 0;
|
||||
rxXlatedDeviceCenterFrequency = rxXlatedDeviceCenterFrequency < 0 ? 0 : rxXlatedDeviceCenterFrequency;
|
||||
|
||||
qint64 txXlatedDeviceCenterFrequency = settings.m_txCenterFrequency;
|
||||
txXlatedDeviceCenterFrequency -= settings.m_transverterMode ? settings.m_transverterDeltaFrequency : 0;
|
||||
txXlatedDeviceCenterFrequency = txXlatedDeviceCenterFrequency < 0 ? 0 : txXlatedDeviceCenterFrequency;
|
||||
|
||||
if (settingsKeys.contains("rxCenterFrequency") ||
|
||||
settingsKeys.contains("transverterMode") ||
|
||||
settingsKeys.contains("transverterDeltaFrequency") || force)
|
||||
{
|
||||
if (!m_ptt) {
|
||||
catSetFrequency(settings.m_rxCenterFrequency);
|
||||
if (!m_ptt)
|
||||
{
|
||||
qint64 deviceCenterFrequency = DeviceSampleSource::calculateDeviceCenterFrequency(
|
||||
rxXlatedDeviceCenterFrequency,
|
||||
0,
|
||||
settings.m_log2Decim,
|
||||
(DeviceSampleSource::fcPos_t) settings.m_fcPosRx,
|
||||
m_rxSampleRate,
|
||||
DeviceSampleSource::FrequencyShiftScheme::FSHIFT_STD,
|
||||
false);
|
||||
catSetFrequency(deviceCenterFrequency);
|
||||
}
|
||||
}
|
||||
|
||||
if (settingsKeys.contains("txCenterFrequency") || force)
|
||||
if (settingsKeys.contains("txCenterFrequency") ||
|
||||
settingsKeys.contains("transverterMode") ||
|
||||
settingsKeys.contains("transverterDeltaFrequency") || force)
|
||||
{
|
||||
if (m_ptt) {
|
||||
catSetFrequency(settings.m_txCenterFrequency);
|
||||
catSetFrequency(txXlatedDeviceCenterFrequency);
|
||||
}
|
||||
}
|
||||
|
||||
if (settingsKeys.contains("catPollingMs") || force)
|
||||
{
|
||||
m_pollTimer.setInterval(settings.m_catPollingMs);
|
||||
if (m_pollTimer) {
|
||||
m_pollTimer->setInterval(settings.m_catPollingMs);
|
||||
}
|
||||
}
|
||||
|
||||
if (force) {
|
||||
|
@ -125,6 +157,39 @@ bool AudioCATSISOCATWorker::handleMessage(const Message& message)
|
|||
|
||||
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;
|
||||
}
|
||||
else if (MsgSetRxSampleRate::match(message))
|
||||
{
|
||||
MsgSetRxSampleRate& cmd = (MsgSetRxSampleRate&) message;
|
||||
m_rxSampleRate = cmd.getSampleRate();
|
||||
qDebug("AudioCATSISOCATWorker::handleMessage: MsgSetRxSampleRate: %d", m_rxSampleRate);
|
||||
|
||||
if (m_settings.m_transverterMode && !m_ptt)
|
||||
{
|
||||
qint64 rxXlatedDeviceCenterFrequency = m_settings.m_rxCenterFrequency;
|
||||
rxXlatedDeviceCenterFrequency -= m_settings.m_transverterMode ? m_settings.m_transverterDeltaFrequency : 0;
|
||||
rxXlatedDeviceCenterFrequency = rxXlatedDeviceCenterFrequency < 0 ? 0 : rxXlatedDeviceCenterFrequency;
|
||||
qint64 deviceCenterFrequency = DeviceSampleSource::calculateDeviceCenterFrequency(
|
||||
rxXlatedDeviceCenterFrequency,
|
||||
0,
|
||||
m_settings.m_log2Decim,
|
||||
(DeviceSampleSource::fcPos_t) m_settings.m_fcPosRx,
|
||||
m_rxSampleRate,
|
||||
DeviceSampleSource::FrequencyShiftScheme::FSHIFT_STD,
|
||||
false);
|
||||
catSetFrequency(deviceCenterFrequency);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -177,8 +242,6 @@ void AudioCATSISOCATWorker::catConnect()
|
|||
if (retcode == RIG_OK)
|
||||
{
|
||||
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);
|
||||
}
|
||||
else
|
||||
|
@ -196,8 +259,12 @@ void AudioCATSISOCATWorker::catConnect()
|
|||
|
||||
void AudioCATSISOCATWorker::catDisconnect()
|
||||
{
|
||||
disconnect(&m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick()));
|
||||
m_pollTimer.stop();
|
||||
if (m_pollTimer)
|
||||
{
|
||||
disconnect(m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick()));
|
||||
m_pollTimer->stop();
|
||||
}
|
||||
|
||||
m_connected = false;
|
||||
rig_close(m_rig); /* close port */
|
||||
rig_cleanup(m_rig); /* if you care about memory */
|
||||
|
@ -276,6 +343,10 @@ void AudioCATSISOCATWorker::pollingTick()
|
|||
freq_t freq; // double
|
||||
int retcode = rig_get_freq(m_rig, RIG_VFO_CURR, &freq);
|
||||
|
||||
if (m_settings.m_transverterMode) {
|
||||
freq += m_settings.m_transverterDeltaFrequency;
|
||||
}
|
||||
|
||||
if (retcode == RIG_OK)
|
||||
{
|
||||
// qDebug("AudioCATSISOCATWorker::pollingTick: %f %lu", freq, m_frequency);
|
||||
|
|
|
@ -21,12 +21,13 @@
|
|||
#include <hamlib/rig.h>
|
||||
|
||||
#include <QObject>
|
||||
#include <QTimer>
|
||||
|
||||
#include "util/message.h"
|
||||
#include "util/messagequeue.h"
|
||||
#include "audiocatsisosettings.h"
|
||||
|
||||
class QTimer;
|
||||
|
||||
class AudioCATSISOCATWorker : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
|
@ -56,6 +57,39 @@ public:
|
|||
{ }
|
||||
};
|
||||
|
||||
class MsgPollTimerConnect : public Message {
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
||||
public:
|
||||
static MsgPollTimerConnect* create() {
|
||||
return new MsgPollTimerConnect();
|
||||
}
|
||||
|
||||
protected:
|
||||
MsgPollTimerConnect() :
|
||||
Message()
|
||||
{ }
|
||||
};
|
||||
|
||||
class MsgSetRxSampleRate : public Message {
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
||||
public:
|
||||
int getSampleRate() const { return m_sampleRate; }
|
||||
|
||||
static MsgSetRxSampleRate* create(int sampleRate) {
|
||||
return new MsgSetRxSampleRate(sampleRate);
|
||||
}
|
||||
|
||||
protected:
|
||||
int m_sampleRate;
|
||||
|
||||
MsgSetRxSampleRate(int sampleRate) :
|
||||
Message(),
|
||||
m_sampleRate(sampleRate)
|
||||
{ }
|
||||
};
|
||||
|
||||
class MsgReportFrequency : public Message {
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
||||
|
@ -99,9 +133,10 @@ private:
|
|||
bool m_connected;
|
||||
AudioCATSISOSettings m_settings;
|
||||
RIG *m_rig;
|
||||
QTimer m_pollTimer;
|
||||
QTimer *m_pollTimer;
|
||||
bool m_ptt;
|
||||
uint64_t m_frequency;
|
||||
int m_rxSampleRate;
|
||||
|
||||
private slots:
|
||||
void handleInputMessages();
|
||||
|
|
|
@ -424,6 +424,9 @@ void AudioCATSISOGUI::displaySettings()
|
|||
{
|
||||
blockApplySettings(true);
|
||||
|
||||
ui->transverter->setDeltaFrequency(m_settings.m_transverterDeltaFrequency);
|
||||
ui->transverter->setDeltaFrequencyActive(m_settings.m_transverterMode);
|
||||
ui->transverter->setIQOrder(m_settings.m_iqOrder);
|
||||
ui->rxDeviceLabel->setText(m_settings.m_rxDeviceName);
|
||||
ui->txDeviceLabel->setText(m_settings.m_txDeviceName);
|
||||
ui->dcBlock->setChecked(m_settings.m_dcBlock);
|
||||
|
|
|
@ -73,6 +73,8 @@ void AudioCATSISOSettings::resetToDefaults()
|
|||
m_pttSpectrumLink = true;
|
||||
m_rxCenterFrequency = 14200000;
|
||||
m_txCenterFrequency = 14200000;
|
||||
m_transverterMode = false;
|
||||
m_transverterDeltaFrequency = 0;
|
||||
m_rxDeviceName = "";
|
||||
m_rxVolume = 1.0f;
|
||||
m_log2Decim = 0;
|
||||
|
@ -106,6 +108,8 @@ AudioCATSISOSettings::AudioCATSISOSettings(const AudioCATSISOSettings& other)
|
|||
m_pttSpectrumLink = other.m_pttSpectrumLink;
|
||||
m_rxCenterFrequency = other.m_rxCenterFrequency;
|
||||
m_txCenterFrequency = other.m_txCenterFrequency;
|
||||
m_transverterMode = other.m_transverterMode;
|
||||
m_transverterDeltaFrequency = other.m_transverterDeltaFrequency;
|
||||
m_rxDeviceName = other.m_rxDeviceName;
|
||||
m_rxVolume = other.m_rxVolume;
|
||||
m_log2Decim = other.m_log2Decim;
|
||||
|
@ -144,6 +148,8 @@ QByteArray AudioCATSISOSettings::serialize() const
|
|||
s.writeBool(6, m_dcBlock);
|
||||
s.writeBool(7, m_iqCorrection);
|
||||
s.writeS32(8, (int) m_fcPosRx);
|
||||
s.writeBool(9, m_transverterMode);
|
||||
s.writeS64(10, m_transverterDeltaFrequency);
|
||||
|
||||
s.writeString(21, m_txDeviceName);
|
||||
s.writeU64(22, m_txCenterFrequency);
|
||||
|
@ -195,6 +201,8 @@ bool AudioCATSISOSettings::deserialize(const QByteArray& data)
|
|||
d.readBool(7, &m_iqCorrection, false);
|
||||
d.readS32(8, &intval, 2);
|
||||
m_fcPosRx = (fcPos_t) intval;
|
||||
d.readBool(9, &m_transverterMode, false);
|
||||
d.readS64(10, &m_transverterDeltaFrequency, 0);
|
||||
|
||||
d.readString(21, &m_txDeviceName, "");
|
||||
d.readU64(22, &m_txCenterFrequency, 14200000);
|
||||
|
@ -239,6 +247,13 @@ bool AudioCATSISOSettings::deserialize(const QByteArray& data)
|
|||
|
||||
void AudioCATSISOSettings::applySettings(const QStringList& settingsKeys, const AudioCATSISOSettings& settings)
|
||||
{
|
||||
if (settingsKeys.contains("transverterMode")) {
|
||||
m_transverterMode = settings.m_transverterMode;
|
||||
}
|
||||
if (settingsKeys.contains("transverterDeltaFrequency")) {
|
||||
m_transverterDeltaFrequency = settings.m_transverterDeltaFrequency;
|
||||
}
|
||||
|
||||
if (settingsKeys.contains("rxDeviceName")) {
|
||||
m_rxDeviceName = settings.m_rxDeviceName;
|
||||
}
|
||||
|
@ -332,6 +347,13 @@ QString AudioCATSISOSettings::getDebugString(const QStringList& settingsKeys, bo
|
|||
{
|
||||
std::ostringstream ostr;
|
||||
|
||||
if (settingsKeys.contains("transverterMode") || force) {
|
||||
ostr << " m_transverterMode: " << m_transverterMode;
|
||||
}
|
||||
if (settingsKeys.contains("transverterDeltaFrequency") || force) {
|
||||
ostr << " m_transverterDeltaFrequency: " << m_transverterDeltaFrequency;
|
||||
}
|
||||
|
||||
if (settingsKeys.contains("rxDeviceName") || force) {
|
||||
ostr << " m_rxDeviceName: " << m_rxDeviceName.toStdString();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue