mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-12-23 10:05:46 -05:00
Add support for lnaGain API setting, to allow gain to be set more easily.
This commit is contained in:
parent
a278cf0373
commit
1b1530f10d
@ -171,6 +171,7 @@ bool SDRPlayV3Gui::handleMessage(const Message& message)
|
|||||||
if (SDRPlayV3Input::MsgConfigureSDRPlayV3::match(message))
|
if (SDRPlayV3Input::MsgConfigureSDRPlayV3::match(message))
|
||||||
{
|
{
|
||||||
const SDRPlayV3Input::MsgConfigureSDRPlayV3& cfg = (SDRPlayV3Input::MsgConfigureSDRPlayV3&) message;
|
const SDRPlayV3Input::MsgConfigureSDRPlayV3& cfg = (SDRPlayV3Input::MsgConfigureSDRPlayV3&) message;
|
||||||
|
qDebug() << "SDRPlayV3Gui::handleMessage: MsgConfigureSDRPlayV3: " << cfg.getSettings().getDebugString(cfg.getSettingsKeys(), cfg.getForce());
|
||||||
|
|
||||||
if (cfg.getForce()) {
|
if (cfg.getForce()) {
|
||||||
m_settings = cfg.getSettings();
|
m_settings = cfg.getSettings();
|
||||||
@ -313,6 +314,7 @@ void SDRPlayV3Gui::updateLNAValues()
|
|||||||
|
|
||||||
const int *attenuations = SDRPlayV3LNA::getAttenuations(m_sdrPlayV3Input->getDeviceId(), m_settings.m_centerFrequency);
|
const int *attenuations = SDRPlayV3LNA::getAttenuations(m_sdrPlayV3Input->getDeviceId(), m_settings.m_centerFrequency);
|
||||||
int len = attenuations[0];
|
int len = attenuations[0];
|
||||||
|
ui->gainLNA->blockSignals(true);
|
||||||
ui->gainLNA->clear();
|
ui->gainLNA->clear();
|
||||||
for (int i = 1; i <= len; i++)
|
for (int i = 1; i <= len; i++)
|
||||||
{
|
{
|
||||||
@ -328,6 +330,7 @@ void SDRPlayV3Gui::updateLNAValues()
|
|||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ui->gainLNA->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDRPlayV3Gui::sendSettings()
|
void SDRPlayV3Gui::sendSettings()
|
||||||
|
@ -778,14 +778,24 @@ int SDRPlayV3Input::webapiSettingsPutPatch(
|
|||||||
{
|
{
|
||||||
(void) errorMessage;
|
(void) errorMessage;
|
||||||
SDRPlayV3Settings settings = m_settings;
|
SDRPlayV3Settings settings = m_settings;
|
||||||
webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response);
|
QStringList deviceSettingsKeysModifiable = deviceSettingsKeys;
|
||||||
|
|
||||||
MsgConfigureSDRPlayV3 *msg = MsgConfigureSDRPlayV3::create(settings, deviceSettingsKeys, force);
|
webapiUpdateDeviceSettings(settings, deviceSettingsKeysModifiable, response);
|
||||||
|
|
||||||
|
// Convert lnaGain to lnaIndex
|
||||||
|
if (deviceSettingsKeysModifiable.contains("lnaGain"))
|
||||||
|
{
|
||||||
|
int lnaGain = response.getSdrPlayV3Settings()->getLnaGain();
|
||||||
|
settings.m_lnaIndex = mapLNAGainDBToLNAIndex(lnaGain, settings.m_centerFrequency);
|
||||||
|
deviceSettingsKeysModifiable.append("lnaIndex");
|
||||||
|
}
|
||||||
|
|
||||||
|
MsgConfigureSDRPlayV3 *msg = MsgConfigureSDRPlayV3::create(settings, deviceSettingsKeysModifiable, force);
|
||||||
m_inputMessageQueue.push(msg);
|
m_inputMessageQueue.push(msg);
|
||||||
|
|
||||||
if (m_guiMessageQueue) // forward to GUI if any
|
if (m_guiMessageQueue) // forward to GUI if any
|
||||||
{
|
{
|
||||||
MsgConfigureSDRPlayV3 *msgToGUI = MsgConfigureSDRPlayV3::create(settings, deviceSettingsKeys, force);
|
MsgConfigureSDRPlayV3 *msgToGUI = MsgConfigureSDRPlayV3::create(settings, deviceSettingsKeysModifiable, force);
|
||||||
m_guiMessageQueue->push(msgToGUI);
|
m_guiMessageQueue->push(msgToGUI);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -893,6 +903,7 @@ void SDRPlayV3Input::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings&
|
|||||||
response.getSdrPlayV3Settings()->setDcBlock(settings.m_dcBlock ? 1 : 0);
|
response.getSdrPlayV3Settings()->setDcBlock(settings.m_dcBlock ? 1 : 0);
|
||||||
response.getSdrPlayV3Settings()->setIqCorrection(settings.m_iqCorrection ? 1 : 0);
|
response.getSdrPlayV3Settings()->setIqCorrection(settings.m_iqCorrection ? 1 : 0);
|
||||||
response.getSdrPlayV3Settings()->setLnaIndex(settings.m_lnaIndex);
|
response.getSdrPlayV3Settings()->setLnaIndex(settings.m_lnaIndex);
|
||||||
|
response.getSdrPlayV3Settings()->setLnaGain(0); // Write only setting
|
||||||
response.getSdrPlayV3Settings()->setIfAgc(settings.m_ifAGC ? 1 : 0);
|
response.getSdrPlayV3Settings()->setIfAgc(settings.m_ifAGC ? 1 : 0);
|
||||||
response.getSdrPlayV3Settings()->setIfGain(settings.m_ifGain);
|
response.getSdrPlayV3Settings()->setIfGain(settings.m_ifGain);
|
||||||
response.getSdrPlayV3Settings()->setAmNotch(settings.m_amNotch);
|
response.getSdrPlayV3Settings()->setAmNotch(settings.m_amNotch);
|
||||||
@ -1011,6 +1022,9 @@ void SDRPlayV3Input::webapiReverseSendSettings(const QList<QString>& deviceSetti
|
|||||||
if (deviceSettingsKeys.contains("lnaIndex") || force) {
|
if (deviceSettingsKeys.contains("lnaIndex") || force) {
|
||||||
swgSDRPlayV3Settings->setLnaIndex(settings.m_lnaIndex);
|
swgSDRPlayV3Settings->setLnaIndex(settings.m_lnaIndex);
|
||||||
}
|
}
|
||||||
|
if (deviceSettingsKeys.contains("lnaGain") || force) {
|
||||||
|
swgSDRPlayV3Settings->setLnaGain(0); // Write only setting
|
||||||
|
}
|
||||||
if (deviceSettingsKeys.contains("ifAGC") || force) {
|
if (deviceSettingsKeys.contains("ifAGC") || force) {
|
||||||
swgSDRPlayV3Settings->setIfAgc(settings.m_ifAGC ? 1 : 0);
|
swgSDRPlayV3Settings->setIfAgc(settings.m_ifAGC ? 1 : 0);
|
||||||
}
|
}
|
||||||
@ -1118,7 +1132,7 @@ void SDRPlayV3Input::networkManagerFinished(QNetworkReply *reply)
|
|||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDRPlayV3Input::getDeviceId()
|
int SDRPlayV3Input::getDeviceId() const
|
||||||
{
|
{
|
||||||
if (m_dev != nullptr)
|
if (m_dev != nullptr)
|
||||||
return m_dev->hwVer; // E.g. SDRPLAY_RSPduo_ID
|
return m_dev->hwVer; // E.g. SDRPLAY_RSPduo_ID
|
||||||
@ -1126,6 +1140,33 @@ int SDRPlayV3Input::getDeviceId()
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert gain in dB to closest index
|
||||||
|
int SDRPlayV3Input::mapLNAGainDBToLNAIndex(int gainDB, qint64 frequency) const
|
||||||
|
{
|
||||||
|
const int *attenuations = SDRPlayV3LNA::getAttenuations(getDeviceId(), frequency);
|
||||||
|
int len = attenuations[0];
|
||||||
|
|
||||||
|
for (int i = 1; i <= len; i++)
|
||||||
|
{
|
||||||
|
if (gainDB >= -attenuations[i]) {
|
||||||
|
return i - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return len - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert index to gain in dB
|
||||||
|
int SDRPlayV3Input::mapLNAIndexToLNAGainDB(int lnaIndex, qint64 frequency) const
|
||||||
|
{
|
||||||
|
const int *attenuations = SDRPlayV3LNA::getAttenuations(getDeviceId(), frequency);
|
||||||
|
int len = attenuations[0];
|
||||||
|
if (lnaIndex < len) {
|
||||||
|
return attenuations[lnaIndex+1];
|
||||||
|
} else {
|
||||||
|
return -1000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ====================================================================
|
// ====================================================================
|
||||||
|
|
||||||
sdrplay_api_Bw_MHzT SDRPlayV3Bandwidths::m_bwEnums[m_nb_bw] = {
|
sdrplay_api_Bw_MHzT SDRPlayV3Bandwidths::m_bwEnums[m_nb_bw] = {
|
||||||
|
@ -134,7 +134,7 @@ public:
|
|||||||
const QStringList& deviceSettingsKeys,
|
const QStringList& deviceSettingsKeys,
|
||||||
SWGSDRangel::SWGDeviceSettings& response);
|
SWGSDRangel::SWGDeviceSettings& response);
|
||||||
|
|
||||||
int getDeviceId();
|
int getDeviceId() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DeviceAPI *m_deviceAPI;
|
DeviceAPI *m_deviceAPI;
|
||||||
@ -157,6 +157,8 @@ private:
|
|||||||
void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response);
|
void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response);
|
||||||
void webapiReverseSendSettings(const QList<QString>& deviceSettingsKeys, const SDRPlayV3Settings& settings, bool force);
|
void webapiReverseSendSettings(const QList<QString>& deviceSettingsKeys, const SDRPlayV3Settings& settings, bool force);
|
||||||
void webapiReverseSendStartStop(bool start);
|
void webapiReverseSendStartStop(bool start);
|
||||||
|
int mapLNAGainDBToLNAIndex(int gainDB, qint64 frequency) const;
|
||||||
|
int mapLNAIndexToLNAGainDB(int lnaIndex, qint64 frequency) const;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void networkManagerFinished(QNetworkReply *reply);
|
void networkManagerFinished(QNetworkReply *reply);
|
||||||
|
@ -502,10 +502,9 @@ bool ChannelWebAPIUtils::getGain(unsigned int deviceIndex, int stage, int &gain)
|
|||||||
}
|
}
|
||||||
else if ((devId == "SDRplayV3"))
|
else if ((devId == "SDRplayV3"))
|
||||||
{
|
{
|
||||||
QStringList sdrplayStages = {"lnaIndex", "ifGain"};
|
QStringList sdrplayStages = {"lnaGain", "ifGain"};
|
||||||
if (stage < sdrplayStages.size())
|
if (stage < sdrplayStages.size())
|
||||||
{
|
{
|
||||||
// FIXME: How to map to lnaIndex - gain can vary by SDR
|
|
||||||
error = ChannelWebAPIUtils::getDeviceSetting(deviceIndex, sdrplayStages[stage], gain);
|
error = ChannelWebAPIUtils::getDeviceSetting(deviceIndex, sdrplayStages[stage], gain);
|
||||||
gain *= 10;
|
gain *= 10;
|
||||||
}
|
}
|
||||||
@ -561,10 +560,8 @@ bool ChannelWebAPIUtils::setGain(unsigned int deviceIndex, int stage, int gain)
|
|||||||
}
|
}
|
||||||
else if (devId == "SDRplayV3")
|
else if (devId == "SDRplayV3")
|
||||||
{
|
{
|
||||||
QStringList sdrplayStages = {"lnaIndex", "ifGain"};
|
QStringList sdrplayStages = {"lnaGain", "ifGain"};
|
||||||
if (stage < sdrplayStages.size())
|
if (stage < sdrplayStages.size()) {
|
||||||
{
|
|
||||||
// FIXME: How to map to lnaIndex - gain can vary by SDR
|
|
||||||
return ChannelWebAPIUtils::patchDeviceSetting(deviceIndex, sdrplayStages[stage], gain / 10);
|
return ChannelWebAPIUtils::patchDeviceSetting(deviceIndex, sdrplayStages[stage], gain / 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1120,7 +1117,7 @@ bool ChannelWebAPIUtils::patchDeviceSetting(unsigned int deviceIndex, const QStr
|
|||||||
|
|
||||||
if (getDeviceSettings(deviceIndex, deviceSettingsResponse, deviceSet))
|
if (getDeviceSettings(deviceIndex, deviceSettingsResponse, deviceSet))
|
||||||
{
|
{
|
||||||
// Patch centerFrequency
|
// Patch setting
|
||||||
QJsonObject *jsonObj = deviceSettingsResponse.asJsonObject();
|
QJsonObject *jsonObj = deviceSettingsResponse.asJsonObject();
|
||||||
int oldValue;
|
int oldValue;
|
||||||
if (WebAPIUtils::getSubObjectInt(*jsonObj, setting, oldValue))
|
if (WebAPIUtils::getSubObjectInt(*jsonObj, setting, oldValue))
|
||||||
|
@ -22,6 +22,9 @@ SDRPlayV3Settings:
|
|||||||
type: integer
|
type: integer
|
||||||
lnaIndex:
|
lnaIndex:
|
||||||
type: integer
|
type: integer
|
||||||
|
lnaGain:
|
||||||
|
description: Gain in dB, as an alternative to lnaIndex setting
|
||||||
|
type: integer
|
||||||
ifAGC:
|
ifAGC:
|
||||||
type: integer
|
type: integer
|
||||||
ifGain:
|
ifGain:
|
||||||
|
@ -48,6 +48,8 @@ SWGSDRPlayV3Settings::SWGSDRPlayV3Settings() {
|
|||||||
m_iq_correction_isSet = false;
|
m_iq_correction_isSet = false;
|
||||||
lna_index = 0;
|
lna_index = 0;
|
||||||
m_lna_index_isSet = false;
|
m_lna_index_isSet = false;
|
||||||
|
lna_gain = 0;
|
||||||
|
m_lna_gain_isSet = false;
|
||||||
if_agc = 0;
|
if_agc = 0;
|
||||||
m_if_agc_isSet = false;
|
m_if_agc_isSet = false;
|
||||||
if_gain = 0;
|
if_gain = 0;
|
||||||
@ -108,6 +110,8 @@ SWGSDRPlayV3Settings::init() {
|
|||||||
m_iq_correction_isSet = false;
|
m_iq_correction_isSet = false;
|
||||||
lna_index = 0;
|
lna_index = 0;
|
||||||
m_lna_index_isSet = false;
|
m_lna_index_isSet = false;
|
||||||
|
lna_gain = 0;
|
||||||
|
m_lna_gain_isSet = false;
|
||||||
if_agc = 0;
|
if_agc = 0;
|
||||||
m_if_agc_isSet = false;
|
m_if_agc_isSet = false;
|
||||||
if_gain = 0;
|
if_gain = 0;
|
||||||
@ -165,6 +169,7 @@ SWGSDRPlayV3Settings::cleanup() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(reverse_api_address != nullptr) {
|
if(reverse_api_address != nullptr) {
|
||||||
@ -205,6 +210,8 @@ SWGSDRPlayV3Settings::fromJsonObject(QJsonObject &pJson) {
|
|||||||
|
|
||||||
::SWGSDRangel::setValue(&lna_index, pJson["lnaIndex"], "qint32", "");
|
::SWGSDRangel::setValue(&lna_index, pJson["lnaIndex"], "qint32", "");
|
||||||
|
|
||||||
|
::SWGSDRangel::setValue(&lna_gain, pJson["lnaGain"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&if_agc, pJson["ifAGC"], "qint32", "");
|
::SWGSDRangel::setValue(&if_agc, pJson["ifAGC"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&if_gain, pJson["ifGain"], "qint32", "");
|
::SWGSDRangel::setValue(&if_gain, pJson["ifGain"], "qint32", "");
|
||||||
@ -283,6 +290,9 @@ SWGSDRPlayV3Settings::asJsonObject() {
|
|||||||
if(m_lna_index_isSet){
|
if(m_lna_index_isSet){
|
||||||
obj->insert("lnaIndex", QJsonValue(lna_index));
|
obj->insert("lnaIndex", QJsonValue(lna_index));
|
||||||
}
|
}
|
||||||
|
if(m_lna_gain_isSet){
|
||||||
|
obj->insert("lnaGain", QJsonValue(lna_gain));
|
||||||
|
}
|
||||||
if(m_if_agc_isSet){
|
if(m_if_agc_isSet){
|
||||||
obj->insert("ifAGC", QJsonValue(if_agc));
|
obj->insert("ifAGC", QJsonValue(if_agc));
|
||||||
}
|
}
|
||||||
@ -435,6 +445,16 @@ SWGSDRPlayV3Settings::setLnaIndex(qint32 lna_index) {
|
|||||||
this->m_lna_index_isSet = true;
|
this->m_lna_index_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qint32
|
||||||
|
SWGSDRPlayV3Settings::getLnaGain() {
|
||||||
|
return lna_gain;
|
||||||
|
}
|
||||||
|
void
|
||||||
|
SWGSDRPlayV3Settings::setLnaGain(qint32 lna_gain) {
|
||||||
|
this->lna_gain = lna_gain;
|
||||||
|
this->m_lna_gain_isSet = true;
|
||||||
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGSDRPlayV3Settings::getIfAgc() {
|
SWGSDRPlayV3Settings::getIfAgc() {
|
||||||
return if_agc;
|
return if_agc;
|
||||||
@ -630,6 +650,9 @@ SWGSDRPlayV3Settings::isSet(){
|
|||||||
if(m_lna_index_isSet){
|
if(m_lna_index_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
|
if(m_lna_gain_isSet){
|
||||||
|
isObjectUpdated = true; break;
|
||||||
|
}
|
||||||
if(m_if_agc_isSet){
|
if(m_if_agc_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,9 @@ public:
|
|||||||
qint32 getLnaIndex();
|
qint32 getLnaIndex();
|
||||||
void setLnaIndex(qint32 lna_index);
|
void setLnaIndex(qint32 lna_index);
|
||||||
|
|
||||||
|
qint32 getLnaGain();
|
||||||
|
void setLnaGain(qint32 lna_gain);
|
||||||
|
|
||||||
qint32 getIfAgc();
|
qint32 getIfAgc();
|
||||||
void setIfAgc(qint32 if_agc);
|
void setIfAgc(qint32 if_agc);
|
||||||
|
|
||||||
@ -154,6 +157,9 @@ private:
|
|||||||
qint32 lna_index;
|
qint32 lna_index;
|
||||||
bool m_lna_index_isSet;
|
bool m_lna_index_isSet;
|
||||||
|
|
||||||
|
qint32 lna_gain;
|
||||||
|
bool m_lna_gain_isSet;
|
||||||
|
|
||||||
qint32 if_agc;
|
qint32 if_agc;
|
||||||
bool m_if_agc_isSet;
|
bool m_if_agc_isSet;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user