diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputsettings.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputsettings.cpp index a34ffc2e3..ae69c2107 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputsettings.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputsettings.cpp @@ -32,6 +32,15 @@ void PlutoSDRInputSettings::resetToDefaults() m_LOppmTenths = 0; m_log2Decim = 0; m_devSampleRate = 1536 * 1000; + m_rateGovernor = RATEGOV_NORMAL; + m_dcBlock = false; + m_iqCorrection = false; + m_lpfBW = 1500000.0f; + m_lpfFIREnable = false; + m_lpfFIRBW = 500000.0f; + m_gain = 40; + m_antennaPath = RFPATH_A_BAL; + m_gainMode = GAIN_MANUAL; } QByteArray PlutoSDRInputSettings::serialize() const @@ -41,7 +50,16 @@ QByteArray PlutoSDRInputSettings::serialize() const s.writeS32(1, m_LOppmTenths); s.writeU32(4, m_log2Decim); s.writeS32(5, m_fcPos); + s.writeS32(6, m_rateGovernor); + s.writeBool(7, m_dcBlock); + s.writeBool(8, m_iqCorrection); + s.writeFloat(9, m_lpfBW); + s.writeBool(10, m_lpfFIREnable); + s.writeFloat(11, m_lpfFIRBW); s.writeU64(12, m_devSampleRate); + s.writeU32(13, m_gain); + s.writeS32(14, (int) m_antennaPath); + s.writeS32(15, (int) m_gainMode); return s.final(); } @@ -63,8 +81,36 @@ bool PlutoSDRInputSettings::deserialize(const QByteArray& data) d.readS32(1, &m_LOppmTenths, 0); d.readU32(4, &m_log2Decim, 0); d.readS32(5, &intval, 0); - m_fcPos = (fcPos_t) intval; + if ((intval < 0) || (intval > 2)) { + m_fcPos = FC_POS_INFRA; + } else { + m_fcPos = (fcPos_t) intval; + } + d.readS32(6, &intval, 0); + if ((intval >= 0) && (intval < (int) RATEGOV_END)) { + m_rateGovernor = (RateGovernor) intval; + } else { + m_rateGovernor = RATEGOV_NORMAL; + } + d.readBool(7, &m_dcBlock, false); + d.readBool(8, &m_iqCorrection, false); + d.readFloat(9, &m_lpfBW, 1500000.0f); + d.readBool(10, &m_lpfFIREnable, false); + d.readFloat(11, &m_lpfFIRBW, 500000.0f); d.readU64(12, &m_devSampleRate, 1536000U); + d.readU32(13, &m_gain, 40); + d.readS32(14, &intval, 0); + if ((intval >= 0) && (intval < (int) RFPATH_END)) { + m_antennaPath = (RFPath) intval; + } else { + m_antennaPath = RFPATH_A_BAL; + } + d.readS32(15, &intval, 0); + if ((intval >= 0) && (intval < (int) GAIN_END)) { + m_gainMode = (GainMode) intval; + } else { + m_gainMode = GAIN_MANUAL; + } return true; } diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputsettings.h b/plugins/samplesource/plutosdrinput/plutosdrinputsettings.h index c5adf9b8c..366e160b9 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputsettings.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinputsettings.h @@ -26,11 +26,52 @@ struct PlutoSDRInputSettings { FC_POS_CENTER } fcPos_t; + enum RFPath + { + RFPATH_A_BAL = 0, + RFPATH_B_BAL, + RFPATH_C_BAL, + RFPATH_A_NEG, + RFPATH_A_POS, + RFPATH_B_NEG, + RFPATH_B_POS, + RFPATH_C_NEG, + RFPATH_C_POS, + RFPATH_TX1MON, + RFPATH_TX2MON, + RFPATH_TX3MON, + RFPATH_END + }; + + typedef enum { + GAIN_MANUAL, + GAIN_AGC_SLOW, + GAIN_AGC_FAST, + GAIN_HYBRID, + GAIN_END + } GainMode; + + typedef enum { + RATEGOV_NORMAL, + RATEGOV_HIGHOSR, + RATEGOV_END + } RateGovernor; + quint64 m_centerFrequency; fcPos_t m_fcPos; qint32 m_LOppmTenths; quint32 m_log2Decim; quint64 m_devSampleRate; + RateGovernor m_rateGovernor; + bool m_dcBlock; + bool m_iqCorrection; + float m_lpfBW; //!< analog lowpass filter bandwidth (Hz) + bool m_lpfFIREnable; //!< enable digital lowpass FIR filter + float m_lpfFIRBW; //!< digital lowpass FIR filter bandwidth (Hz) + uint32_t m_gain; //!< "hardware" gain + RFPath m_antennaPath; + GainMode m_gainMode; + PlutoSDRInputSettings(); void resetToDefaults();