mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-07-04 09:55:22 -04:00
Remote Source: use fixed sample rate set to baseband sample rate. Remote Output: use sample rate from remote
This commit is contained in:
parent
56ba6f3d80
commit
1168eefcc9
@ -54,36 +54,6 @@ void RemoteSourceSource::pull(SampleVector::iterator begin, unsigned int nbSampl
|
|||||||
void RemoteSourceSource::pullOne(Sample& sample)
|
void RemoteSourceSource::pullOne(Sample& sample)
|
||||||
{
|
{
|
||||||
m_dataReadQueue.readSample(sample, true); // true is scale for Tx
|
m_dataReadQueue.readSample(sample, true); // true is scale for Tx
|
||||||
return;
|
|
||||||
|
|
||||||
Complex ci;
|
|
||||||
|
|
||||||
if (m_interpolatorDistance > 1.0f) // decimate
|
|
||||||
{
|
|
||||||
getSample();
|
|
||||||
|
|
||||||
while (!m_interpolator.decimate(&m_interpolatorDistanceRemain, m_modSample, &ci)) {
|
|
||||||
getSample();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (m_interpolator.interpolate(&m_interpolatorDistanceRemain, m_modSample, &ci)) {
|
|
||||||
getSample();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_interpolatorDistanceRemain += m_interpolatorDistance;
|
|
||||||
sample.m_real = (FixReal) ci.real();
|
|
||||||
sample.m_imag = (FixReal) ci.imag();
|
|
||||||
}
|
|
||||||
|
|
||||||
void RemoteSourceSource::getSample()
|
|
||||||
{
|
|
||||||
Sample s;
|
|
||||||
m_dataReadQueue.readSample(s, true); // true is scale for Tx
|
|
||||||
m_modSample.real(s.m_real);
|
|
||||||
m_modSample.imag(s.m_imag);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoteSourceSource::start()
|
void RemoteSourceSource::start()
|
||||||
@ -267,17 +237,6 @@ void RemoteSourceSource::applyChannelSettings(int channelSampleRate, bool force)
|
|||||||
{
|
{
|
||||||
qDebug() << "RemoteSourceSource::applyChannelSettings:"
|
qDebug() << "RemoteSourceSource::applyChannelSettings:"
|
||||||
<< " channelSampleRate: " << channelSampleRate
|
<< " channelSampleRate: " << channelSampleRate
|
||||||
<< " m_currentMeta.m_sampleRate: " << m_currentMeta.m_sampleRate
|
|
||||||
<< " force: " << force;
|
<< " force: " << force;
|
||||||
|
|
||||||
if ((channelSampleRate != m_channelSampleRate) || force)
|
|
||||||
{
|
|
||||||
uint32_t metaSampleRate = m_currentMeta.m_sampleRate == 0 ? channelSampleRate : m_currentMeta.m_sampleRate;
|
|
||||||
m_interpolatorDistanceRemain = 0;
|
|
||||||
m_interpolatorConsumed = false;
|
|
||||||
m_interpolatorDistance = (Real) metaSampleRate / (Real) channelSampleRate;
|
|
||||||
m_interpolator.create(48, metaSampleRate, metaSampleRate / 2.2, 3.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_channelSampleRate = channelSampleRate;
|
m_channelSampleRate = channelSampleRate;
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
#include "cm256cc/cm256.h"
|
#include "cm256cc/cm256.h"
|
||||||
|
|
||||||
#include "dsp/channelsamplesource.h"
|
#include "dsp/channelsamplesource.h"
|
||||||
#include "dsp/interpolator.h"
|
|
||||||
#include "channel/remotedatablock.h"
|
#include "channel/remotedatablock.h"
|
||||||
#include "channel/remotedataqueue.h"
|
#include "channel/remotedataqueue.h"
|
||||||
#include "channel/remotedatareadqueue.h"
|
#include "channel/remotedatareadqueue.h"
|
||||||
@ -72,17 +71,11 @@ private:
|
|||||||
uint32_t m_nbUncorrectableErrors; //!< count of uncorrectable errors in number of blocks
|
uint32_t m_nbUncorrectableErrors; //!< count of uncorrectable errors in number of blocks
|
||||||
|
|
||||||
int m_channelSampleRate;
|
int m_channelSampleRate;
|
||||||
Interpolator m_interpolator;
|
|
||||||
Real m_interpolatorDistance;
|
|
||||||
Real m_interpolatorDistanceRemain;
|
|
||||||
bool m_interpolatorConsumed;
|
|
||||||
Complex m_modSample;
|
|
||||||
|
|
||||||
void startWorker();
|
void startWorker();
|
||||||
void stopWorker();
|
void stopWorker();
|
||||||
void handleDataFrame(RemoteDataFrame *dataFrame);
|
void handleDataFrame(RemoteDataFrame *dataFrame);
|
||||||
void printMeta(const QString& header, RemoteMetaDataFEC *metaData);
|
void printMeta(const QString& header, RemoteMetaDataFEC *metaData);
|
||||||
void getSample();
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleData();
|
void handleData();
|
||||||
|
@ -51,7 +51,8 @@ const uint32_t RemoteOutput::NbSamplesForRateCorrection = 5000000;
|
|||||||
RemoteOutput::RemoteOutput(DeviceAPI *deviceAPI) :
|
RemoteOutput::RemoteOutput(DeviceAPI *deviceAPI) :
|
||||||
m_deviceAPI(deviceAPI),
|
m_deviceAPI(deviceAPI),
|
||||||
m_settings(),
|
m_settings(),
|
||||||
m_centerFrequency(0),
|
m_centerFrequency(435000000),
|
||||||
|
m_sampleRate(48000),
|
||||||
m_remoteOutputWorker(nullptr),
|
m_remoteOutputWorker(nullptr),
|
||||||
m_deviceDescription("RemoteOutput"),
|
m_deviceDescription("RemoteOutput"),
|
||||||
m_startingTimeStamp(0),
|
m_startingTimeStamp(0),
|
||||||
@ -72,6 +73,8 @@ RemoteOutput::RemoteOutput(DeviceAPI *deviceAPI) :
|
|||||||
m_networkManager = new QNetworkAccessManager();
|
m_networkManager = new QNetworkAccessManager();
|
||||||
connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkManagerFinished(QNetworkReply*)));
|
connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkManagerFinished(QNetworkReply*)));
|
||||||
connect(&m_masterTimer, SIGNAL(timeout()), this, SLOT(tick()));
|
connect(&m_masterTimer, SIGNAL(timeout()), this, SLOT(tick()));
|
||||||
|
applyCenterFrequency();
|
||||||
|
applySampleRate();
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoteOutput::~RemoteOutput()
|
RemoteOutput::~RemoteOutput()
|
||||||
@ -94,7 +97,7 @@ bool RemoteOutput::start()
|
|||||||
m_remoteOutputWorker = new RemoteOutputWorker(&m_sampleSourceFifo);
|
m_remoteOutputWorker = new RemoteOutputWorker(&m_sampleSourceFifo);
|
||||||
m_remoteOutputWorker->moveToThread(&m_remoteOutputWorkerThread);
|
m_remoteOutputWorker->moveToThread(&m_remoteOutputWorkerThread);
|
||||||
m_remoteOutputWorker->setDataAddress(m_settings.m_dataAddress, m_settings.m_dataPort);
|
m_remoteOutputWorker->setDataAddress(m_settings.m_dataAddress, m_settings.m_dataPort);
|
||||||
m_remoteOutputWorker->setSamplerate(m_settings.m_sampleRate);
|
m_remoteOutputWorker->setSamplerate(m_sampleRate);
|
||||||
m_remoteOutputWorker->setNbBlocksFEC(m_settings.m_nbFECBlocks);
|
m_remoteOutputWorker->setNbBlocksFEC(m_settings.m_nbFECBlocks);
|
||||||
m_remoteOutputWorker->connectTimer(m_masterTimer);
|
m_remoteOutputWorker->connectTimer(m_masterTimer);
|
||||||
startWorker();
|
startWorker();
|
||||||
@ -177,7 +180,7 @@ const QString& RemoteOutput::getDeviceDescription() const
|
|||||||
|
|
||||||
int RemoteOutput::getSampleRate() const
|
int RemoteOutput::getSampleRate() const
|
||||||
{
|
{
|
||||||
return m_settings.m_sampleRate;
|
return m_sampleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
quint64 RemoteOutput::getCenterFrequency() const
|
quint64 RemoteOutput::getCenterFrequency() const
|
||||||
@ -270,7 +273,6 @@ bool RemoteOutput::handleMessage(const Message& message)
|
|||||||
void RemoteOutput::applySettings(const RemoteOutputSettings& settings, bool force)
|
void RemoteOutput::applySettings(const RemoteOutputSettings& settings, bool force)
|
||||||
{
|
{
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
QMutexLocker mutexLocker(&m_mutex);
|
||||||
bool forwardChange = false;
|
|
||||||
QList<QString> reverseAPIKeys;
|
QList<QString> reverseAPIKeys;
|
||||||
|
|
||||||
if ((m_settings.m_dataAddress != settings.m_dataAddress) || force) {
|
if ((m_settings.m_dataAddress != settings.m_dataAddress) || force) {
|
||||||
@ -293,20 +295,6 @@ void RemoteOutput::applySettings(const RemoteOutputSettings& settings, bool forc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (force || (m_settings.m_sampleRate != settings.m_sampleRate))
|
|
||||||
{
|
|
||||||
reverseAPIKeys.append("sampleRate");
|
|
||||||
|
|
||||||
if (m_remoteOutputWorker != 0) {
|
|
||||||
m_remoteOutputWorker->setSamplerate(settings.m_sampleRate);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_tickMultiplier = (21*NbSamplesForRateCorrection) / (2*settings.m_sampleRate); // two times per sample filling period plus small extension
|
|
||||||
m_tickMultiplier /= 20; // greter tick (one per second)
|
|
||||||
m_tickMultiplier = m_tickMultiplier < 1 ? 1 : m_tickMultiplier; // not below 1 second
|
|
||||||
forwardChange = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (force || (m_settings.m_nbFECBlocks != settings.m_nbFECBlocks))
|
if (force || (m_settings.m_nbFECBlocks != settings.m_nbFECBlocks))
|
||||||
{
|
{
|
||||||
reverseAPIKeys.append("nbFECBlocks");
|
reverseAPIKeys.append("nbFECBlocks");
|
||||||
@ -319,19 +307,12 @@ void RemoteOutput::applySettings(const RemoteOutputSettings& settings, bool forc
|
|||||||
mutexLocker.unlock();
|
mutexLocker.unlock();
|
||||||
|
|
||||||
qDebug() << "RemoteOutput::applySettings:"
|
qDebug() << "RemoteOutput::applySettings:"
|
||||||
<< " m_sampleRate: " << settings.m_sampleRate
|
|
||||||
<< " m_nbFECBlocks: " << settings.m_nbFECBlocks
|
<< " m_nbFECBlocks: " << settings.m_nbFECBlocks
|
||||||
<< " m_apiAddress: " << settings.m_apiAddress
|
<< " m_apiAddress: " << settings.m_apiAddress
|
||||||
<< " m_apiPort: " << settings.m_apiPort
|
<< " m_apiPort: " << settings.m_apiPort
|
||||||
<< " m_dataAddress: " << settings.m_dataAddress
|
<< " m_dataAddress: " << settings.m_dataAddress
|
||||||
<< " m_dataPort: " << settings.m_dataPort;
|
<< " m_dataPort: " << settings.m_dataPort;
|
||||||
|
|
||||||
if (forwardChange)
|
|
||||||
{
|
|
||||||
DSPSignalNotification *notif = new DSPSignalNotification(settings.m_sampleRate, m_centerFrequency);
|
|
||||||
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (settings.m_useReverseAPI)
|
if (settings.m_useReverseAPI)
|
||||||
{
|
{
|
||||||
bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) ||
|
bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) ||
|
||||||
@ -344,6 +325,26 @@ void RemoteOutput::applySettings(const RemoteOutputSettings& settings, bool forc
|
|||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RemoteOutput::applyCenterFrequency()
|
||||||
|
{
|
||||||
|
DSPSignalNotification *notif = new DSPSignalNotification(m_sampleRate, m_centerFrequency);
|
||||||
|
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RemoteOutput::applySampleRate()
|
||||||
|
{
|
||||||
|
if (m_remoteOutputWorker) {
|
||||||
|
m_remoteOutputWorker->setSamplerate(m_sampleRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_tickMultiplier = (21*NbSamplesForRateCorrection) / (2*m_sampleRate); // two times per sample filling period plus small extension
|
||||||
|
m_tickMultiplier /= 20; // greter tick (one per second)
|
||||||
|
m_tickMultiplier = m_tickMultiplier < 1 ? 1 : m_tickMultiplier; // not below 1 second
|
||||||
|
|
||||||
|
DSPSignalNotification *notif = new DSPSignalNotification(m_sampleRate, m_centerFrequency);
|
||||||
|
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
|
||||||
|
}
|
||||||
|
|
||||||
int RemoteOutput::webapiRunGet(
|
int RemoteOutput::webapiRunGet(
|
||||||
SWGSDRangel::SWGDeviceState& response,
|
SWGSDRangel::SWGDeviceState& response,
|
||||||
QString& errorMessage)
|
QString& errorMessage)
|
||||||
@ -411,9 +412,6 @@ void RemoteOutput::webapiUpdateDeviceSettings(
|
|||||||
const QStringList& deviceSettingsKeys,
|
const QStringList& deviceSettingsKeys,
|
||||||
SWGSDRangel::SWGDeviceSettings& response)
|
SWGSDRangel::SWGDeviceSettings& response)
|
||||||
{
|
{
|
||||||
if (deviceSettingsKeys.contains("sampleRate")) {
|
|
||||||
settings.m_sampleRate = response.getRemoteOutputSettings()->getSampleRate();
|
|
||||||
}
|
|
||||||
if (deviceSettingsKeys.contains("nbFECBlocks")) {
|
if (deviceSettingsKeys.contains("nbFECBlocks")) {
|
||||||
settings.m_nbFECBlocks = response.getRemoteOutputSettings()->getNbFecBlocks();
|
settings.m_nbFECBlocks = response.getRemoteOutputSettings()->getNbFecBlocks();
|
||||||
}
|
}
|
||||||
@ -462,7 +460,6 @@ int RemoteOutput::webapiReportGet(
|
|||||||
|
|
||||||
void RemoteOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RemoteOutputSettings& settings)
|
void RemoteOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RemoteOutputSettings& settings)
|
||||||
{
|
{
|
||||||
response.getRemoteOutputSettings()->setSampleRate(settings.m_sampleRate);
|
|
||||||
response.getRemoteOutputSettings()->setNbFecBlocks(settings.m_nbFECBlocks);
|
response.getRemoteOutputSettings()->setNbFecBlocks(settings.m_nbFECBlocks);
|
||||||
response.getRemoteOutputSettings()->setApiAddress(new QString(settings.m_apiAddress));
|
response.getRemoteOutputSettings()->setApiAddress(new QString(settings.m_apiAddress));
|
||||||
response.getRemoteOutputSettings()->setApiPort(settings.m_apiPort);
|
response.getRemoteOutputSettings()->setApiPort(settings.m_apiPort);
|
||||||
@ -485,6 +482,7 @@ void RemoteOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& re
|
|||||||
void RemoteOutput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response)
|
void RemoteOutput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response)
|
||||||
{
|
{
|
||||||
response.getRemoteOutputReport()->setCenterFrequency(m_centerFrequency);
|
response.getRemoteOutputReport()->setCenterFrequency(m_centerFrequency);
|
||||||
|
response.getRemoteOutputReport()->setSampleRate(m_sampleRate);
|
||||||
response.getRemoteOutputReport()->setBufferRwBalance(m_sampleSourceFifo.getRWBalance());
|
response.getRemoteOutputReport()->setBufferRwBalance(m_sampleSourceFifo.getRWBalance());
|
||||||
response.getRemoteOutputReport()->setSampleCount(m_remoteOutputWorker ? (int) m_remoteOutputWorker->getSamplesCount() : 0);
|
response.getRemoteOutputReport()->setSampleCount(m_remoteOutputWorker ? (int) m_remoteOutputWorker->getSamplesCount() : 0);
|
||||||
}
|
}
|
||||||
@ -550,8 +548,25 @@ void RemoteOutput::analyzeApiReply(const QJsonObject& jsonObject, const QString&
|
|||||||
{
|
{
|
||||||
MsgReportRemoteData::RemoteData msgRemoteData;
|
MsgReportRemoteData::RemoteData msgRemoteData;
|
||||||
QJsonObject report = jsonObject["RemoteSourceReport"].toObject();
|
QJsonObject report = jsonObject["RemoteSourceReport"].toObject();
|
||||||
m_centerFrequency = report["deviceCenterFreq"].toInt();
|
uint64_t centerFrequency = report["deviceCenterFreq"].toInt();
|
||||||
|
|
||||||
|
if (centerFrequency != m_centerFrequency)
|
||||||
|
{
|
||||||
|
m_centerFrequency = centerFrequency;
|
||||||
|
applyCenterFrequency();
|
||||||
|
}
|
||||||
|
|
||||||
|
int remoteRate = report["deviceSampleRate"].toInt();
|
||||||
|
|
||||||
|
if (remoteRate != m_sampleRate)
|
||||||
|
{
|
||||||
|
m_sampleRate = remoteRate;
|
||||||
|
applySampleRate();
|
||||||
|
}
|
||||||
|
|
||||||
msgRemoteData.m_centerFrequency = m_centerFrequency;
|
msgRemoteData.m_centerFrequency = m_centerFrequency;
|
||||||
|
msgRemoteData.m_sampleRate = m_sampleRate;
|
||||||
|
|
||||||
int queueSize = report["queueSize"].toInt();
|
int queueSize = report["queueSize"].toInt();
|
||||||
queueSize = queueSize == 0 ? 20 : queueSize;
|
queueSize = queueSize == 0 ? 20 : queueSize;
|
||||||
msgRemoteData.m_queueSize = queueSize;
|
msgRemoteData.m_queueSize = queueSize;
|
||||||
@ -563,8 +578,6 @@ void RemoteOutput::analyzeApiReply(const QJsonObject& jsonObject, const QString&
|
|||||||
int intRemoteSampleCount = report["samplesCount"].toInt();
|
int intRemoteSampleCount = report["samplesCount"].toInt();
|
||||||
uint32_t remoteSampleCount = intRemoteSampleCount < 0 ? 0 : intRemoteSampleCount;
|
uint32_t remoteSampleCount = intRemoteSampleCount < 0 ? 0 : intRemoteSampleCount;
|
||||||
msgRemoteData.m_sampleCount = remoteSampleCount;
|
msgRemoteData.m_sampleCount = remoteSampleCount;
|
||||||
int remoteRate = report["deviceSampleRate"].toInt();
|
|
||||||
msgRemoteData.m_sampleRate = remoteRate;
|
|
||||||
int unrecoverableCount = report["uncorrectableErrorsCount"].toInt();
|
int unrecoverableCount = report["uncorrectableErrorsCount"].toInt();
|
||||||
msgRemoteData.m_unrecoverableCount = unrecoverableCount;
|
msgRemoteData.m_unrecoverableCount = unrecoverableCount;
|
||||||
int recoverableCount = report["correctableErrorsCount"].toInt();
|
int recoverableCount = report["correctableErrorsCount"].toInt();
|
||||||
@ -696,9 +709,6 @@ void RemoteOutput::webapiReverseSendSettings(QList<QString>& deviceSettingsKeys,
|
|||||||
|
|
||||||
// transfer data that has been modified. When force is on transfer all data except reverse API data
|
// transfer data that has been modified. When force is on transfer all data except reverse API data
|
||||||
|
|
||||||
if (deviceSettingsKeys.contains("sampleRate") || force) {
|
|
||||||
swgRemoteOutputSettings->setSampleRate(settings.m_sampleRate);
|
|
||||||
}
|
|
||||||
if (deviceSettingsKeys.contains("nbFECBlocks") || force) {
|
if (deviceSettingsKeys.contains("nbFECBlocks") || force) {
|
||||||
swgRemoteOutputSettings->setNbFecBlocks(settings.m_nbFECBlocks);
|
swgRemoteOutputSettings->setNbFecBlocks(settings.m_nbFECBlocks);
|
||||||
}
|
}
|
||||||
|
@ -275,6 +275,7 @@ private:
|
|||||||
QMutex m_mutex;
|
QMutex m_mutex;
|
||||||
RemoteOutputSettings m_settings;
|
RemoteOutputSettings m_settings;
|
||||||
uint64_t m_centerFrequency;
|
uint64_t m_centerFrequency;
|
||||||
|
int m_sampleRate;
|
||||||
RemoteOutputWorker* m_remoteOutputWorker;
|
RemoteOutputWorker* m_remoteOutputWorker;
|
||||||
QThread m_remoteOutputWorkerThread;
|
QThread m_remoteOutputWorkerThread;
|
||||||
QString m_deviceDescription;
|
QString m_deviceDescription;
|
||||||
@ -300,6 +301,8 @@ private:
|
|||||||
void startWorker();
|
void startWorker();
|
||||||
void stopWorker();
|
void stopWorker();
|
||||||
void applySettings(const RemoteOutputSettings& settings, bool force = false);
|
void applySettings(const RemoteOutputSettings& settings, bool force = false);
|
||||||
|
void applyCenterFrequency();
|
||||||
|
void applySampleRate();
|
||||||
void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response);
|
void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response);
|
||||||
|
|
||||||
void analyzeApiReply(const QJsonObject& jsonObject, const QString& answer);
|
void analyzeApiReply(const QJsonObject& jsonObject, const QString& answer);
|
||||||
|
@ -55,7 +55,8 @@ RemoteOutputSinkGui::RemoteOutputSinkGui(DeviceUISet *deviceUISet, QWidget* pare
|
|||||||
m_nbSinceLastFlowCheck(0),
|
m_nbSinceLastFlowCheck(0),
|
||||||
m_lastEngineState(DeviceAPI::StNotStarted),
|
m_lastEngineState(DeviceAPI::StNotStarted),
|
||||||
m_doApplySettings(true),
|
m_doApplySettings(true),
|
||||||
m_forceSettings(true)
|
m_forceSettings(true),
|
||||||
|
m_remoteAPIConnected(false)
|
||||||
{
|
{
|
||||||
m_countUnrecoverable = 0;
|
m_countUnrecoverable = 0;
|
||||||
m_countRecovered = 0;
|
m_countRecovered = 0;
|
||||||
@ -69,11 +70,6 @@ RemoteOutputSinkGui::RemoteOutputSinkGui(DeviceUISet *deviceUISet, QWidget* pare
|
|||||||
|
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
ui->sampleRate->setColorMapper(ColorMapper(ColorMapper::GrayGreenYellow));
|
|
||||||
ui->sampleRate->setValueRange(7, 32000U, 9000000U);
|
|
||||||
|
|
||||||
ui->apiAddressLabel->setStyleSheet("QLabel { background:rgb(79,79,79); }");
|
|
||||||
|
|
||||||
connect(&(m_deviceUISet->m_deviceAPI->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
|
connect(&(m_deviceUISet->m_deviceAPI->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
|
||||||
connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware()));
|
connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware()));
|
||||||
connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus()));
|
connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus()));
|
||||||
@ -215,7 +211,6 @@ void RemoteOutputSinkGui::displaySettings()
|
|||||||
{
|
{
|
||||||
blockApplySettings(true);
|
blockApplySettings(true);
|
||||||
ui->centerFrequency->setText(QString("%L1").arg(m_deviceCenterFrequency));
|
ui->centerFrequency->setText(QString("%L1").arg(m_deviceCenterFrequency));
|
||||||
ui->sampleRate->setValue(m_settings.m_sampleRate);
|
|
||||||
ui->nbFECBlocks->setValue(m_settings.m_nbFECBlocks);
|
ui->nbFECBlocks->setValue(m_settings.m_nbFECBlocks);
|
||||||
|
|
||||||
QString s0 = QString::number(128 + m_settings.m_nbFECBlocks, 'f', 0);
|
QString s0 = QString::number(128 + m_settings.m_nbFECBlocks, 'f', 0);
|
||||||
@ -276,12 +271,6 @@ void RemoteOutputSinkGui::updateStatus()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoteOutputSinkGui::on_sampleRate_changed(quint64 value)
|
|
||||||
{
|
|
||||||
m_settings.m_sampleRate = value;
|
|
||||||
sendSettings();
|
|
||||||
}
|
|
||||||
|
|
||||||
void RemoteOutputSinkGui::on_nbFECBlocks_valueChanged(int value)
|
void RemoteOutputSinkGui::on_nbFECBlocks_valueChanged(int value)
|
||||||
{
|
{
|
||||||
m_settings.m_nbFECBlocks = value;
|
m_settings.m_nbFECBlocks = value;
|
||||||
@ -457,6 +446,17 @@ void RemoteOutputSinkGui::displayEventTimer()
|
|||||||
|
|
||||||
void RemoteOutputSinkGui::tick()
|
void RemoteOutputSinkGui::tick()
|
||||||
{
|
{
|
||||||
|
if (++m_tickCount == 20)
|
||||||
|
{
|
||||||
|
if (m_remoteAPIConnected) {
|
||||||
|
ui->apiAddressLabel->setStyleSheet("QLabel { background-color: green; }");
|
||||||
|
} else {
|
||||||
|
ui->apiAddressLabel->setStyleSheet("QLabel { background:rgb(79,79,79); }");
|
||||||
|
}
|
||||||
|
|
||||||
|
m_remoteAPIConnected = false;
|
||||||
|
m_tickCount = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoteOutputSinkGui::displayRemoteData(const RemoteOutput::MsgReportRemoteData::RemoteData& remoteData)
|
void RemoteOutputSinkGui::displayRemoteData(const RemoteOutput::MsgReportRemoteData::RemoteData& remoteData)
|
||||||
@ -476,6 +476,7 @@ void RemoteOutputSinkGui::displayRemoteData(const RemoteOutput::MsgReportRemoteD
|
|||||||
m_countUnrecoverable += unrecoverableCountDelta;
|
m_countUnrecoverable += unrecoverableCountDelta;
|
||||||
displayEventCounts();
|
displayEventCounts();
|
||||||
displayEventTimer();
|
displayEventTimer();
|
||||||
|
m_remoteAPIConnected = true;
|
||||||
|
|
||||||
uint32_t sampleCountDelta;
|
uint32_t sampleCountDelta;
|
||||||
|
|
||||||
@ -509,6 +510,7 @@ void RemoteOutputSinkGui::displayRemoteFixedData(const RemoteOutput::MsgReportRe
|
|||||||
infoLine += " " + remoteData.m_architecture;
|
infoLine += " " + remoteData.m_architecture;
|
||||||
infoLine += " " + remoteData.m_os;
|
infoLine += " " + remoteData.m_os;
|
||||||
infoLine += QString(" %1/%2b").arg(remoteData.m_rxBits).arg(remoteData.m_txBits);
|
infoLine += QString(" %1/%2b").arg(remoteData.m_rxBits).arg(remoteData.m_txBits);
|
||||||
|
m_remoteAPIConnected = true;
|
||||||
|
|
||||||
if (infoLine.size() > 0) {
|
if (infoLine.size() > 0) {
|
||||||
ui->infoText->setText(infoLine);
|
ui->infoText->setText(infoLine);
|
||||||
|
@ -95,6 +95,7 @@ private:
|
|||||||
int m_lastEngineState;
|
int m_lastEngineState;
|
||||||
bool m_doApplySettings;
|
bool m_doApplySettings;
|
||||||
bool m_forceSettings;
|
bool m_forceSettings;
|
||||||
|
bool m_remoteAPIConnected;
|
||||||
|
|
||||||
uint32_t m_countUnrecoverable;
|
uint32_t m_countUnrecoverable;
|
||||||
uint32_t m_countRecovered;
|
uint32_t m_countRecovered;
|
||||||
@ -125,7 +126,6 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleInputMessages();
|
void handleInputMessages();
|
||||||
void on_sampleRate_changed(quint64 value);
|
|
||||||
void on_nbFECBlocks_valueChanged(int value);
|
void on_nbFECBlocks_valueChanged(int value);
|
||||||
void on_deviceIndex_returnPressed();
|
void on_deviceIndex_returnPressed();
|
||||||
void on_channelIndex_returnPressed();
|
void on_channelIndex_returnPressed();
|
||||||
|
@ -118,14 +118,14 @@
|
|||||||
<widget class="QLabel" name="centerFrequency">
|
<widget class="QLabel" name="centerFrequency">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>140</width>
|
<width>170</width>
|
||||||
<height>0</height>
|
<height>0</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<family>Liberation Sans</family>
|
<family>Liberation Sans</family>
|
||||||
<pointsize>14</pointsize>
|
<pointsize>16</pointsize>
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -188,68 +188,6 @@
|
|||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
<number>2</number>
|
<number>2</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="sampleRateLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>SR</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="ValueDial" name="sampleRate" native="true">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>32</width>
|
|
||||||
<height>16</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<family>Liberation Mono</family>
|
|
||||||
<pointsize>12</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="cursor">
|
|
||||||
<cursorShape>PointingHandCursor</cursorShape>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Remote device sample rate</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="sampleRateUnit">
|
|
||||||
<property name="text">
|
|
||||||
<string>S/s</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="Line" name="line">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="deviceIndexLabel">
|
<widget class="QLabel" name="deviceIndexLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -302,6 +240,19 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -754,12 +705,6 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
|
||||||
<class>ValueDial</class>
|
|
||||||
<extends>QWidget</extends>
|
|
||||||
<header>gui/valuedial.h</header>
|
|
||||||
<container>1</container>
|
|
||||||
</customwidget>
|
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>ButtonSwitch</class>
|
<class>ButtonSwitch</class>
|
||||||
<extends>QToolButton</extends>
|
<extends>QToolButton</extends>
|
||||||
|
@ -25,7 +25,6 @@ RemoteOutputSettings::RemoteOutputSettings()
|
|||||||
|
|
||||||
void RemoteOutputSettings::resetToDefaults()
|
void RemoteOutputSettings::resetToDefaults()
|
||||||
{
|
{
|
||||||
m_sampleRate = 48000;
|
|
||||||
m_nbFECBlocks = 0;
|
m_nbFECBlocks = 0;
|
||||||
m_apiAddress = "127.0.0.1";
|
m_apiAddress = "127.0.0.1";
|
||||||
m_apiPort = 9091;
|
m_apiPort = 9091;
|
||||||
@ -43,7 +42,6 @@ QByteArray RemoteOutputSettings::serialize() const
|
|||||||
{
|
{
|
||||||
SimpleSerializer s(1);
|
SimpleSerializer s(1);
|
||||||
|
|
||||||
s.writeU32(2, m_sampleRate);
|
|
||||||
s.writeU32(4, m_nbFECBlocks);
|
s.writeU32(4, m_nbFECBlocks);
|
||||||
s.writeString(5, m_apiAddress);
|
s.writeString(5, m_apiAddress);
|
||||||
s.writeU32(6, m_apiPort);
|
s.writeU32(6, m_apiPort);
|
||||||
@ -73,7 +71,6 @@ bool RemoteOutputSettings::deserialize(const QByteArray& data)
|
|||||||
{
|
{
|
||||||
quint32 uintval;
|
quint32 uintval;
|
||||||
|
|
||||||
d.readU32(2, &m_sampleRate, 48000);
|
|
||||||
d.readU32(4, &m_nbFECBlocks, 0);
|
d.readU32(4, &m_nbFECBlocks, 0);
|
||||||
d.readString(5, &m_apiAddress, "127.0.0.1");
|
d.readString(5, &m_apiAddress, "127.0.0.1");
|
||||||
d.readU32(6, &uintval, 9090);
|
d.readU32(6, &uintval, 9090);
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
struct RemoteOutputSettings {
|
struct RemoteOutputSettings {
|
||||||
quint32 m_sampleRate;
|
|
||||||
quint32 m_nbFECBlocks;
|
quint32 m_nbFECBlocks;
|
||||||
QString m_apiAddress;
|
QString m_apiAddress;
|
||||||
quint16 m_apiPort;
|
quint16 m_apiPort;
|
||||||
|
@ -9824,6 +9824,9 @@ margin-bottom: 20px;
|
|||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
"format" : "int64"
|
"format" : "int64"
|
||||||
},
|
},
|
||||||
|
"sampleRate" : {
|
||||||
|
"type" : "integer"
|
||||||
|
},
|
||||||
"bufferRWBalance" : {
|
"bufferRWBalance" : {
|
||||||
"type" : "number",
|
"type" : "number",
|
||||||
"format" : "float",
|
"format" : "float",
|
||||||
@ -9838,9 +9841,6 @@ margin-bottom: 20px;
|
|||||||
};
|
};
|
||||||
defs.RemoteOutputSettings = {
|
defs.RemoteOutputSettings = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"sampleRate" : {
|
|
||||||
"type" : "integer"
|
|
||||||
},
|
|
||||||
"nbFECBlocks" : {
|
"nbFECBlocks" : {
|
||||||
"type" : "integer"
|
"type" : "integer"
|
||||||
},
|
},
|
||||||
@ -51597,7 +51597,7 @@ except ApiException as e:
|
|||||||
</div>
|
</div>
|
||||||
<div id="generator">
|
<div id="generator">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
Generated 2021-12-12T13:16:20.821+01:00
|
Generated 2021-12-12T19:10:03.240+01:00
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
RemoteOutputSettings:
|
RemoteOutputSettings:
|
||||||
description: RemoteOutput
|
description: RemoteOutput
|
||||||
properties:
|
properties:
|
||||||
sampleRate:
|
|
||||||
type: integer
|
|
||||||
nbFECBlocks:
|
nbFECBlocks:
|
||||||
type: integer
|
type: integer
|
||||||
apiAddress:
|
apiAddress:
|
||||||
@ -35,6 +33,8 @@ RemoteOutputReport:
|
|||||||
centerFrequency:
|
centerFrequency:
|
||||||
type: integer
|
type: integer
|
||||||
format: int64
|
format: int64
|
||||||
|
sampleRate:
|
||||||
|
type: integer
|
||||||
bufferRWBalance:
|
bufferRWBalance:
|
||||||
description: ratio off the mid buffer (positive read leads)
|
description: ratio off the mid buffer (positive read leads)
|
||||||
type: number
|
type: number
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
RemoteOutputSettings:
|
RemoteOutputSettings:
|
||||||
description: RemoteOutput
|
description: RemoteOutput
|
||||||
properties:
|
properties:
|
||||||
sampleRate:
|
|
||||||
type: integer
|
|
||||||
nbFECBlocks:
|
nbFECBlocks:
|
||||||
type: integer
|
type: integer
|
||||||
apiAddress:
|
apiAddress:
|
||||||
@ -35,6 +33,8 @@ RemoteOutputReport:
|
|||||||
centerFrequency:
|
centerFrequency:
|
||||||
type: integer
|
type: integer
|
||||||
format: int64
|
format: int64
|
||||||
|
sampleRate:
|
||||||
|
type: integer
|
||||||
bufferRWBalance:
|
bufferRWBalance:
|
||||||
description: ratio off the mid buffer (positive read leads)
|
description: ratio off the mid buffer (positive read leads)
|
||||||
type: number
|
type: number
|
||||||
|
@ -9824,6 +9824,9 @@ margin-bottom: 20px;
|
|||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
"format" : "int64"
|
"format" : "int64"
|
||||||
},
|
},
|
||||||
|
"sampleRate" : {
|
||||||
|
"type" : "integer"
|
||||||
|
},
|
||||||
"bufferRWBalance" : {
|
"bufferRWBalance" : {
|
||||||
"type" : "number",
|
"type" : "number",
|
||||||
"format" : "float",
|
"format" : "float",
|
||||||
@ -9838,9 +9841,6 @@ margin-bottom: 20px;
|
|||||||
};
|
};
|
||||||
defs.RemoteOutputSettings = {
|
defs.RemoteOutputSettings = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"sampleRate" : {
|
|
||||||
"type" : "integer"
|
|
||||||
},
|
|
||||||
"nbFECBlocks" : {
|
"nbFECBlocks" : {
|
||||||
"type" : "integer"
|
"type" : "integer"
|
||||||
},
|
},
|
||||||
@ -51597,7 +51597,7 @@ except ApiException as e:
|
|||||||
</div>
|
</div>
|
||||||
<div id="generator">
|
<div id="generator">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
Generated 2021-12-12T13:16:20.821+01:00
|
Generated 2021-12-12T19:10:03.240+01:00
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -30,6 +30,8 @@ SWGRemoteOutputReport::SWGRemoteOutputReport(QString* json) {
|
|||||||
SWGRemoteOutputReport::SWGRemoteOutputReport() {
|
SWGRemoteOutputReport::SWGRemoteOutputReport() {
|
||||||
center_frequency = 0L;
|
center_frequency = 0L;
|
||||||
m_center_frequency_isSet = false;
|
m_center_frequency_isSet = false;
|
||||||
|
sample_rate = 0;
|
||||||
|
m_sample_rate_isSet = false;
|
||||||
buffer_rw_balance = 0.0f;
|
buffer_rw_balance = 0.0f;
|
||||||
m_buffer_rw_balance_isSet = false;
|
m_buffer_rw_balance_isSet = false;
|
||||||
sample_count = 0;
|
sample_count = 0;
|
||||||
@ -44,6 +46,8 @@ void
|
|||||||
SWGRemoteOutputReport::init() {
|
SWGRemoteOutputReport::init() {
|
||||||
center_frequency = 0L;
|
center_frequency = 0L;
|
||||||
m_center_frequency_isSet = false;
|
m_center_frequency_isSet = false;
|
||||||
|
sample_rate = 0;
|
||||||
|
m_sample_rate_isSet = false;
|
||||||
buffer_rw_balance = 0.0f;
|
buffer_rw_balance = 0.0f;
|
||||||
m_buffer_rw_balance_isSet = false;
|
m_buffer_rw_balance_isSet = false;
|
||||||
sample_count = 0;
|
sample_count = 0;
|
||||||
@ -55,6 +59,7 @@ SWGRemoteOutputReport::cleanup() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SWGRemoteOutputReport*
|
SWGRemoteOutputReport*
|
||||||
@ -70,6 +75,8 @@ void
|
|||||||
SWGRemoteOutputReport::fromJsonObject(QJsonObject &pJson) {
|
SWGRemoteOutputReport::fromJsonObject(QJsonObject &pJson) {
|
||||||
::SWGSDRangel::setValue(¢er_frequency, pJson["centerFrequency"], "qint64", "");
|
::SWGSDRangel::setValue(¢er_frequency, pJson["centerFrequency"], "qint64", "");
|
||||||
|
|
||||||
|
::SWGSDRangel::setValue(&sample_rate, pJson["sampleRate"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&buffer_rw_balance, pJson["bufferRWBalance"], "float", "");
|
::SWGSDRangel::setValue(&buffer_rw_balance, pJson["bufferRWBalance"], "float", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&sample_count, pJson["sampleCount"], "qint32", "");
|
::SWGSDRangel::setValue(&sample_count, pJson["sampleCount"], "qint32", "");
|
||||||
@ -93,6 +100,9 @@ SWGRemoteOutputReport::asJsonObject() {
|
|||||||
if(m_center_frequency_isSet){
|
if(m_center_frequency_isSet){
|
||||||
obj->insert("centerFrequency", QJsonValue(center_frequency));
|
obj->insert("centerFrequency", QJsonValue(center_frequency));
|
||||||
}
|
}
|
||||||
|
if(m_sample_rate_isSet){
|
||||||
|
obj->insert("sampleRate", QJsonValue(sample_rate));
|
||||||
|
}
|
||||||
if(m_buffer_rw_balance_isSet){
|
if(m_buffer_rw_balance_isSet){
|
||||||
obj->insert("bufferRWBalance", QJsonValue(buffer_rw_balance));
|
obj->insert("bufferRWBalance", QJsonValue(buffer_rw_balance));
|
||||||
}
|
}
|
||||||
@ -113,6 +123,16 @@ SWGRemoteOutputReport::setCenterFrequency(qint64 center_frequency) {
|
|||||||
this->m_center_frequency_isSet = true;
|
this->m_center_frequency_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qint32
|
||||||
|
SWGRemoteOutputReport::getSampleRate() {
|
||||||
|
return sample_rate;
|
||||||
|
}
|
||||||
|
void
|
||||||
|
SWGRemoteOutputReport::setSampleRate(qint32 sample_rate) {
|
||||||
|
this->sample_rate = sample_rate;
|
||||||
|
this->m_sample_rate_isSet = true;
|
||||||
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
SWGRemoteOutputReport::getBufferRwBalance() {
|
SWGRemoteOutputReport::getBufferRwBalance() {
|
||||||
return buffer_rw_balance;
|
return buffer_rw_balance;
|
||||||
@ -141,6 +161,9 @@ SWGRemoteOutputReport::isSet(){
|
|||||||
if(m_center_frequency_isSet){
|
if(m_center_frequency_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
|
if(m_sample_rate_isSet){
|
||||||
|
isObjectUpdated = true; break;
|
||||||
|
}
|
||||||
if(m_buffer_rw_balance_isSet){
|
if(m_buffer_rw_balance_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,9 @@ public:
|
|||||||
qint64 getCenterFrequency();
|
qint64 getCenterFrequency();
|
||||||
void setCenterFrequency(qint64 center_frequency);
|
void setCenterFrequency(qint64 center_frequency);
|
||||||
|
|
||||||
|
qint32 getSampleRate();
|
||||||
|
void setSampleRate(qint32 sample_rate);
|
||||||
|
|
||||||
float getBufferRwBalance();
|
float getBufferRwBalance();
|
||||||
void setBufferRwBalance(float buffer_rw_balance);
|
void setBufferRwBalance(float buffer_rw_balance);
|
||||||
|
|
||||||
@ -57,6 +60,9 @@ private:
|
|||||||
qint64 center_frequency;
|
qint64 center_frequency;
|
||||||
bool m_center_frequency_isSet;
|
bool m_center_frequency_isSet;
|
||||||
|
|
||||||
|
qint32 sample_rate;
|
||||||
|
bool m_sample_rate_isSet;
|
||||||
|
|
||||||
float buffer_rw_balance;
|
float buffer_rw_balance;
|
||||||
bool m_buffer_rw_balance_isSet;
|
bool m_buffer_rw_balance_isSet;
|
||||||
|
|
||||||
|
@ -28,8 +28,6 @@ SWGRemoteOutputSettings::SWGRemoteOutputSettings(QString* json) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SWGRemoteOutputSettings::SWGRemoteOutputSettings() {
|
SWGRemoteOutputSettings::SWGRemoteOutputSettings() {
|
||||||
sample_rate = 0;
|
|
||||||
m_sample_rate_isSet = false;
|
|
||||||
nb_fec_blocks = 0;
|
nb_fec_blocks = 0;
|
||||||
m_nb_fec_blocks_isSet = false;
|
m_nb_fec_blocks_isSet = false;
|
||||||
api_address = nullptr;
|
api_address = nullptr;
|
||||||
@ -60,8 +58,6 @@ SWGRemoteOutputSettings::~SWGRemoteOutputSettings() {
|
|||||||
|
|
||||||
void
|
void
|
||||||
SWGRemoteOutputSettings::init() {
|
SWGRemoteOutputSettings::init() {
|
||||||
sample_rate = 0;
|
|
||||||
m_sample_rate_isSet = false;
|
|
||||||
nb_fec_blocks = 0;
|
nb_fec_blocks = 0;
|
||||||
m_nb_fec_blocks_isSet = false;
|
m_nb_fec_blocks_isSet = false;
|
||||||
api_address = new QString("");
|
api_address = new QString("");
|
||||||
@ -89,7 +85,6 @@ SWGRemoteOutputSettings::init() {
|
|||||||
void
|
void
|
||||||
SWGRemoteOutputSettings::cleanup() {
|
SWGRemoteOutputSettings::cleanup() {
|
||||||
|
|
||||||
|
|
||||||
if(api_address != nullptr) {
|
if(api_address != nullptr) {
|
||||||
delete api_address;
|
delete api_address;
|
||||||
}
|
}
|
||||||
@ -119,8 +114,6 @@ SWGRemoteOutputSettings::fromJson(QString &json) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
SWGRemoteOutputSettings::fromJsonObject(QJsonObject &pJson) {
|
SWGRemoteOutputSettings::fromJsonObject(QJsonObject &pJson) {
|
||||||
::SWGSDRangel::setValue(&sample_rate, pJson["sampleRate"], "qint32", "");
|
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&nb_fec_blocks, pJson["nbFECBlocks"], "qint32", "");
|
::SWGSDRangel::setValue(&nb_fec_blocks, pJson["nbFECBlocks"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&api_address, pJson["apiAddress"], "QString", "QString");
|
::SWGSDRangel::setValue(&api_address, pJson["apiAddress"], "QString", "QString");
|
||||||
@ -159,9 +152,6 @@ SWGRemoteOutputSettings::asJson ()
|
|||||||
QJsonObject*
|
QJsonObject*
|
||||||
SWGRemoteOutputSettings::asJsonObject() {
|
SWGRemoteOutputSettings::asJsonObject() {
|
||||||
QJsonObject* obj = new QJsonObject();
|
QJsonObject* obj = new QJsonObject();
|
||||||
if(m_sample_rate_isSet){
|
|
||||||
obj->insert("sampleRate", QJsonValue(sample_rate));
|
|
||||||
}
|
|
||||||
if(m_nb_fec_blocks_isSet){
|
if(m_nb_fec_blocks_isSet){
|
||||||
obj->insert("nbFECBlocks", QJsonValue(nb_fec_blocks));
|
obj->insert("nbFECBlocks", QJsonValue(nb_fec_blocks));
|
||||||
}
|
}
|
||||||
@ -199,16 +189,6 @@ SWGRemoteOutputSettings::asJsonObject() {
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
|
||||||
SWGRemoteOutputSettings::getSampleRate() {
|
|
||||||
return sample_rate;
|
|
||||||
}
|
|
||||||
void
|
|
||||||
SWGRemoteOutputSettings::setSampleRate(qint32 sample_rate) {
|
|
||||||
this->sample_rate = sample_rate;
|
|
||||||
this->m_sample_rate_isSet = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGRemoteOutputSettings::getNbFecBlocks() {
|
SWGRemoteOutputSettings::getNbFecBlocks() {
|
||||||
return nb_fec_blocks;
|
return nb_fec_blocks;
|
||||||
@ -324,9 +304,6 @@ bool
|
|||||||
SWGRemoteOutputSettings::isSet(){
|
SWGRemoteOutputSettings::isSet(){
|
||||||
bool isObjectUpdated = false;
|
bool isObjectUpdated = false;
|
||||||
do{
|
do{
|
||||||
if(m_sample_rate_isSet){
|
|
||||||
isObjectUpdated = true; break;
|
|
||||||
}
|
|
||||||
if(m_nb_fec_blocks_isSet){
|
if(m_nb_fec_blocks_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,6 @@ public:
|
|||||||
virtual void fromJsonObject(QJsonObject &json) override;
|
virtual void fromJsonObject(QJsonObject &json) override;
|
||||||
virtual SWGRemoteOutputSettings* fromJson(QString &jsonString) override;
|
virtual SWGRemoteOutputSettings* fromJson(QString &jsonString) override;
|
||||||
|
|
||||||
qint32 getSampleRate();
|
|
||||||
void setSampleRate(qint32 sample_rate);
|
|
||||||
|
|
||||||
qint32 getNbFecBlocks();
|
qint32 getNbFecBlocks();
|
||||||
void setNbFecBlocks(qint32 nb_fec_blocks);
|
void setNbFecBlocks(qint32 nb_fec_blocks);
|
||||||
|
|
||||||
@ -82,9 +79,6 @@ public:
|
|||||||
virtual bool isSet() override;
|
virtual bool isSet() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
qint32 sample_rate;
|
|
||||||
bool m_sample_rate_isSet;
|
|
||||||
|
|
||||||
qint32 nb_fec_blocks;
|
qint32 nb_fec_blocks;
|
||||||
bool m_nb_fec_blocks_isSet;
|
bool m_nb_fec_blocks_isSet;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user