mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-24 11:12:27 -04:00
MIMO: AM demod: implemented stream index (except dialog and apply setting)
This commit is contained in:
parent
1e881d0b2f
commit
e62e187931
@ -436,6 +436,7 @@ void AMDemod::applySettings(const AMDemodSettings& settings, bool force)
|
||||
<< " m_audioDeviceName: " << settings.m_audioDeviceName
|
||||
<< " m_pll: " << settings.m_pll
|
||||
<< " m_syncAMOperation: " << (int) settings.m_syncAMOperation
|
||||
<< " m_streamIndex: " << settings.m_streamIndex
|
||||
<< " m_useReverseAPI: " << settings.m_useReverseAPI
|
||||
<< " m_reverseAPIAddress: " << settings.m_reverseAPIAddress
|
||||
<< " m_reverseAPIPort: " << settings.m_reverseAPIPort
|
||||
@ -520,6 +521,10 @@ void AMDemod::applySettings(const AMDemodSettings& settings, bool force)
|
||||
reverseAPIKeys.append("volume");
|
||||
}
|
||||
|
||||
if ((m_settings.m_streamIndex != settings.m_streamIndex) || force) {
|
||||
reverseAPIKeys.append("streamIndex");
|
||||
}
|
||||
|
||||
if (settings.m_useReverseAPI)
|
||||
{
|
||||
bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) ||
|
||||
@ -617,6 +622,9 @@ int AMDemod::webapiSettingsPutPatch(
|
||||
AMDemodSettings::SyncAMLSB : (AMDemodSettings::SyncAMOperation) syncAMOperationCode;
|
||||
}
|
||||
|
||||
if (channelSettingsKeys.contains("streamIndex")) {
|
||||
settings.m_streamIndex = response.getAmDemodSettings()->getStreamIndex();
|
||||
}
|
||||
if (channelSettingsKeys.contains("useReverseAPI")) {
|
||||
settings.m_useReverseAPI = response.getAmDemodSettings()->getUseReverseApi() != 0;
|
||||
}
|
||||
@ -690,6 +698,7 @@ void AMDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& respo
|
||||
|
||||
response.getAmDemodSettings()->setPll(settings.m_pll ? 1 : 0);
|
||||
response.getAmDemodSettings()->setSyncAmOperation((int) m_settings.m_syncAMOperation);
|
||||
response.getAmDemodSettings()->setStreamIndex(m_settings.m_streamIndex);
|
||||
response.getAmDemodSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
|
||||
|
||||
if (response.getAmDemodSettings()->getReverseApiAddress()) {
|
||||
@ -760,6 +769,9 @@ void AMDemod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, con
|
||||
if (channelSettingsKeys.contains("syncAMOperation") || force) {
|
||||
swgAMDemodSettings->setSyncAmOperation((int) settings.m_syncAMOperation);
|
||||
}
|
||||
if (channelSettingsKeys.contains("streamIndex") || force) {
|
||||
swgAMDemodSettings->setStreamIndex(settings.m_streamIndex);
|
||||
}
|
||||
|
||||
QString channelSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/channel/%4/settings")
|
||||
.arg(settings.m_reverseAPIAddress)
|
||||
|
@ -230,6 +230,10 @@ void AMDemodGUI::onMenuDialogCalled(const QPoint &p)
|
||||
|
||||
applySettings();
|
||||
}
|
||||
else if ((m_contextMenuType == ContextMenuStreamSettings) && (m_deviceUISet->m_deviceMIMOEngine))
|
||||
{
|
||||
// TODO: open select MIMO channel dialog
|
||||
}
|
||||
|
||||
resetContextMenuType();
|
||||
}
|
||||
@ -379,9 +383,20 @@ void AMDemodGUI::displaySettings()
|
||||
ui->ssb->setIcon(m_iconDSBUSB);
|
||||
}
|
||||
|
||||
displayStreamIndex();
|
||||
|
||||
blockApplySettings(false);
|
||||
}
|
||||
|
||||
void AMDemodGUI::displayStreamIndex()
|
||||
{
|
||||
if (m_deviceUISet->m_deviceMIMOEngine) {
|
||||
setStreamIndicator(tr("%1").arg(m_settings.m_streamIndex));
|
||||
} else {
|
||||
setStreamIndicator("S"); // single channel indicator
|
||||
}
|
||||
}
|
||||
|
||||
void AMDemodGUI::leaveEvent(QEvent*)
|
||||
{
|
||||
m_channelMarker.setHighlighted(false);
|
||||
|
@ -65,6 +65,7 @@ private:
|
||||
void blockApplySettings(bool block);
|
||||
void applySettings(bool force = false);
|
||||
void displaySettings();
|
||||
void displayStreamIndex();
|
||||
|
||||
void leaveEvent(QEvent*);
|
||||
void enterEvent(QEvent*);
|
||||
|
@ -41,6 +41,7 @@ void AMDemodSettings::resetToDefaults()
|
||||
m_audioDeviceName = AudioDeviceManager::m_defaultDeviceName;
|
||||
m_pll = false;
|
||||
m_syncAMOperation = SyncAMDSB;
|
||||
m_streamIndex = 0;
|
||||
m_useReverseAPI = false;
|
||||
m_reverseAPIAddress = "127.0.0.1";
|
||||
m_reverseAPIPort = 8888;
|
||||
@ -53,6 +54,7 @@ QByteArray AMDemodSettings::serialize() const
|
||||
SimpleSerializer s(1);
|
||||
s.writeS32(1, m_inputFrequencyOffset);
|
||||
s.writeS32(2, m_rfBandwidth/100);
|
||||
s.writeS32(3, m_streamIndex);
|
||||
s.writeS32(4, m_volume*10);
|
||||
s.writeS32(5, m_squelch);
|
||||
|
||||
@ -95,6 +97,7 @@ bool AMDemodSettings::deserialize(const QByteArray& data)
|
||||
d.readS32(1, &m_inputFrequencyOffset, 0);
|
||||
d.readS32(2, &tmp, 4);
|
||||
m_rfBandwidth = 100 * tmp;
|
||||
d.readS32(3, &m_streamIndex, 0);
|
||||
d.readS32(4, &tmp, 20);
|
||||
m_volume = tmp * 0.1;
|
||||
d.readS32(5, &tmp, -40);
|
||||
|
@ -43,6 +43,7 @@ struct AMDemodSettings
|
||||
QString m_audioDeviceName;
|
||||
bool m_pll;
|
||||
SyncAMOperation m_syncAMOperation;
|
||||
int m_streamIndex; //!< MIMO channel. Not relevant when connected to SI (single Rx).
|
||||
bool m_useReverseAPI;
|
||||
QString m_reverseAPIAddress;
|
||||
uint16_t m_reverseAPIPort;
|
||||
|
@ -65,7 +65,7 @@ PluginInterface::SamplingDevices TestMIPlugin::enumSampleMIMO()
|
||||
QString::null,
|
||||
0,
|
||||
PluginInterface::SamplingDevice::BuiltInDevice,
|
||||
PluginInterface::SamplingDevice::StreamAny,
|
||||
PluginInterface::SamplingDevice::StreamMIMO,
|
||||
1,
|
||||
0));
|
||||
|
||||
|
@ -40,7 +40,7 @@ public:
|
||||
{
|
||||
StreamSingleSink, //!< Exposes a single sink stream (input, Rx)
|
||||
StreamSingleSource, //!< Exposes a single source stream (output, Tx)
|
||||
StreamAny //!< May expose any number of sink and/or source streams
|
||||
StreamMIMO //!< May expose any number of sink and/or source streams
|
||||
};
|
||||
|
||||
ChannelAPI(const QString& name, StreamType streamType);
|
||||
|
@ -46,7 +46,7 @@ public:
|
||||
{
|
||||
StreamSingleRx, //!< Exposes a single input stream that can be one of the streams of a physical device
|
||||
StreamSingleTx, //!< Exposes a single output stream that can be one of the streams of a physical device
|
||||
StreamAny //!< May expose any number of input and/or output streams
|
||||
StreamMIMO //!< May expose any number of input and/or output streams
|
||||
};
|
||||
|
||||
enum EngineState {
|
||||
|
@ -42,7 +42,7 @@ public:
|
||||
{
|
||||
StreamSingleRx, //!< Exposes a single input stream that can be one of the streams of a physical device
|
||||
StreamSingleTx, //!< Exposes a single output stream that can be one of the streams of a physical device
|
||||
StreamAny //!< May expose any number of input and/or output streams
|
||||
StreamMIMO //!< May expose any number of input and/or output streams
|
||||
};
|
||||
|
||||
QString displayedName; //!< The human readable name
|
||||
|
@ -761,6 +761,10 @@ margin-bottom: 20px;
|
||||
"type" : "integer",
|
||||
"description" : "Synchronous AM sidebands mode (DSB, USB, LSB)"
|
||||
},
|
||||
"streamIndex" : {
|
||||
"type" : "integer",
|
||||
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
@ -25080,7 +25084,7 @@ except ApiException as e:
|
||||
</div>
|
||||
<div id="generator">
|
||||
<div class="content">
|
||||
Generated 2019-05-18T10:36:57.027+02:00
|
||||
Generated 2019-05-20T16:12:41.467+02:00
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -33,6 +33,9 @@ AMDemodSettings:
|
||||
syncAMOperation:
|
||||
description: Synchronous AM sidebands mode (DSB, USB, LSB)
|
||||
type: integer
|
||||
streamIndex:
|
||||
description: MIMO channel. Not relevant when connected to SI (single Rx).
|
||||
type: integer
|
||||
useReverseAPI:
|
||||
description: Synchronize with reverse API (1 for yes, 0 for no)
|
||||
type: integer
|
||||
@ -59,4 +62,3 @@ AMDemodReport:
|
||||
type: integer
|
||||
channelSampleRate:
|
||||
type: integer
|
||||
|
@ -44,9 +44,10 @@ DeviceUISet::DeviceUISet(int tabIndex, int deviceType, QTimer& timer)
|
||||
m_spectrumGUI->setBuddies(m_spectrumVis->getInputMessageQueue(), m_spectrumVis, m_spectrum);
|
||||
m_channelWindow = new ChannelWindow;
|
||||
m_samplingDeviceControl = new SamplingDeviceControl(tabIndex, deviceType);
|
||||
m_deviceSourceEngine = 0;
|
||||
m_deviceAPI = 0;
|
||||
m_deviceSinkEngine = 0;
|
||||
m_deviceAPI = nullptr;
|
||||
m_deviceSourceEngine = nullptr;
|
||||
m_deviceSinkEngine = nullptr;
|
||||
m_deviceMIMOEngine = nullptr;
|
||||
m_deviceTabIndex = tabIndex;
|
||||
m_nbAvailableRxChannels = 0; // updated at enumeration for UI selector
|
||||
m_nbAvailableTxChannels = 0; // updated at enumeration for UI selector
|
||||
|
@ -384,3 +384,9 @@ bool RollupWidget::eventFilter(QObject* object, QEvent* event)
|
||||
}
|
||||
return QWidget::eventFilter(object, event);
|
||||
}
|
||||
|
||||
void RollupWidget::setStreamIndicator(const QString& indicator)
|
||||
{
|
||||
m_streamIndicator = indicator;
|
||||
update();
|
||||
}
|
@ -48,6 +48,7 @@ protected:
|
||||
bool eventFilter(QObject* object, QEvent* event);
|
||||
|
||||
void resetContextMenuType() { m_contextMenuType = ContextMenuNone; }
|
||||
void setStreamIndicator(const QString& indicator);
|
||||
};
|
||||
|
||||
#endif // INCLUDE_ROLLUPWIDGET_H
|
||||
|
@ -421,7 +421,7 @@ void MainWindow::addMIMODevice()
|
||||
char tabNameCStr[16];
|
||||
sprintf(tabNameCStr, "M%d", deviceTabIndex);
|
||||
|
||||
DeviceAPI *deviceAPI = new DeviceAPI(DeviceAPI::StreamSingleTx, deviceTabIndex, nullptr, nullptr, dspDeviceMIMOEngine);
|
||||
DeviceAPI *deviceAPI = new DeviceAPI(DeviceAPI::StreamMIMO, deviceTabIndex, nullptr, nullptr, dspDeviceMIMOEngine);
|
||||
|
||||
m_deviceUIs.back()->m_deviceAPI = deviceAPI;
|
||||
m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(m_pluginManager);
|
||||
|
@ -50,10 +50,10 @@ DeviceSet::ChannelInstanceRegistration::ChannelInstanceRegistration(const QStrin
|
||||
|
||||
DeviceSet::DeviceSet(int tabIndex)
|
||||
{
|
||||
m_deviceAPI = 0;
|
||||
m_deviceSourceEngine = 0;
|
||||
m_deviceSinkEngine = 0;
|
||||
m_deviceMIMOEngine = 0;
|
||||
m_deviceAPI = nullptr;
|
||||
m_deviceSourceEngine = nullptr;
|
||||
m_deviceSinkEngine = nullptr;
|
||||
m_deviceMIMOEngine = nullptr;
|
||||
m_deviceTabIndex = tabIndex;
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,9 @@ AMDemodSettings:
|
||||
syncAMOperation:
|
||||
description: Synchronous AM sidebands mode (DSB, USB, LSB)
|
||||
type: integer
|
||||
streamIndex:
|
||||
description: MIMO channel. Not relevant when connected to SI (single Rx).
|
||||
type: integer
|
||||
useReverseAPI:
|
||||
description: Synchronize with reverse API (1 for yes, 0 for no)
|
||||
type: integer
|
||||
@ -59,4 +62,3 @@ AMDemodReport:
|
||||
type: integer
|
||||
channelSampleRate:
|
||||
type: integer
|
||||
|
@ -761,6 +761,10 @@ margin-bottom: 20px;
|
||||
"type" : "integer",
|
||||
"description" : "Synchronous AM sidebands mode (DSB, USB, LSB)"
|
||||
},
|
||||
"streamIndex" : {
|
||||
"type" : "integer",
|
||||
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
@ -25080,7 +25084,7 @@ except ApiException as e:
|
||||
</div>
|
||||
<div id="generator">
|
||||
<div class="content">
|
||||
Generated 2019-05-18T10:36:57.027+02:00
|
||||
Generated 2019-05-20T16:12:41.467+02:00
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -50,6 +50,8 @@ SWGAMDemodSettings::SWGAMDemodSettings() {
|
||||
m_pll_isSet = false;
|
||||
sync_am_operation = 0;
|
||||
m_sync_am_operation_isSet = false;
|
||||
stream_index = 0;
|
||||
m_stream_index_isSet = false;
|
||||
use_reverse_api = 0;
|
||||
m_use_reverse_api_isSet = false;
|
||||
reverse_api_address = nullptr;
|
||||
@ -90,6 +92,8 @@ SWGAMDemodSettings::init() {
|
||||
m_pll_isSet = false;
|
||||
sync_am_operation = 0;
|
||||
m_sync_am_operation_isSet = false;
|
||||
stream_index = 0;
|
||||
m_stream_index_isSet = false;
|
||||
use_reverse_api = 0;
|
||||
m_use_reverse_api_isSet = false;
|
||||
reverse_api_address = new QString("");
|
||||
@ -120,6 +124,7 @@ SWGAMDemodSettings::cleanup() {
|
||||
|
||||
|
||||
|
||||
|
||||
if(reverse_api_address != nullptr) {
|
||||
delete reverse_api_address;
|
||||
}
|
||||
@ -161,6 +166,8 @@ SWGAMDemodSettings::fromJsonObject(QJsonObject &pJson) {
|
||||
|
||||
::SWGSDRangel::setValue(&sync_am_operation, pJson["syncAMOperation"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&stream_index, pJson["streamIndex"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString");
|
||||
@ -220,6 +227,9 @@ SWGAMDemodSettings::asJsonObject() {
|
||||
if(m_sync_am_operation_isSet){
|
||||
obj->insert("syncAMOperation", QJsonValue(sync_am_operation));
|
||||
}
|
||||
if(m_stream_index_isSet){
|
||||
obj->insert("streamIndex", QJsonValue(stream_index));
|
||||
}
|
||||
if(m_use_reverse_api_isSet){
|
||||
obj->insert("useReverseAPI", QJsonValue(use_reverse_api));
|
||||
}
|
||||
@ -349,6 +359,16 @@ SWGAMDemodSettings::setSyncAmOperation(qint32 sync_am_operation) {
|
||||
this->m_sync_am_operation_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGAMDemodSettings::getStreamIndex() {
|
||||
return stream_index;
|
||||
}
|
||||
void
|
||||
SWGAMDemodSettings::setStreamIndex(qint32 stream_index) {
|
||||
this->stream_index = stream_index;
|
||||
this->m_stream_index_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGAMDemodSettings::getUseReverseApi() {
|
||||
return use_reverse_api;
|
||||
@ -415,6 +435,7 @@ SWGAMDemodSettings::isSet(){
|
||||
if(audio_device_name != nullptr && *audio_device_name != QString("")){ isObjectUpdated = true; break;}
|
||||
if(m_pll_isSet){ isObjectUpdated = true; break;}
|
||||
if(m_sync_am_operation_isSet){ isObjectUpdated = true; break;}
|
||||
if(m_stream_index_isSet){ isObjectUpdated = true; break;}
|
||||
if(m_use_reverse_api_isSet){ isObjectUpdated = true; break;}
|
||||
if(reverse_api_address != nullptr && *reverse_api_address != QString("")){ isObjectUpdated = true; break;}
|
||||
if(m_reverse_api_port_isSet){ isObjectUpdated = true; break;}
|
||||
|
@ -75,6 +75,9 @@ public:
|
||||
qint32 getSyncAmOperation();
|
||||
void setSyncAmOperation(qint32 sync_am_operation);
|
||||
|
||||
qint32 getStreamIndex();
|
||||
void setStreamIndex(qint32 stream_index);
|
||||
|
||||
qint32 getUseReverseApi();
|
||||
void setUseReverseApi(qint32 use_reverse_api);
|
||||
|
||||
@ -127,6 +130,9 @@ private:
|
||||
qint32 sync_am_operation;
|
||||
bool m_sync_am_operation_isSet;
|
||||
|
||||
qint32 stream_index;
|
||||
bool m_stream_index_isSet;
|
||||
|
||||
qint32 use_reverse_api;
|
||||
bool m_use_reverse_api_isSet;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user