LimeSDR input: fixed message passing between buddies

This commit is contained in:
f4exb 2017-04-19 01:04:57 +02:00
parent 09981263bc
commit 0847a8464c
2 changed files with 37 additions and 7 deletions

View File

@ -65,6 +65,8 @@ bool LimeSDRInput::openDevice()
// if there is a channel left take the first available // if there is a channel left take the first available
if (m_deviceAPI->getSourceBuddies().size() > 0) // look source sibling first if (m_deviceAPI->getSourceBuddies().size() > 0) // look source sibling first
{ {
qDebug("LimeSDRInput::openDevice: look in Rx buddies");
DeviceSourceAPI *sourceBuddy = m_deviceAPI->getSourceBuddies()[0]; DeviceSourceAPI *sourceBuddy = m_deviceAPI->getSourceBuddies()[0];
m_deviceShared = *((DeviceLimeSDRShared *) sourceBuddy->getBuddySharedPtr()); // copy shared data m_deviceShared = *((DeviceLimeSDRShared *) sourceBuddy->getBuddySharedPtr()); // copy shared data
DeviceLimeSDRParams *deviceParams = m_deviceShared.m_deviceParams; // get device parameters DeviceLimeSDRParams *deviceParams = m_deviceShared.m_deviceParams; // get device parameters
@ -74,11 +76,21 @@ bool LimeSDRInput::openDevice()
qCritical("LimeSDRInput::openDevice: cannot get device parameters from Rx buddy"); qCritical("LimeSDRInput::openDevice: cannot get device parameters from Rx buddy");
return false; // the device params should have been created by the buddy return false; // the device params should have been created by the buddy
} }
else
{
qDebug("LimeSDRInput::openDevice: getting device parameters from Rx buddy");
}
if (m_deviceAPI->getSourceBuddies().size() == deviceParams->m_nbRxChannels) if (m_deviceAPI->getSourceBuddies().size() == deviceParams->m_nbRxChannels)
{ {
qCritical("LimeSDRInput::openDevice: no more Rx channels available in device");
return false; // no more Rx channels available in device return false; // no more Rx channels available in device
} }
else
{
qDebug("LimeSDRInput::openDevice: at least one more Rx channel is available in device");
}
// look for unused channel number // look for unused channel number
char *busyChannels = new char[deviceParams->m_nbRxChannels]; char *busyChannels = new char[deviceParams->m_nbRxChannels];
memset(busyChannels, 0, deviceParams->m_nbRxChannels); memset(busyChannels, 0, deviceParams->m_nbRxChannels);
@ -106,6 +118,8 @@ bool LimeSDRInput::openDevice()
// take the first Rx channel // take the first Rx channel
else if (m_deviceAPI->getSinkBuddies().size() > 0) // then sink else if (m_deviceAPI->getSinkBuddies().size() > 0) // then sink
{ {
qDebug("LimeSDRInput::openDevice: look in Tx buddies");
DeviceSinkAPI *sinkBuddy = m_deviceAPI->getSinkBuddies()[0]; DeviceSinkAPI *sinkBuddy = m_deviceAPI->getSinkBuddies()[0];
m_deviceShared = *((DeviceLimeSDRShared *) sinkBuddy->getBuddySharedPtr()); // copy parameters m_deviceShared = *((DeviceLimeSDRShared *) sinkBuddy->getBuddySharedPtr()); // copy parameters
@ -114,6 +128,10 @@ bool LimeSDRInput::openDevice()
qCritical("LimeSDRInput::openDevice: cannot get device parameters from Tx buddy"); qCritical("LimeSDRInput::openDevice: cannot get device parameters from Tx buddy");
return false; // the device params should have been created by the buddy return false; // the device params should have been created by the buddy
} }
else
{
qDebug("LimeSDRInput::openDevice: getting device parameters from Tx buddy");
}
m_deviceShared.m_channel = 0; // take first channel m_deviceShared.m_channel = 0; // take first channel
} }
@ -122,6 +140,8 @@ bool LimeSDRInput::openDevice()
// take the first Rx channel // take the first Rx channel
else else
{ {
qDebug("LimeSDRInput::openDevice: open device here");
m_deviceShared.m_deviceParams = new DeviceLimeSDRParams(); m_deviceShared.m_deviceParams = new DeviceLimeSDRParams();
char serial[256]; char serial[256];
strcpy(serial, qPrintable(m_deviceAPI->getSampleSourceSerial())); strcpy(serial, qPrintable(m_deviceAPI->getSampleSourceSerial()));
@ -138,6 +158,10 @@ bool LimeSDRInput::openDevice()
qCritical("LimeSDRInput::openDevice: cannot enable Rx channel %lu", m_deviceShared.m_channel); qCritical("LimeSDRInput::openDevice: cannot enable Rx channel %lu", m_deviceShared.m_channel);
return false; return false;
} }
else
{
qDebug("LimeSDRInput::openDevice: Rx channel %lu enabled", m_deviceShared.m_channel);
}
return true; return true;
} }
@ -305,7 +329,7 @@ bool LimeSDRInput::handleMessage(const Message& message)
else if (MsgSetReferenceConfig::match(message)) else if (MsgSetReferenceConfig::match(message))
{ {
MsgSetReferenceConfig& conf = (MsgSetReferenceConfig&) message; MsgSetReferenceConfig& conf = (MsgSetReferenceConfig&) message;
qDebug() << "LimeSDRInput::handleMessage: MsgSetReferenceLimeSDR"; qDebug() << "LimeSDRInput::handleMessage: MsgSetReferenceConfig";
m_settings = conf.getSettings(); m_settings = conf.getSettings();
return true; return true;
} }
@ -526,6 +550,8 @@ bool LimeSDRInput::applySettings(const LimeSDRInputSettings& settings, bool forc
if (forwardChangeAllDSP) if (forwardChangeAllDSP)
{ {
qDebug("LimeSDRInput::applySettings: forward change to all buddies");
const std::vector<DeviceSourceAPI*>& sourceBuddies = m_deviceAPI->getSourceBuddies(); const std::vector<DeviceSourceAPI*>& sourceBuddies = m_deviceAPI->getSourceBuddies();
std::vector<DeviceSourceAPI*>::const_iterator itSource = sourceBuddies.begin(); std::vector<DeviceSourceAPI*>::const_iterator itSource = sourceBuddies.begin();
int sampleRate = m_settings.m_devSampleRate/(1<<m_settings.m_log2SoftDecim); int sampleRate = m_settings.m_devSampleRate/(1<<m_settings.m_log2SoftDecim);
@ -543,7 +569,7 @@ bool LimeSDRInput::applySettings(const LimeSDRInputSettings& settings, bool forc
m_settings.m_centerFrequency, m_settings.m_centerFrequency,
m_settings.m_devSampleRate, m_settings.m_devSampleRate,
m_settings.m_log2HardDecim); m_settings.m_log2HardDecim);
(*itSource)->getDeviceInputMessageQueue()->push(report); (*itSource)->getDeviceOutputMessageQueue()->push(report);
} }
// send to sink buddies // send to sink buddies
@ -558,11 +584,13 @@ bool LimeSDRInput::applySettings(const LimeSDRInputSettings& settings, bool forc
m_settings.m_centerFrequency, m_settings.m_centerFrequency,
m_settings.m_devSampleRate, m_settings.m_devSampleRate,
m_settings.m_log2HardDecim); m_settings.m_log2HardDecim);
(*itSink)->getDeviceInputMessageQueue()->push(report); (*itSink)->getDeviceOutputMessageQueue()->push(report);
} }
} }
else if (forwardChangeRxDSP) else if (forwardChangeRxDSP)
{ {
qDebug("LimeSDRInput::applySettings: forward change to Rx buddies");
const std::vector<DeviceSourceAPI*>& sourceBuddies = m_deviceAPI->getSourceBuddies(); const std::vector<DeviceSourceAPI*>& sourceBuddies = m_deviceAPI->getSourceBuddies();
std::vector<DeviceSourceAPI*>::const_iterator it = sourceBuddies.begin(); std::vector<DeviceSourceAPI*>::const_iterator it = sourceBuddies.begin();
int sampleRate = m_settings.m_devSampleRate/(1<<m_settings.m_log2SoftDecim); int sampleRate = m_settings.m_devSampleRate/(1<<m_settings.m_log2SoftDecim);
@ -580,11 +608,13 @@ bool LimeSDRInput::applySettings(const LimeSDRInputSettings& settings, bool forc
m_settings.m_centerFrequency, m_settings.m_centerFrequency,
m_settings.m_devSampleRate, m_settings.m_devSampleRate,
m_settings.m_log2HardDecim); m_settings.m_log2HardDecim);
(*it)->getDeviceInputMessageQueue()->push(report); (*it)->getDeviceOutputMessageQueue()->push(report);
} }
} }
else if (forwardChangeOwnDSP) else if (forwardChangeOwnDSP)
{ {
qDebug("LimeSDRInput::applySettings: forward change to self only");
int sampleRate = m_settings.m_devSampleRate/(1<<m_settings.m_log2SoftDecim); int sampleRate = m_settings.m_devSampleRate/(1<<m_settings.m_log2SoftDecim);
DSPSignalNotification *notif = new DSPSignalNotification(sampleRate, m_settings.m_centerFrequency); DSPSignalNotification *notif = new DSPSignalNotification(sampleRate, m_settings.m_centerFrequency);
m_deviceAPI->getDeviceInputMessageQueue()->push(notif); m_deviceAPI->getDeviceInputMessageQueue()->push(notif);

View File

@ -166,7 +166,7 @@ void LimeSDRInputGUI::handleMessagesToGUI()
{ {
LimeSDRInput::MsgReportLimeSDRToGUI *report = (LimeSDRInput::MsgReportLimeSDRToGUI *) message; LimeSDRInput::MsgReportLimeSDRToGUI *report = (LimeSDRInput::MsgReportLimeSDRToGUI *) message;
m_settings.m_centerFrequency = report->getCenterFrequency() / 1000; m_settings.m_centerFrequency = report->getCenterFrequency();
m_settings.m_devSampleRate = report->getSampleRate(); m_settings.m_devSampleRate = report->getSampleRate();
m_settings.m_log2HardDecim = report->getLog2HardDecim(); m_settings.m_log2HardDecim = report->getLog2HardDecim();
@ -174,8 +174,8 @@ void LimeSDRInputGUI::handleMessagesToGUI()
displaySettings(); displaySettings();
blockApplySettings(false); blockApplySettings(false);
LimeSDRInput::MsgSetReferenceConfig* message = LimeSDRInput::MsgSetReferenceConfig::create(m_settings); LimeSDRInput::MsgSetReferenceConfig* conf = LimeSDRInput::MsgSetReferenceConfig::create(m_settings);
m_sampleSource->getInputMessageQueue()->push(message); m_sampleSource->getInputMessageQueue()->push(conf);
delete message; delete message;
} }