From bbba942ebae55f2491c0cc1dc2bf313cc64cef6f Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 29 Dec 2019 06:01:14 +0100 Subject: [PATCH] REST API: updates for MIMO (5) --- sdrgui/mainwindow.h | 4 +-- sdrgui/webapi/webapiadaptergui.cpp | 21 ++++---------- sdrsrv/maincore.cpp | 44 ++++++++++++++++++++++++++++-- sdrsrv/maincore.h | 1 + 4 files changed, 50 insertions(+), 20 deletions(-) diff --git a/sdrgui/mainwindow.h b/sdrgui/mainwindow.h index 88aed8cb6..71134acbc 100644 --- a/sdrgui/mainwindow.h +++ b/sdrgui/mainwindow.h @@ -200,9 +200,9 @@ private: int getDeviceIndex() const { return m_deviceIndex; } int getDeviceType() const { return m_deviceType; } - static MsgSetDevice* create(int deviceSetIndex, int deviceIndex, bool tx) + static MsgSetDevice* create(int deviceSetIndex, int deviceIndex, int deviceType) { - return new MsgSetDevice(deviceSetIndex, deviceIndex, tx); + return new MsgSetDevice(deviceSetIndex, deviceIndex, deviceType); } private: diff --git a/sdrgui/webapi/webapiadaptergui.cpp b/sdrgui/webapi/webapiadaptergui.cpp index 1583629d7..c721e1511 100644 --- a/sdrgui/webapi/webapiadaptergui.cpp +++ b/sdrgui/webapi/webapiadaptergui.cpp @@ -1242,26 +1242,15 @@ int WebAPIAdapterGUI::devicesetDevicePut( for (int i = 0; i < nbSamplingDevices; i++) { - int direction; const PluginInterface::SamplingDevice *samplingDevice; - if (query.getDirection() == 0) - { - direction = 0; + if (query.getDirection() == 0) { samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(i); - } - else if (query.getDirection() == 1) - { - direction = 1; + } else if (query.getDirection() == 1) { samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(i); - } - else if (query.getDirection() == 2) - { - direction = 2; + } else if (query.getDirection() == 2) { samplingDevice = DeviceEnumerator::instance()->getMIMOSamplingDevice(i); - } - else - { + } else { continue; // device not supported } @@ -1293,7 +1282,7 @@ int WebAPIAdapterGUI::devicesetDevicePut( *response.getHwType() = samplingDevice->hardwareId; *response.getSerial() = samplingDevice->serial; response.setSequence(samplingDevice->sequence); - response.setDirection(direction); + response.setDirection(query.getDirection()); response.setDeviceNbStreams(samplingDevice->deviceNbItems); response.setDeviceStreamIndex(samplingDevice->deviceItemIndex); response.setDeviceSetIndex(deviceSetIndex); diff --git a/sdrsrv/maincore.cpp b/sdrsrv/maincore.cpp index ffd3d5c55..644d9ab2f 100644 --- a/sdrsrv/maincore.cpp +++ b/sdrsrv/maincore.cpp @@ -167,8 +167,9 @@ bool MainCore::handleMessage(const Message& cmd) changeSampleSink(notif.getDeviceSetIndex(), notif.getDeviceIndex()); } else if (notif.getDeviceType() == 0) { changeSampleSource(notif.getDeviceSetIndex(), notif.getDeviceIndex()); - } // TODO: for MIMO - + } else if (notif.getDeviceType() == 2) { + changeSampleMIMO(notif.getDeviceSetIndex(), notif.getDeviceIndex()); + } return true; } else if (MsgAddChannel::match(cmd)) @@ -586,6 +587,45 @@ void MainCore::changeSampleSink(int deviceSetIndex, int selectedDeviceIndex) } } +void MainCore::changeSampleMIMO(int deviceSetIndex, int selectedDeviceIndex) +{ + if (deviceSetIndex >= 0) + { + qDebug("MainCore::changeSampleMIMO: device set at %d", deviceSetIndex); + DeviceSet *deviceSet = m_deviceSets[deviceSetIndex]; + deviceSet->m_deviceAPI->saveSamplingDeviceSettings(m_settings.getWorkingPreset()); // save old API settings + deviceSet->m_deviceAPI->stopDeviceEngine(); + + // deletes old UI and output object + deviceSet->m_deviceAPI->resetSamplingDeviceId(); + deviceSet->m_deviceAPI->getPluginInterface()->deleteSampleMIMOPluginInstanceMIMO( + deviceSet->m_deviceAPI->getSampleMIMO()); + + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getMIMOSamplingDevice(selectedDeviceIndex); + deviceSet->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence); + deviceSet->m_deviceAPI->setDeviceNbItems(samplingDevice->deviceNbItems); + deviceSet->m_deviceAPI->setDeviceItemIndex(samplingDevice->deviceItemIndex); + deviceSet->m_deviceAPI->setHardwareId(samplingDevice->hardwareId); + deviceSet->m_deviceAPI->setSamplingDeviceId(samplingDevice->id); + deviceSet->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial); + deviceSet->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); + deviceSet->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getMIMOPluginInterface(selectedDeviceIndex)); + + QString userArgs = m_settings.getDeviceUserArgs().findUserArgs(samplingDevice->hardwareId, samplingDevice->sequence); + + if (userArgs.size() > 0) { + deviceSet->m_deviceAPI->setHardwareUserArguments(userArgs); + } + + // constructs new GUI and MIMO object + DeviceSampleMIMO *mimo = deviceSet->m_deviceAPI->getPluginInterface()->createSampleMIMOPluginInstance( + deviceSet->m_deviceAPI->getSamplingDeviceId(), deviceSet->m_deviceAPI); + deviceSet->m_deviceAPI->setSampleMIMO(mimo); + + deviceSet->m_deviceAPI->loadSamplingDeviceSettings(m_settings.getWorkingPreset()); // load new API settings + } +} + void MainCore::addChannel(int deviceSetIndex, int selectedChannelIndex) { if (deviceSetIndex >= 0) diff --git a/sdrsrv/maincore.h b/sdrsrv/maincore.h index 5073cfaf1..26f51eeba 100644 --- a/sdrsrv/maincore.h +++ b/sdrsrv/maincore.h @@ -65,6 +65,7 @@ public: void removeLastDevice(); void changeSampleSource(int deviceSetIndex, int selectedDeviceIndex); void changeSampleSink(int deviceSetIndex, int selectedDeviceIndex); + void changeSampleMIMO(int deviceSetIndex, int selectedDeviceIndex); void addChannel(int deviceSetIndex, int selectedChannelIndex); void deleteChannel(int deviceSetIndex, int channelIndex);