1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-02 22:14:45 -04:00

PlutoSDR MIMO: recognize user defined MIMO devices

This commit is contained in:
f4exb
2021-05-02 13:06:10 +02:00
parent 672c0b8a5b
commit 38d2a19338
9 changed files with 128 additions and 11 deletions
+67 -1
View File
@@ -40,6 +40,7 @@ void DeviceEnumerator::addNonDiscoverableDevices(PluginManager *pluginManager, c
QList<DeviceUserArgs::Args>::const_iterator argsIt = args.begin();
unsigned int rxIndex = m_rxEnumeration.size();
unsigned int txIndex = m_txEnumeration.size();
unsigned int mimoIndex = m_mimoEnumeration.size();
for (; argsIt != args.end(); ++argsIt)
{
@@ -47,6 +48,7 @@ void DeviceEnumerator::addNonDiscoverableDevices(PluginManager *pluginManager, c
continue;
}
// qDebug("DeviceEnumerator::addNonDiscoverableDevices: device: %s[%d]", qPrintable(argsIt->m_id), argsIt->m_sequence);
QString serial = QString("%1-%2").arg(argsIt->m_id).arg(argsIt->m_sequence);
PluginInterface *rxPlugin = getRxRegisteredPlugin(pluginManager, argsIt->m_id);
@@ -99,7 +101,7 @@ void DeviceEnumerator::addNonDiscoverableDevices(PluginManager *pluginManager, c
deviceId, // id
serial,
argsIt->m_sequence,
rxPlugin->getSamplingDeviceType(),
txPlugin->getSamplingDeviceType(),
PluginInterface::SamplingDevice::StreamSingleTx,
deviceNbItems, // deviceNbItems
deviceIndex // deviceItemIndex
@@ -114,6 +116,39 @@ void DeviceEnumerator::addNonDiscoverableDevices(PluginManager *pluginManager, c
txIndex++;
}
}
PluginInterface *mimoPlugin = getMIMORegisteredPlugin(pluginManager, argsIt->m_id);
if (mimoPlugin && !isMIMOEnumerated(argsIt->m_id, argsIt->m_sequence))
{
int deviceNbItems = mimoPlugin->getDefaultMIMONbItems();
QString deviceId = mimoPlugin->getDeviceTypeId();
for (int deviceIndex = 0; deviceIndex < deviceNbItems; deviceIndex++)
{
QString description = QString("%1[%2:%3] user defined").arg(argsIt->m_id).arg(argsIt->m_sequence).arg(deviceIndex);
qDebug("DeviceEnumerator::addNonDiscoverableDevices: MIMO: %s", qPrintable(description));
PluginInterface::SamplingDevice ndDevice(
description,
argsIt->m_id,
deviceId, // id
serial,
argsIt->m_sequence,
mimoPlugin->getSamplingDeviceType(),
PluginInterface::SamplingDevice::StreamMIMO,
deviceNbItems, // deviceNbItems
deviceIndex // deviceItemIndex
);
m_mimoEnumeration.push_back(
DeviceEnumeration(
ndDevice,
mimoPlugin,
mimoIndex
)
);
mimoIndex++;
}
}
} // loop through user args
}
@@ -180,6 +215,37 @@ bool DeviceEnumerator::isTxEnumerated(const QString& deviceHwId, int deviceSeque
return false;
}
PluginInterface *DeviceEnumerator::getMIMORegisteredPlugin(PluginManager *pluginManager, const QString& deviceHwId)
{
PluginAPI::SamplingDeviceRegistrations& mimoDeviceRegistrations = pluginManager->getMIMODeviceRegistrations();
PluginInterface *mimoPlugin = nullptr;
for (int i = 0; i < mimoDeviceRegistrations.count(); i++)
{
if (deviceHwId == mimoDeviceRegistrations[i].m_deviceHardwareId)
{
mimoPlugin = mimoDeviceRegistrations[i].m_plugin;
break;
}
}
return mimoPlugin;
}
bool DeviceEnumerator::isMIMOEnumerated(const QString& deviceHwId, int deviceSequence)
{
std::vector<DeviceEnumeration>::const_iterator mimoIt = m_mimoEnumeration.begin();
for (; mimoIt != m_mimoEnumeration.end(); ++mimoIt)
{
if ((mimoIt->m_samplingDevice.hardwareId == deviceHwId) && (mimoIt->m_samplingDevice.sequence == deviceSequence)) {
return true;
}
}
return false;
}
void DeviceEnumerator::enumerateRxDevices(PluginManager *pluginManager)
{
m_rxEnumeration.clear();