mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-03-07 03:48:39 -05:00
MIMO: implemented add/remove MIMO device set in main GUI
This commit is contained in:
parent
ddde7a925f
commit
75ee688ac2
@ -483,8 +483,8 @@ int TestMI::webapiSettingsGet(
|
|||||||
QString& errorMessage)
|
QString& errorMessage)
|
||||||
{
|
{
|
||||||
(void) errorMessage;
|
(void) errorMessage;
|
||||||
response.setTestSourceMiSettings(new SWGSDRangel::SWGTestSourceMISettings());
|
response.setTestMiSettings(new SWGSDRangel::SWGTestMISettings());
|
||||||
response.getTestSourceMiSettings()->init();
|
response.getTestMiSettings()->init();
|
||||||
webapiFormatDeviceSettings(response, m_settings);
|
webapiFormatDeviceSettings(response, m_settings);
|
||||||
return 200;
|
return 200;
|
||||||
}
|
}
|
||||||
@ -499,75 +499,75 @@ int TestMI::webapiSettingsPutPatch(
|
|||||||
TestMISettings settings = m_settings;
|
TestMISettings settings = m_settings;
|
||||||
|
|
||||||
if (deviceSettingsKeys.contains("centerFrequency")) {
|
if (deviceSettingsKeys.contains("centerFrequency")) {
|
||||||
settings.m_centerFrequency = response.getTestSourceMiSettings()->getCenterFrequency();
|
settings.m_centerFrequency = response.getTestMiSettings()->getCenterFrequency();
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("frequencyShift")) {
|
if (deviceSettingsKeys.contains("frequencyShift")) {
|
||||||
settings.m_frequencyShift = response.getTestSourceMiSettings()->getFrequencyShift();
|
settings.m_frequencyShift = response.getTestMiSettings()->getFrequencyShift();
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("sampleRate")) {
|
if (deviceSettingsKeys.contains("sampleRate")) {
|
||||||
settings.m_sampleRate = response.getTestSourceMiSettings()->getSampleRate();
|
settings.m_sampleRate = response.getTestMiSettings()->getSampleRate();
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("log2Decim")) {
|
if (deviceSettingsKeys.contains("log2Decim")) {
|
||||||
settings.m_log2Decim = response.getTestSourceMiSettings()->getLog2Decim();
|
settings.m_log2Decim = response.getTestMiSettings()->getLog2Decim();
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("fcPos")) {
|
if (deviceSettingsKeys.contains("fcPos")) {
|
||||||
int fcPos = response.getTestSourceMiSettings()->getFcPos();
|
int fcPos = response.getTestMiSettings()->getFcPos();
|
||||||
fcPos = fcPos < 0 ? 0 : fcPos > 2 ? 2 : fcPos;
|
fcPos = fcPos < 0 ? 0 : fcPos > 2 ? 2 : fcPos;
|
||||||
settings.m_fcPos = (TestMISettings::fcPos_t) fcPos;
|
settings.m_fcPos = (TestMISettings::fcPos_t) fcPos;
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("sampleSizeIndex")) {
|
if (deviceSettingsKeys.contains("sampleSizeIndex")) {
|
||||||
int sampleSizeIndex = response.getTestSourceMiSettings()->getSampleSizeIndex();
|
int sampleSizeIndex = response.getTestMiSettings()->getSampleSizeIndex();
|
||||||
sampleSizeIndex = sampleSizeIndex < 0 ? 0 : sampleSizeIndex > 1 ? 2 : sampleSizeIndex;
|
sampleSizeIndex = sampleSizeIndex < 0 ? 0 : sampleSizeIndex > 1 ? 2 : sampleSizeIndex;
|
||||||
settings.m_sampleSizeIndex = sampleSizeIndex;
|
settings.m_sampleSizeIndex = sampleSizeIndex;
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("amplitudeBits")) {
|
if (deviceSettingsKeys.contains("amplitudeBits")) {
|
||||||
settings.m_amplitudeBits = response.getTestSourceMiSettings()->getAmplitudeBits();
|
settings.m_amplitudeBits = response.getTestMiSettings()->getAmplitudeBits();
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("autoCorrOptions")) {
|
if (deviceSettingsKeys.contains("autoCorrOptions")) {
|
||||||
int autoCorrOptions = response.getTestSourceMiSettings()->getAutoCorrOptions();
|
int autoCorrOptions = response.getTestMiSettings()->getAutoCorrOptions();
|
||||||
autoCorrOptions = autoCorrOptions < 0 ? 0 : autoCorrOptions >= TestMISettings::AutoCorrLast ? TestMISettings::AutoCorrLast-1 : autoCorrOptions;
|
autoCorrOptions = autoCorrOptions < 0 ? 0 : autoCorrOptions >= TestMISettings::AutoCorrLast ? TestMISettings::AutoCorrLast-1 : autoCorrOptions;
|
||||||
settings.m_sampleSizeIndex = (TestMISettings::AutoCorrOptions) autoCorrOptions;
|
settings.m_sampleSizeIndex = (TestMISettings::AutoCorrOptions) autoCorrOptions;
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("modulation")) {
|
if (deviceSettingsKeys.contains("modulation")) {
|
||||||
int modulation = response.getTestSourceMiSettings()->getModulation();
|
int modulation = response.getTestMiSettings()->getModulation();
|
||||||
modulation = modulation < 0 ? 0 : modulation >= TestMISettings::ModulationLast ? TestMISettings::ModulationLast-1 : modulation;
|
modulation = modulation < 0 ? 0 : modulation >= TestMISettings::ModulationLast ? TestMISettings::ModulationLast-1 : modulation;
|
||||||
settings.m_modulation = (TestMISettings::Modulation) modulation;
|
settings.m_modulation = (TestMISettings::Modulation) modulation;
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("modulationTone")) {
|
if (deviceSettingsKeys.contains("modulationTone")) {
|
||||||
settings.m_modulationTone = response.getTestSourceMiSettings()->getModulationTone();
|
settings.m_modulationTone = response.getTestMiSettings()->getModulationTone();
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("amModulation")) {
|
if (deviceSettingsKeys.contains("amModulation")) {
|
||||||
settings.m_amModulation = response.getTestSourceMiSettings()->getAmModulation();
|
settings.m_amModulation = response.getTestMiSettings()->getAmModulation();
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("fmDeviation")) {
|
if (deviceSettingsKeys.contains("fmDeviation")) {
|
||||||
settings.m_fmDeviation = response.getTestSourceMiSettings()->getFmDeviation();
|
settings.m_fmDeviation = response.getTestMiSettings()->getFmDeviation();
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("dcFactor")) {
|
if (deviceSettingsKeys.contains("dcFactor")) {
|
||||||
settings.m_dcFactor = response.getTestSourceMiSettings()->getDcFactor();
|
settings.m_dcFactor = response.getTestMiSettings()->getDcFactor();
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("iFactor")) {
|
if (deviceSettingsKeys.contains("iFactor")) {
|
||||||
settings.m_iFactor = response.getTestSourceMiSettings()->getIFactor();
|
settings.m_iFactor = response.getTestMiSettings()->getIFactor();
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("qFactor")) {
|
if (deviceSettingsKeys.contains("qFactor")) {
|
||||||
settings.m_qFactor = response.getTestSourceMiSettings()->getQFactor();
|
settings.m_qFactor = response.getTestMiSettings()->getQFactor();
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("phaseImbalance")) {
|
if (deviceSettingsKeys.contains("phaseImbalance")) {
|
||||||
settings.m_phaseImbalance = response.getTestSourceMiSettings()->getPhaseImbalance();
|
settings.m_phaseImbalance = response.getTestMiSettings()->getPhaseImbalance();
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("fileRecordName")) {
|
if (deviceSettingsKeys.contains("fileRecordName")) {
|
||||||
settings.m_fileRecordName = *response.getTestSourceMiSettings()->getFileRecordName();
|
settings.m_fileRecordName = *response.getTestMiSettings()->getFileRecordName();
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("useReverseAPI")) {
|
if (deviceSettingsKeys.contains("useReverseAPI")) {
|
||||||
settings.m_useReverseAPI = response.getTestSourceMiSettings()->getUseReverseApi() != 0;
|
settings.m_useReverseAPI = response.getTestMiSettings()->getUseReverseApi() != 0;
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("reverseAPIAddress")) {
|
if (deviceSettingsKeys.contains("reverseAPIAddress")) {
|
||||||
settings.m_reverseAPIAddress = *response.getTestSourceMiSettings()->getReverseApiAddress();
|
settings.m_reverseAPIAddress = *response.getTestMiSettings()->getReverseApiAddress();
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("reverseAPIPort")) {
|
if (deviceSettingsKeys.contains("reverseAPIPort")) {
|
||||||
settings.m_reverseAPIPort = response.getTestSourceMiSettings()->getReverseApiPort();
|
settings.m_reverseAPIPort = response.getTestMiSettings()->getReverseApiPort();
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) {
|
if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) {
|
||||||
settings.m_reverseAPIDeviceIndex = response.getTestSourceMiSettings()->getReverseApiDeviceIndex();
|
settings.m_reverseAPIDeviceIndex = response.getTestMiSettings()->getReverseApiDeviceIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
MsgConfigureTestSource *msg = MsgConfigureTestSource::create(settings, force);
|
MsgConfigureTestSource *msg = MsgConfigureTestSource::create(settings, force);
|
||||||
@ -585,39 +585,39 @@ int TestMI::webapiSettingsPutPatch(
|
|||||||
|
|
||||||
void TestMI::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const TestMISettings& settings)
|
void TestMI::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const TestMISettings& settings)
|
||||||
{
|
{
|
||||||
response.getTestSourceMiSettings()->setCenterFrequency(settings.m_centerFrequency);
|
response.getTestMiSettings()->setCenterFrequency(settings.m_centerFrequency);
|
||||||
response.getTestSourceMiSettings()->setFrequencyShift(settings.m_frequencyShift);
|
response.getTestMiSettings()->setFrequencyShift(settings.m_frequencyShift);
|
||||||
response.getTestSourceMiSettings()->setSampleRate(settings.m_sampleRate);
|
response.getTestMiSettings()->setSampleRate(settings.m_sampleRate);
|
||||||
response.getTestSourceMiSettings()->setLog2Decim(settings.m_log2Decim);
|
response.getTestMiSettings()->setLog2Decim(settings.m_log2Decim);
|
||||||
response.getTestSourceMiSettings()->setFcPos((int) settings.m_fcPos);
|
response.getTestMiSettings()->setFcPos((int) settings.m_fcPos);
|
||||||
response.getTestSourceMiSettings()->setSampleSizeIndex((int) settings.m_sampleSizeIndex);
|
response.getTestMiSettings()->setSampleSizeIndex((int) settings.m_sampleSizeIndex);
|
||||||
response.getTestSourceMiSettings()->setAmplitudeBits(settings.m_amplitudeBits);
|
response.getTestMiSettings()->setAmplitudeBits(settings.m_amplitudeBits);
|
||||||
response.getTestSourceMiSettings()->setAutoCorrOptions((int) settings.m_autoCorrOptions);
|
response.getTestMiSettings()->setAutoCorrOptions((int) settings.m_autoCorrOptions);
|
||||||
response.getTestSourceMiSettings()->setModulation((int) settings.m_modulation);
|
response.getTestMiSettings()->setModulation((int) settings.m_modulation);
|
||||||
response.getTestSourceMiSettings()->setModulationTone(settings.m_modulationTone);
|
response.getTestMiSettings()->setModulationTone(settings.m_modulationTone);
|
||||||
response.getTestSourceMiSettings()->setAmModulation(settings.m_amModulation);
|
response.getTestMiSettings()->setAmModulation(settings.m_amModulation);
|
||||||
response.getTestSourceMiSettings()->setFmDeviation(settings.m_fmDeviation);
|
response.getTestMiSettings()->setFmDeviation(settings.m_fmDeviation);
|
||||||
response.getTestSourceMiSettings()->setDcFactor(settings.m_dcFactor);
|
response.getTestMiSettings()->setDcFactor(settings.m_dcFactor);
|
||||||
response.getTestSourceMiSettings()->setIFactor(settings.m_iFactor);
|
response.getTestMiSettings()->setIFactor(settings.m_iFactor);
|
||||||
response.getTestSourceMiSettings()->setQFactor(settings.m_qFactor);
|
response.getTestMiSettings()->setQFactor(settings.m_qFactor);
|
||||||
response.getTestSourceMiSettings()->setPhaseImbalance(settings.m_phaseImbalance);
|
response.getTestMiSettings()->setPhaseImbalance(settings.m_phaseImbalance);
|
||||||
|
|
||||||
if (response.getTestSourceMiSettings()->getFileRecordName()) {
|
if (response.getTestMiSettings()->getFileRecordName()) {
|
||||||
*response.getTestSourceMiSettings()->getFileRecordName() = settings.m_fileRecordName;
|
*response.getTestMiSettings()->getFileRecordName() = settings.m_fileRecordName;
|
||||||
} else {
|
} else {
|
||||||
response.getTestSourceMiSettings()->setFileRecordName(new QString(settings.m_fileRecordName));
|
response.getTestMiSettings()->setFileRecordName(new QString(settings.m_fileRecordName));
|
||||||
}
|
}
|
||||||
|
|
||||||
response.getTestSourceMiSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
|
response.getTestMiSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
|
||||||
|
|
||||||
if (response.getTestSourceMiSettings()->getReverseApiAddress()) {
|
if (response.getTestMiSettings()->getReverseApiAddress()) {
|
||||||
*response.getTestSourceMiSettings()->getReverseApiAddress() = settings.m_reverseAPIAddress;
|
*response.getTestMiSettings()->getReverseApiAddress() = settings.m_reverseAPIAddress;
|
||||||
} else {
|
} else {
|
||||||
response.getTestSourceMiSettings()->setReverseApiAddress(new QString(settings.m_reverseAPIAddress));
|
response.getTestMiSettings()->setReverseApiAddress(new QString(settings.m_reverseAPIAddress));
|
||||||
}
|
}
|
||||||
|
|
||||||
response.getTestSourceMiSettings()->setReverseApiPort(settings.m_reverseAPIPort);
|
response.getTestMiSettings()->setReverseApiPort(settings.m_reverseAPIPort);
|
||||||
response.getTestSourceMiSettings()->setReverseApiDeviceIndex(settings.m_reverseAPIDeviceIndex);
|
response.getTestMiSettings()->setReverseApiDeviceIndex(settings.m_reverseAPIDeviceIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestMI::webapiReverseSendSettings(QList<QString>& deviceSettingsKeys, const TestMISettings& settings, bool force)
|
void TestMI::webapiReverseSendSettings(QList<QString>& deviceSettingsKeys, const TestMISettings& settings, bool force)
|
||||||
@ -626,61 +626,61 @@ void TestMI::webapiReverseSendSettings(QList<QString>& deviceSettingsKeys, const
|
|||||||
swgDeviceSettings->setDirection(0); // single Rx
|
swgDeviceSettings->setDirection(0); // single Rx
|
||||||
swgDeviceSettings->setOriginatorIndex(m_deviceAPI->getDeviceSetIndex());
|
swgDeviceSettings->setOriginatorIndex(m_deviceAPI->getDeviceSetIndex());
|
||||||
swgDeviceSettings->setDeviceHwType(new QString("TestSource"));
|
swgDeviceSettings->setDeviceHwType(new QString("TestSource"));
|
||||||
swgDeviceSettings->setTestSourceMiSettings(new SWGSDRangel::SWGTestSourceMISettings());
|
swgDeviceSettings->setTestMiSettings(new SWGSDRangel::SWGTestMISettings());
|
||||||
SWGSDRangel::SWGTestSourceMISettings *swgTestSourceMISettings = swgDeviceSettings->getTestSourceMiSettings();
|
SWGSDRangel::SWGTestMISettings *swgTestMISettings = swgDeviceSettings->getTestMiSettings();
|
||||||
|
|
||||||
// transfer data that has been modified. When force is on transfer all data except reverse API data
|
// transfer data that has been modified. When force is on transfer all data except reverse API data
|
||||||
|
|
||||||
if (deviceSettingsKeys.contains("centerFrequency") || force) {
|
if (deviceSettingsKeys.contains("centerFrequency") || force) {
|
||||||
swgTestSourceMISettings->setCenterFrequency(settings.m_centerFrequency);
|
swgTestMISettings->setCenterFrequency(settings.m_centerFrequency);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("frequencyShift") || force) {
|
if (deviceSettingsKeys.contains("frequencyShift") || force) {
|
||||||
swgTestSourceMISettings->setFrequencyShift(settings.m_frequencyShift);
|
swgTestMISettings->setFrequencyShift(settings.m_frequencyShift);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("sampleRate") || force) {
|
if (deviceSettingsKeys.contains("sampleRate") || force) {
|
||||||
swgTestSourceMISettings->setSampleRate(settings.m_sampleRate);
|
swgTestMISettings->setSampleRate(settings.m_sampleRate);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("log2Decim") || force) {
|
if (deviceSettingsKeys.contains("log2Decim") || force) {
|
||||||
swgTestSourceMISettings->setLog2Decim(settings.m_log2Decim);
|
swgTestMISettings->setLog2Decim(settings.m_log2Decim);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("fcPos") || force) {
|
if (deviceSettingsKeys.contains("fcPos") || force) {
|
||||||
swgTestSourceMISettings->setFcPos((int) settings.m_fcPos);
|
swgTestMISettings->setFcPos((int) settings.m_fcPos);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("sampleSizeIndex") || force) {
|
if (deviceSettingsKeys.contains("sampleSizeIndex") || force) {
|
||||||
swgTestSourceMISettings->setSampleSizeIndex(settings.m_sampleSizeIndex);
|
swgTestMISettings->setSampleSizeIndex(settings.m_sampleSizeIndex);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("amplitudeBits") || force) {
|
if (deviceSettingsKeys.contains("amplitudeBits") || force) {
|
||||||
swgTestSourceMISettings->setAmplitudeBits(settings.m_amplitudeBits);
|
swgTestMISettings->setAmplitudeBits(settings.m_amplitudeBits);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("autoCorrOptions") || force) {
|
if (deviceSettingsKeys.contains("autoCorrOptions") || force) {
|
||||||
swgTestSourceMISettings->setAutoCorrOptions((int) settings.m_sampleSizeIndex);
|
swgTestMISettings->setAutoCorrOptions((int) settings.m_sampleSizeIndex);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("modulation") || force) {
|
if (deviceSettingsKeys.contains("modulation") || force) {
|
||||||
swgTestSourceMISettings->setModulation((int) settings.m_modulation);
|
swgTestMISettings->setModulation((int) settings.m_modulation);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("modulationTone")) {
|
if (deviceSettingsKeys.contains("modulationTone")) {
|
||||||
swgTestSourceMISettings->setModulationTone(settings.m_modulationTone);
|
swgTestMISettings->setModulationTone(settings.m_modulationTone);
|
||||||
}
|
}
|
||||||
if (deviceSettingsKeys.contains("amModulation") || force) {
|
if (deviceSettingsKeys.contains("amModulation") || force) {
|
||||||
swgTestSourceMISettings->setAmModulation(settings.m_amModulation);
|
swgTestMISettings->setAmModulation(settings.m_amModulation);
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("fmDeviation") || force) {
|
if (deviceSettingsKeys.contains("fmDeviation") || force) {
|
||||||
swgTestSourceMISettings->setFmDeviation(settings.m_fmDeviation);
|
swgTestMISettings->setFmDeviation(settings.m_fmDeviation);
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("dcFactor") || force) {
|
if (deviceSettingsKeys.contains("dcFactor") || force) {
|
||||||
swgTestSourceMISettings->setDcFactor(settings.m_dcFactor);
|
swgTestMISettings->setDcFactor(settings.m_dcFactor);
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("iFactor") || force) {
|
if (deviceSettingsKeys.contains("iFactor") || force) {
|
||||||
swgTestSourceMISettings->setIFactor(settings.m_iFactor);
|
swgTestMISettings->setIFactor(settings.m_iFactor);
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("qFactor") || force) {
|
if (deviceSettingsKeys.contains("qFactor") || force) {
|
||||||
swgTestSourceMISettings->setQFactor(settings.m_qFactor);
|
swgTestMISettings->setQFactor(settings.m_qFactor);
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("phaseImbalance") || force) {
|
if (deviceSettingsKeys.contains("phaseImbalance") || force) {
|
||||||
swgTestSourceMISettings->setPhaseImbalance(settings.m_phaseImbalance);
|
swgTestMISettings->setPhaseImbalance(settings.m_phaseImbalance);
|
||||||
};
|
};
|
||||||
if (deviceSettingsKeys.contains("fileRecordName") || force) {
|
if (deviceSettingsKeys.contains("fileRecordName") || force) {
|
||||||
swgTestSourceMISettings->setFileRecordName(new QString(settings.m_fileRecordName));
|
swgTestMISettings->setFileRecordName(new QString(settings.m_fileRecordName));
|
||||||
}
|
}
|
||||||
|
|
||||||
QString channelSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings")
|
QString channelSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings")
|
||||||
|
@ -86,12 +86,12 @@ PluginInstanceGUI* TestMIPlugin::createSampleMIMOPluginInstanceGUI(
|
|||||||
QWidget **widget,
|
QWidget **widget,
|
||||||
DeviceUISet *deviceUISet)
|
DeviceUISet *deviceUISet)
|
||||||
{
|
{
|
||||||
if(sourceId == m_deviceTypeID) {
|
if (sourceId == m_deviceTypeID) {
|
||||||
TestMIGui* gui = new TestMIGui(deviceUISet);
|
TestMIGui* gui = new TestMIGui(deviceUISet);
|
||||||
*widget = gui;
|
*widget = gui;
|
||||||
return gui;
|
return gui;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -233,6 +233,18 @@ int DeviceEnumerator::getFileSinkDeviceIndex() const
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DeviceEnumerator::getTestMIMODeviceIndex() const
|
||||||
|
{
|
||||||
|
for (DevicesEnumeration::const_iterator it = m_mimoEnumeration.begin(); it != m_mimoEnumeration.end(); ++it)
|
||||||
|
{
|
||||||
|
if (it->m_samplingDevice.id == PluginManager::getTestMIMODeviceId()) {
|
||||||
|
return it->m_index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int DeviceEnumerator::getRxSamplingDeviceIndex(const QString& deviceId, int sequence)
|
int DeviceEnumerator::getRxSamplingDeviceIndex(const QString& deviceId, int sequence)
|
||||||
{
|
{
|
||||||
for (DevicesEnumeration::iterator it = m_rxEnumeration.begin(); it != m_rxEnumeration.end(); ++it)
|
for (DevicesEnumeration::iterator it = m_rxEnumeration.begin(); it != m_rxEnumeration.end(); ++it)
|
||||||
|
@ -54,8 +54,9 @@ public:
|
|||||||
PluginInterface *getRxPluginInterface(int deviceIndex) { return m_rxEnumeration[deviceIndex].m_pluginInterface; }
|
PluginInterface *getRxPluginInterface(int deviceIndex) { return m_rxEnumeration[deviceIndex].m_pluginInterface; }
|
||||||
PluginInterface *getTxPluginInterface(int deviceIndex) { return m_txEnumeration[deviceIndex].m_pluginInterface; }
|
PluginInterface *getTxPluginInterface(int deviceIndex) { return m_txEnumeration[deviceIndex].m_pluginInterface; }
|
||||||
PluginInterface *getMIMOPluginInterface(int deviceIndex) { return m_mimoEnumeration[deviceIndex].m_pluginInterface; }
|
PluginInterface *getMIMOPluginInterface(int deviceIndex) { return m_mimoEnumeration[deviceIndex].m_pluginInterface; }
|
||||||
int getFileSourceDeviceIndex() const;
|
int getFileSourceDeviceIndex() const; //!< Get Rx default device
|
||||||
int getFileSinkDeviceIndex() const;
|
int getFileSinkDeviceIndex() const; //!< Get Tx default device
|
||||||
|
int getTestMIMODeviceIndex() const; //!< Get MIMO default device
|
||||||
int getRxSamplingDeviceIndex(const QString& deviceId, int sequence);
|
int getRxSamplingDeviceIndex(const QString& deviceId, int sequence);
|
||||||
int getTxSamplingDeviceIndex(const QString& deviceId, int sequence);
|
int getTxSamplingDeviceIndex(const QString& deviceId, int sequence);
|
||||||
int getMIMOSamplingDeviceIndex(const QString& deviceId, int sequence);
|
int getMIMOSamplingDeviceIndex(const QString& deviceId, int sequence);
|
||||||
|
@ -42,7 +42,8 @@ MESSAGE_CLASS_DEFINITION(DSPDeviceMIMOEngine::SignalNotification, Message)
|
|||||||
DSPDeviceMIMOEngine::DSPDeviceMIMOEngine(uint32_t uid, QObject* parent) :
|
DSPDeviceMIMOEngine::DSPDeviceMIMOEngine(uint32_t uid, QObject* parent) :
|
||||||
QThread(parent),
|
QThread(parent),
|
||||||
m_uid(uid),
|
m_uid(uid),
|
||||||
m_state(StNotStarted)
|
m_state(StNotStarted),
|
||||||
|
m_deviceSampleMIMO(nullptr)
|
||||||
{
|
{
|
||||||
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection);
|
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection);
|
||||||
connect(&m_syncMessenger, SIGNAL(messageSent()), this, SLOT(handleSynchronousMessages()), Qt::QueuedConnection);
|
connect(&m_syncMessenger, SIGNAL(messageSent()), this, SLOT(handleSynchronousMessages()), Qt::QueuedConnection);
|
||||||
@ -103,7 +104,7 @@ void DSPDeviceMIMOEngine::stopProcess()
|
|||||||
|
|
||||||
void DSPDeviceMIMOEngine::setMIMO(DeviceSampleMIMO* mimo)
|
void DSPDeviceMIMOEngine::setMIMO(DeviceSampleMIMO* mimo)
|
||||||
{
|
{
|
||||||
qDebug() << "DSPDeviceMIMOEngine::setSink";
|
qDebug() << "DSPDeviceMIMOEngine::setMIMO";
|
||||||
SetSampleMIMO cmd(mimo);
|
SetSampleMIMO cmd(mimo);
|
||||||
m_syncMessenger.sendWait(cmd);
|
m_syncMessenger.sendWait(cmd);
|
||||||
}
|
}
|
||||||
@ -306,8 +307,7 @@ DSPDeviceMIMOEngine::State DSPDeviceMIMOEngine::gotoIdle()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_deviceSampleMIMO == 0)
|
if (!m_deviceSampleMIMO) {
|
||||||
{
|
|
||||||
return StIdle;
|
return StIdle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,7 +358,7 @@ DSPDeviceMIMOEngine::State DSPDeviceMIMOEngine::gotoInit()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_deviceSampleMIMO == 0) {
|
if (!m_deviceSampleMIMO) {
|
||||||
return gotoError("No sample MIMO configured");
|
return gotoError("No sample MIMO configured");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,8 +448,7 @@ DSPDeviceMIMOEngine::State DSPDeviceMIMOEngine::gotoRunning()
|
|||||||
|
|
||||||
// Start everything
|
// Start everything
|
||||||
|
|
||||||
if (!m_deviceSampleMIMO->start())
|
if (!m_deviceSampleMIMO->start()) {
|
||||||
{
|
|
||||||
return gotoError("Could not start sample source");
|
return gotoError("Could not start sample source");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -500,6 +499,8 @@ void DSPDeviceMIMOEngine::handleData()
|
|||||||
|
|
||||||
void DSPDeviceMIMOEngine::handleSetMIMO(DeviceSampleMIMO* mimo)
|
void DSPDeviceMIMOEngine::handleSetMIMO(DeviceSampleMIMO* mimo)
|
||||||
{
|
{
|
||||||
|
m_deviceSampleMIMO = mimo;
|
||||||
|
|
||||||
if (mimo && (mimo->getNbSinkFifos() > 0))
|
if (mimo && (mimo->getNbSinkFifos() > 0))
|
||||||
{
|
{
|
||||||
// if there is at least one Rx then the first Rx drives the FIFOs
|
// if there is at least one Rx then the first Rx drives the FIFOs
|
||||||
|
@ -33,10 +33,10 @@ DSPDeviceSinkEngine::DSPDeviceSinkEngine(uint32_t uid, QObject* parent) :
|
|||||||
QThread(parent),
|
QThread(parent),
|
||||||
m_uid(uid),
|
m_uid(uid),
|
||||||
m_state(StNotStarted),
|
m_state(StNotStarted),
|
||||||
m_deviceSampleSink(0),
|
m_deviceSampleSink(nullptr),
|
||||||
m_sampleSinkSequence(0),
|
m_sampleSinkSequence(0),
|
||||||
m_basebandSampleSources(),
|
m_basebandSampleSources(),
|
||||||
m_spectrumSink(0),
|
m_spectrumSink(nullptr),
|
||||||
m_sampleRate(0),
|
m_sampleRate(0),
|
||||||
m_centerFrequency(0),
|
m_centerFrequency(0),
|
||||||
m_multipleSourcesDivisionFactor(1)
|
m_multipleSourcesDivisionFactor(1)
|
||||||
@ -391,12 +391,9 @@ void DSPDeviceSinkEngine::handleSetSink(DeviceSampleSink* sink)
|
|||||||
|
|
||||||
m_deviceSampleSink = sink;
|
m_deviceSampleSink = sink;
|
||||||
|
|
||||||
if(m_deviceSampleSink != 0)
|
if(m_deviceSampleSink != 0) {
|
||||||
{
|
|
||||||
qDebug("DSPDeviceSinkEngine::handleSetSink: set %s", qPrintable(sink->getDeviceDescription()));
|
qDebug("DSPDeviceSinkEngine::handleSetSink: set %s", qPrintable(sink->getDeviceDescription()));
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
qDebug("DSPDeviceSinkEngine::handleSetSource: set none");
|
qDebug("DSPDeviceSinkEngine::handleSetSource: set none");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ DSPDeviceSourceEngine::DSPDeviceSourceEngine(uint uid, QObject* parent) :
|
|||||||
QThread(parent),
|
QThread(parent),
|
||||||
m_uid(uid),
|
m_uid(uid),
|
||||||
m_state(StNotStarted),
|
m_state(StNotStarted),
|
||||||
m_deviceSampleSource(0),
|
m_deviceSampleSource(nullptr),
|
||||||
m_sampleSourceSequence(0),
|
m_sampleSourceSequence(0),
|
||||||
m_basebandSampleSinks(),
|
m_basebandSampleSinks(),
|
||||||
m_sampleRate(0),
|
m_sampleRate(0),
|
||||||
|
@ -22,11 +22,12 @@
|
|||||||
#include "dsp/dspengine.h"
|
#include "dsp/dspengine.h"
|
||||||
#include "dsp/dspdevicesourceengine.h"
|
#include "dsp/dspdevicesourceengine.h"
|
||||||
#include "dsp/dspdevicesinkengine.h"
|
#include "dsp/dspdevicesinkengine.h"
|
||||||
|
#include "dsp/dspdevicemimoengine.h"
|
||||||
|
|
||||||
DSPEngine::DSPEngine() :
|
DSPEngine::DSPEngine() :
|
||||||
m_deviceSourceEnginesUIDSequence(0),
|
m_deviceSourceEnginesUIDSequence(0),
|
||||||
m_deviceSinkEnginesUIDSequence(0),
|
m_deviceSinkEnginesUIDSequence(0),
|
||||||
|
m_deviceMIMOEnginesUIDSequence(0),
|
||||||
m_audioInputDeviceIndex(-1), // default device
|
m_audioInputDeviceIndex(-1), // default device
|
||||||
m_audioOutputDeviceIndex(-1) // default device
|
m_audioOutputDeviceIndex(-1) // default device
|
||||||
{
|
{
|
||||||
@ -88,21 +89,38 @@ void DSPEngine::removeLastDeviceSinkEngine()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DSPDeviceMIMOEngine *DSPEngine::addDeviceMIMOEngine()
|
||||||
|
{
|
||||||
|
m_deviceMIMOEngines.push_back(new DSPDeviceMIMOEngine(m_deviceMIMOEnginesUIDSequence));
|
||||||
|
m_deviceMIMOEnginesUIDSequence++;
|
||||||
|
return m_deviceMIMOEngines.back();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DSPEngine::removeLastDeviceMIMOEngine()
|
||||||
|
{
|
||||||
|
if (m_deviceMIMOEngines.size() > 0)
|
||||||
|
{
|
||||||
|
DSPDeviceMIMOEngine *lastDeviceEngine = m_deviceMIMOEngines.back();
|
||||||
|
delete lastDeviceEngine;
|
||||||
|
m_deviceMIMOEngines.pop_back();
|
||||||
|
m_deviceMIMOEnginesUIDSequence--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DSPDeviceSourceEngine *DSPEngine::getDeviceSourceEngineByUID(uint uid)
|
DSPDeviceSourceEngine *DSPEngine::getDeviceSourceEngineByUID(uint uid)
|
||||||
{
|
{
|
||||||
std::vector<DSPDeviceSourceEngine*>::iterator it = m_deviceSourceEngines.begin();
|
std::vector<DSPDeviceSourceEngine*>::iterator it = m_deviceSourceEngines.begin();
|
||||||
|
|
||||||
while (it != m_deviceSourceEngines.end())
|
while (it != m_deviceSourceEngines.end())
|
||||||
{
|
{
|
||||||
if ((*it)->getUID() == uid)
|
if ((*it)->getUID() == uid) {
|
||||||
{
|
|
||||||
return *it;
|
return *it;
|
||||||
}
|
}
|
||||||
|
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
DSPDeviceSinkEngine *DSPEngine::getDeviceSinkEngineByUID(uint uid)
|
DSPDeviceSinkEngine *DSPEngine::getDeviceSinkEngineByUID(uint uid)
|
||||||
@ -111,15 +129,30 @@ DSPDeviceSinkEngine *DSPEngine::getDeviceSinkEngineByUID(uint uid)
|
|||||||
|
|
||||||
while (it != m_deviceSinkEngines.end())
|
while (it != m_deviceSinkEngines.end())
|
||||||
{
|
{
|
||||||
if ((*it)->getUID() == uid)
|
if ((*it)->getUID() == uid) {
|
||||||
{
|
|
||||||
return *it;
|
return *it;
|
||||||
}
|
}
|
||||||
|
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
DSPDeviceMIMOEngine *DSPEngine::getDeviceMIMOEngineByUID(uint uid)
|
||||||
|
{
|
||||||
|
std::vector<DSPDeviceMIMOEngine*>::iterator it = m_deviceMIMOEngines.begin();
|
||||||
|
|
||||||
|
while (it != m_deviceMIMOEngines.end())
|
||||||
|
{
|
||||||
|
if ((*it)->getUID() == uid) {
|
||||||
|
return *it;
|
||||||
|
}
|
||||||
|
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DSD_USE_SERIALDV
|
#ifdef DSD_USE_SERIALDV
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
class DSPDeviceSourceEngine;
|
class DSPDeviceSourceEngine;
|
||||||
class DSPDeviceSinkEngine;
|
class DSPDeviceSinkEngine;
|
||||||
|
class DSPDeviceMIMOEngine;
|
||||||
|
|
||||||
class SDRBASE_API DSPEngine : public QObject {
|
class SDRBASE_API DSPEngine : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -50,6 +51,9 @@ public:
|
|||||||
DSPDeviceSinkEngine *addDeviceSinkEngine();
|
DSPDeviceSinkEngine *addDeviceSinkEngine();
|
||||||
void removeLastDeviceSinkEngine();
|
void removeLastDeviceSinkEngine();
|
||||||
|
|
||||||
|
DSPDeviceMIMOEngine *addDeviceMIMOEngine();
|
||||||
|
void removeLastDeviceMIMOEngine();
|
||||||
|
|
||||||
AudioDeviceManager *getAudioDeviceManager() { return &m_audioDeviceManager; }
|
AudioDeviceManager *getAudioDeviceManager() { return &m_audioDeviceManager; }
|
||||||
|
|
||||||
uint32_t getDeviceSourceEnginesNumber() const { return m_deviceSourceEngines.size(); }
|
uint32_t getDeviceSourceEnginesNumber() const { return m_deviceSourceEngines.size(); }
|
||||||
@ -60,6 +64,10 @@ public:
|
|||||||
DSPDeviceSinkEngine *getDeviceSinkEngineByIndex(uint deviceIndex) { return m_deviceSinkEngines[deviceIndex]; }
|
DSPDeviceSinkEngine *getDeviceSinkEngineByIndex(uint deviceIndex) { return m_deviceSinkEngines[deviceIndex]; }
|
||||||
DSPDeviceSinkEngine *getDeviceSinkEngineByUID(uint uid);
|
DSPDeviceSinkEngine *getDeviceSinkEngineByUID(uint uid);
|
||||||
|
|
||||||
|
uint32_t getDeviceMIMOEnginesNumber() const { return m_deviceMIMOEngines.size(); }
|
||||||
|
DSPDeviceMIMOEngine *getDeviceMIMOEngineByIndex(uint deviceIndex) { return m_deviceMIMOEngines[deviceIndex]; }
|
||||||
|
DSPDeviceMIMOEngine *getDeviceMIMOEngineByUID(uint uid);
|
||||||
|
|
||||||
// Serial DV methods:
|
// Serial DV methods:
|
||||||
|
|
||||||
bool hasDVSerialSupport();
|
bool hasDVSerialSupport();
|
||||||
@ -83,6 +91,8 @@ private:
|
|||||||
uint m_deviceSourceEnginesUIDSequence;
|
uint m_deviceSourceEnginesUIDSequence;
|
||||||
std::vector<DSPDeviceSinkEngine*> m_deviceSinkEngines;
|
std::vector<DSPDeviceSinkEngine*> m_deviceSinkEngines;
|
||||||
uint m_deviceSinkEnginesUIDSequence;
|
uint m_deviceSinkEnginesUIDSequence;
|
||||||
|
std::vector<DSPDeviceMIMOEngine*> m_deviceMIMOEngines;
|
||||||
|
uint m_deviceMIMOEnginesUIDSequence;
|
||||||
AudioDeviceManager m_audioDeviceManager;
|
AudioDeviceManager m_audioDeviceManager;
|
||||||
int m_audioInputDeviceIndex;
|
int m_audioInputDeviceIndex;
|
||||||
int m_audioOutputDeviceIndex;
|
int m_audioOutputDeviceIndex;
|
||||||
|
@ -44,6 +44,9 @@ const QString PluginManager::m_remoteOutputDeviceTypeID = "sdrangel.samplesink.r
|
|||||||
const QString PluginManager::m_fileSinkHardwareID = "FileSink";
|
const QString PluginManager::m_fileSinkHardwareID = "FileSink";
|
||||||
const QString PluginManager::m_fileSinkDeviceTypeID = "sdrangel.samplesink.filesink";
|
const QString PluginManager::m_fileSinkDeviceTypeID = "sdrangel.samplesink.filesink";
|
||||||
|
|
||||||
|
const QString PluginManager::m_testMIMOHardwareID = "TestMI";
|
||||||
|
const QString PluginManager::m_testMIMODeviceTypeID = "sdrangel.samplemimo.testmi";
|
||||||
|
|
||||||
PluginManager::PluginManager(QObject* parent) :
|
PluginManager::PluginManager(QObject* parent) :
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
m_pluginAPI(this)
|
m_pluginAPI(this)
|
||||||
|
@ -84,6 +84,7 @@ public:
|
|||||||
|
|
||||||
static const QString& getFileSourceDeviceId() { return m_fileSourceDeviceTypeID; }
|
static const QString& getFileSourceDeviceId() { return m_fileSourceDeviceTypeID; }
|
||||||
static const QString& getFileSinkDeviceId() { return m_fileSinkDeviceTypeID; }
|
static const QString& getFileSinkDeviceId() { return m_fileSinkDeviceTypeID; }
|
||||||
|
static const QString& getTestMIMODeviceId() { return m_testMIMODeviceTypeID; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct SamplingDevice { //!< This is the device registration
|
struct SamplingDevice { //!< This is the device registration
|
||||||
@ -138,6 +139,10 @@ private:
|
|||||||
static const QString m_fileSinkHardwareID; //!< FileSource source hardware ID
|
static const QString m_fileSinkHardwareID; //!< FileSource source hardware ID
|
||||||
static const QString m_fileSinkDeviceTypeID; //!< FileSink sink plugin ID
|
static const QString m_fileSinkDeviceTypeID; //!< FileSink sink plugin ID
|
||||||
|
|
||||||
|
// "Local" sample MIMO device IDs
|
||||||
|
static const QString m_testMIMOHardwareID; //!< Test MIMO hardware ID
|
||||||
|
static const QString m_testMIMODeviceTypeID; //!< Test MIMO plugin ID
|
||||||
|
|
||||||
void loadPluginsDir(const QDir& dir);
|
void loadPluginsDir(const QDir& dir);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
<file>webapi/doc/swagger/include/SSBMod.yaml</file>
|
<file>webapi/doc/swagger/include/SSBMod.yaml</file>
|
||||||
<file>webapi/doc/swagger/include/Structs.yaml</file>
|
<file>webapi/doc/swagger/include/Structs.yaml</file>
|
||||||
<file>webapi/doc/swagger/include/TestSource.yaml</file>
|
<file>webapi/doc/swagger/include/TestSource.yaml</file>
|
||||||
|
<file>webapi/doc/swagger/include/TestMI.yaml</file>
|
||||||
<file>webapi/doc/swagger/include/UDPSource.yaml</file>
|
<file>webapi/doc/swagger/include/UDPSource.yaml</file>
|
||||||
<file>webapi/doc/swagger/include/UDPSink.yaml</file>
|
<file>webapi/doc/swagger/include/UDPSink.yaml</file>
|
||||||
<file>webapi/doc/swagger/include/WFMDemod.yaml</file>
|
<file>webapi/doc/swagger/include/WFMDemod.yaml</file>
|
||||||
|
@ -2335,8 +2335,8 @@ margin-bottom: 20px;
|
|||||||
"testSourceSettings" : {
|
"testSourceSettings" : {
|
||||||
"$ref" : "#/definitions/TestSourceSettings"
|
"$ref" : "#/definitions/TestSourceSettings"
|
||||||
},
|
},
|
||||||
"testSourceMISettings" : {
|
"testMISettings" : {
|
||||||
"$ref" : "#/definitions/TestSourceMISettings"
|
"$ref" : "#/definitions/TestMISettings"
|
||||||
},
|
},
|
||||||
"xtrxInputSettings" : {
|
"xtrxInputSettings" : {
|
||||||
"$ref" : "#/definitions/XtrxInputSettings"
|
"$ref" : "#/definitions/XtrxInputSettings"
|
||||||
@ -5210,7 +5210,7 @@ margin-bottom: 20px;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
defs.TestSourceMISettings = {
|
defs.TestMISettings = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"centerFrequency" : {
|
"centerFrequency" : {
|
||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
@ -25080,7 +25080,7 @@ except ApiException as e:
|
|||||||
</div>
|
</div>
|
||||||
<div id="generator">
|
<div id="generator">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
Generated 2019-05-18T03:33:39.922+02:00
|
Generated 2019-05-18T10:36:57.027+02:00
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
TestSourceMISettings:
|
TestMISettings:
|
||||||
description: TestSourceMI
|
description: TestSourceMI
|
||||||
properties:
|
properties:
|
||||||
centerFrequency:
|
centerFrequency:
|
@ -1830,8 +1830,8 @@ definitions:
|
|||||||
$ref: "/doc/swagger/include/SoapySDR.yaml#/SoapySDROutputSettings"
|
$ref: "/doc/swagger/include/SoapySDR.yaml#/SoapySDROutputSettings"
|
||||||
testSourceSettings:
|
testSourceSettings:
|
||||||
$ref: "/doc/swagger/include/TestSource.yaml#/TestSourceSettings"
|
$ref: "/doc/swagger/include/TestSource.yaml#/TestSourceSettings"
|
||||||
testSourceMISettings:
|
testMISettings:
|
||||||
$ref: "/doc/swagger/include/TestSourceMI.yaml#/TestSourceMISettings"
|
$ref: "/doc/swagger/include/TestMI.yaml#/TestMISettings"
|
||||||
xtrxInputSettings:
|
xtrxInputSettings:
|
||||||
$ref: "/doc/swagger/include/Xtrx.yaml#/XtrxInputSettings"
|
$ref: "/doc/swagger/include/Xtrx.yaml#/XtrxInputSettings"
|
||||||
xtrxOutputSettings:
|
xtrxOutputSettings:
|
||||||
|
@ -364,7 +364,6 @@ void WebAPIRequestMapper::instanceAudioService(qtwebapp::HttpRequest& request, q
|
|||||||
|
|
||||||
void WebAPIRequestMapper::instanceAudioInputParametersService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
|
void WebAPIRequestMapper::instanceAudioInputParametersService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
|
||||||
{
|
{
|
||||||
// TODO
|
|
||||||
SWGSDRangel::SWGErrorResponse errorResponse;
|
SWGSDRangel::SWGErrorResponse errorResponse;
|
||||||
response.setHeader("Content-Type", "application/json");
|
response.setHeader("Content-Type", "application/json");
|
||||||
response.setHeader("Access-Control-Allow-Origin", "*");
|
response.setHeader("Access-Control-Allow-Origin", "*");
|
||||||
|
@ -55,8 +55,10 @@
|
|||||||
#include "dsp/dspcommands.h"
|
#include "dsp/dspcommands.h"
|
||||||
#include "dsp/devicesamplesource.h"
|
#include "dsp/devicesamplesource.h"
|
||||||
#include "dsp/devicesamplesink.h"
|
#include "dsp/devicesamplesink.h"
|
||||||
|
#include "dsp/devicesamplemimo.h"
|
||||||
#include "dsp/dspdevicesourceengine.h"
|
#include "dsp/dspdevicesourceengine.h"
|
||||||
#include "dsp/dspdevicesinkengine.h"
|
#include "dsp/dspdevicesinkengine.h"
|
||||||
|
#include "dsp/dspdevicemimoengine.h"
|
||||||
#include "plugin/pluginapi.h"
|
#include "plugin/pluginapi.h"
|
||||||
#include "gui/glspectrum.h"
|
#include "gui/glspectrum.h"
|
||||||
#include "gui/glspectrumgui.h"
|
#include "gui/glspectrumgui.h"
|
||||||
@ -219,6 +221,7 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse
|
|||||||
qWarning("MainWindow::MainWindow: could not register resource file %s/%s", qPrintable(applicationDirPath), "sdrbase.rcc");
|
qWarning("MainWindow::MainWindow: could not register resource file %s/%s", qPrintable(applicationDirPath), "sdrbase.rcc");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_mimoEnabled = parser.getMIMOSupport();
|
||||||
m_apiAdapter = new WebAPIAdapterGUI(*this);
|
m_apiAdapter = new WebAPIAdapterGUI(*this);
|
||||||
m_requestMapper = new WebAPIRequestMapper(this);
|
m_requestMapper = new WebAPIRequestMapper(this);
|
||||||
m_requestMapper->setAdapter(m_apiAdapter);
|
m_requestMapper->setAdapter(m_apiAdapter);
|
||||||
@ -399,6 +402,86 @@ void MainWindow::addSinkDevice()
|
|||||||
setDeviceGUI(deviceTabIndex, gui, m_deviceUIs.back()->m_deviceAPI->getSamplingDeviceDisplayName(), false);
|
setDeviceGUI(deviceTabIndex, gui, m_deviceUIs.back()->m_deviceAPI->getSamplingDeviceDisplayName(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::addMIMODevice()
|
||||||
|
{
|
||||||
|
DSPDeviceMIMOEngine *dspDeviceMIMOEngine = m_dspEngine->addDeviceMIMOEngine();
|
||||||
|
dspDeviceMIMOEngine->start();
|
||||||
|
|
||||||
|
uint dspDeviceMIMOEngineUID = dspDeviceMIMOEngine->getUID();
|
||||||
|
char uidCStr[16];
|
||||||
|
sprintf(uidCStr, "UID:%d", dspDeviceMIMOEngineUID);
|
||||||
|
|
||||||
|
int deviceTabIndex = m_deviceUIs.size();
|
||||||
|
m_deviceUIs.push_back(new DeviceUISet(deviceTabIndex, 2, m_masterTimer));
|
||||||
|
m_deviceUIs.back()->m_deviceSourceEngine = nullptr;
|
||||||
|
m_deviceUIs.back()->m_deviceSinkEngine = nullptr;
|
||||||
|
m_deviceUIs.back()->m_deviceMIMOEngine = dspDeviceMIMOEngine;
|
||||||
|
|
||||||
|
char tabNameCStr[16];
|
||||||
|
sprintf(tabNameCStr, "M%d", deviceTabIndex);
|
||||||
|
|
||||||
|
DeviceAPI *deviceAPI = new DeviceAPI(DeviceAPI::StreamSingleTx, deviceTabIndex, nullptr, nullptr, dspDeviceMIMOEngine);
|
||||||
|
|
||||||
|
m_deviceUIs.back()->m_deviceAPI = deviceAPI;
|
||||||
|
m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(m_pluginManager);
|
||||||
|
QComboBox *channelSelector = m_deviceUIs.back()->m_samplingDeviceControl->getChannelSelector();
|
||||||
|
// Add Rx channels
|
||||||
|
QList<QString> rxChannelNames;
|
||||||
|
m_pluginManager->listRxChannels(rxChannelNames);
|
||||||
|
QStringList rxChannelNamesList(rxChannelNames);
|
||||||
|
channelSelector->addItems(rxChannelNamesList);
|
||||||
|
channelSelector->insertSeparator(channelSelector->count());
|
||||||
|
// Add Tx channels
|
||||||
|
QList<QString> txChannelNames;
|
||||||
|
m_pluginManager->listTxChannels(txChannelNames);
|
||||||
|
QStringList txChannelNamesList(txChannelNames);
|
||||||
|
channelSelector->addItems(txChannelNamesList);
|
||||||
|
// TODO: add MIMO channels
|
||||||
|
|
||||||
|
connect(m_deviceUIs.back()->m_samplingDeviceControl->getAddChannelButton(), SIGNAL(clicked(bool)), this, SLOT(channelAddClicked(bool)));
|
||||||
|
|
||||||
|
dspDeviceMIMOEngine->addSpectrumSink(m_deviceUIs.back()->m_spectrumVis);
|
||||||
|
ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, tabNameCStr);
|
||||||
|
ui->tabSpectraGUI->addTab(m_deviceUIs.back()->m_spectrumGUI, tabNameCStr);
|
||||||
|
ui->tabChannels->addTab(m_deviceUIs.back()->m_channelWindow, tabNameCStr);
|
||||||
|
|
||||||
|
connect(m_deviceUIs.back()->m_samplingDeviceControl, SIGNAL(changed()), this, SLOT(sampleMIMOChanged()));
|
||||||
|
|
||||||
|
ui->tabInputsSelect->addTab(m_deviceUIs.back()->m_samplingDeviceControl, tabNameCStr);
|
||||||
|
ui->tabInputsSelect->setTabToolTip(deviceTabIndex, QString(uidCStr));
|
||||||
|
|
||||||
|
// create a test MIMO by default
|
||||||
|
int testMIMODeviceIndex = DeviceEnumerator::instance()->getTestMIMODeviceIndex();
|
||||||
|
const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getMIMOSamplingDevice(testMIMODeviceIndex);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setHardwareId(samplingDevice->hardwareId);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceId(samplingDevice->id);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getMIMOPluginInterface(testMIMODeviceIndex));
|
||||||
|
|
||||||
|
m_deviceUIs.back()->m_samplingDeviceControl->setSelectedDeviceIndex(testMIMODeviceIndex);
|
||||||
|
|
||||||
|
// delete previous plugin GUI if it exists
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI(
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getSamplingDevicePluginInstanceGUI());
|
||||||
|
|
||||||
|
DeviceSampleMIMO *mimo = m_deviceUIs.back()->m_deviceAPI->getPluginInterface()->createSampleMIMOPluginInstanceMIMO(
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getSamplingDeviceId(), m_deviceUIs.back()->m_deviceAPI);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setSampleMIMO(mimo);
|
||||||
|
QWidget *gui;
|
||||||
|
PluginInstanceGUI *pluginUI = m_deviceUIs.back()->m_deviceAPI->getPluginInterface()->createSampleMIMOPluginInstanceGUI(
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getSamplingDeviceId(),
|
||||||
|
&gui,
|
||||||
|
m_deviceUIs.back());
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getSampleMIMO()->setMessageQueueToGUI(pluginUI->getInputMessageQueue());
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->setSamplingDevicePluginInstanceGUI(pluginUI);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getSampleMIMO()->init();
|
||||||
|
setDeviceGUI(deviceTabIndex, gui, m_deviceUIs.back()->m_deviceAPI->getSamplingDeviceDisplayName(), 2);
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::removeLastDevice()
|
void MainWindow::removeLastDevice()
|
||||||
{
|
{
|
||||||
if (m_deviceUIs.back()->m_deviceSourceEngine) // source tab
|
if (m_deviceUIs.back()->m_deviceSourceEngine) // source tab
|
||||||
@ -485,6 +568,47 @@ void MainWindow::removeLastDevice()
|
|||||||
|
|
||||||
delete sinkAPI;
|
delete sinkAPI;
|
||||||
}
|
}
|
||||||
|
else if (m_deviceUIs.back()->m_deviceMIMOEngine) // MIMO tab
|
||||||
|
{
|
||||||
|
DSPDeviceMIMOEngine *lastDeviceEngine = m_deviceUIs.back()->m_deviceMIMOEngine;
|
||||||
|
lastDeviceEngine->stopProcess();
|
||||||
|
lastDeviceEngine->removeSpectrumSink(m_deviceUIs.back()->m_spectrumVis);
|
||||||
|
|
||||||
|
ui->tabSpectraGUI->removeTab(ui->tabSpectraGUI->count() - 1);
|
||||||
|
ui->tabSpectra->removeTab(ui->tabSpectra->count() - 1);
|
||||||
|
|
||||||
|
// deletes old UI and output object
|
||||||
|
m_deviceUIs.back()->freeRxChannels();
|
||||||
|
m_deviceUIs.back()->freeTxChannels();
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getSampleMIMO()->setMessageQueueToGUI(nullptr); // have sink stop sending messages to the GUI
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getPluginInterface()->deleteSampleMIMOPluginInstanceGUI(
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getSamplingDevicePluginInstanceGUI());
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->resetSamplingDeviceId();
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getPluginInterface()->deleteSampleMIMOPluginInstanceMIMO(
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getSampleMIMO());
|
||||||
|
m_deviceUIs.back()->m_samplingDeviceControl->removeSelectedDeviceIndex(); // This releases the device in the device list
|
||||||
|
|
||||||
|
ui->tabChannels->removeTab(ui->tabChannels->count() - 1);
|
||||||
|
ui->tabInputsSelect->removeTab(ui->tabInputsSelect->count() - 1);
|
||||||
|
|
||||||
|
m_deviceWidgetTabs.removeLast();
|
||||||
|
ui->tabInputsView->clear();
|
||||||
|
|
||||||
|
for (int i = 0; i < m_deviceWidgetTabs.size(); i++)
|
||||||
|
{
|
||||||
|
qDebug("MainWindow::removeLastDevice: adding back tab for %s", m_deviceWidgetTabs[i].displayName.toStdString().c_str());
|
||||||
|
ui->tabInputsView->addTab(m_deviceWidgetTabs[i].gui, m_deviceWidgetTabs[i].tabName);
|
||||||
|
ui->tabInputsView->setTabToolTip(i, m_deviceWidgetTabs[i].displayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
DeviceAPI *mimoAPI = m_deviceUIs.back()->m_deviceAPI;
|
||||||
|
delete m_deviceUIs.back();
|
||||||
|
|
||||||
|
lastDeviceEngine->stop();
|
||||||
|
m_dspEngine->removeLastDeviceMIMOEngine();
|
||||||
|
|
||||||
|
delete mimoAPI;
|
||||||
|
}
|
||||||
|
|
||||||
m_deviceUIs.pop_back();
|
m_deviceUIs.pop_back();
|
||||||
}
|
}
|
||||||
@ -522,27 +646,23 @@ void MainWindow::addViewAction(QAction* action)
|
|||||||
ui->menu_Window->addAction(action);
|
ui->menu_Window->addAction(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::setDeviceGUI(int deviceTabIndex, QWidget* gui, const QString& deviceDisplayName, bool sourceDevice)
|
void MainWindow::setDeviceGUI(int deviceTabIndex, QWidget* gui, const QString& deviceDisplayName, int deviceType)
|
||||||
{
|
{
|
||||||
char tabNameCStr[16];
|
char tabNameCStr[16];
|
||||||
|
|
||||||
if (sourceDevice)
|
if (deviceType == 0) {
|
||||||
{
|
|
||||||
sprintf(tabNameCStr, "R%d", deviceTabIndex);
|
sprintf(tabNameCStr, "R%d", deviceTabIndex);
|
||||||
}
|
} else if (deviceType == 1) {
|
||||||
else
|
|
||||||
{
|
|
||||||
sprintf(tabNameCStr, "T%d", deviceTabIndex);
|
sprintf(tabNameCStr, "T%d", deviceTabIndex);
|
||||||
|
} else if (deviceType == 2) {
|
||||||
|
sprintf(tabNameCStr, "M%d", deviceTabIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug("MainWindow::setDeviceGUI: insert %s tab at %d", sourceDevice ? "Rx" : "Tx", deviceTabIndex);
|
qDebug("MainWindow::setDeviceGUI: insert device type %d tab at %d", deviceType, deviceTabIndex);
|
||||||
|
|
||||||
if (deviceTabIndex < m_deviceWidgetTabs.size())
|
if (deviceTabIndex < m_deviceWidgetTabs.size()) {
|
||||||
{
|
|
||||||
m_deviceWidgetTabs[deviceTabIndex] = {gui, deviceDisplayName, QString(tabNameCStr)};
|
m_deviceWidgetTabs[deviceTabIndex] = {gui, deviceDisplayName, QString(tabNameCStr)};
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
m_deviceWidgetTabs.append({gui, deviceDisplayName, QString(tabNameCStr)});
|
m_deviceWidgetTabs.append({gui, deviceDisplayName, QString(tabNameCStr)});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -821,7 +941,9 @@ bool MainWindow::handleMessage(const Message& cmd)
|
|||||||
addSinkDevice();
|
addSinkDevice();
|
||||||
} else if (direction == 0) { // Single stream Rx
|
} else if (direction == 0) { // Single stream Rx
|
||||||
addSourceDevice(-1); // create with file source device by default
|
addSourceDevice(-1); // create with file source device by default
|
||||||
} // other device types not (yet) supported
|
} else if (direction == 2) { // MIMO
|
||||||
|
addMIMODevice();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -844,7 +966,9 @@ bool MainWindow::handleMessage(const Message& cmd)
|
|||||||
sampleSinkChanged();
|
sampleSinkChanged();
|
||||||
} else if (notif.getDeviceType() == 0) {
|
} else if (notif.getDeviceType() == 0) {
|
||||||
sampleSourceChanged();
|
sampleSourceChanged();
|
||||||
} // TODO: for MIMO
|
} else if (notif.getDeviceType() == 2) {
|
||||||
|
sampleMIMOChanged();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1672,13 +1796,63 @@ void MainWindow::sampleSinkChanged()
|
|||||||
deviceUI);
|
deviceUI);
|
||||||
deviceUI->m_deviceAPI->getSampleSink()->setMessageQueueToGUI(pluginUI->getInputMessageQueue());
|
deviceUI->m_deviceAPI->getSampleSink()->setMessageQueueToGUI(pluginUI->getInputMessageQueue());
|
||||||
deviceUI->m_deviceAPI->setSamplingDevicePluginInstanceGUI(pluginUI);
|
deviceUI->m_deviceAPI->setSamplingDevicePluginInstanceGUI(pluginUI);
|
||||||
setDeviceGUI(currentSinkTabIndex, gui, deviceUI->m_deviceAPI->getSamplingDeviceDisplayName(), false);
|
setDeviceGUI(currentSinkTabIndex, gui, deviceUI->m_deviceAPI->getSamplingDeviceDisplayName(), 1);
|
||||||
m_deviceUIs.back()->m_deviceAPI->getSampleSink()->init();
|
m_deviceUIs.back()->m_deviceAPI->getSampleSink()->init();
|
||||||
|
|
||||||
deviceUI->m_deviceAPI->loadSamplingDeviceSettings(m_settings.getWorkingPreset()); // load new API settings
|
deviceUI->m_deviceAPI->loadSamplingDeviceSettings(m_settings.getWorkingPreset()); // load new API settings
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::sampleMIMOChanged()
|
||||||
|
{
|
||||||
|
// Do it in the currently selected source tab
|
||||||
|
int currentMIMOTabIndex = ui->tabInputsSelect->currentIndex();
|
||||||
|
|
||||||
|
if (currentMIMOTabIndex >= 0)
|
||||||
|
{
|
||||||
|
qDebug("MainWindow::sampleMIMOChanged: tab at %d", currentMIMOTabIndex);
|
||||||
|
DeviceUISet *deviceUI = m_deviceUIs[currentMIMOTabIndex];
|
||||||
|
deviceUI->m_deviceAPI->saveSamplingDeviceSettings(m_settings.getWorkingPreset()); // save old API settings
|
||||||
|
deviceUI->m_deviceAPI->stopDeviceEngine();
|
||||||
|
|
||||||
|
// deletes old UI and output object
|
||||||
|
deviceUI->m_deviceAPI->getSampleMIMO()->setMessageQueueToGUI(nullptr); // have sink stop sending messages to the GUI
|
||||||
|
deviceUI->m_deviceAPI->getPluginInterface()->deleteSampleMIMOPluginInstanceGUI(
|
||||||
|
deviceUI->m_deviceAPI->getSamplingDevicePluginInstanceGUI());
|
||||||
|
deviceUI->m_deviceAPI->resetSamplingDeviceId();
|
||||||
|
deviceUI->m_deviceAPI->getPluginInterface()->deleteSampleMIMOPluginInstanceMIMO(
|
||||||
|
deviceUI->m_deviceAPI->getSampleMIMO());
|
||||||
|
|
||||||
|
const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getMIMOSamplingDevice(
|
||||||
|
deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex());
|
||||||
|
deviceUI->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence);
|
||||||
|
deviceUI->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems);
|
||||||
|
deviceUI->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex);
|
||||||
|
deviceUI->m_deviceAPI->setHardwareId(samplingDevice->hardwareId);
|
||||||
|
deviceUI->m_deviceAPI->setSamplingDeviceId(samplingDevice->id);
|
||||||
|
deviceUI->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial);
|
||||||
|
deviceUI->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName);
|
||||||
|
deviceUI->m_deviceAPI->setSamplingDevicePluginInterface(
|
||||||
|
DeviceEnumerator::instance()->getMIMOPluginInterface(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex()));
|
||||||
|
|
||||||
|
// constructs new GUI and output object
|
||||||
|
DeviceSampleMIMO *mimo = deviceUI->m_deviceAPI->getPluginInterface()->createSampleMIMOPluginInstanceMIMO(
|
||||||
|
deviceUI->m_deviceAPI->getSamplingDeviceId(), deviceUI->m_deviceAPI);
|
||||||
|
deviceUI->m_deviceAPI->setSampleMIMO(mimo);
|
||||||
|
QWidget *gui;
|
||||||
|
PluginInstanceGUI *pluginUI = deviceUI->m_deviceAPI->getPluginInterface()->createSampleMIMOPluginInstanceGUI(
|
||||||
|
deviceUI->m_deviceAPI->getSamplingDeviceId(),
|
||||||
|
&gui,
|
||||||
|
deviceUI);
|
||||||
|
deviceUI->m_deviceAPI->getSampleMIMO()->setMessageQueueToGUI(pluginUI->getInputMessageQueue());
|
||||||
|
deviceUI->m_deviceAPI->setSamplingDevicePluginInstanceGUI(pluginUI);
|
||||||
|
setDeviceGUI(currentMIMOTabIndex, gui, deviceUI->m_deviceAPI->getSamplingDeviceDisplayName(), 2);
|
||||||
|
m_deviceUIs.back()->m_deviceAPI->getSampleMIMO()->init();
|
||||||
|
|
||||||
|
deviceUI->m_deviceAPI->loadSamplingDeviceSettings(m_settings.getWorkingPreset()); // load new API settings
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::channelAddClicked(bool checked)
|
void MainWindow::channelAddClicked(bool checked)
|
||||||
{
|
{
|
||||||
(void) checked;
|
(void) checked;
|
||||||
@ -1718,6 +1892,15 @@ void MainWindow::on_action_addSinkDevice_triggered()
|
|||||||
addSinkDevice();
|
addSinkDevice();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_action_addMIMODevice_triggered()
|
||||||
|
{
|
||||||
|
if (m_mimoEnabled) {
|
||||||
|
addMIMODevice();
|
||||||
|
} else {
|
||||||
|
QMessageBox::information(this, tr("Message"), tr("MIMO operation not supported yet"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::on_action_removeLastDevice_triggered()
|
void MainWindow::on_action_removeLastDevice_triggered()
|
||||||
{
|
{
|
||||||
if (m_deviceUIs.size() > 1)
|
if (m_deviceUIs.size() > 1)
|
||||||
|
@ -77,7 +77,7 @@ public:
|
|||||||
void addViewAction(QAction* action);
|
void addViewAction(QAction* action);
|
||||||
|
|
||||||
void addChannelRollup(int deviceTabIndex, QWidget* widget);
|
void addChannelRollup(int deviceTabIndex, QWidget* widget);
|
||||||
void setDeviceGUI(int deviceTabIndex, QWidget* gui, const QString& deviceDisplayName, bool sourceDevice = true);
|
void setDeviceGUI(int deviceTabIndex, QWidget* gui, const QString& deviceDisplayName, int deviceType = 0);
|
||||||
|
|
||||||
const QTimer& getMasterTimer() const { return m_masterTimer; }
|
const QTimer& getMasterTimer() const { return m_masterTimer; }
|
||||||
const MainSettings& getMainSettings() const { return m_settings; }
|
const MainSettings& getMainSettings() const { return m_settings; }
|
||||||
@ -330,6 +330,7 @@ private:
|
|||||||
WebAPIAdapterGUI *m_apiAdapter;
|
WebAPIAdapterGUI *m_apiAdapter;
|
||||||
QString m_apiHost;
|
QString m_apiHost;
|
||||||
int m_apiPort;
|
int m_apiPort;
|
||||||
|
bool m_mimoEnabled;
|
||||||
|
|
||||||
CommandKeyReceiver *m_commandKeyReceiver;
|
CommandKeyReceiver *m_commandKeyReceiver;
|
||||||
|
|
||||||
@ -347,6 +348,7 @@ private:
|
|||||||
|
|
||||||
void addSourceDevice(int deviceIndex);
|
void addSourceDevice(int deviceIndex);
|
||||||
void addSinkDevice();
|
void addSinkDevice();
|
||||||
|
void addMIMODevice();
|
||||||
void removeLastDevice();
|
void removeLastDevice();
|
||||||
void deleteChannel(int deviceSetIndex, int channelIndex);
|
void deleteChannel(int deviceSetIndex, int channelIndex);
|
||||||
|
|
||||||
@ -382,11 +384,13 @@ private slots:
|
|||||||
void on_action_My_Position_triggered();
|
void on_action_My_Position_triggered();
|
||||||
void sampleSourceChanged();
|
void sampleSourceChanged();
|
||||||
void sampleSinkChanged();
|
void sampleSinkChanged();
|
||||||
|
void sampleMIMOChanged();
|
||||||
void channelAddClicked(bool checked);
|
void channelAddClicked(bool checked);
|
||||||
void on_action_Loaded_Plugins_triggered();
|
void on_action_Loaded_Plugins_triggered();
|
||||||
void on_action_About_triggered();
|
void on_action_About_triggered();
|
||||||
void on_action_addSourceDevice_triggered();
|
void on_action_addSourceDevice_triggered();
|
||||||
void on_action_addSinkDevice_triggered();
|
void on_action_addSinkDevice_triggered();
|
||||||
|
void on_action_addMIMODevice_triggered();
|
||||||
void on_action_removeLastDevice_triggered();
|
void on_action_removeLastDevice_triggered();
|
||||||
void on_action_Exit_triggered();
|
void on_action_Exit_triggered();
|
||||||
void tabInputViewIndexChanged();
|
void tabInputViewIndexChanged();
|
||||||
|
@ -64,7 +64,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1012</width>
|
<width>1012</width>
|
||||||
<height>19</height>
|
<height>20</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menu_File">
|
<widget class="QMenu" name="menu_File">
|
||||||
@ -79,6 +79,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<addaction name="action_addSourceDevice"/>
|
<addaction name="action_addSourceDevice"/>
|
||||||
<addaction name="action_addSinkDevice"/>
|
<addaction name="action_addSinkDevice"/>
|
||||||
|
<addaction name="action_addMIMODevice"/>
|
||||||
<addaction name="action_removeLastDevice"/>
|
<addaction name="action_removeLastDevice"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menu_View">
|
<widget class="QMenu" name="menu_View">
|
||||||
@ -914,6 +915,17 @@
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="action_addMIMODevice">
|
||||||
|
<property name="text">
|
||||||
|
<string>Add MIMO device set</string>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Liberation Sans</family>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
<zorder>presetDock</zorder>
|
<zorder>presetDock</zorder>
|
||||||
<zorder>channelDock</zorder>
|
<zorder>channelDock</zorder>
|
||||||
<zorder>commandsDock</zorder>
|
<zorder>commandsDock</zorder>
|
||||||
|
51
swagger/sdrangel/api/swagger/include/TestMI.yaml
Normal file
51
swagger/sdrangel/api/swagger/include/TestMI.yaml
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
TestMISettings:
|
||||||
|
description: TestSourceMI
|
||||||
|
properties:
|
||||||
|
centerFrequency:
|
||||||
|
type: integer
|
||||||
|
format: uint64
|
||||||
|
frequencyShift:
|
||||||
|
type: integer
|
||||||
|
sampleRate:
|
||||||
|
type: integer
|
||||||
|
log2Decim:
|
||||||
|
type: integer
|
||||||
|
fcPos:
|
||||||
|
type: integer
|
||||||
|
sampleSizeIndex:
|
||||||
|
type: integer
|
||||||
|
amplitudeBits:
|
||||||
|
type: integer
|
||||||
|
autoCorrOptions:
|
||||||
|
type: integer
|
||||||
|
modulation:
|
||||||
|
type: integer
|
||||||
|
modulationTone:
|
||||||
|
type: integer
|
||||||
|
amModulation:
|
||||||
|
type: integer
|
||||||
|
fmDeviation:
|
||||||
|
type: integer
|
||||||
|
dcFactor:
|
||||||
|
type: number
|
||||||
|
format: float
|
||||||
|
iFactor:
|
||||||
|
type: number
|
||||||
|
format: float
|
||||||
|
qFactor:
|
||||||
|
type: number
|
||||||
|
format: float
|
||||||
|
phaseImbalance:
|
||||||
|
type: number
|
||||||
|
format: float
|
||||||
|
fileRecordName:
|
||||||
|
type: string
|
||||||
|
useReverseAPI:
|
||||||
|
description: Synchronize with reverse API (1 for yes, 0 for no)
|
||||||
|
type: integer
|
||||||
|
reverseAPIAddress:
|
||||||
|
type: string
|
||||||
|
reverseAPIPort:
|
||||||
|
type: integer
|
||||||
|
reverseAPIDeviceIndex:
|
||||||
|
type: integer
|
@ -1830,8 +1830,8 @@ definitions:
|
|||||||
$ref: "http://localhost:8081/api/swagger/include/SoapySDR.yaml#/SoapySDROutputSettings"
|
$ref: "http://localhost:8081/api/swagger/include/SoapySDR.yaml#/SoapySDROutputSettings"
|
||||||
testSourceSettings:
|
testSourceSettings:
|
||||||
$ref: "http://localhost:8081/api/swagger/include/TestSource.yaml#/TestSourceSettings"
|
$ref: "http://localhost:8081/api/swagger/include/TestSource.yaml#/TestSourceSettings"
|
||||||
testSourceMISettings:
|
testMISettings:
|
||||||
$ref: "http://localhost:8081/api/swagger/include/TestSourceMI.yaml#/TestSourceMISettings"
|
$ref: "http://localhost:8081/api/swagger/include/TestMI.yaml#/TestMISettings"
|
||||||
xtrxInputSettings:
|
xtrxInputSettings:
|
||||||
$ref: "http://localhost:8081/api/swagger/include/Xtrx.yaml#/XtrxInputSettings"
|
$ref: "http://localhost:8081/api/swagger/include/Xtrx.yaml#/XtrxInputSettings"
|
||||||
xtrxOutputSettings:
|
xtrxOutputSettings:
|
||||||
|
@ -2335,8 +2335,8 @@ margin-bottom: 20px;
|
|||||||
"testSourceSettings" : {
|
"testSourceSettings" : {
|
||||||
"$ref" : "#/definitions/TestSourceSettings"
|
"$ref" : "#/definitions/TestSourceSettings"
|
||||||
},
|
},
|
||||||
"testSourceMISettings" : {
|
"testMISettings" : {
|
||||||
"$ref" : "#/definitions/TestSourceMISettings"
|
"$ref" : "#/definitions/TestMISettings"
|
||||||
},
|
},
|
||||||
"xtrxInputSettings" : {
|
"xtrxInputSettings" : {
|
||||||
"$ref" : "#/definitions/XtrxInputSettings"
|
"$ref" : "#/definitions/XtrxInputSettings"
|
||||||
@ -5210,7 +5210,7 @@ margin-bottom: 20px;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
defs.TestSourceMISettings = {
|
defs.TestMISettings = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"centerFrequency" : {
|
"centerFrequency" : {
|
||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
@ -25080,7 +25080,7 @@ except ApiException as e:
|
|||||||
</div>
|
</div>
|
||||||
<div id="generator">
|
<div id="generator">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
Generated 2019-05-18T03:33:39.922+02:00
|
Generated 2019-05-18T10:36:57.027+02:00
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -84,8 +84,8 @@ SWGDeviceSettings::SWGDeviceSettings() {
|
|||||||
m_soapy_sdr_output_settings_isSet = false;
|
m_soapy_sdr_output_settings_isSet = false;
|
||||||
test_source_settings = nullptr;
|
test_source_settings = nullptr;
|
||||||
m_test_source_settings_isSet = false;
|
m_test_source_settings_isSet = false;
|
||||||
test_source_mi_settings = nullptr;
|
test_mi_settings = nullptr;
|
||||||
m_test_source_mi_settings_isSet = false;
|
m_test_mi_settings_isSet = false;
|
||||||
xtrx_input_settings = nullptr;
|
xtrx_input_settings = nullptr;
|
||||||
m_xtrx_input_settings_isSet = false;
|
m_xtrx_input_settings_isSet = false;
|
||||||
xtrx_output_settings = nullptr;
|
xtrx_output_settings = nullptr;
|
||||||
@ -154,8 +154,8 @@ SWGDeviceSettings::init() {
|
|||||||
m_soapy_sdr_output_settings_isSet = false;
|
m_soapy_sdr_output_settings_isSet = false;
|
||||||
test_source_settings = new SWGTestSourceSettings();
|
test_source_settings = new SWGTestSourceSettings();
|
||||||
m_test_source_settings_isSet = false;
|
m_test_source_settings_isSet = false;
|
||||||
test_source_mi_settings = new SWGTestSourceMISettings();
|
test_mi_settings = new SWGTestMISettings();
|
||||||
m_test_source_mi_settings_isSet = false;
|
m_test_mi_settings_isSet = false;
|
||||||
xtrx_input_settings = new SWGXtrxInputSettings();
|
xtrx_input_settings = new SWGXtrxInputSettings();
|
||||||
m_xtrx_input_settings_isSet = false;
|
m_xtrx_input_settings_isSet = false;
|
||||||
xtrx_output_settings = new SWGXtrxOutputSettings();
|
xtrx_output_settings = new SWGXtrxOutputSettings();
|
||||||
@ -244,8 +244,8 @@ SWGDeviceSettings::cleanup() {
|
|||||||
if(test_source_settings != nullptr) {
|
if(test_source_settings != nullptr) {
|
||||||
delete test_source_settings;
|
delete test_source_settings;
|
||||||
}
|
}
|
||||||
if(test_source_mi_settings != nullptr) {
|
if(test_mi_settings != nullptr) {
|
||||||
delete test_source_mi_settings;
|
delete test_mi_settings;
|
||||||
}
|
}
|
||||||
if(xtrx_input_settings != nullptr) {
|
if(xtrx_input_settings != nullptr) {
|
||||||
delete xtrx_input_settings;
|
delete xtrx_input_settings;
|
||||||
@ -322,7 +322,7 @@ SWGDeviceSettings::fromJsonObject(QJsonObject &pJson) {
|
|||||||
|
|
||||||
::SWGSDRangel::setValue(&test_source_settings, pJson["testSourceSettings"], "SWGTestSourceSettings", "SWGTestSourceSettings");
|
::SWGSDRangel::setValue(&test_source_settings, pJson["testSourceSettings"], "SWGTestSourceSettings", "SWGTestSourceSettings");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&test_source_mi_settings, pJson["testSourceMISettings"], "SWGTestSourceMISettings", "SWGTestSourceMISettings");
|
::SWGSDRangel::setValue(&test_mi_settings, pJson["testMISettings"], "SWGTestMISettings", "SWGTestMISettings");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&xtrx_input_settings, pJson["xtrxInputSettings"], "SWGXtrxInputSettings", "SWGXtrxInputSettings");
|
::SWGSDRangel::setValue(&xtrx_input_settings, pJson["xtrxInputSettings"], "SWGXtrxInputSettings", "SWGXtrxInputSettings");
|
||||||
|
|
||||||
@ -428,8 +428,8 @@ SWGDeviceSettings::asJsonObject() {
|
|||||||
if((test_source_settings != nullptr) && (test_source_settings->isSet())){
|
if((test_source_settings != nullptr) && (test_source_settings->isSet())){
|
||||||
toJsonValue(QString("testSourceSettings"), test_source_settings, obj, QString("SWGTestSourceSettings"));
|
toJsonValue(QString("testSourceSettings"), test_source_settings, obj, QString("SWGTestSourceSettings"));
|
||||||
}
|
}
|
||||||
if((test_source_mi_settings != nullptr) && (test_source_mi_settings->isSet())){
|
if((test_mi_settings != nullptr) && (test_mi_settings->isSet())){
|
||||||
toJsonValue(QString("testSourceMISettings"), test_source_mi_settings, obj, QString("SWGTestSourceMISettings"));
|
toJsonValue(QString("testMISettings"), test_mi_settings, obj, QString("SWGTestMISettings"));
|
||||||
}
|
}
|
||||||
if((xtrx_input_settings != nullptr) && (xtrx_input_settings->isSet())){
|
if((xtrx_input_settings != nullptr) && (xtrx_input_settings->isSet())){
|
||||||
toJsonValue(QString("xtrxInputSettings"), xtrx_input_settings, obj, QString("SWGXtrxInputSettings"));
|
toJsonValue(QString("xtrxInputSettings"), xtrx_input_settings, obj, QString("SWGXtrxInputSettings"));
|
||||||
@ -721,14 +721,14 @@ SWGDeviceSettings::setTestSourceSettings(SWGTestSourceSettings* test_source_sett
|
|||||||
this->m_test_source_settings_isSet = true;
|
this->m_test_source_settings_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SWGTestSourceMISettings*
|
SWGTestMISettings*
|
||||||
SWGDeviceSettings::getTestSourceMiSettings() {
|
SWGDeviceSettings::getTestMiSettings() {
|
||||||
return test_source_mi_settings;
|
return test_mi_settings;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGDeviceSettings::setTestSourceMiSettings(SWGTestSourceMISettings* test_source_mi_settings) {
|
SWGDeviceSettings::setTestMiSettings(SWGTestMISettings* test_mi_settings) {
|
||||||
this->test_source_mi_settings = test_source_mi_settings;
|
this->test_mi_settings = test_mi_settings;
|
||||||
this->m_test_source_mi_settings_isSet = true;
|
this->m_test_mi_settings_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SWGXtrxInputSettings*
|
SWGXtrxInputSettings*
|
||||||
@ -784,7 +784,7 @@ SWGDeviceSettings::isSet(){
|
|||||||
if(soapy_sdr_input_settings != nullptr && soapy_sdr_input_settings->isSet()){ isObjectUpdated = true; break;}
|
if(soapy_sdr_input_settings != nullptr && soapy_sdr_input_settings->isSet()){ isObjectUpdated = true; break;}
|
||||||
if(soapy_sdr_output_settings != nullptr && soapy_sdr_output_settings->isSet()){ isObjectUpdated = true; break;}
|
if(soapy_sdr_output_settings != nullptr && soapy_sdr_output_settings->isSet()){ isObjectUpdated = true; break;}
|
||||||
if(test_source_settings != nullptr && test_source_settings->isSet()){ isObjectUpdated = true; break;}
|
if(test_source_settings != nullptr && test_source_settings->isSet()){ isObjectUpdated = true; break;}
|
||||||
if(test_source_mi_settings != nullptr && test_source_mi_settings->isSet()){ isObjectUpdated = true; break;}
|
if(test_mi_settings != nullptr && test_mi_settings->isSet()){ isObjectUpdated = true; break;}
|
||||||
if(xtrx_input_settings != nullptr && xtrx_input_settings->isSet()){ isObjectUpdated = true; break;}
|
if(xtrx_input_settings != nullptr && xtrx_input_settings->isSet()){ isObjectUpdated = true; break;}
|
||||||
if(xtrx_output_settings != nullptr && xtrx_output_settings->isSet()){ isObjectUpdated = true; break;}
|
if(xtrx_output_settings != nullptr && xtrx_output_settings->isSet()){ isObjectUpdated = true; break;}
|
||||||
}while(false);
|
}while(false);
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
#include "SWGSDRPlaySettings.h"
|
#include "SWGSDRPlaySettings.h"
|
||||||
#include "SWGSoapySDRInputSettings.h"
|
#include "SWGSoapySDRInputSettings.h"
|
||||||
#include "SWGSoapySDROutputSettings.h"
|
#include "SWGSoapySDROutputSettings.h"
|
||||||
#include "SWGTestSourceMISettings.h"
|
#include "SWGTestMISettings.h"
|
||||||
#include "SWGTestSourceSettings.h"
|
#include "SWGTestSourceSettings.h"
|
||||||
#include "SWGXtrxInputSettings.h"
|
#include "SWGXtrxInputSettings.h"
|
||||||
#include "SWGXtrxOutputSettings.h"
|
#include "SWGXtrxOutputSettings.h"
|
||||||
@ -154,8 +154,8 @@ public:
|
|||||||
SWGTestSourceSettings* getTestSourceSettings();
|
SWGTestSourceSettings* getTestSourceSettings();
|
||||||
void setTestSourceSettings(SWGTestSourceSettings* test_source_settings);
|
void setTestSourceSettings(SWGTestSourceSettings* test_source_settings);
|
||||||
|
|
||||||
SWGTestSourceMISettings* getTestSourceMiSettings();
|
SWGTestMISettings* getTestMiSettings();
|
||||||
void setTestSourceMiSettings(SWGTestSourceMISettings* test_source_mi_settings);
|
void setTestMiSettings(SWGTestMISettings* test_mi_settings);
|
||||||
|
|
||||||
SWGXtrxInputSettings* getXtrxInputSettings();
|
SWGXtrxInputSettings* getXtrxInputSettings();
|
||||||
void setXtrxInputSettings(SWGXtrxInputSettings* xtrx_input_settings);
|
void setXtrxInputSettings(SWGXtrxInputSettings* xtrx_input_settings);
|
||||||
@ -251,8 +251,8 @@ private:
|
|||||||
SWGTestSourceSettings* test_source_settings;
|
SWGTestSourceSettings* test_source_settings;
|
||||||
bool m_test_source_settings_isSet;
|
bool m_test_source_settings_isSet;
|
||||||
|
|
||||||
SWGTestSourceMISettings* test_source_mi_settings;
|
SWGTestMISettings* test_mi_settings;
|
||||||
bool m_test_source_mi_settings_isSet;
|
bool m_test_mi_settings_isSet;
|
||||||
|
|
||||||
SWGXtrxInputSettings* xtrx_input_settings;
|
SWGXtrxInputSettings* xtrx_input_settings;
|
||||||
bool m_xtrx_input_settings_isSet;
|
bool m_xtrx_input_settings_isSet;
|
||||||
|
@ -132,7 +132,7 @@
|
|||||||
#include "SWGSoapySDROutputSettings.h"
|
#include "SWGSoapySDROutputSettings.h"
|
||||||
#include "SWGSoapySDRReport.h"
|
#include "SWGSoapySDRReport.h"
|
||||||
#include "SWGSuccessResponse.h"
|
#include "SWGSuccessResponse.h"
|
||||||
#include "SWGTestSourceMISettings.h"
|
#include "SWGTestMISettings.h"
|
||||||
#include "SWGTestSourceSettings.h"
|
#include "SWGTestSourceSettings.h"
|
||||||
#include "SWGUDPSinkReport.h"
|
#include "SWGUDPSinkReport.h"
|
||||||
#include "SWGUDPSinkSettings.h"
|
#include "SWGUDPSinkSettings.h"
|
||||||
@ -504,8 +504,8 @@ namespace SWGSDRangel {
|
|||||||
if(QString("SWGSuccessResponse").compare(type) == 0) {
|
if(QString("SWGSuccessResponse").compare(type) == 0) {
|
||||||
return new SWGSuccessResponse();
|
return new SWGSuccessResponse();
|
||||||
}
|
}
|
||||||
if(QString("SWGTestSourceMISettings").compare(type) == 0) {
|
if(QString("SWGTestMISettings").compare(type) == 0) {
|
||||||
return new SWGTestSourceMISettings();
|
return new SWGTestMISettings();
|
||||||
}
|
}
|
||||||
if(QString("SWGTestSourceSettings").compare(type) == 0) {
|
if(QString("SWGTestSourceSettings").compare(type) == 0) {
|
||||||
return new SWGTestSourceSettings();
|
return new SWGTestSourceSettings();
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "SWGTestSourceMISettings.h"
|
#include "SWGTestMISettings.h"
|
||||||
|
|
||||||
#include "SWGHelpers.h"
|
#include "SWGHelpers.h"
|
||||||
|
|
||||||
@ -22,12 +22,12 @@
|
|||||||
|
|
||||||
namespace SWGSDRangel {
|
namespace SWGSDRangel {
|
||||||
|
|
||||||
SWGTestSourceMISettings::SWGTestSourceMISettings(QString* json) {
|
SWGTestMISettings::SWGTestMISettings(QString* json) {
|
||||||
init();
|
init();
|
||||||
this->fromJson(*json);
|
this->fromJson(*json);
|
||||||
}
|
}
|
||||||
|
|
||||||
SWGTestSourceMISettings::SWGTestSourceMISettings() {
|
SWGTestMISettings::SWGTestMISettings() {
|
||||||
center_frequency = 0;
|
center_frequency = 0;
|
||||||
m_center_frequency_isSet = false;
|
m_center_frequency_isSet = false;
|
||||||
frequency_shift = 0;
|
frequency_shift = 0;
|
||||||
@ -72,12 +72,12 @@ SWGTestSourceMISettings::SWGTestSourceMISettings() {
|
|||||||
m_reverse_api_device_index_isSet = false;
|
m_reverse_api_device_index_isSet = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SWGTestSourceMISettings::~SWGTestSourceMISettings() {
|
SWGTestMISettings::~SWGTestMISettings() {
|
||||||
this->cleanup();
|
this->cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::init() {
|
SWGTestMISettings::init() {
|
||||||
center_frequency = 0;
|
center_frequency = 0;
|
||||||
m_center_frequency_isSet = false;
|
m_center_frequency_isSet = false;
|
||||||
frequency_shift = 0;
|
frequency_shift = 0;
|
||||||
@ -123,7 +123,7 @@ SWGTestSourceMISettings::init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::cleanup() {
|
SWGTestMISettings::cleanup() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -151,8 +151,8 @@ SWGTestSourceMISettings::cleanup() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SWGTestSourceMISettings*
|
SWGTestMISettings*
|
||||||
SWGTestSourceMISettings::fromJson(QString &json) {
|
SWGTestMISettings::fromJson(QString &json) {
|
||||||
QByteArray array (json.toStdString().c_str());
|
QByteArray array (json.toStdString().c_str());
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(array);
|
QJsonDocument doc = QJsonDocument::fromJson(array);
|
||||||
QJsonObject jsonObject = doc.object();
|
QJsonObject jsonObject = doc.object();
|
||||||
@ -161,7 +161,7 @@ SWGTestSourceMISettings::fromJson(QString &json) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::fromJsonObject(QJsonObject &pJson) {
|
SWGTestMISettings::fromJsonObject(QJsonObject &pJson) {
|
||||||
::SWGSDRangel::setValue(¢er_frequency, pJson["centerFrequency"], "qint32", "");
|
::SWGSDRangel::setValue(¢er_frequency, pJson["centerFrequency"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&frequency_shift, pJson["frequencyShift"], "qint32", "");
|
::SWGSDRangel::setValue(&frequency_shift, pJson["frequencyShift"], "qint32", "");
|
||||||
@ -207,7 +207,7 @@ SWGTestSourceMISettings::fromJsonObject(QJsonObject &pJson) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString
|
||||||
SWGTestSourceMISettings::asJson ()
|
SWGTestMISettings::asJson ()
|
||||||
{
|
{
|
||||||
QJsonObject* obj = this->asJsonObject();
|
QJsonObject* obj = this->asJsonObject();
|
||||||
|
|
||||||
@ -218,7 +218,7 @@ SWGTestSourceMISettings::asJson ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
QJsonObject*
|
QJsonObject*
|
||||||
SWGTestSourceMISettings::asJsonObject() {
|
SWGTestMISettings::asJsonObject() {
|
||||||
QJsonObject* obj = new QJsonObject();
|
QJsonObject* obj = new QJsonObject();
|
||||||
if(m_center_frequency_isSet){
|
if(m_center_frequency_isSet){
|
||||||
obj->insert("centerFrequency", QJsonValue(center_frequency));
|
obj->insert("centerFrequency", QJsonValue(center_frequency));
|
||||||
@ -288,218 +288,218 @@ SWGTestSourceMISettings::asJsonObject() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getCenterFrequency() {
|
SWGTestMISettings::getCenterFrequency() {
|
||||||
return center_frequency;
|
return center_frequency;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setCenterFrequency(qint32 center_frequency) {
|
SWGTestMISettings::setCenterFrequency(qint32 center_frequency) {
|
||||||
this->center_frequency = center_frequency;
|
this->center_frequency = center_frequency;
|
||||||
this->m_center_frequency_isSet = true;
|
this->m_center_frequency_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getFrequencyShift() {
|
SWGTestMISettings::getFrequencyShift() {
|
||||||
return frequency_shift;
|
return frequency_shift;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setFrequencyShift(qint32 frequency_shift) {
|
SWGTestMISettings::setFrequencyShift(qint32 frequency_shift) {
|
||||||
this->frequency_shift = frequency_shift;
|
this->frequency_shift = frequency_shift;
|
||||||
this->m_frequency_shift_isSet = true;
|
this->m_frequency_shift_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getSampleRate() {
|
SWGTestMISettings::getSampleRate() {
|
||||||
return sample_rate;
|
return sample_rate;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setSampleRate(qint32 sample_rate) {
|
SWGTestMISettings::setSampleRate(qint32 sample_rate) {
|
||||||
this->sample_rate = sample_rate;
|
this->sample_rate = sample_rate;
|
||||||
this->m_sample_rate_isSet = true;
|
this->m_sample_rate_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getLog2Decim() {
|
SWGTestMISettings::getLog2Decim() {
|
||||||
return log2_decim;
|
return log2_decim;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setLog2Decim(qint32 log2_decim) {
|
SWGTestMISettings::setLog2Decim(qint32 log2_decim) {
|
||||||
this->log2_decim = log2_decim;
|
this->log2_decim = log2_decim;
|
||||||
this->m_log2_decim_isSet = true;
|
this->m_log2_decim_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getFcPos() {
|
SWGTestMISettings::getFcPos() {
|
||||||
return fc_pos;
|
return fc_pos;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setFcPos(qint32 fc_pos) {
|
SWGTestMISettings::setFcPos(qint32 fc_pos) {
|
||||||
this->fc_pos = fc_pos;
|
this->fc_pos = fc_pos;
|
||||||
this->m_fc_pos_isSet = true;
|
this->m_fc_pos_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getSampleSizeIndex() {
|
SWGTestMISettings::getSampleSizeIndex() {
|
||||||
return sample_size_index;
|
return sample_size_index;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setSampleSizeIndex(qint32 sample_size_index) {
|
SWGTestMISettings::setSampleSizeIndex(qint32 sample_size_index) {
|
||||||
this->sample_size_index = sample_size_index;
|
this->sample_size_index = sample_size_index;
|
||||||
this->m_sample_size_index_isSet = true;
|
this->m_sample_size_index_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getAmplitudeBits() {
|
SWGTestMISettings::getAmplitudeBits() {
|
||||||
return amplitude_bits;
|
return amplitude_bits;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setAmplitudeBits(qint32 amplitude_bits) {
|
SWGTestMISettings::setAmplitudeBits(qint32 amplitude_bits) {
|
||||||
this->amplitude_bits = amplitude_bits;
|
this->amplitude_bits = amplitude_bits;
|
||||||
this->m_amplitude_bits_isSet = true;
|
this->m_amplitude_bits_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getAutoCorrOptions() {
|
SWGTestMISettings::getAutoCorrOptions() {
|
||||||
return auto_corr_options;
|
return auto_corr_options;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setAutoCorrOptions(qint32 auto_corr_options) {
|
SWGTestMISettings::setAutoCorrOptions(qint32 auto_corr_options) {
|
||||||
this->auto_corr_options = auto_corr_options;
|
this->auto_corr_options = auto_corr_options;
|
||||||
this->m_auto_corr_options_isSet = true;
|
this->m_auto_corr_options_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getModulation() {
|
SWGTestMISettings::getModulation() {
|
||||||
return modulation;
|
return modulation;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setModulation(qint32 modulation) {
|
SWGTestMISettings::setModulation(qint32 modulation) {
|
||||||
this->modulation = modulation;
|
this->modulation = modulation;
|
||||||
this->m_modulation_isSet = true;
|
this->m_modulation_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getModulationTone() {
|
SWGTestMISettings::getModulationTone() {
|
||||||
return modulation_tone;
|
return modulation_tone;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setModulationTone(qint32 modulation_tone) {
|
SWGTestMISettings::setModulationTone(qint32 modulation_tone) {
|
||||||
this->modulation_tone = modulation_tone;
|
this->modulation_tone = modulation_tone;
|
||||||
this->m_modulation_tone_isSet = true;
|
this->m_modulation_tone_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getAmModulation() {
|
SWGTestMISettings::getAmModulation() {
|
||||||
return am_modulation;
|
return am_modulation;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setAmModulation(qint32 am_modulation) {
|
SWGTestMISettings::setAmModulation(qint32 am_modulation) {
|
||||||
this->am_modulation = am_modulation;
|
this->am_modulation = am_modulation;
|
||||||
this->m_am_modulation_isSet = true;
|
this->m_am_modulation_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getFmDeviation() {
|
SWGTestMISettings::getFmDeviation() {
|
||||||
return fm_deviation;
|
return fm_deviation;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setFmDeviation(qint32 fm_deviation) {
|
SWGTestMISettings::setFmDeviation(qint32 fm_deviation) {
|
||||||
this->fm_deviation = fm_deviation;
|
this->fm_deviation = fm_deviation;
|
||||||
this->m_fm_deviation_isSet = true;
|
this->m_fm_deviation_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
SWGTestSourceMISettings::getDcFactor() {
|
SWGTestMISettings::getDcFactor() {
|
||||||
return dc_factor;
|
return dc_factor;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setDcFactor(float dc_factor) {
|
SWGTestMISettings::setDcFactor(float dc_factor) {
|
||||||
this->dc_factor = dc_factor;
|
this->dc_factor = dc_factor;
|
||||||
this->m_dc_factor_isSet = true;
|
this->m_dc_factor_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
SWGTestSourceMISettings::getIFactor() {
|
SWGTestMISettings::getIFactor() {
|
||||||
return i_factor;
|
return i_factor;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setIFactor(float i_factor) {
|
SWGTestMISettings::setIFactor(float i_factor) {
|
||||||
this->i_factor = i_factor;
|
this->i_factor = i_factor;
|
||||||
this->m_i_factor_isSet = true;
|
this->m_i_factor_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
SWGTestSourceMISettings::getQFactor() {
|
SWGTestMISettings::getQFactor() {
|
||||||
return q_factor;
|
return q_factor;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setQFactor(float q_factor) {
|
SWGTestMISettings::setQFactor(float q_factor) {
|
||||||
this->q_factor = q_factor;
|
this->q_factor = q_factor;
|
||||||
this->m_q_factor_isSet = true;
|
this->m_q_factor_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
SWGTestSourceMISettings::getPhaseImbalance() {
|
SWGTestMISettings::getPhaseImbalance() {
|
||||||
return phase_imbalance;
|
return phase_imbalance;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setPhaseImbalance(float phase_imbalance) {
|
SWGTestMISettings::setPhaseImbalance(float phase_imbalance) {
|
||||||
this->phase_imbalance = phase_imbalance;
|
this->phase_imbalance = phase_imbalance;
|
||||||
this->m_phase_imbalance_isSet = true;
|
this->m_phase_imbalance_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString*
|
QString*
|
||||||
SWGTestSourceMISettings::getFileRecordName() {
|
SWGTestMISettings::getFileRecordName() {
|
||||||
return file_record_name;
|
return file_record_name;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setFileRecordName(QString* file_record_name) {
|
SWGTestMISettings::setFileRecordName(QString* file_record_name) {
|
||||||
this->file_record_name = file_record_name;
|
this->file_record_name = file_record_name;
|
||||||
this->m_file_record_name_isSet = true;
|
this->m_file_record_name_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getUseReverseApi() {
|
SWGTestMISettings::getUseReverseApi() {
|
||||||
return use_reverse_api;
|
return use_reverse_api;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setUseReverseApi(qint32 use_reverse_api) {
|
SWGTestMISettings::setUseReverseApi(qint32 use_reverse_api) {
|
||||||
this->use_reverse_api = use_reverse_api;
|
this->use_reverse_api = use_reverse_api;
|
||||||
this->m_use_reverse_api_isSet = true;
|
this->m_use_reverse_api_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString*
|
QString*
|
||||||
SWGTestSourceMISettings::getReverseApiAddress() {
|
SWGTestMISettings::getReverseApiAddress() {
|
||||||
return reverse_api_address;
|
return reverse_api_address;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setReverseApiAddress(QString* reverse_api_address) {
|
SWGTestMISettings::setReverseApiAddress(QString* reverse_api_address) {
|
||||||
this->reverse_api_address = reverse_api_address;
|
this->reverse_api_address = reverse_api_address;
|
||||||
this->m_reverse_api_address_isSet = true;
|
this->m_reverse_api_address_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getReverseApiPort() {
|
SWGTestMISettings::getReverseApiPort() {
|
||||||
return reverse_api_port;
|
return reverse_api_port;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setReverseApiPort(qint32 reverse_api_port) {
|
SWGTestMISettings::setReverseApiPort(qint32 reverse_api_port) {
|
||||||
this->reverse_api_port = reverse_api_port;
|
this->reverse_api_port = reverse_api_port;
|
||||||
this->m_reverse_api_port_isSet = true;
|
this->m_reverse_api_port_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGTestSourceMISettings::getReverseApiDeviceIndex() {
|
SWGTestMISettings::getReverseApiDeviceIndex() {
|
||||||
return reverse_api_device_index;
|
return reverse_api_device_index;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGTestSourceMISettings::setReverseApiDeviceIndex(qint32 reverse_api_device_index) {
|
SWGTestMISettings::setReverseApiDeviceIndex(qint32 reverse_api_device_index) {
|
||||||
this->reverse_api_device_index = reverse_api_device_index;
|
this->reverse_api_device_index = reverse_api_device_index;
|
||||||
this->m_reverse_api_device_index_isSet = true;
|
this->m_reverse_api_device_index_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
SWGTestSourceMISettings::isSet(){
|
SWGTestMISettings::isSet(){
|
||||||
bool isObjectUpdated = false;
|
bool isObjectUpdated = false;
|
||||||
do{
|
do{
|
||||||
if(m_center_frequency_isSet){ isObjectUpdated = true; break;}
|
if(m_center_frequency_isSet){ isObjectUpdated = true; break;}
|
@ -11,13 +11,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SWGTestSourceMISettings.h
|
* SWGTestMISettings.h
|
||||||
*
|
*
|
||||||
* TestSourceMI
|
* TestSourceMI
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SWGTestSourceMISettings_H_
|
#ifndef SWGTestMISettings_H_
|
||||||
#define SWGTestSourceMISettings_H_
|
#define SWGTestMISettings_H_
|
||||||
|
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
|
|
||||||
@ -29,18 +29,18 @@
|
|||||||
|
|
||||||
namespace SWGSDRangel {
|
namespace SWGSDRangel {
|
||||||
|
|
||||||
class SWG_API SWGTestSourceMISettings: public SWGObject {
|
class SWG_API SWGTestMISettings: public SWGObject {
|
||||||
public:
|
public:
|
||||||
SWGTestSourceMISettings();
|
SWGTestMISettings();
|
||||||
SWGTestSourceMISettings(QString* json);
|
SWGTestMISettings(QString* json);
|
||||||
virtual ~SWGTestSourceMISettings();
|
virtual ~SWGTestMISettings();
|
||||||
void init();
|
void init();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
||||||
virtual QString asJson () override;
|
virtual QString asJson () override;
|
||||||
virtual QJsonObject* asJsonObject() override;
|
virtual QJsonObject* asJsonObject() override;
|
||||||
virtual void fromJsonObject(QJsonObject &json) override;
|
virtual void fromJsonObject(QJsonObject &json) override;
|
||||||
virtual SWGTestSourceMISettings* fromJson(QString &jsonString) override;
|
virtual SWGTestMISettings* fromJson(QString &jsonString) override;
|
||||||
|
|
||||||
qint32 getCenterFrequency();
|
qint32 getCenterFrequency();
|
||||||
void setCenterFrequency(qint32 center_frequency);
|
void setCenterFrequency(qint32 center_frequency);
|
||||||
@ -176,4 +176,4 @@ private:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* SWGTestSourceMISettings_H_ */
|
#endif /* SWGTestMISettings_H_ */
|
Loading…
Reference in New Issue
Block a user