mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-29 05:22:25 -04:00
AFC: added tracker adjustment period and fixes
This commit is contained in:
parent
8462090038
commit
be4f7f3178
@ -184,6 +184,7 @@ void AFC::applySettings(const AFCSettings& settings, bool force)
|
|||||||
<< " m_transverterTarget: " << settings.m_transverterTarget
|
<< " m_transverterTarget: " << settings.m_transverterTarget
|
||||||
<< " m_targetFrequency: " << settings.m_targetFrequency
|
<< " m_targetFrequency: " << settings.m_targetFrequency
|
||||||
<< " m_freqTolerance: " << settings.m_freqTolerance
|
<< " m_freqTolerance: " << settings.m_freqTolerance
|
||||||
|
<< " m_trackerAdjustPeriod:" << settings.m_trackerAdjustPeriod
|
||||||
<< " force: " << force;
|
<< " force: " << force;
|
||||||
|
|
||||||
QList<QString> reverseAPIKeys;
|
QList<QString> reverseAPIKeys;
|
||||||
@ -212,6 +213,9 @@ void AFC::applySettings(const AFCSettings& settings, bool force)
|
|||||||
if ((m_settings.m_freqTolerance != settings.m_freqTolerance) || force) {
|
if ((m_settings.m_freqTolerance != settings.m_freqTolerance) || force) {
|
||||||
reverseAPIKeys.append("freqTolerance");
|
reverseAPIKeys.append("freqTolerance");
|
||||||
}
|
}
|
||||||
|
if ((m_settings.m_trackerAdjustPeriod != settings.m_trackerAdjustPeriod) || force) {
|
||||||
|
reverseAPIKeys.append("trackerAdjustPeriod");
|
||||||
|
}
|
||||||
|
|
||||||
if ((m_settings.m_trackerDeviceSetIndex != settings.m_trackerDeviceSetIndex) || force) {
|
if ((m_settings.m_trackerDeviceSetIndex != settings.m_trackerDeviceSetIndex) || force) {
|
||||||
trackerDeviceChange(settings.m_trackerDeviceSetIndex);
|
trackerDeviceChange(settings.m_trackerDeviceSetIndex);
|
||||||
@ -331,6 +335,7 @@ void AFC::webapiFormatFeatureSettings(
|
|||||||
response.getAfcSettings()->setTransverterTarget(settings.m_transverterTarget);
|
response.getAfcSettings()->setTransverterTarget(settings.m_transverterTarget);
|
||||||
response.getAfcSettings()->setTargetFrequency(settings.m_targetFrequency);
|
response.getAfcSettings()->setTargetFrequency(settings.m_targetFrequency);
|
||||||
response.getAfcSettings()->setFreqTolerance(settings.m_freqTolerance);
|
response.getAfcSettings()->setFreqTolerance(settings.m_freqTolerance);
|
||||||
|
response.getAfcSettings()->setTrackerAdjustPeriod(settings.m_trackerAdjustPeriod);
|
||||||
|
|
||||||
response.getAfcSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
|
response.getAfcSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
|
||||||
|
|
||||||
@ -374,6 +379,9 @@ void AFC::webapiUpdateFeatureSettings(
|
|||||||
if (featureSettingsKeys.contains("freqTolerance")) {
|
if (featureSettingsKeys.contains("freqTolerance")) {
|
||||||
settings.m_freqTolerance = response.getAfcSettings()->getFreqTolerance();
|
settings.m_freqTolerance = response.getAfcSettings()->getFreqTolerance();
|
||||||
}
|
}
|
||||||
|
if (featureSettingsKeys.contains("trackerAdjustPeriod")) {
|
||||||
|
settings.m_trackerAdjustPeriod = response.getAfcSettings()->getTrackerAdjustPeriod();
|
||||||
|
}
|
||||||
if (featureSettingsKeys.contains("useReverseAPI")) {
|
if (featureSettingsKeys.contains("useReverseAPI")) {
|
||||||
settings.m_useReverseAPI = response.getAfcSettings()->getUseReverseApi() != 0;
|
settings.m_useReverseAPI = response.getAfcSettings()->getUseReverseApi() != 0;
|
||||||
}
|
}
|
||||||
@ -430,6 +438,9 @@ void AFC::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, const A
|
|||||||
if (channelSettingsKeys.contains("freqTolerance") || force) {
|
if (channelSettingsKeys.contains("freqTolerance") || force) {
|
||||||
swgAFCSettings->setFreqTolerance(settings.m_freqTolerance);
|
swgAFCSettings->setFreqTolerance(settings.m_freqTolerance);
|
||||||
}
|
}
|
||||||
|
if (channelSettingsKeys.contains("trackerAdjustPeriod") || force) {
|
||||||
|
swgAFCSettings->setTrackerAdjustPeriod(settings.m_trackerAdjustPeriod);
|
||||||
|
}
|
||||||
|
|
||||||
QString channelSettingsURL = QString("http://%1:%2/sdrangel/featureset/%3/feature/%4/settings")
|
QString channelSettingsURL = QString("http://%1:%2/sdrangel/featureset/%3/feature/%4/settings")
|
||||||
.arg(settings.m_reverseAPIAddress)
|
.arg(settings.m_reverseAPIAddress)
|
||||||
|
@ -174,6 +174,8 @@ void AFCGUI::displaySettings()
|
|||||||
ui->transverterTarget->setChecked(m_settings.m_transverterTarget);
|
ui->transverterTarget->setChecked(m_settings.m_transverterTarget);
|
||||||
ui->targetFrequency->setValue(m_settings.m_targetFrequency);
|
ui->targetFrequency->setValue(m_settings.m_targetFrequency);
|
||||||
ui->toleranceFrequency->setValue(m_settings.m_freqTolerance);
|
ui->toleranceFrequency->setValue(m_settings.m_freqTolerance);
|
||||||
|
ui->targetPeriod->setValue(m_settings.m_trackerAdjustPeriod);
|
||||||
|
ui->targetPeriodText->setText(tr("%1").arg(m_settings.m_trackerAdjustPeriod));
|
||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -363,6 +365,13 @@ void AFCGUI::on_devicesApply_clicked()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AFCGUI::on_targetPeriod_valueChanged(int value)
|
||||||
|
{
|
||||||
|
m_settings.m_trackerAdjustPeriod = value;
|
||||||
|
ui->targetPeriodText->setText(tr("%1").arg(m_settings.m_trackerAdjustPeriod));
|
||||||
|
applySettings();
|
||||||
|
}
|
||||||
|
|
||||||
void AFCGUI::updateStatus()
|
void AFCGUI::updateStatus()
|
||||||
{
|
{
|
||||||
int state = m_afc->getState();
|
int state = m_afc->getState();
|
||||||
|
@ -83,6 +83,7 @@ private slots:
|
|||||||
void on_trackerDevice_currentIndexChanged(int index);
|
void on_trackerDevice_currentIndexChanged(int index);
|
||||||
void on_trackedDevice_currentIndexChanged(int index);
|
void on_trackedDevice_currentIndexChanged(int index);
|
||||||
void on_devicesApply_clicked();
|
void on_devicesApply_clicked();
|
||||||
|
void on_targetPeriod_valueChanged(int value);
|
||||||
void updateStatus();
|
void updateStatus();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>340</width>
|
<width>340</width>
|
||||||
<height>181</height>
|
<height>160</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -34,9 +34,9 @@
|
|||||||
<widget class="QWidget" name="settingsContainer" native="true">
|
<widget class="QWidget" name="settingsContainer" native="true">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>0</x>
|
||||||
<y>10</y>
|
<y>0</y>
|
||||||
<width>311</width>
|
<width>340</width>
|
||||||
<height>151</height>
|
<height>151</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -76,178 +76,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="ButtonSwitch" name="hasTargetFrequency">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Adjust device frequency to match tracker frequency</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>T</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="ValueDial" name="targetFrequency" 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="focusPolicy">
|
|
||||||
<enum>Qt::StrongFocus</enum>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Tracker frequency in Hz</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="targetFrequencyUnits">
|
|
||||||
<property name="text">
|
|
||||||
<string>Hz</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="ButtonSwitch" name="transverterTarget">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Use transverter frequency for tracker frequency adjustment</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>X</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="toleranceLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="toleranceLabel">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Tol</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="ValueDial" name="toleranceFrequency" 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="focusPolicy">
|
|
||||||
<enum>Qt::StrongFocus</enum>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Frequency tolerance before device frequency is changed (Hz)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="toleranceUnits">
|
|
||||||
<property name="text">
|
|
||||||
<string>Hz</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="deviceTrack">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>24</width>
|
|
||||||
<height>24</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Force device tracking update</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="icon">
|
|
||||||
<iconset resource="../../../sdrgui/resources/res.qrc">
|
|
||||||
<normaloff>:/arrow_left.png</normaloff>:/arrow_left.png</iconset>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer_3">
|
|
||||||
<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>
|
|
||||||
<widget class="QLabel" name="statusIndicator">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>16</width>
|
|
||||||
<height>16</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Idle</string>
|
|
||||||
</property>
|
|
||||||
<property name="styleSheet">
|
|
||||||
<string notr="true">QLabel { background-color: gray; border-radius: 8px; }</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="devicesLayout">
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="devicesRefresh">
|
<widget class="QPushButton" name="devicesRefresh">
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
@ -355,6 +183,225 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="targetLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="ButtonSwitch" name="hasTargetFrequency">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Tracker target frequency auto adjust</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>T</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="ValueDial" name="targetFrequency" 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="focusPolicy">
|
||||||
|
<enum>Qt::StrongFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Tracker target tracker frequency in Hz</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="targetFrequencyUnits">
|
||||||
|
<property name="text">
|
||||||
|
<string>Hz</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="ButtonSwitch" name="transverterTarget">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Use transverter frequency for tracker target frequency adjustment</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>X</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="toleranceLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="toleranceLabel">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&plusmn;</string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::RichText</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="ValueDial" name="toleranceFrequency" 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="focusPolicy">
|
||||||
|
<enum>Qt::StrongFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Tracker target frequency error tolerance (Hz)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="toleranceUnits">
|
||||||
|
<property name="text">
|
||||||
|
<string>Hz</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDial" name="targetPeriod">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Tracker target frequency adjustment period (seconds)</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>120</number>
|
||||||
|
</property>
|
||||||
|
<property name="pageStep">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>20</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="targetPeriodText">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Tracker target frequency adjustment period (seconds)</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>000</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="deviceTrack">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Force tracker target frequency adjustment</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../sdrgui/resources/res.qrc">
|
||||||
|
<normaloff>:/arrow_left.png</normaloff>:/arrow_left.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<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>
|
||||||
|
<widget class="QLabel" name="statusIndicator">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>16</width>
|
||||||
|
<height>16</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Idle</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QLabel { background-color: gray; border-radius: 8px; }</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -37,6 +37,7 @@ void AFCSettings::resetToDefaults()
|
|||||||
m_transverterTarget = false;
|
m_transverterTarget = false;
|
||||||
m_targetFrequency = 0;
|
m_targetFrequency = 0;
|
||||||
m_freqTolerance = 1000;
|
m_freqTolerance = 1000;
|
||||||
|
m_trackerAdjustPeriod = 20;
|
||||||
m_useReverseAPI = false;
|
m_useReverseAPI = false;
|
||||||
m_reverseAPIAddress = "127.0.0.1";
|
m_reverseAPIAddress = "127.0.0.1";
|
||||||
m_reverseAPIPort = 8888;
|
m_reverseAPIPort = 8888;
|
||||||
@ -51,6 +52,7 @@ QByteArray AFCSettings::serialize() const
|
|||||||
s.writeString(1, m_title);
|
s.writeString(1, m_title);
|
||||||
s.writeU32(2, m_rgbColor);
|
s.writeU32(2, m_rgbColor);
|
||||||
s.writeS32(3, m_trackerDeviceSetIndex);
|
s.writeS32(3, m_trackerDeviceSetIndex);
|
||||||
|
s.writeU32(4, m_trackerAdjustPeriod);
|
||||||
s.writeS32(5, m_trackedDeviceSetIndex);
|
s.writeS32(5, m_trackedDeviceSetIndex);
|
||||||
s.writeBool(6, m_hasTargetFrequency);
|
s.writeBool(6, m_hasTargetFrequency);
|
||||||
s.writeBool(7, m_transverterTarget);
|
s.writeBool(7, m_transverterTarget);
|
||||||
@ -85,6 +87,7 @@ bool AFCSettings::deserialize(const QByteArray& data)
|
|||||||
d.readString(1, &m_title, "AFC");
|
d.readString(1, &m_title, "AFC");
|
||||||
d.readU32(2, &m_rgbColor, QColor(255, 255, 0).rgb());
|
d.readU32(2, &m_rgbColor, QColor(255, 255, 0).rgb());
|
||||||
d.readS32(3, &m_trackerDeviceSetIndex, -1);
|
d.readS32(3, &m_trackerDeviceSetIndex, -1);
|
||||||
|
d.readU32(4, &m_trackerAdjustPeriod, 20);
|
||||||
d.readS32(5, &m_trackedDeviceSetIndex, -1);
|
d.readS32(5, &m_trackedDeviceSetIndex, -1);
|
||||||
d.readBool(6, &m_hasTargetFrequency, false);
|
d.readBool(6, &m_hasTargetFrequency, false);
|
||||||
d.readBool(7, &m_transverterTarget, false);
|
d.readBool(7, &m_transverterTarget, false);
|
||||||
|
@ -33,6 +33,7 @@ struct AFCSettings
|
|||||||
bool m_transverterTarget;
|
bool m_transverterTarget;
|
||||||
quint64 m_targetFrequency;
|
quint64 m_targetFrequency;
|
||||||
quint64 m_freqTolerance;
|
quint64 m_freqTolerance;
|
||||||
|
unsigned int m_trackerAdjustPeriod; //!< tracker channel frequency adjustment period in seconds
|
||||||
bool m_useReverseAPI;
|
bool m_useReverseAPI;
|
||||||
QString m_reverseAPIAddress;
|
QString m_reverseAPIAddress;
|
||||||
uint16_t m_reverseAPIPort;
|
uint16_t m_reverseAPIPort;
|
||||||
|
@ -49,6 +49,11 @@ AFCWorker::AFCWorker(WebAPIAdapterInterface *webAPIAdapterInterface) :
|
|||||||
m_mutex(QMutex::Recursive)
|
m_mutex(QMutex::Recursive)
|
||||||
{
|
{
|
||||||
qDebug("AFCWorker::AFCWorker");
|
qDebug("AFCWorker::AFCWorker");
|
||||||
|
connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateTarget()));
|
||||||
|
|
||||||
|
if (m_settings.m_hasTargetFrequency) {
|
||||||
|
m_updateTimer.start(m_settings.m_trackerAdjustPeriod * 1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AFCWorker::~AFCWorker()
|
AFCWorker::~AFCWorker()
|
||||||
@ -115,7 +120,7 @@ bool AFCWorker::handleMessage(const Message& cmd)
|
|||||||
else if (MsgDeviceTrack::match(cmd))
|
else if (MsgDeviceTrack::match(cmd))
|
||||||
{
|
{
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
QMutexLocker mutexLocker(&m_mutex);
|
||||||
updateTarget(m_trackerChannelOffset);
|
updateTarget();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (MsgDevicesApply::match(cmd))
|
else if (MsgDevicesApply::match(cmd))
|
||||||
@ -152,6 +157,19 @@ void AFCWorker::applySettings(const AFCSettings& settings, bool force)
|
|||||||
initTrackedDeviceSet(settings.m_trackedDeviceSetIndex);
|
initTrackedDeviceSet(settings.m_trackedDeviceSetIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((settings.m_trackerAdjustPeriod != m_settings.m_trackerAdjustPeriod) || force) {
|
||||||
|
m_updateTimer.setInterval(settings.m_trackerAdjustPeriod * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((settings.m_hasTargetFrequency != m_settings.m_hasTargetFrequency) || force)
|
||||||
|
{
|
||||||
|
if (settings.m_hasTargetFrequency) {
|
||||||
|
m_updateTimer.start(m_settings.m_trackerAdjustPeriod * 1000);
|
||||||
|
} else {
|
||||||
|
m_updateTimer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,45 +282,44 @@ void AFCWorker::processChannelSettings(
|
|||||||
SWGSDRangel::SWGChannelSettings *swgChannelSettings)
|
SWGSDRangel::SWGChannelSettings *swgChannelSettings)
|
||||||
{
|
{
|
||||||
MainCore *mainCore = MainCore::instance();
|
MainCore *mainCore = MainCore::instance();
|
||||||
|
QJsonObject *jsonObj = swgChannelSettings->asJsonObject();
|
||||||
|
QJsonValue channelOffsetValue;
|
||||||
|
|
||||||
if (*swgChannelSettings->getChannelType() == "FreqTracker")
|
if (WebAPIUtils::extractValue(*jsonObj, "inputFrequencyOffset", channelOffsetValue))
|
||||||
{
|
{
|
||||||
int trackerChannelOffset = swgChannelSettings->getFreqTrackerSettings()->getInputFrequencyOffset();
|
int channelOffset = channelOffsetValue.toInt();
|
||||||
|
|
||||||
if (trackerChannelOffset != m_trackerChannelOffset)
|
if (*swgChannelSettings->getChannelType() == "FreqTracker")
|
||||||
{
|
{
|
||||||
QMap<ChannelAPI*, ChannelTracking>::iterator it = m_channelsMap.begin();
|
if (channelOffset != m_trackerChannelOffset)
|
||||||
|
|
||||||
for (; it != m_channelsMap.end(); ++it)
|
|
||||||
{
|
{
|
||||||
if (mainCore->existsChannel(it.key()))
|
qDebug("AFCWorker::processChannelSettings: FreqTracker offset change: %d", channelOffset);
|
||||||
{
|
QMap<ChannelAPI*, ChannelTracking>::iterator it = m_channelsMap.begin();
|
||||||
int channelOffset = it.value().m_channelOffset + trackerChannelOffset - it.value().m_trackerOffset;
|
|
||||||
updateChannelOffset(it.key(), it.value().m_channelDirection, channelOffset);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_channelsMap.erase(it);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_settings.m_hasTargetFrequency) {
|
for (; it != m_channelsMap.end(); ++it)
|
||||||
updateTarget(trackerChannelOffset);
|
{
|
||||||
}
|
if (mainCore->existsChannel(it.key()))
|
||||||
|
{
|
||||||
|
int channelOffset = it.value().m_channelOffset + channelOffset - it.value().m_trackerOffset;
|
||||||
|
updateChannelOffset(it.key(), it.value().m_channelDirection, channelOffset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_channelsMap.erase(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_trackerChannelOffset = trackerChannelOffset;
|
m_trackerChannelOffset = channelOffset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
else if (m_channelsMap.contains(const_cast<ChannelAPI*>(channelAPI)))
|
||||||
else if (m_channelsMap.contains(const_cast<ChannelAPI*>(channelAPI)))
|
|
||||||
{
|
|
||||||
QJsonObject *jsonObj = swgChannelSettings->asJsonObject();
|
|
||||||
QJsonValue channelOffsetValue;
|
|
||||||
|
|
||||||
if (WebAPIUtils::extractValue(*jsonObj, "inputFrequencyOffset", channelOffsetValue))
|
|
||||||
{
|
{
|
||||||
int channelOffset = channelOffsetValue.toInt();
|
if (WebAPIUtils::extractValue(*jsonObj, "inputFrequencyOffset", channelOffsetValue))
|
||||||
m_channelsMap[const_cast<ChannelAPI*>(channelAPI)].m_channelOffset = channelOffset;
|
{
|
||||||
m_channelsMap[const_cast<ChannelAPI*>(channelAPI)].m_trackerOffset = m_trackerChannelOffset;
|
int channelOffset = channelOffsetValue.toInt();
|
||||||
|
m_channelsMap[const_cast<ChannelAPI*>(channelAPI)].m_channelOffset = channelOffset;
|
||||||
|
m_channelsMap[const_cast<ChannelAPI*>(channelAPI)].m_trackerOffset = m_trackerChannelOffset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -346,7 +363,7 @@ bool AFCWorker::updateChannelOffset(ChannelAPI *channelAPI, int direction, int o
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AFCWorker::updateTarget(int& trackerChannelOffset)
|
void AFCWorker::updateTarget()
|
||||||
{
|
{
|
||||||
SWGSDRangel::SWGDeviceSettings resDevice;
|
SWGSDRangel::SWGDeviceSettings resDevice;
|
||||||
SWGSDRangel::SWGChannelSettings resChannel;
|
SWGSDRangel::SWGChannelSettings resChannel;
|
||||||
@ -376,7 +393,7 @@ void AFCWorker::updateTarget(int& trackerChannelOffset)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t trackerFrequency = m_trackerDeviceFrequency + trackerChannelOffset;
|
int64_t trackerFrequency = m_trackerDeviceFrequency + m_trackerChannelOffset;
|
||||||
int64_t correction = m_settings.m_targetFrequency - trackerFrequency;
|
int64_t correction = m_settings.m_targetFrequency - trackerFrequency;
|
||||||
int64_t tolerance = m_settings.m_freqTolerance;
|
int64_t tolerance = m_settings.m_freqTolerance;
|
||||||
qDebug() << "AFCWorker::updateTarget: correction:" << correction << "tolerance:" << tolerance;
|
qDebug() << "AFCWorker::updateTarget: correction:" << correction << "tolerance:" << tolerance;
|
||||||
@ -403,8 +420,8 @@ void AFCWorker::updateTarget(int& trackerChannelOffset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// adjust tracker offset
|
// adjust tracker offset
|
||||||
if (updateChannelOffset(m_freqTracker, 0, trackerChannelOffset + correction, 1)) {
|
if (updateChannelOffset(m_freqTracker, 0, m_trackerChannelOffset + correction, 1)) {
|
||||||
trackerChannelOffset += correction;
|
m_trackerChannelOffset += correction;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // act on device
|
else // act on device
|
||||||
|
@ -163,12 +163,12 @@ private:
|
|||||||
SWGSDRangel::SWGChannelSettings *swgChannelSettings
|
SWGSDRangel::SWGChannelSettings *swgChannelSettings
|
||||||
);
|
);
|
||||||
bool updateChannelOffset(ChannelAPI *channelAPI, int direction, int offset, unsigned int blockCount = 0);
|
bool updateChannelOffset(ChannelAPI *channelAPI, int direction, int offset, unsigned int blockCount = 0);
|
||||||
void updateTarget(int& trackerChannelOffset);
|
|
||||||
bool updateDeviceFrequency(DeviceSet *deviceSet, const QString& key, int64_t frequency);
|
bool updateDeviceFrequency(DeviceSet *deviceSet, const QString& key, int64_t frequency);
|
||||||
int getDeviceDirection(DeviceAPI *deviceAPI);
|
int getDeviceDirection(DeviceAPI *deviceAPI);
|
||||||
void getDeviceSettingsKey(DeviceAPI *deviceAPI, QString& settingsKey);
|
void getDeviceSettingsKey(DeviceAPI *deviceAPI, QString& settingsKey);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void updateTarget();
|
||||||
void handleInputMessages();
|
void handleInputMessages();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user