mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-30 20:40:20 -04:00 
			
		
		
		
	SDRPlayV3: implemented transverter feature. Updated documentation
This commit is contained in:
		
							parent
							
								
									7880a523a7
								
							
						
					
					
						commit
						57a5551401
					
				
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 47 KiB | 
							
								
								
									
										
											BIN
										
									
								
								doc/img/SDRPlayV3_plugin.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								doc/img/SDRPlayV3_plugin.xcf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -40,35 +40,39 @@ Selects which tuner is used for input. For RSPduo this can be 1 or 2. Other RSP | |||||||
| 
 | 
 | ||||||
| Selects which antenna port is used. The antenna ports available depend upon the RSP device and tuner selected. | Selects which antenna port is used. The antenna ports available depend upon the RSP device and tuner selected. | ||||||
| 
 | 
 | ||||||
| <h3>7: DC offset correction</h3> | <h3>7. Transverter mode open dialog</h3> | ||||||
|  | 
 | ||||||
|  | This button opens a dialog to set the transverter mode frequency translation options. The details about this dialog can be found [here](../../../sdrgui/gui/transverterdialog.md) | ||||||
|  | 
 | ||||||
|  | <h3>8: DC offset correction</h3> | ||||||
| 
 | 
 | ||||||
| Check this button to enable DC offset correction. | Check this button to enable DC offset correction. | ||||||
| 
 | 
 | ||||||
| <h3>8: IQ imbalance correction</h3> | <h3>9: IQ imbalance correction</h3> | ||||||
| 
 | 
 | ||||||
| Check this button to enable IQ imbalance correction. | Check this button to enable IQ imbalance correction. | ||||||
| 
 | 
 | ||||||
| <h3>9: External reference clock output</h3> | <h3>10: External reference clock output</h3> | ||||||
| 
 | 
 | ||||||
| Enable reference clock output. This is only available for RSP2 and DSPduo. | Enable reference clock output. This is only available for RSP2 and DSPduo. | ||||||
| 
 | 
 | ||||||
| <h3>10: Bias tee</h3> | <h3>11: Bias tee</h3> | ||||||
| 
 | 
 | ||||||
| Enable bias tee. This is only available for RSP1A, RSP2, RSPduo tuner 2 and RSPdx. | Enable bias tee. This is only available for RSP1A, RSP2, RSPduo tuner 2 and RSPdx. | ||||||
| 
 | 
 | ||||||
| <h3>11: AM notch filter</h3> | <h3>12: AM notch filter</h3> | ||||||
| 
 | 
 | ||||||
| Enable AM notch filter. This is only available for RSPduo tuner 1. | Enable AM notch filter. This is only available for RSPduo tuner 1. | ||||||
| 
 | 
 | ||||||
| <h3>12: MW/FM notch filter</h3> | <h3>13: MW/FM notch filter</h3> | ||||||
| 
 | 
 | ||||||
| Enable MW/FM notch filter. This is only available for RSP1A, RSP2, RSPduo and RSPdx. | Enable MW/FM notch filter. This is only available for RSP1A, RSP2, RSPduo and RSPdx. | ||||||
| 
 | 
 | ||||||
| <h3>13: DAB notch filter</h3> | <h3>14: DAB notch filter</h3> | ||||||
| 
 | 
 | ||||||
| Enable DAB notch filter. This is only available for RSP1A, RSPduo and RSPdx. | Enable DAB notch filter. This is only available for RSP1A, RSPduo and RSPdx. | ||||||
| 
 | 
 | ||||||
| <h3>14: IF bandwidth</h3> | <h3>15: IF bandwidth</h3> | ||||||
| 
 | 
 | ||||||
| This selects the IF filter bandwidth. The following bandwidths are available: | This selects the IF filter bandwidth. The following bandwidths are available: | ||||||
| 
 | 
 | ||||||
| @ -81,31 +85,49 @@ This selects the IF filter bandwidth. The following bandwidths are available: | |||||||
|   - 7000 kHz |   - 7000 kHz | ||||||
|   - 8000 kHz |   - 8000 kHz | ||||||
| 
 | 
 | ||||||
| <h3>15: IF frequency</h3> | <h3>16: IF frequency</h3> | ||||||
| 
 | 
 | ||||||
| Warning there is no good support of non zero IF. **It is advised to keep zero IF for normal use**. | Warning there is no good support of non zero IF. **It is advised to keep zero IF for normal use**. | ||||||
| 
 | 
 | ||||||
|  | Some tricks are provided for expert use of non-zero IFs. You may want to start from these settings to experiment more with it. | ||||||
|  | 
 | ||||||
| This selects the IF frequency between these values: | This selects the IF frequency between these values: | ||||||
| 
 | 
 | ||||||
|   - **0 for zero IF** |   - **0 for zero IF** | ||||||
|   - 450 kHz. Some practical tricks that may or may not work: |   - 450 kHz. | ||||||
|     - Frequency is shifted by -450 kHZ. |     - Move center frequency by -450 kHZ (3). | ||||||
|     - Do not set center frequency lower than 450 kHz down the target frequency |       - Direct frequency reading is -450 kHz off from real Rx frequency. | ||||||
|     - Use at least 1536 kHz bandwidth (14) |       - You may use the transverter mode (7) with a shift of +450 kHz to correct the frequency reading | ||||||
|     - After sample rate change (16) you may need to start/stop device to get thins right. |       - If you already use the transverter mode for transverter work just add 450 kHz to the current shift | ||||||
|     - Use decimation > 1 (17) with Inf position (18) |     - Use 1536 kHz bandwidth (15) | ||||||
|   - 1620 kHz: do not use |     - After sample rate change (17) you may need to start/stop device to get things right. | ||||||
|   - 2048 kHz: do not use |     - Use decimation > 1 (18) with Inf position (19) | ||||||
|  |   - 1620 kHz: | ||||||
|  |     - Move center frequency by -1620 kHz (3). | ||||||
|  |       - Direct frequency reading is -1620 kHz off from real Rx frequency. | ||||||
|  |       - You may use the transverter mode (7) with a shift of +1620 kHz to correct the frequency reading | ||||||
|  |       - If you already use the transverter mode for transverter work just add 1620 kHz to the current shift | ||||||
|  |     - Use 5000 kHz bandwidth (15) | ||||||
|  |     - After sample rate change (17) you may need to start/stop device to get things right. | ||||||
|  |     - Use decimation > 1 (18) with Inf position (19) | ||||||
|  |   - 2048 kHz: | ||||||
|  |     - Move center frequency by -2048 kHz (3). | ||||||
|  |       - Direct frequency reading is -2048 kHz off from real Rx frequency. | ||||||
|  |       - You may use the transverter mode (7) with a shift of +2048 kHz to correct the frequency reading | ||||||
|  |       - If you already use the transverter mode for transverter work just add 2048 kHz to the current shift | ||||||
|  |     - Use 5000 kHz bandwidth (15) | ||||||
|  |     - After sample rate change (17) you may need to start/stop device to get things right. | ||||||
|  |     - Use decimation > 1 (18) with Inf position (19) | ||||||
| 
 | 
 | ||||||
| <h3>16: Sample rate</h3> | <h3>17: Sample rate</h3> | ||||||
| 
 | 
 | ||||||
| Sets the ADC IQ sample rats from 2M to 10.66M Hz. | Sets the ADC IQ sample rats from 2M to 10.66M Hz. | ||||||
| 
 | 
 | ||||||
| <h3>17: Decimation</h3> | <h3>18: Decimation</h3> | ||||||
| 
 | 
 | ||||||
| Decimation in powers of two from 1 (no decimation) to 64. | Decimation in powers of two from 1 (no decimation) to 64. | ||||||
| 
 | 
 | ||||||
| <h3>18: Decimated bandpass center frequency position relative the SDRplay center frequency</h3> | <h3>19: Decimated bandpass center frequency position relative the SDRplay center frequency</h3> | ||||||
| 
 | 
 | ||||||
|   - **Cen**: the decimation operation takes place around the SDRplay center frequency Fs. |   - **Cen**: the decimation operation takes place around the SDRplay center frequency Fs. | ||||||
|   - **Inf**: the decimation operation takes place around Fs - Fc. |   - **Inf**: the decimation operation takes place around Fs - Fc. | ||||||
| @ -116,14 +138,14 @@ With SR as the sample rate before decimation Fc is calculated as: | |||||||
|   - if decimation n is 4 or lower:  Fc = SR/2^(log2(n)-1). The device center frequency is on the side of the baseband. You need a RF filter bandwidth at least twice the baseband. |   - if decimation n is 4 or lower:  Fc = SR/2^(log2(n)-1). The device center frequency is on the side of the baseband. You need a RF filter bandwidth at least twice the baseband. | ||||||
|   - if decimation n is 8 or higher: Fc = SR/n. The device center frequency is half the baseband away from the side of the baseband. You need a RF filter bandwidth at least 3 times the baseband. |   - if decimation n is 8 or higher: Fc = SR/n. The device center frequency is half the baseband away from the side of the baseband. You need a RF filter bandwidth at least 3 times the baseband. | ||||||
| 
 | 
 | ||||||
| <h3>19. RF gain setting</h3> | <h3>20. RF gain setting</h3> | ||||||
| 
 | 
 | ||||||
| Sets the LNA and mixer gain dB. The settings available depended upon the RSP device and frequency band. | Sets the LNA and mixer gain dB. The settings available depended upon the RSP device and frequency band. | ||||||
| 
 | 
 | ||||||
| <h3>20. IF AGC</h3> | <h3>21. IF AGC</h3> | ||||||
| 
 | 
 | ||||||
| Check this button to enable IF automatic gain control. | Check this button to enable IF automatic gain control. | ||||||
| 
 | 
 | ||||||
| <h3>21. IF gain</h3> | <h3>22. IF gain</h3> | ||||||
| 
 | 
 | ||||||
| Manual IF gain from 0 to -59 dB. Only enabled when IF AGC is disabled. | Manual IF gain from 0 to -59 dB. Only enabled when IF AGC is disabled. | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ SDRPlayV3Gui::SDRPlayV3Gui(DeviceUISet *deviceUISet, QWidget* parent) : | |||||||
| 
 | 
 | ||||||
|     ui->setupUi(this); |     ui->setupUi(this); | ||||||
|     ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); |     ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); | ||||||
|     ui->centerFrequency->setValueRange(7, 1U, 2000000U); |     updateFrequencyLimits(); | ||||||
| 
 | 
 | ||||||
|     ui->ifFrequency->clear(); |     ui->ifFrequency->clear(); | ||||||
|     for (unsigned int i = 0; i < SDRPlayV3IF::getNbIFs(); i++) |     for (unsigned int i = 0; i < SDRPlayV3IF::getNbIFs(); i++) | ||||||
| @ -218,8 +218,28 @@ void SDRPlayV3Gui::updateSampleRateAndFrequency() | |||||||
|     ui->deviceRateText->setText(tr("%1k").arg((float)m_sampleRate / 1000)); |     ui->deviceRateText->setText(tr("%1k").arg((float)m_sampleRate / 1000)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void SDRPlayV3Gui::updateFrequencyLimits() | ||||||
|  | { | ||||||
|  |     // values in kHz
 | ||||||
|  |     qint64 deltaFrequency = m_settings.m_transverterMode ? m_settings.m_transverterDeltaFrequency/1000 : 0; | ||||||
|  |     qint64 minLimit = 1U + deltaFrequency; | ||||||
|  |     qint64 maxLimit = 2000000U + deltaFrequency; | ||||||
|  | 
 | ||||||
|  |     minLimit = minLimit < 0 ? 0 : minLimit > 9999999 ? 9999999 : minLimit; | ||||||
|  |     maxLimit = maxLimit < 0 ? 0 : maxLimit > 9999999 ? 9999999 : maxLimit; | ||||||
|  | 
 | ||||||
|  |     qDebug("SDRPlayV3Gui::updateFrequencyLimits: delta: %lld min: %lld max: %lld", deltaFrequency, minLimit, maxLimit); | ||||||
|  | 
 | ||||||
|  |     ui->centerFrequency->setValueRange(7, minLimit, maxLimit); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void SDRPlayV3Gui::displaySettings() | void SDRPlayV3Gui::displaySettings() | ||||||
| { | { | ||||||
|  |     ui->transverter->setDeltaFrequency(m_settings.m_transverterDeltaFrequency); | ||||||
|  |     ui->transverter->setDeltaFrequencyActive(m_settings.m_transverterMode); | ||||||
|  |     ui->transverter->setIQOrder(m_settings.m_iqOrder); | ||||||
|  |     updateFrequencyLimits(); | ||||||
|  | 
 | ||||||
|     ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); |     ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); | ||||||
| 
 | 
 | ||||||
|     ui->ppm->setValue(m_settings.m_LOppmTenths); |     ui->ppm->setValue(m_settings.m_LOppmTenths); | ||||||
| @ -471,6 +491,17 @@ void SDRPlayV3Gui::on_startStop_toggled(bool checked) | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void SDRPlayV3Gui::on_transverter_clicked() | ||||||
|  | { | ||||||
|  |     m_settings.m_transverterMode = ui->transverter->getDeltaFrequencyAcive(); | ||||||
|  |     m_settings.m_transverterDeltaFrequency = ui->transverter->getDeltaFrequency(); | ||||||
|  |     m_settings.m_iqOrder = ui->transverter->getIQOrder(); | ||||||
|  |     qDebug("SDRPlayV3Gui::on_transverter_clicked: %lld Hz %s", m_settings.m_transverterDeltaFrequency, m_settings.m_transverterMode ? "on" : "off"); | ||||||
|  |     updateFrequencyLimits(); | ||||||
|  |     m_settings.m_centerFrequency = ui->centerFrequency->getValueNew()*1000; | ||||||
|  |     sendSettings(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void SDRPlayV3Gui::openDeviceSettingsDialog(const QPoint& p) | void SDRPlayV3Gui::openDeviceSettingsDialog(const QPoint& p) | ||||||
| { | { | ||||||
|     BasicDeviceSettingsDialog dialog(this); |     BasicDeviceSettingsDialog dialog(this); | ||||||
|  | |||||||
| @ -67,6 +67,7 @@ private: | |||||||
|     void updateLNAValues(); |     void updateLNAValues(); | ||||||
|     void sendSettings(); |     void sendSettings(); | ||||||
|     void updateSampleRateAndFrequency(); |     void updateSampleRateAndFrequency(); | ||||||
|  |     void updateFrequencyLimits(); | ||||||
|     bool handleMessage(const Message& message); |     bool handleMessage(const Message& message); | ||||||
| 
 | 
 | ||||||
| private slots: | private slots: | ||||||
| @ -93,6 +94,7 @@ private slots: | |||||||
|     void on_gainIFAGC_toggled(bool checked); |     void on_gainIFAGC_toggled(bool checked); | ||||||
|     void on_gainIF_valueChanged(int value); |     void on_gainIF_valueChanged(int value); | ||||||
|     void on_startStop_toggled(bool checked); |     void on_startStop_toggled(bool checked); | ||||||
|  |     void on_transverter_clicked(); | ||||||
|     void openDeviceSettingsDialog(const QPoint& p); |     void openDeviceSettingsDialog(const QPoint& p); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ | |||||||
|    <rect> |    <rect> | ||||||
|     <x>0</x> |     <x>0</x> | ||||||
|     <y>0</y> |     <y>0</y> | ||||||
|     <width>317</width> |     <width>409</width> | ||||||
|     <height>260</height> |     <height>260</height> | ||||||
|    </rect> |    </rect> | ||||||
|   </property> |   </property> | ||||||
| @ -278,6 +278,25 @@ | |||||||
|        </property> |        </property> | ||||||
|       </spacer> |       </spacer> | ||||||
|      </item> |      </item> | ||||||
|  |      <item> | ||||||
|  |       <widget class="TransverterButton" name="transverter"> | ||||||
|  |        <property name="maximumSize"> | ||||||
|  |         <size> | ||||||
|  |          <width>24</width> | ||||||
|  |          <height>24</height> | ||||||
|  |         </size> | ||||||
|  |        </property> | ||||||
|  |        <property name="toolTip"> | ||||||
|  |         <string>Transverter frequency translation dialog</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="text"> | ||||||
|  |         <string>X</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="checkable"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|     </layout> |     </layout> | ||||||
|    </item> |    </item> | ||||||
|    <item> |    <item> | ||||||
| @ -791,6 +810,11 @@ | |||||||
|    <header>gui/valuedial.h</header> |    <header>gui/valuedial.h</header> | ||||||
|    <container>1</container> |    <container>1</container> | ||||||
|   </customwidget> |   </customwidget> | ||||||
|  |   <customwidget> | ||||||
|  |    <class>TransverterButton</class> | ||||||
|  |    <extends>QPushButton</extends> | ||||||
|  |    <header>gui/transverterbutton.h</header> | ||||||
|  |   </customwidget> | ||||||
|  </customwidgets> |  </customwidgets> | ||||||
|  <resources> |  <resources> | ||||||
|   <include location="../../../sdrgui/resources/res.qrc"/> |   <include location="../../../sdrgui/resources/res.qrc"/> | ||||||
|  | |||||||
| @ -429,20 +429,37 @@ bool SDRPlayV3Input::applySettings(const SDRPlayV3Settings& settings, bool forwa | |||||||
|     if ((m_settings.m_LOppmTenths != settings.m_LOppmTenths) || force) { |     if ((m_settings.m_LOppmTenths != settings.m_LOppmTenths) || force) { | ||||||
|         reverseAPIKeys.append("LOppmTenths"); |         reverseAPIKeys.append("LOppmTenths"); | ||||||
|     } |     } | ||||||
|  |     if ((m_settings.m_transverterMode != settings.m_transverterMode) || force) { | ||||||
|  |         reverseAPIKeys.append("transverterMode"); | ||||||
|  |     } | ||||||
|  |     if ((m_settings.m_transverterDeltaFrequency != settings.m_transverterDeltaFrequency) || force) { | ||||||
|  |         reverseAPIKeys.append("transverterDeltaFrequency"); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if ((m_settings.m_iqOrder != settings.m_iqOrder) || force) | ||||||
|  |     { | ||||||
|  |         reverseAPIKeys.append("iqOrder"); | ||||||
|  | 
 | ||||||
|  |         if (m_sdrPlayThread) { | ||||||
|  |             m_sdrPlayThread->setIQOrder(settings.m_iqOrder); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     if ((m_settings.m_centerFrequency != settings.m_centerFrequency) |     if ((m_settings.m_centerFrequency != settings.m_centerFrequency) | ||||||
|         || (m_settings.m_LOppmTenths != settings.m_LOppmTenths) |         || (m_settings.m_LOppmTenths != settings.m_LOppmTenths) | ||||||
|         || (m_settings.m_fcPos != settings.m_fcPos) |         || (m_settings.m_fcPos != settings.m_fcPos) | ||||||
|         || (m_settings.m_log2Decim != settings.m_log2Decim) || force) |         || (m_settings.m_log2Decim != settings.m_log2Decim) | ||||||
|  |         || (m_settings.m_transverterMode != settings.m_transverterMode) | ||||||
|  |         || (m_settings.m_transverterDeltaFrequency != settings.m_transverterDeltaFrequency) || force) | ||||||
|     { |     { | ||||||
|         qint64 deviceCenterFrequency = DeviceSampleSource::calculateDeviceCenterFrequency( |         qint64 deviceCenterFrequency = DeviceSampleSource::calculateDeviceCenterFrequency( | ||||||
|                 settings.m_centerFrequency, |                 settings.m_centerFrequency, | ||||||
|                 0, |                 settings.m_transverterDeltaFrequency, | ||||||
|                 settings.m_log2Decim, |                 settings.m_log2Decim, | ||||||
|                 (DeviceSampleSource::fcPos_t) settings.m_fcPos, |                 (DeviceSampleSource::fcPos_t) settings.m_fcPos, | ||||||
|                 settings.m_devSampleRate, |                 settings.m_devSampleRate, | ||||||
|                 DeviceSampleSource::FrequencyShiftScheme::FSHIFT_STD, |                 DeviceSampleSource::FrequencyShiftScheme::FSHIFT_STD, | ||||||
|                 false); |                 settings.m_transverterMode); | ||||||
| 
 | 
 | ||||||
|         forwardChange = true; |         forwardChange = true; | ||||||
| 
 | 
 | ||||||
| @ -862,6 +879,15 @@ void SDRPlayV3Input::webapiUpdateDeviceSettings( | |||||||
|     if (deviceSettingsKeys.contains("antenna")) { |     if (deviceSettingsKeys.contains("antenna")) { | ||||||
|         settings.m_antenna = response.getSdrPlayV3Settings()->getAntenna(); |         settings.m_antenna = response.getSdrPlayV3Settings()->getAntenna(); | ||||||
|     } |     } | ||||||
|  |     if (deviceSettingsKeys.contains("transverterDeltaFrequency")) { | ||||||
|  |         settings.m_transverterDeltaFrequency = response.getSdrPlayV3Settings()->getTransverterDeltaFrequency(); | ||||||
|  |     } | ||||||
|  |     if (deviceSettingsKeys.contains("transverterMode")) { | ||||||
|  |         settings.m_transverterMode = response.getSdrPlayV3Settings()->getTransverterMode() != 0; | ||||||
|  |     } | ||||||
|  |     if (deviceSettingsKeys.contains("iqOrder")) { | ||||||
|  |         settings.m_iqOrder = response.getSdrPlayV3Settings()->getIqOrder() != 0; | ||||||
|  |     } | ||||||
|     if (deviceSettingsKeys.contains("useReverseAPI")) { |     if (deviceSettingsKeys.contains("useReverseAPI")) { | ||||||
|         settings.m_useReverseAPI = response.getSdrPlayV3Settings()->getUseReverseApi() != 0; |         settings.m_useReverseAPI = response.getSdrPlayV3Settings()->getUseReverseApi() != 0; | ||||||
|     } |     } | ||||||
| @ -896,6 +922,9 @@ void SDRPlayV3Input::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& | |||||||
|     response.getSdrPlayV3Settings()->setExtRef(settings.m_extRef); |     response.getSdrPlayV3Settings()->setExtRef(settings.m_extRef); | ||||||
|     response.getSdrPlayV3Settings()->setTuner(settings.m_tuner); |     response.getSdrPlayV3Settings()->setTuner(settings.m_tuner); | ||||||
|     response.getSdrPlayV3Settings()->setAntenna(settings.m_antenna); |     response.getSdrPlayV3Settings()->setAntenna(settings.m_antenna); | ||||||
|  |     response.getSdrPlayV3Settings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency); | ||||||
|  |     response.getSdrPlayV3Settings()->setTransverterMode(settings.m_transverterMode ? 1 : 0); | ||||||
|  |     response.getSdrPlayV3Settings()->setIqOrder(settings.m_iqOrder ? 1 : 0); | ||||||
| 
 | 
 | ||||||
|     response.getSdrPlayV3Settings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0); |     response.getSdrPlayV3Settings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0); | ||||||
| 
 | 
 | ||||||
| @ -1026,6 +1055,15 @@ void SDRPlayV3Input::webapiReverseSendSettings(QList<QString>& deviceSettingsKey | |||||||
|     if (deviceSettingsKeys.contains("antenna") || force) { |     if (deviceSettingsKeys.contains("antenna") || force) { | ||||||
|         swgSDRPlayV3Settings->setAntenna(settings.m_antenna); |         swgSDRPlayV3Settings->setAntenna(settings.m_antenna); | ||||||
|     } |     } | ||||||
|  |     if (deviceSettingsKeys.contains("transverterDeltaFrequency") || force) { | ||||||
|  |         swgSDRPlayV3Settings->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency); | ||||||
|  |     } | ||||||
|  |     if (deviceSettingsKeys.contains("transverterMode") || force) { | ||||||
|  |         swgSDRPlayV3Settings->setTransverterMode(settings.m_transverterMode ? 1 : 0); | ||||||
|  |     } | ||||||
|  |     if (deviceSettingsKeys.contains("iqOrder") || force) { | ||||||
|  |         swgSDRPlayV3Settings->setIqOrder(settings.m_iqOrder ? 1 : 0); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings") |     QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings") | ||||||
|             .arg(settings.m_reverseAPIAddress) |             .arg(settings.m_reverseAPIAddress) | ||||||
|  | |||||||
| @ -47,6 +47,9 @@ void SDRPlayV3Settings::resetToDefaults() | |||||||
|     m_tuner = 0; |     m_tuner = 0; | ||||||
|     m_antenna = 0; |     m_antenna = 0; | ||||||
|     m_extRef = false; |     m_extRef = false; | ||||||
|  |     m_transverterMode = false; | ||||||
|  |     m_iqOrder = true; | ||||||
|  | 	m_transverterDeltaFrequency = 0; | ||||||
|     m_useReverseAPI = false; |     m_useReverseAPI = false; | ||||||
|     m_reverseAPIAddress = "127.0.0.1"; |     m_reverseAPIAddress = "127.0.0.1"; | ||||||
|     m_reverseAPIPort = 8888; |     m_reverseAPIPort = 8888; | ||||||
| @ -79,6 +82,10 @@ QByteArray SDRPlayV3Settings::serialize() const | |||||||
|     s.writeS32(23, m_tuner); |     s.writeS32(23, m_tuner); | ||||||
|     s.writeS32(24, m_antenna); |     s.writeS32(24, m_antenna); | ||||||
|     s.writeBool(25, m_extRef); |     s.writeBool(25, m_extRef); | ||||||
|  |     s.writeBool(26, m_transverterMode); | ||||||
|  |     s.writeS64(27, m_transverterDeltaFrequency); | ||||||
|  |     s.writeBool(28, m_iqOrder); | ||||||
|  | 
 | ||||||
|     return s.final(); |     return s.final(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -128,6 +135,9 @@ bool SDRPlayV3Settings::deserialize(const QByteArray& data) | |||||||
|         d.readS32(23, &m_tuner, 0); |         d.readS32(23, &m_tuner, 0); | ||||||
|         d.readS32(24, &m_antenna, 0); |         d.readS32(24, &m_antenna, 0); | ||||||
|         d.readBool(25, &m_extRef, false); |         d.readBool(25, &m_extRef, false); | ||||||
|  |         d.readBool(26, &m_transverterMode, false); | ||||||
|  |         d.readS64(27, &m_transverterDeltaFrequency, 0); | ||||||
|  |         d.readBool(28, &m_iqOrder, true); | ||||||
| 
 | 
 | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -50,6 +50,9 @@ struct SDRPlayV3Settings { | |||||||
|     int m_tuner; |     int m_tuner; | ||||||
|     int m_antenna; |     int m_antenna; | ||||||
|     bool m_extRef; |     bool m_extRef; | ||||||
|  |     bool m_transverterMode; | ||||||
|  |     bool m_iqOrder; | ||||||
|  | 	qint64 m_transverterDeltaFrequency; | ||||||
|     bool     m_useReverseAPI; |     bool     m_useReverseAPI; | ||||||
|     QString  m_reverseAPIAddress; |     QString  m_reverseAPIAddress; | ||||||
|     uint16_t m_reverseAPIPort; |     uint16_t m_reverseAPIPort; | ||||||
|  | |||||||
| @ -33,7 +33,8 @@ SDRPlayV3Thread::SDRPlayV3Thread(sdrplay_api_DeviceT* dev, SampleSinkFifo* sampl | |||||||
|     m_sampleFifo(sampleFifo), |     m_sampleFifo(sampleFifo), | ||||||
|     m_samplerate(2000000), |     m_samplerate(2000000), | ||||||
|     m_log2Decim(0), |     m_log2Decim(0), | ||||||
|     m_fcPos(0) |     m_fcPos(0), | ||||||
|  |     m_iqOrder(true) | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -149,7 +150,11 @@ void SDRPlayV3Thread::callbackHelper(short *xi, short *xq, sdrplay_api_StreamCbP | |||||||
|             iq[i*2+1] = xq[i]; |             iq[i*2+1] = xq[i]; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         thread->callbackIQ(iq, numSamples*2); |         if (thread->m_iqOrder) { | ||||||
|  |             thread->callbackIQ(iq, numSamples*2); | ||||||
|  |         } else { | ||||||
|  |             thread->callbackQI(iq, numSamples*2); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -245,3 +250,96 @@ void SDRPlayV3Thread::callbackIQ(const qint16* buf, qint32 len) | |||||||
| 
 | 
 | ||||||
|     m_sampleFifo->write(m_convertBuffer.begin(), it); |     m_sampleFifo->write(m_convertBuffer.begin(), it); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void SDRPlayV3Thread::callbackQI(const qint16* buf, qint32 len) | ||||||
|  | { | ||||||
|  |     SampleVector::iterator it = m_convertBuffer.begin(); | ||||||
|  | 
 | ||||||
|  |     if (m_log2Decim == 0) | ||||||
|  |     { | ||||||
|  |         m_decimatorsQI.decimate1(&it, buf, len); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         if (m_fcPos == 0) // Infradyne
 | ||||||
|  |         { | ||||||
|  |             switch (m_log2Decim) | ||||||
|  |             { | ||||||
|  |             case 1: | ||||||
|  |                 m_decimatorsQI.decimate2_inf(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 2: | ||||||
|  |                 m_decimatorsQI.decimate4_inf(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 3: | ||||||
|  |                 m_decimatorsQI.decimate8_inf(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 4: | ||||||
|  |                 m_decimatorsQI.decimate16_inf(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 5: | ||||||
|  |                 m_decimatorsQI.decimate32_inf(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 6: | ||||||
|  |                 m_decimatorsQI.decimate64_inf(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             default: | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         else if (m_fcPos == 1) // Supradyne
 | ||||||
|  |         { | ||||||
|  |             switch (m_log2Decim) | ||||||
|  |             { | ||||||
|  |             case 1: | ||||||
|  |                 m_decimatorsQI.decimate2_sup(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 2: | ||||||
|  |                 m_decimatorsQI.decimate4_sup(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 3: | ||||||
|  |                 m_decimatorsQI.decimate8_sup(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 4: | ||||||
|  |                 m_decimatorsQI.decimate16_sup(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 5: | ||||||
|  |                 m_decimatorsQI.decimate32_sup(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 6: | ||||||
|  |                 m_decimatorsQI.decimate64_sup(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             default: | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         else // Centered
 | ||||||
|  |         { | ||||||
|  |             switch (m_log2Decim) | ||||||
|  |             { | ||||||
|  |             case 1: | ||||||
|  |                 m_decimatorsQI.decimate2_cen(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 2: | ||||||
|  |                 m_decimatorsQI.decimate4_cen(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 3: | ||||||
|  |                 m_decimatorsQI.decimate8_cen(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 4: | ||||||
|  |                 m_decimatorsQI.decimate16_cen(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 5: | ||||||
|  |                 m_decimatorsQI.decimate32_cen(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             case 6: | ||||||
|  |                 m_decimatorsQI.decimate64_cen(&it, buf, len); | ||||||
|  |                 break; | ||||||
|  |             default: | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     m_sampleFifo->write(m_convertBuffer.begin(), it); | ||||||
|  | } | ||||||
|  | |||||||
| @ -41,6 +41,7 @@ public: | |||||||
|     void setSamplerate(int samplerate); |     void setSamplerate(int samplerate); | ||||||
|     void setLog2Decimation(unsigned int log2_decim); |     void setLog2Decimation(unsigned int log2_decim); | ||||||
|     void setFcPos(int fcPos); |     void setFcPos(int fcPos); | ||||||
|  |     void setIQOrder(bool iqOrder) { m_iqOrder = iqOrder; } | ||||||
| 
 | 
 | ||||||
|     void resetRfChanged(); |     void resetRfChanged(); | ||||||
|     bool waitForRfChanged(); |     bool waitForRfChanged(); | ||||||
| @ -57,14 +58,17 @@ private: | |||||||
|     int m_samplerate; |     int m_samplerate; | ||||||
|     unsigned int m_log2Decim; |     unsigned int m_log2Decim; | ||||||
|     int m_fcPos; |     int m_fcPos; | ||||||
|  |     bool m_iqOrder; | ||||||
| 
 | 
 | ||||||
|     int m_rfChanged; |     int m_rfChanged; | ||||||
|     static const unsigned int m_rfChangedTimeout = 500; |     static const unsigned int m_rfChangedTimeout = 500; | ||||||
| 
 | 
 | ||||||
|     Decimators<qint32, qint16, SDR_RX_SAMP_SZ, 16, true> m_decimatorsIQ; |     Decimators<qint32, qint16, SDR_RX_SAMP_SZ, 16, true> m_decimatorsIQ; | ||||||
|  |     Decimators<qint32, qint16, SDR_RX_SAMP_SZ, 16, false> m_decimatorsQI; | ||||||
| 
 | 
 | ||||||
|     void run(); |     void run(); | ||||||
|     void callbackIQ(const qint16* buf, qint32 len); |     void callbackIQ(const qint16* buf, qint32 len); | ||||||
|  |     void callbackQI(const qint16* buf, qint32 len); | ||||||
| 
 | 
 | ||||||
|     static void callbackHelper(short *xi, short *xq, sdrplay_api_StreamCbParamsT *params, unsigned int numSamples, unsigned int reset, void *ctx); |     static void callbackHelper(short *xi, short *xq, sdrplay_api_StreamCbParamsT *params, unsigned int numSamples, unsigned int reset, void *ctx); | ||||||
|     static void eventCallback(sdrplay_api_EventT eventId, sdrplay_api_TunerSelectT tuner, sdrplay_api_EventParamsT *params, void *cbContext); |     static void eventCallback(sdrplay_api_EventT eventId, sdrplay_api_TunerSelectT tuner, sdrplay_api_EventParamsT *params, void *cbContext); | ||||||
|  | |||||||
| @ -10880,6 +10880,17 @@ margin-bottom: 20px; | |||||||
|     "antenna" : { |     "antenna" : { | ||||||
|       "type" : "integer" |       "type" : "integer" | ||||||
|     }, |     }, | ||||||
|  |     "transverterMode" : { | ||||||
|  |       "type" : "integer" | ||||||
|  |     }, | ||||||
|  |     "transverterDeltaFrequency" : { | ||||||
|  |       "type" : "integer", | ||||||
|  |       "format" : "int64" | ||||||
|  |     }, | ||||||
|  |     "iqOrder" : { | ||||||
|  |       "type" : "integer", | ||||||
|  |       "description" : "IQ samples order\n  * 0 - Q then I (swapped)\n  * 1 - I then Q (straight)\n" | ||||||
|  |     }, | ||||||
|     "useReverseAPI" : { |     "useReverseAPI" : { | ||||||
|       "type" : "integer", |       "type" : "integer", | ||||||
|       "description" : "Synchronize with reverse API (1 for yes, 0 for no)" |       "description" : "Synchronize with reverse API (1 for yes, 0 for no)" | ||||||
| @ -52269,7 +52280,7 @@ except ApiException as e: | |||||||
|           </div> |           </div> | ||||||
|           <div id="generator"> |           <div id="generator"> | ||||||
|             <div class="content"> |             <div class="content"> | ||||||
|               Generated 2022-02-06T00:22:44.703+01:00 |               Generated 2022-02-06T20:14:33.369+01:00 | ||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|       </div> |       </div> | ||||||
|  | |||||||
| @ -38,6 +38,17 @@ SDRPlayV3Settings: | |||||||
|       type: integer |       type: integer | ||||||
|     antenna: |     antenna: | ||||||
|       type: integer |       type: integer | ||||||
|  |     transverterMode: | ||||||
|  |       type: integer | ||||||
|  |     transverterDeltaFrequency: | ||||||
|  |       type: integer | ||||||
|  |       format: int64 | ||||||
|  |     iqOrder: | ||||||
|  |       type: integer | ||||||
|  |       description: > | ||||||
|  |         IQ samples order | ||||||
|  |           * 0 - Q then I (swapped) | ||||||
|  |           * 1 - I then Q (straight) | ||||||
|     useReverseAPI: |     useReverseAPI: | ||||||
|       description: Synchronize with reverse API (1 for yes, 0 for no) |       description: Synchronize with reverse API (1 for yes, 0 for no) | ||||||
|       type: integer |       type: integer | ||||||
|  | |||||||
| @ -38,6 +38,17 @@ SDRPlayV3Settings: | |||||||
|       type: integer |       type: integer | ||||||
|     antenna: |     antenna: | ||||||
|       type: integer |       type: integer | ||||||
|  |     transverterMode: | ||||||
|  |       type: integer | ||||||
|  |     transverterDeltaFrequency: | ||||||
|  |       type: integer | ||||||
|  |       format: int64 | ||||||
|  |     iqOrder: | ||||||
|  |       type: integer | ||||||
|  |       description: > | ||||||
|  |         IQ samples order | ||||||
|  |           * 0 - Q then I (swapped) | ||||||
|  |           * 1 - I then Q (straight) | ||||||
|     useReverseAPI: |     useReverseAPI: | ||||||
|       description: Synchronize with reverse API (1 for yes, 0 for no) |       description: Synchronize with reverse API (1 for yes, 0 for no) | ||||||
|       type: integer |       type: integer | ||||||
|  | |||||||
| @ -10880,6 +10880,17 @@ margin-bottom: 20px; | |||||||
|     "antenna" : { |     "antenna" : { | ||||||
|       "type" : "integer" |       "type" : "integer" | ||||||
|     }, |     }, | ||||||
|  |     "transverterMode" : { | ||||||
|  |       "type" : "integer" | ||||||
|  |     }, | ||||||
|  |     "transverterDeltaFrequency" : { | ||||||
|  |       "type" : "integer", | ||||||
|  |       "format" : "int64" | ||||||
|  |     }, | ||||||
|  |     "iqOrder" : { | ||||||
|  |       "type" : "integer", | ||||||
|  |       "description" : "IQ samples order\n  * 0 - Q then I (swapped)\n  * 1 - I then Q (straight)\n" | ||||||
|  |     }, | ||||||
|     "useReverseAPI" : { |     "useReverseAPI" : { | ||||||
|       "type" : "integer", |       "type" : "integer", | ||||||
|       "description" : "Synchronize with reverse API (1 for yes, 0 for no)" |       "description" : "Synchronize with reverse API (1 for yes, 0 for no)" | ||||||
| @ -52269,7 +52280,7 @@ except ApiException as e: | |||||||
|           </div> |           </div> | ||||||
|           <div id="generator"> |           <div id="generator"> | ||||||
|             <div class="content"> |             <div class="content"> | ||||||
|               Generated 2022-02-06T00:22:44.703+01:00 |               Generated 2022-02-06T20:14:33.369+01:00 | ||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|       </div> |       </div> | ||||||
|  | |||||||
| @ -64,6 +64,12 @@ SWGSDRPlayV3Settings::SWGSDRPlayV3Settings() { | |||||||
|     m_tuner_isSet = false; |     m_tuner_isSet = false; | ||||||
|     antenna = 0; |     antenna = 0; | ||||||
|     m_antenna_isSet = false; |     m_antenna_isSet = false; | ||||||
|  |     transverter_mode = 0; | ||||||
|  |     m_transverter_mode_isSet = false; | ||||||
|  |     transverter_delta_frequency = 0L; | ||||||
|  |     m_transverter_delta_frequency_isSet = false; | ||||||
|  |     iq_order = 0; | ||||||
|  |     m_iq_order_isSet = false; | ||||||
|     use_reverse_api = 0; |     use_reverse_api = 0; | ||||||
|     m_use_reverse_api_isSet = false; |     m_use_reverse_api_isSet = false; | ||||||
|     reverse_api_address = nullptr; |     reverse_api_address = nullptr; | ||||||
| @ -116,6 +122,12 @@ SWGSDRPlayV3Settings::init() { | |||||||
|     m_tuner_isSet = false; |     m_tuner_isSet = false; | ||||||
|     antenna = 0; |     antenna = 0; | ||||||
|     m_antenna_isSet = false; |     m_antenna_isSet = false; | ||||||
|  |     transverter_mode = 0; | ||||||
|  |     m_transverter_mode_isSet = false; | ||||||
|  |     transverter_delta_frequency = 0L; | ||||||
|  |     m_transverter_delta_frequency_isSet = false; | ||||||
|  |     iq_order = 0; | ||||||
|  |     m_iq_order_isSet = false; | ||||||
|     use_reverse_api = 0; |     use_reverse_api = 0; | ||||||
|     m_use_reverse_api_isSet = false; |     m_use_reverse_api_isSet = false; | ||||||
|     reverse_api_address = new QString(""); |     reverse_api_address = new QString(""); | ||||||
| @ -145,6 +157,9 @@ SWGSDRPlayV3Settings::cleanup() { | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     if(reverse_api_address != nullptr) {  |     if(reverse_api_address != nullptr) {  | ||||||
| @ -201,6 +216,12 @@ SWGSDRPlayV3Settings::fromJsonObject(QJsonObject &pJson) { | |||||||
|      |      | ||||||
|     ::SWGSDRangel::setValue(&antenna, pJson["antenna"], "qint32", ""); |     ::SWGSDRangel::setValue(&antenna, pJson["antenna"], "qint32", ""); | ||||||
|      |      | ||||||
|  |     ::SWGSDRangel::setValue(&transverter_mode, pJson["transverterMode"], "qint32", ""); | ||||||
|  |      | ||||||
|  |     ::SWGSDRangel::setValue(&transverter_delta_frequency, pJson["transverterDeltaFrequency"], "qint64", ""); | ||||||
|  |      | ||||||
|  |     ::SWGSDRangel::setValue(&iq_order, pJson["iqOrder"], "qint32", ""); | ||||||
|  |      | ||||||
|     ::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", ""); |     ::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", ""); | ||||||
|      |      | ||||||
|     ::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString"); |     ::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString"); | ||||||
| @ -279,6 +300,15 @@ SWGSDRPlayV3Settings::asJsonObject() { | |||||||
|     if(m_antenna_isSet){ |     if(m_antenna_isSet){ | ||||||
|         obj->insert("antenna", QJsonValue(antenna)); |         obj->insert("antenna", QJsonValue(antenna)); | ||||||
|     } |     } | ||||||
|  |     if(m_transverter_mode_isSet){ | ||||||
|  |         obj->insert("transverterMode", QJsonValue(transverter_mode)); | ||||||
|  |     } | ||||||
|  |     if(m_transverter_delta_frequency_isSet){ | ||||||
|  |         obj->insert("transverterDeltaFrequency", QJsonValue(transverter_delta_frequency)); | ||||||
|  |     } | ||||||
|  |     if(m_iq_order_isSet){ | ||||||
|  |         obj->insert("iqOrder", QJsonValue(iq_order)); | ||||||
|  |     } | ||||||
|     if(m_use_reverse_api_isSet){ |     if(m_use_reverse_api_isSet){ | ||||||
|         obj->insert("useReverseAPI", QJsonValue(use_reverse_api)); |         obj->insert("useReverseAPI", QJsonValue(use_reverse_api)); | ||||||
|     } |     } | ||||||
| @ -475,6 +505,36 @@ SWGSDRPlayV3Settings::setAntenna(qint32 antenna) { | |||||||
|     this->m_antenna_isSet = true; |     this->m_antenna_isSet = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | qint32 | ||||||
|  | SWGSDRPlayV3Settings::getTransverterMode() { | ||||||
|  |     return transverter_mode; | ||||||
|  | } | ||||||
|  | void | ||||||
|  | SWGSDRPlayV3Settings::setTransverterMode(qint32 transverter_mode) { | ||||||
|  |     this->transverter_mode = transverter_mode; | ||||||
|  |     this->m_transverter_mode_isSet = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | qint64 | ||||||
|  | SWGSDRPlayV3Settings::getTransverterDeltaFrequency() { | ||||||
|  |     return transverter_delta_frequency; | ||||||
|  | } | ||||||
|  | void | ||||||
|  | SWGSDRPlayV3Settings::setTransverterDeltaFrequency(qint64 transverter_delta_frequency) { | ||||||
|  |     this->transverter_delta_frequency = transverter_delta_frequency; | ||||||
|  |     this->m_transverter_delta_frequency_isSet = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | qint32 | ||||||
|  | SWGSDRPlayV3Settings::getIqOrder() { | ||||||
|  |     return iq_order; | ||||||
|  | } | ||||||
|  | void | ||||||
|  | SWGSDRPlayV3Settings::setIqOrder(qint32 iq_order) { | ||||||
|  |     this->iq_order = iq_order; | ||||||
|  |     this->m_iq_order_isSet = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| qint32 | qint32 | ||||||
| SWGSDRPlayV3Settings::getUseReverseApi() { | SWGSDRPlayV3Settings::getUseReverseApi() { | ||||||
|     return use_reverse_api; |     return use_reverse_api; | ||||||
| @ -574,6 +634,15 @@ SWGSDRPlayV3Settings::isSet(){ | |||||||
|         if(m_antenna_isSet){ |         if(m_antenna_isSet){ | ||||||
|             isObjectUpdated = true; break; |             isObjectUpdated = true; break; | ||||||
|         } |         } | ||||||
|  |         if(m_transverter_mode_isSet){ | ||||||
|  |             isObjectUpdated = true; break; | ||||||
|  |         } | ||||||
|  |         if(m_transverter_delta_frequency_isSet){ | ||||||
|  |             isObjectUpdated = true; break; | ||||||
|  |         } | ||||||
|  |         if(m_iq_order_isSet){ | ||||||
|  |             isObjectUpdated = true; break; | ||||||
|  |         } | ||||||
|         if(m_use_reverse_api_isSet){ |         if(m_use_reverse_api_isSet){ | ||||||
|             isObjectUpdated = true; break; |             isObjectUpdated = true; break; | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -96,6 +96,15 @@ public: | |||||||
|     qint32 getAntenna(); |     qint32 getAntenna(); | ||||||
|     void setAntenna(qint32 antenna); |     void setAntenna(qint32 antenna); | ||||||
| 
 | 
 | ||||||
|  |     qint32 getTransverterMode(); | ||||||
|  |     void setTransverterMode(qint32 transverter_mode); | ||||||
|  | 
 | ||||||
|  |     qint64 getTransverterDeltaFrequency(); | ||||||
|  |     void setTransverterDeltaFrequency(qint64 transverter_delta_frequency); | ||||||
|  | 
 | ||||||
|  |     qint32 getIqOrder(); | ||||||
|  |     void setIqOrder(qint32 iq_order); | ||||||
|  | 
 | ||||||
|     qint32 getUseReverseApi(); |     qint32 getUseReverseApi(); | ||||||
|     void setUseReverseApi(qint32 use_reverse_api); |     void setUseReverseApi(qint32 use_reverse_api); | ||||||
| 
 | 
 | ||||||
| @ -166,6 +175,15 @@ private: | |||||||
|     qint32 antenna; |     qint32 antenna; | ||||||
|     bool m_antenna_isSet; |     bool m_antenna_isSet; | ||||||
| 
 | 
 | ||||||
|  |     qint32 transverter_mode; | ||||||
|  |     bool m_transverter_mode_isSet; | ||||||
|  | 
 | ||||||
|  |     qint64 transverter_delta_frequency; | ||||||
|  |     bool m_transverter_delta_frequency_isSet; | ||||||
|  | 
 | ||||||
|  |     qint32 iq_order; | ||||||
|  |     bool m_iq_order_isSet; | ||||||
|  | 
 | ||||||
|     qint32 use_reverse_api; |     qint32 use_reverse_api; | ||||||
|     bool m_use_reverse_api_isSet; |     bool m_use_reverse_api_isSet; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user