mirror of
https://github.com/AlexandreRouma/SDRPlusPlus.git
synced 2024-12-25 18:38:30 +01:00
Merge pull request #327 from arkhnchul/sdrplay-lowif
IF Mode selection for SDRPlay devices
This commit is contained in:
commit
c9a78d5dc6
@ -102,6 +102,32 @@ const sdrplay_api_AgcControlT agcModes[] = {
|
||||
sdrplay_api_AGC_100HZ
|
||||
};
|
||||
|
||||
struct ifMode_t {
|
||||
sdrplay_api_If_kHzT ifValue;
|
||||
sdrplay_api_Bw_MHzT bw;
|
||||
unsigned int deviceSamplerate;
|
||||
unsigned int effectiveSamplerate;
|
||||
};
|
||||
|
||||
ifMode_t ifModes[] = {
|
||||
{ sdrplay_api_IF_Zero, sdrplay_api_BW_1_536, 2000000, 2000000},
|
||||
{ sdrplay_api_IF_2_048, sdrplay_api_BW_1_536, 8000000, 2000000},
|
||||
{ sdrplay_api_IF_2_048, sdrplay_api_BW_5_000, 8000000, 2000000},
|
||||
{ sdrplay_api_IF_1_620, sdrplay_api_BW_1_536, 6000000, 2000000},
|
||||
{ sdrplay_api_IF_0_450, sdrplay_api_BW_0_600, 2000000, 1000000},
|
||||
{ sdrplay_api_IF_0_450, sdrplay_api_BW_0_300, 2000000, 500000},
|
||||
{ sdrplay_api_IF_0_450, sdrplay_api_BW_0_200, 2000000, 500000},
|
||||
};
|
||||
|
||||
const char* ifModeTxt =
|
||||
"ZeroIF\0"
|
||||
"LowIF 2048KHz, IFBW 1536KHz\0"
|
||||
"LowIF 2048KHz, IFBW 5000KHz\0"
|
||||
"LowIF 1620KHz, IFBW 1536KHz\0"
|
||||
"LowIF 450KHz, IFBW 600KHz\0"
|
||||
"LowIF 450KHz, IFBW 300KHz\0"
|
||||
"LowIF 450KHz, IFBW 200KHz\0";
|
||||
|
||||
const char* rspduo_antennaPortsTxt = "Tuner 1 (50Ohm)\0Tuner 1 (Hi-Z)\0Tuner 2 (50Ohm)\0";
|
||||
|
||||
const char* agcModesTxt = "Off\0005Hz\00050Hz\000100Hz";
|
||||
@ -303,6 +329,8 @@ public:
|
||||
config.conf["devices"][selectedName]["ifGain"] = 59;
|
||||
config.conf["devices"][selectedName]["agc"] = 0; // Disabled
|
||||
|
||||
config.conf["devices"][selectedName]["ifModeId"] = 0;
|
||||
|
||||
if (openDev.hwVer == SDRPLAY_RSP1_ID) {
|
||||
// No config to load
|
||||
}
|
||||
@ -346,6 +374,14 @@ public:
|
||||
srId = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(config.conf["devices"][selectedName].contains("ifModeId")) {
|
||||
ifModeId=config.conf["devices"][selectedName]["ifModeId"];
|
||||
if(ifModeId != 0){
|
||||
sampleRate = ifModes[ifModeId].effectiveSamplerate;
|
||||
}
|
||||
}
|
||||
|
||||
if (config.conf["devices"][selectedName].contains("bwMode")) {
|
||||
bandwidthId = config.conf["devices"][selectedName]["bwMode"];
|
||||
}
|
||||
@ -567,16 +603,21 @@ private:
|
||||
}
|
||||
|
||||
// General options
|
||||
_this->bandwidth = (_this->bandwidthId == 8) ? preferedBandwidth[_this->srId] : bandwidths[_this->bandwidthId];
|
||||
_this->openDevParams->devParams->fsFreq.fsHz = _this->sampleRate;
|
||||
_this->channelParams->tunerParams.bwType = _this->bandwidth;
|
||||
if(_this->ifModeId == 0){
|
||||
_this->bandwidth = (_this->bandwidthId == 8) ? preferedBandwidth[_this->srId] : bandwidths[_this->bandwidthId];
|
||||
_this->openDevParams->devParams->fsFreq.fsHz = _this->sampleRate;
|
||||
_this->channelParams->tunerParams.bwType = _this->bandwidth;
|
||||
} else {
|
||||
_this->openDevParams->devParams->fsFreq.fsHz = ifModes[_this->ifModeId].deviceSamplerate;
|
||||
_this->channelParams->tunerParams.bwType = ifModes[_this->ifModeId].bw;
|
||||
}
|
||||
_this->channelParams->tunerParams.rfFreq.rfHz = _this->freq;
|
||||
_this->channelParams->tunerParams.gain.gRdB = _this->gain;
|
||||
_this->channelParams->tunerParams.gain.LNAstate = _this->lnaGain;
|
||||
_this->channelParams->ctrlParams.decimation.enable = false;
|
||||
_this->channelParams->ctrlParams.dcOffset.DCenable = true;
|
||||
_this->channelParams->ctrlParams.dcOffset.IQenable = true;
|
||||
_this->channelParams->tunerParams.ifType = sdrplay_api_IF_Zero;
|
||||
_this->channelParams->tunerParams.ifType = ifModes[_this->ifModeId].ifValue;
|
||||
_this->channelParams->tunerParams.loMode = sdrplay_api_LO_Auto;
|
||||
|
||||
// Hard coded AGC parameters
|
||||
@ -641,39 +682,66 @@ private:
|
||||
config.release(true);
|
||||
}
|
||||
|
||||
|
||||
if (ImGui::Combo(CONCAT("##sdrplay_sr", _this->name), &_this->srId, sampleRatesTxt)) {
|
||||
_this->sampleRate = sampleRates[_this->srId];
|
||||
if (_this->bandwidthId == 8) {
|
||||
_this->bandwidth = preferedBandwidth[_this->srId];
|
||||
if (_this->ifModeId == 0) {
|
||||
if (ImGui::Combo(CONCAT("##sdrplay_sr", _this->name), &_this->srId, sampleRatesTxt)) {
|
||||
_this->sampleRate = sampleRates[_this->srId];
|
||||
if (_this->bandwidthId == 8) {
|
||||
_this->bandwidth = preferedBandwidth[_this->srId];
|
||||
}
|
||||
core::setInputSampleRate(_this->sampleRate);
|
||||
config.acquire();
|
||||
config.conf["devices"][_this->selectedName]["sampleRate"] = _this->sampleRate;
|
||||
config.release(true);
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
float refreshBtnWdith = menuWidth - ImGui::GetCursorPosX();
|
||||
if (ImGui::Button(CONCAT("Refresh##sdrplay_refresh", _this->name), ImVec2(refreshBtnWdith, 0))) {
|
||||
_this->refresh();
|
||||
_this->selectByName(_this->selectedName);
|
||||
}
|
||||
|
||||
ImGui::SetNextItemWidth(menuWidth);
|
||||
if (ImGui::Combo(CONCAT("##sdrplay_bw", _this->name), &_this->bandwidthId, bandwidthsTxt)) {
|
||||
_this->bandwidth = (_this->bandwidthId == 8) ? preferedBandwidth[_this->srId] : bandwidths[_this->bandwidthId];
|
||||
if (_this->running) {
|
||||
_this->channelParams->tunerParams.bwType = _this->bandwidth;
|
||||
sdrplay_api_Update(_this->openDev.dev, _this->openDev.tuner, sdrplay_api_Update_Tuner_BwType, sdrplay_api_Update_Ext1_None);
|
||||
}
|
||||
config.acquire();
|
||||
config.conf["devices"][_this->selectedName]["bwMode"] = _this->bandwidthId;
|
||||
config.release(true);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (ImGui::Button(CONCAT("Refresh##sdrplay_refresh", _this->name), ImVec2(menuWidth, 0))) {
|
||||
_this->refresh();
|
||||
_this->selectByName(_this->selectedName);
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Text("IF Mode");
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(menuWidth - ImGui::GetCursorPosX());
|
||||
if (ImGui::Combo(CONCAT("##sdrplay_ifmode", _this->name), &_this->ifModeId, ifModeTxt)) {
|
||||
if(_this->ifModeId != 0){
|
||||
_this->bandwidth = ifModes[_this->ifModeId].bw;
|
||||
_this->sampleRate = ifModes[_this->ifModeId].effectiveSamplerate;
|
||||
} else {
|
||||
config.acquire();
|
||||
_this->sampleRate = config.conf["devices"][_this->selectedName]["sampleRate"];
|
||||
_this->bandwidthId = config.conf["devices"][_this->selectedName]["bwMode"];
|
||||
config.release(false);
|
||||
_this->bandwidth = (_this->bandwidthId == 8) ? preferedBandwidth[_this->srId] : bandwidths[_this->bandwidthId];
|
||||
}
|
||||
core::setInputSampleRate(_this->sampleRate);
|
||||
config.acquire();
|
||||
config.conf["devices"][_this->selectedName]["sampleRate"] = _this->sampleRate;
|
||||
config.conf["devices"][_this->selectedName]["ifModeId"] = _this->ifModeId;
|
||||
config.release(true);
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
float refreshBtnWdith = menuWidth - ImGui::GetCursorPosX();
|
||||
if (ImGui::Button(CONCAT("Refresh##sdrplay_refresh", _this->name), ImVec2(refreshBtnWdith, 0))) {
|
||||
_this->refresh();
|
||||
_this->selectByName(_this->selectedName);
|
||||
}
|
||||
|
||||
if (_this->running) { style::endDisabled(); }
|
||||
|
||||
ImGui::SetNextItemWidth(menuWidth);
|
||||
if (ImGui::Combo(CONCAT("##sdrplay_bw", _this->name), &_this->bandwidthId, bandwidthsTxt)) {
|
||||
_this->bandwidth = (_this->bandwidthId == 8) ? preferedBandwidth[_this->srId] : bandwidths[_this->bandwidthId];
|
||||
if (_this->running) {
|
||||
_this->channelParams->tunerParams.bwType = _this->bandwidth;
|
||||
sdrplay_api_Update(_this->openDev.dev, _this->openDev.tuner, sdrplay_api_Update_Tuner_BwType, sdrplay_api_Update_Ext1_None);
|
||||
}
|
||||
config.acquire();
|
||||
config.conf["devices"][_this->selectedName]["bwMode"] = _this->bandwidthId;
|
||||
config.release(true);
|
||||
}
|
||||
|
||||
if (_this->selectedName != "") {
|
||||
ImGui::PushItemWidth(menuWidth - ImGui::CalcTextSize("LNA Gain").x - 10);
|
||||
ImGui::LeftLabel("LNA Gain");
|
||||
@ -961,6 +1029,8 @@ private:
|
||||
int bufferSize = 0;
|
||||
int bufferIndex = 0;
|
||||
|
||||
int ifModeId = 0;
|
||||
|
||||
// RSP1A Options
|
||||
bool rsp1a_fmNotch = false;
|
||||
bool rsp1a_dabNotch = false;
|
||||
@ -1010,4 +1080,4 @@ MOD_EXPORT void _DELETE_INSTANCE_(ModuleManager::Instance* instance) {
|
||||
MOD_EXPORT void _END_() {
|
||||
config.disableAutoSave();
|
||||
config.save();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user