mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-13 03:41:47 -05:00
Removed SyncMessenger from DSPDeviceMIMOEngine. Part of #2159
This commit is contained in:
parent
d2066495a9
commit
f6b3b22e4f
@ -50,7 +50,6 @@ DSPDeviceMIMOEngine::DSPDeviceMIMOEngine(uint32_t uid, QObject* parent) :
|
|||||||
m_spectrumInputIndex(0)
|
m_spectrumInputIndex(0)
|
||||||
{
|
{
|
||||||
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);
|
|
||||||
|
|
||||||
moveToThread(this);
|
moveToThread(this);
|
||||||
}
|
}
|
||||||
@ -109,13 +108,15 @@ bool DSPDeviceMIMOEngine::initProcess(int subsystemIndex)
|
|||||||
|
|
||||||
if (subsystemIndex == 0) // Rx side
|
if (subsystemIndex == 0) // Rx side
|
||||||
{
|
{
|
||||||
DSPAcquisitionInit cmd;
|
auto *cmd = new DSPAcquisitionInit();
|
||||||
return m_syncMessenger.sendWait(cmd) == StReady;
|
getInputMessageQueue()->push(cmd);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else if (subsystemIndex == 1) // Tx side
|
else if (subsystemIndex == 1) // Tx side
|
||||||
{
|
{
|
||||||
DSPGenerationInit cmd;
|
auto *cmd = new DSPGenerationInit();
|
||||||
return m_syncMessenger.sendWait(cmd) == StReady;
|
getInputMessageQueue()->push(cmd);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -126,13 +127,15 @@ bool DSPDeviceMIMOEngine::startProcess(int subsystemIndex)
|
|||||||
qDebug() << "DSPDeviceMIMOEngine::startProcess: subsystemIndex: " << subsystemIndex;
|
qDebug() << "DSPDeviceMIMOEngine::startProcess: subsystemIndex: " << subsystemIndex;
|
||||||
if (subsystemIndex == 0) // Rx side
|
if (subsystemIndex == 0) // Rx side
|
||||||
{
|
{
|
||||||
DSPAcquisitionStart cmd;
|
auto *cmd = new DSPAcquisitionStart();
|
||||||
return m_syncMessenger.sendWait(cmd) == StRunning;
|
getInputMessageQueue()->push(cmd);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else if (subsystemIndex == 1) // Tx side
|
else if (subsystemIndex == 1) // Tx side
|
||||||
{
|
{
|
||||||
DSPGenerationStart cmd;
|
auto *cmd = new DSPGenerationStart();
|
||||||
return m_syncMessenger.sendWait(cmd) == StRunning;
|
getInputMessageQueue()->push(cmd);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -144,21 +147,21 @@ void DSPDeviceMIMOEngine::stopProcess(int subsystemIndex)
|
|||||||
|
|
||||||
if (subsystemIndex == 0) // Rx side
|
if (subsystemIndex == 0) // Rx side
|
||||||
{
|
{
|
||||||
DSPAcquisitionStop cmd;
|
auto *cmd = new DSPAcquisitionStop();
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
else if (subsystemIndex == 1) // Tx side
|
else if (subsystemIndex == 1) // Tx side
|
||||||
{
|
{
|
||||||
DSPGenerationStop cmd;
|
DSPGenerationStop *cmd = new DSPGenerationStop();
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::setMIMO(DeviceSampleMIMO* mimo)
|
void DSPDeviceMIMOEngine::setMIMO(DeviceSampleMIMO* mimo)
|
||||||
{
|
{
|
||||||
qDebug() << "DSPDeviceMIMOEngine::setMIMO";
|
qDebug() << "DSPDeviceMIMOEngine::setMIMO";
|
||||||
SetSampleMIMO cmd(mimo);
|
auto *cmd = new SetSampleMIMO(mimo);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::setMIMOSequence(int sequence)
|
void DSPDeviceMIMOEngine::setMIMOSequence(int sequence)
|
||||||
@ -173,8 +176,8 @@ void DSPDeviceMIMOEngine::addChannelSource(BasebandSampleSource* source, int ind
|
|||||||
<< source->getSourceName().toStdString().c_str()
|
<< source->getSourceName().toStdString().c_str()
|
||||||
<< " at: "
|
<< " at: "
|
||||||
<< index;
|
<< index;
|
||||||
AddBasebandSampleSource cmd(source, index);
|
auto *cmd = new AddBasebandSampleSource(source, index);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::removeChannelSource(BasebandSampleSource* source, int index)
|
void DSPDeviceMIMOEngine::removeChannelSource(BasebandSampleSource* source, int index)
|
||||||
@ -183,8 +186,8 @@ void DSPDeviceMIMOEngine::removeChannelSource(BasebandSampleSource* source, int
|
|||||||
<< source->getSourceName().toStdString().c_str()
|
<< source->getSourceName().toStdString().c_str()
|
||||||
<< " at: "
|
<< " at: "
|
||||||
<< index;
|
<< index;
|
||||||
RemoveBasebandSampleSource cmd(source, index);
|
auto *cmd = new RemoveBasebandSampleSource(source, index);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::addChannelSink(BasebandSampleSink* sink, int index)
|
void DSPDeviceMIMOEngine::addChannelSink(BasebandSampleSink* sink, int index)
|
||||||
@ -193,8 +196,8 @@ void DSPDeviceMIMOEngine::addChannelSink(BasebandSampleSink* sink, int index)
|
|||||||
<< sink->getSinkName().toStdString().c_str()
|
<< sink->getSinkName().toStdString().c_str()
|
||||||
<< " at: "
|
<< " at: "
|
||||||
<< index;
|
<< index;
|
||||||
AddBasebandSampleSink cmd(sink, index);
|
auto *cmd = new AddBasebandSampleSink(sink, index);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::removeChannelSink(BasebandSampleSink* sink, int index)
|
void DSPDeviceMIMOEngine::removeChannelSink(BasebandSampleSink* sink, int index)
|
||||||
@ -203,38 +206,38 @@ void DSPDeviceMIMOEngine::removeChannelSink(BasebandSampleSink* sink, int index)
|
|||||||
<< sink->getSinkName().toStdString().c_str()
|
<< sink->getSinkName().toStdString().c_str()
|
||||||
<< " at: "
|
<< " at: "
|
||||||
<< index;
|
<< index;
|
||||||
RemoveBasebandSampleSink cmd(sink, index);
|
auto *cmd = new RemoveBasebandSampleSink(sink, index);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::addMIMOChannel(MIMOChannel *channel)
|
void DSPDeviceMIMOEngine::addMIMOChannel(MIMOChannel *channel)
|
||||||
{
|
{
|
||||||
qDebug() << "DSPDeviceMIMOEngine::addMIMOChannel: "
|
qDebug() << "DSPDeviceMIMOEngine::addMIMOChannel: "
|
||||||
<< channel->getMIMOName().toStdString().c_str();
|
<< channel->getMIMOName().toStdString().c_str();
|
||||||
AddMIMOChannel cmd(channel);
|
auto *cmd = new AddMIMOChannel(channel);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::removeMIMOChannel(MIMOChannel *channel)
|
void DSPDeviceMIMOEngine::removeMIMOChannel(MIMOChannel *channel)
|
||||||
{
|
{
|
||||||
qDebug() << "DSPDeviceMIMOEngine::removeMIMOChannel: "
|
qDebug() << "DSPDeviceMIMOEngine::removeMIMOChannel: "
|
||||||
<< channel->getMIMOName().toStdString().c_str();
|
<< channel->getMIMOName().toStdString().c_str();
|
||||||
RemoveMIMOChannel cmd(channel);
|
auto *cmd = new RemoveMIMOChannel(channel);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::addSpectrumSink(BasebandSampleSink* spectrumSink)
|
void DSPDeviceMIMOEngine::addSpectrumSink(BasebandSampleSink* spectrumSink)
|
||||||
{
|
{
|
||||||
qDebug() << "DSPDeviceMIMOEngine::addSpectrumSink: " << spectrumSink->getSinkName().toStdString().c_str();
|
qDebug() << "DSPDeviceMIMOEngine::addSpectrumSink: " << spectrumSink->getSinkName().toStdString().c_str();
|
||||||
AddSpectrumSink cmd(spectrumSink);
|
auto *cmd = new AddSpectrumSink(spectrumSink);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::removeSpectrumSink(BasebandSampleSink* spectrumSink)
|
void DSPDeviceMIMOEngine::removeSpectrumSink(BasebandSampleSink* spectrumSink)
|
||||||
{
|
{
|
||||||
qDebug() << "DSPDeviceSinkEngine::removeSpectrumSink: " << spectrumSink->getSinkName().toStdString().c_str();
|
qDebug() << "DSPDeviceSinkEngine::removeSpectrumSink: " << spectrumSink->getSinkName().toStdString().c_str();
|
||||||
DSPRemoveSpectrumSink cmd(spectrumSink);
|
auto *cmd = new RemoveSpectrumSink(spectrumSink);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::setSpectrumSinkInput(bool sourceElseSink, int index)
|
void DSPDeviceMIMOEngine::setSpectrumSinkInput(bool sourceElseSink, int index)
|
||||||
@ -242,24 +245,26 @@ void DSPDeviceMIMOEngine::setSpectrumSinkInput(bool sourceElseSink, int index)
|
|||||||
qDebug() << "DSPDeviceSinkEngine::setSpectrumSinkInput: "
|
qDebug() << "DSPDeviceSinkEngine::setSpectrumSinkInput: "
|
||||||
<< " sourceElseSink: " << sourceElseSink
|
<< " sourceElseSink: " << sourceElseSink
|
||||||
<< " index: " << index;
|
<< " index: " << index;
|
||||||
SetSpectrumSinkInput cmd(sourceElseSink, index);
|
auto *cmd = new SetSpectrumSinkInput(sourceElseSink, index);
|
||||||
m_syncMessenger.sendWait(cmd);
|
getInputMessageQueue()->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DSPDeviceMIMOEngine::errorMessage(int subsystemIndex)
|
QString DSPDeviceMIMOEngine::errorMessage(int subsystemIndex) const
|
||||||
{
|
{
|
||||||
qDebug() << "DSPDeviceMIMOEngine::errorMessage: subsystemIndex:" << subsystemIndex;
|
qDebug() << "DSPDeviceMIMOEngine::errorMessage: subsystemIndex:" << subsystemIndex;
|
||||||
GetErrorMessage cmd(subsystemIndex);
|
if (subsystemIndex == 0) {
|
||||||
m_syncMessenger.sendWait(cmd);
|
return m_errorMessageRx;
|
||||||
return cmd.getErrorMessage();
|
} else if (subsystemIndex == 1) {
|
||||||
|
return m_errorMessageTx;
|
||||||
|
} else {
|
||||||
|
return "Not implemented";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DSPDeviceMIMOEngine::deviceDescription()
|
QString DSPDeviceMIMOEngine::deviceDescription() const
|
||||||
{
|
{
|
||||||
qDebug() << "DSPDeviceMIMOEngine::deviceDescription";
|
qDebug() << "DSPDeviceMIMOEngine::deviceDescription";
|
||||||
GetMIMODeviceDescription cmd;
|
return m_deviceDescription;
|
||||||
m_syncMessenger.sendWait(cmd);
|
|
||||||
return cmd.getDeviceDescription();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::workSampleSinkFifos()
|
void DSPDeviceMIMOEngine::workSampleSinkFifos()
|
||||||
@ -896,259 +901,26 @@ void DSPDeviceMIMOEngine::handleSetMIMO(DeviceSampleMIMO* mimo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::handleSynchronousMessages()
|
bool DSPDeviceMIMOEngine::handleMessage(const Message& message)
|
||||||
{
|
{
|
||||||
Message *message = m_syncMessenger.getMessage();
|
if (ConfigureCorrection::match(message))
|
||||||
qDebug() << "DSPDeviceMIMOEngine::handleSynchronousMessages: " << message->getIdentifier();
|
|
||||||
State returnState = StNotStarted;
|
|
||||||
|
|
||||||
if (DSPAcquisitionInit::match(*message))
|
|
||||||
{
|
{
|
||||||
setStateRx(gotoIdle(0));
|
const auto& conf = (const ConfigureCorrection&) message;
|
||||||
|
unsigned int isource = conf.getIndex();
|
||||||
if (m_stateRx == StIdle) {
|
|
||||||
setStateRx(gotoInit(0)); // State goes ready if init is performed
|
|
||||||
}
|
|
||||||
|
|
||||||
returnState = m_stateRx;
|
|
||||||
}
|
|
||||||
else if (DSPAcquisitionStart::match(*message))
|
|
||||||
{
|
|
||||||
if (m_stateRx == StReady) {
|
|
||||||
setStateRx(gotoRunning(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
returnState = m_stateRx;
|
|
||||||
}
|
|
||||||
else if (DSPAcquisitionStop::match(*message))
|
|
||||||
{
|
|
||||||
setStateRx(gotoIdle(0));
|
|
||||||
returnState = m_stateRx;
|
|
||||||
}
|
|
||||||
else if (DSPGenerationInit::match(*message))
|
|
||||||
{
|
|
||||||
setStateTx(gotoIdle(1));
|
|
||||||
|
|
||||||
if (m_stateTx == StIdle) {
|
|
||||||
setStateTx(gotoInit(1)); // State goes ready if init is performed
|
|
||||||
}
|
|
||||||
|
|
||||||
returnState = m_stateTx;
|
|
||||||
}
|
|
||||||
else if (DSPGenerationStart::match(*message))
|
|
||||||
{
|
|
||||||
if (m_stateTx == StReady) {
|
|
||||||
setStateTx(gotoRunning(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
returnState = m_stateTx;
|
|
||||||
}
|
|
||||||
else if (DSPGenerationStop::match(*message))
|
|
||||||
{
|
|
||||||
setStateTx(gotoIdle(1));
|
|
||||||
returnState = m_stateTx;
|
|
||||||
}
|
|
||||||
else if (GetMIMODeviceDescription::match(*message))
|
|
||||||
{
|
|
||||||
((GetMIMODeviceDescription*) message)->setDeviceDescription(m_deviceDescription);
|
|
||||||
}
|
|
||||||
else if (GetErrorMessage::match(*message))
|
|
||||||
{
|
|
||||||
GetErrorMessage *cmd = (GetErrorMessage *) message;
|
|
||||||
int subsystemIndex = cmd->getSubsystemIndex();
|
|
||||||
if (subsystemIndex == 0) {
|
|
||||||
cmd->setErrorMessage(m_errorMessageRx);
|
|
||||||
} else if (subsystemIndex == 1) {
|
|
||||||
cmd->setErrorMessage(m_errorMessageTx);
|
|
||||||
} else {
|
|
||||||
cmd->setErrorMessage("Not implemented");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (SetSampleMIMO::match(*message)) {
|
|
||||||
handleSetMIMO(((SetSampleMIMO*) message)->getSampleMIMO());
|
|
||||||
}
|
|
||||||
else if (AddBasebandSampleSink::match(*message))
|
|
||||||
{
|
|
||||||
const AddBasebandSampleSink *msg = (AddBasebandSampleSink *) message;
|
|
||||||
BasebandSampleSink* sink = msg->getSampleSink();
|
|
||||||
unsigned int isource = msg->getIndex();
|
|
||||||
|
|
||||||
if (isource < m_basebandSampleSinks.size())
|
|
||||||
{
|
|
||||||
m_basebandSampleSinks[isource].push_back(sink);
|
|
||||||
// initialize sample rate and center frequency in the sink:
|
|
||||||
int sourceStreamSampleRate = m_deviceSampleMIMO->getSourceSampleRate(isource);
|
|
||||||
quint64 sourceCenterFrequency = m_deviceSampleMIMO->getSourceCenterFrequency(isource);
|
|
||||||
DSPSignalNotification *msg = new DSPSignalNotification(sourceStreamSampleRate, sourceCenterFrequency);
|
|
||||||
sink->pushMessage(msg);
|
|
||||||
// start the sink:
|
|
||||||
if (m_stateRx == StRunning) {
|
|
||||||
sink->start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (RemoveBasebandSampleSink::match(*message))
|
|
||||||
{
|
|
||||||
const RemoveBasebandSampleSink *msg = (RemoveBasebandSampleSink *) message;
|
|
||||||
BasebandSampleSink* sink = ((DSPRemoveBasebandSampleSink*) message)->getSampleSink();
|
|
||||||
unsigned int isource = msg->getIndex();
|
|
||||||
|
|
||||||
if (isource < m_basebandSampleSinks.size())
|
|
||||||
{
|
|
||||||
if (m_stateRx == StRunning) {
|
|
||||||
sink->stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_basebandSampleSinks[isource].remove(sink);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (AddBasebandSampleSource::match(*message))
|
|
||||||
{
|
|
||||||
const AddBasebandSampleSource *msg = (AddBasebandSampleSource *) message;
|
|
||||||
BasebandSampleSource *sampleSource = msg->getSampleSource();
|
|
||||||
unsigned int isink = msg->getIndex();
|
|
||||||
|
|
||||||
if (isink < m_basebandSampleSources.size())
|
|
||||||
{
|
|
||||||
m_basebandSampleSources[isink].push_back(sampleSource);
|
|
||||||
// initialize sample rate and center frequency in the sink:
|
|
||||||
int sinkStreamSampleRate = m_deviceSampleMIMO->getSinkSampleRate(isink);
|
|
||||||
quint64 sinkCenterFrequency = m_deviceSampleMIMO->getSinkCenterFrequency(isink);
|
|
||||||
DSPSignalNotification *msg = new DSPSignalNotification(sinkStreamSampleRate, sinkCenterFrequency);
|
|
||||||
sampleSource->pushMessage(msg);
|
|
||||||
// start the sink:
|
|
||||||
if (m_stateTx == StRunning) {
|
|
||||||
sampleSource->start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (RemoveBasebandSampleSource::match(*message))
|
|
||||||
{
|
|
||||||
const RemoveBasebandSampleSource *msg = (RemoveBasebandSampleSource *) message;
|
|
||||||
BasebandSampleSource* sampleSource = msg->getSampleSource();
|
|
||||||
unsigned int isink = msg->getIndex();
|
|
||||||
|
|
||||||
if (isink < m_basebandSampleSources.size())
|
|
||||||
{
|
|
||||||
sampleSource->stop();
|
|
||||||
m_basebandSampleSources[isink].remove(sampleSource);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (AddMIMOChannel::match(*message))
|
|
||||||
{
|
|
||||||
const AddMIMOChannel *msg = (AddMIMOChannel *) message;
|
|
||||||
MIMOChannel *channel = msg->getChannel();
|
|
||||||
m_mimoChannels.push_back(channel);
|
|
||||||
|
|
||||||
for (unsigned int isource = 0; isource < m_deviceSampleMIMO->getNbSourceStreams(); isource++)
|
|
||||||
{
|
|
||||||
DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification(
|
|
||||||
m_deviceSampleMIMO->getSourceSampleRate(isource),
|
|
||||||
m_deviceSampleMIMO->getSourceCenterFrequency(isource),
|
|
||||||
true,
|
|
||||||
isource
|
|
||||||
);
|
|
||||||
channel->pushMessage(notif);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned int isink = 0; isink < m_deviceSampleMIMO->getNbSinkStreams(); isink++)
|
|
||||||
{
|
|
||||||
DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification(
|
|
||||||
m_deviceSampleMIMO->getSinkSampleRate(isink),
|
|
||||||
m_deviceSampleMIMO->getSinkCenterFrequency(isink),
|
|
||||||
false,
|
|
||||||
isink
|
|
||||||
);
|
|
||||||
channel->pushMessage(notif);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_stateRx == StRunning) {
|
|
||||||
channel->startSinks();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_stateTx == StRunning) {
|
|
||||||
channel->startSources();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (RemoveMIMOChannel::match(*message))
|
|
||||||
{
|
|
||||||
const RemoveMIMOChannel *msg = (RemoveMIMOChannel *) message;
|
|
||||||
MIMOChannel *channel = msg->getChannel();
|
|
||||||
channel->stopSinks();
|
|
||||||
channel->stopSources();
|
|
||||||
m_mimoChannels.remove(channel);
|
|
||||||
}
|
|
||||||
else if (AddSpectrumSink::match(*message))
|
|
||||||
{
|
|
||||||
m_spectrumSink = ((AddSpectrumSink*) message)->getSampleSink();
|
|
||||||
}
|
|
||||||
else if (RemoveSpectrumSink::match(*message))
|
|
||||||
{
|
|
||||||
BasebandSampleSink* spectrumSink = ((DSPRemoveSpectrumSink*) message)->getSampleSink();
|
|
||||||
spectrumSink->stop();
|
|
||||||
m_spectrumSink = nullptr;
|
|
||||||
}
|
|
||||||
else if (SetSpectrumSinkInput::match(*message))
|
|
||||||
{
|
|
||||||
const SetSpectrumSinkInput *msg = (SetSpectrumSinkInput *) message;
|
|
||||||
bool spectrumInputSourceElseSink = msg->getSourceElseSink();
|
|
||||||
unsigned int spectrumInputIndex = msg->getIndex();
|
|
||||||
|
|
||||||
if ((spectrumInputSourceElseSink != m_spectrumInputSourceElseSink) || (spectrumInputIndex != m_spectrumInputIndex))
|
|
||||||
{
|
|
||||||
if ((!spectrumInputSourceElseSink) && (spectrumInputIndex < m_deviceSampleMIMO->getNbSinkStreams())) // add the source listener
|
|
||||||
{
|
|
||||||
if (m_spectrumSink)
|
|
||||||
{
|
|
||||||
DSPSignalNotification *notif = new DSPSignalNotification(
|
|
||||||
m_deviceSampleMIMO->getSinkSampleRate(spectrumInputIndex),
|
|
||||||
m_deviceSampleMIMO->getSinkCenterFrequency(spectrumInputIndex));
|
|
||||||
m_spectrumSink->pushMessage(notif);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_spectrumSink && (spectrumInputSourceElseSink) && (spectrumInputIndex < m_deviceSampleMIMO->getNbSinkFifos()))
|
|
||||||
{
|
|
||||||
DSPSignalNotification *notif = new DSPSignalNotification(
|
|
||||||
m_deviceSampleMIMO->getSourceSampleRate(spectrumInputIndex),
|
|
||||||
m_deviceSampleMIMO->getSourceCenterFrequency(spectrumInputIndex));
|
|
||||||
m_spectrumSink->pushMessage(notif);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_spectrumInputSourceElseSink = spectrumInputSourceElseSink;
|
|
||||||
m_spectrumInputIndex = spectrumInputIndex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_syncMessenger.done(returnState);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DSPDeviceMIMOEngine::handleInputMessages()
|
|
||||||
{
|
|
||||||
Message* message;
|
|
||||||
|
|
||||||
while ((message = m_inputMessageQueue.pop()) != 0)
|
|
||||||
{
|
|
||||||
qDebug("DSPDeviceMIMOEngine::handleInputMessages: message: %s", message->getIdentifier());
|
|
||||||
|
|
||||||
if (ConfigureCorrection::match(*message))
|
|
||||||
{
|
|
||||||
ConfigureCorrection* conf = (ConfigureCorrection*) message;
|
|
||||||
unsigned int isource = conf->getIndex();
|
|
||||||
|
|
||||||
if (isource < m_sourcesCorrections.size())
|
if (isource < m_sourcesCorrections.size())
|
||||||
{
|
{
|
||||||
m_sourcesCorrections[isource].m_iqImbalanceCorrection = conf->getIQImbalanceCorrection();
|
m_sourcesCorrections[isource].m_iqImbalanceCorrection = conf.getIQImbalanceCorrection();
|
||||||
|
|
||||||
if (m_sourcesCorrections[isource].m_dcOffsetCorrection != conf->getDCOffsetCorrection())
|
if (m_sourcesCorrections[isource].m_dcOffsetCorrection != conf.getDCOffsetCorrection())
|
||||||
{
|
{
|
||||||
m_sourcesCorrections[isource].m_dcOffsetCorrection = conf->getDCOffsetCorrection();
|
m_sourcesCorrections[isource].m_dcOffsetCorrection = conf.getDCOffsetCorrection();
|
||||||
m_sourcesCorrections[isource].m_iOffset = 0;
|
m_sourcesCorrections[isource].m_iOffset = 0;
|
||||||
m_sourcesCorrections[isource].m_qOffset = 0;
|
m_sourcesCorrections[isource].m_qOffset = 0;
|
||||||
|
|
||||||
if (m_sourcesCorrections[isource].m_iqImbalanceCorrection != conf->getIQImbalanceCorrection())
|
if (m_sourcesCorrections[isource].m_iqImbalanceCorrection != conf.getIQImbalanceCorrection())
|
||||||
{
|
{
|
||||||
m_sourcesCorrections[isource].m_iqImbalanceCorrection = conf->getIQImbalanceCorrection();
|
m_sourcesCorrections[isource].m_iqImbalanceCorrection = conf.getIQImbalanceCorrection();
|
||||||
m_sourcesCorrections[isource].m_iRange = 1 << 16;
|
m_sourcesCorrections[isource].m_iRange = 1 << 16;
|
||||||
m_sourcesCorrections[isource].m_qRange = 1 << 16;
|
m_sourcesCorrections[isource].m_qRange = 1 << 16;
|
||||||
m_sourcesCorrections[isource].m_imbalance = 65536;
|
m_sourcesCorrections[isource].m_imbalance = 65536;
|
||||||
@ -1166,19 +938,19 @@ void DSPDeviceMIMOEngine::handleInputMessages()
|
|||||||
m_sourcesCorrections[isource].m_qBeta.reset();
|
m_sourcesCorrections[isource].m_qBeta.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
delete message;
|
return true;
|
||||||
}
|
}
|
||||||
else if (DSPMIMOSignalNotification::match(*message))
|
else if (DSPMIMOSignalNotification::match(message))
|
||||||
{
|
{
|
||||||
DSPMIMOSignalNotification *notif = (DSPMIMOSignalNotification *) message;
|
const auto& notif = (const DSPMIMOSignalNotification&) message;
|
||||||
|
|
||||||
// update DSP values
|
// update DSP values
|
||||||
|
|
||||||
bool sourceElseSink = notif->getSourceOrSink();
|
bool sourceElseSink = notif.getSourceOrSink();
|
||||||
unsigned int istream = notif->getIndex();
|
unsigned int istream = notif.getIndex();
|
||||||
int sampleRate = notif->getSampleRate();
|
int sampleRate = notif.getSampleRate();
|
||||||
qint64 centerFrequency = notif->getCenterFrequency();
|
qint64 centerFrequency = notif.getCenterFrequency();
|
||||||
bool realElseComplex = notif->getRealElseComplex();
|
bool realElseComplex = notif.getRealElseComplex();
|
||||||
|
|
||||||
qDebug() << "DeviceMIMOEngine::handleInputMessages: DSPMIMOSignalNotification:"
|
qDebug() << "DeviceMIMOEngine::handleInputMessages: DSPMIMOSignalNotification:"
|
||||||
<< " sourceElseSink: " << sourceElseSink
|
<< " sourceElseSink: " << sourceElseSink
|
||||||
@ -1195,8 +967,8 @@ void DSPDeviceMIMOEngine::handleInputMessages()
|
|||||||
|
|
||||||
for (MIMOChannels::const_iterator it = m_mimoChannels.begin(); it != m_mimoChannels.end(); ++it)
|
for (MIMOChannels::const_iterator it = m_mimoChannels.begin(); it != m_mimoChannels.end(); ++it)
|
||||||
{
|
{
|
||||||
DSPMIMOSignalNotification *message = new DSPMIMOSignalNotification(*notif);
|
auto *msg = new DSPMIMOSignalNotification(notif);
|
||||||
(*it)->pushMessage(message);
|
(*it)->pushMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_deviceSampleMIMO)
|
if (m_deviceSampleMIMO)
|
||||||
@ -1211,9 +983,9 @@ void DSPDeviceMIMOEngine::handleInputMessages()
|
|||||||
{
|
{
|
||||||
for (BasebandSampleSinks::const_iterator it = m_basebandSampleSinks[istream].begin(); it != m_basebandSampleSinks[istream].end(); ++it)
|
for (BasebandSampleSinks::const_iterator it = m_basebandSampleSinks[istream].begin(); it != m_basebandSampleSinks[istream].end(); ++it)
|
||||||
{
|
{
|
||||||
DSPSignalNotification *message = new DSPSignalNotification(sampleRate, centerFrequency);
|
auto *msg = new DSPSignalNotification(sampleRate, centerFrequency);
|
||||||
qDebug() << "DSPDeviceMIMOEngine::handleInputMessages: starting " << (*it)->getSinkName().toStdString().c_str();
|
qDebug() << "DSPDeviceMIMOEngine::handleInputMessages: starting " << (*it)->getSinkName().toStdString().c_str();
|
||||||
(*it)->pushMessage(message);
|
(*it)->pushMessage(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1222,14 +994,14 @@ void DSPDeviceMIMOEngine::handleInputMessages()
|
|||||||
qDebug("DeviceMIMOEngine::handleInputMessages: DSPMIMOSignalNotification: guiMessageQueue: %p", guiMessageQueue);
|
qDebug("DeviceMIMOEngine::handleInputMessages: DSPMIMOSignalNotification: guiMessageQueue: %p", guiMessageQueue);
|
||||||
|
|
||||||
if (guiMessageQueue) {
|
if (guiMessageQueue) {
|
||||||
DSPMIMOSignalNotification* rep = new DSPMIMOSignalNotification(*notif); // make a copy for the MIMO GUI
|
auto* rep = new DSPMIMOSignalNotification(notif); // make a copy for the MIMO GUI
|
||||||
guiMessageQueue->push(rep);
|
guiMessageQueue->push(rep);
|
||||||
}
|
}
|
||||||
|
|
||||||
// forward changes to spectrum sink if currently active
|
// forward changes to spectrum sink if currently active
|
||||||
if (m_spectrumSink && m_spectrumInputSourceElseSink && (m_spectrumInputIndex == istream))
|
if (m_spectrumSink && m_spectrumInputSourceElseSink && (m_spectrumInputIndex == istream))
|
||||||
{
|
{
|
||||||
DSPSignalNotification *spectrumNotif = new DSPSignalNotification(sampleRate, centerFrequency);
|
auto *spectrumNotif = new DSPSignalNotification(sampleRate, centerFrequency);
|
||||||
m_spectrumSink->pushMessage(spectrumNotif);
|
m_spectrumSink->pushMessage(spectrumNotif);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1244,9 +1016,9 @@ void DSPDeviceMIMOEngine::handleInputMessages()
|
|||||||
{
|
{
|
||||||
for (BasebandSampleSources::const_iterator it = m_basebandSampleSources[istream].begin(); it != m_basebandSampleSources[istream].end(); ++it)
|
for (BasebandSampleSources::const_iterator it = m_basebandSampleSources[istream].begin(); it != m_basebandSampleSources[istream].end(); ++it)
|
||||||
{
|
{
|
||||||
DSPSignalNotification *message = new DSPSignalNotification(sampleRate, centerFrequency);
|
auto *msg = new DSPSignalNotification(sampleRate, centerFrequency);
|
||||||
qDebug() << "DSPDeviceMIMOEngine::handleSinkMessages: forward message to BasebandSampleSource(" << (*it)->getSourceName().toStdString().c_str() << ")";
|
qDebug() << "DSPDeviceMIMOEngine::handleSinkMessages: forward message to BasebandSampleSource(" << (*it)->getSourceName().toStdString().c_str() << ")";
|
||||||
(*it)->pushMessage(message);
|
(*it)->pushMessage(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1255,20 +1027,257 @@ void DSPDeviceMIMOEngine::handleInputMessages()
|
|||||||
qDebug("DSPDeviceMIMOEngine::handleInputMessages: DSPSignalNotification: guiMessageQueue: %p", guiMessageQueue);
|
qDebug("DSPDeviceMIMOEngine::handleInputMessages: DSPSignalNotification: guiMessageQueue: %p", guiMessageQueue);
|
||||||
|
|
||||||
if (guiMessageQueue) {
|
if (guiMessageQueue) {
|
||||||
DSPMIMOSignalNotification* rep = new DSPMIMOSignalNotification(*notif); // make a copy for the source GUI
|
auto* rep = new DSPMIMOSignalNotification(notif); // make a copy for the source GUI
|
||||||
guiMessageQueue->push(rep);
|
guiMessageQueue->push(rep);
|
||||||
}
|
}
|
||||||
|
|
||||||
// forward changes to spectrum sink if currently active
|
// forward changes to spectrum sink if currently active
|
||||||
if (m_spectrumSink && !m_spectrumInputSourceElseSink && (m_spectrumInputIndex == istream))
|
if (m_spectrumSink && !m_spectrumInputSourceElseSink && (m_spectrumInputIndex == istream))
|
||||||
{
|
{
|
||||||
DSPSignalNotification *spectrumNotif = new DSPSignalNotification(sampleRate, centerFrequency);
|
auto *spectrumNotif = new DSPSignalNotification(sampleRate, centerFrequency);
|
||||||
m_spectrumSink->pushMessage(spectrumNotif);
|
m_spectrumSink->pushMessage(spectrumNotif);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// was in handleSynchronousMessages
|
||||||
|
else if (DSPAcquisitionInit::match(message))
|
||||||
|
{
|
||||||
|
setStateRx(gotoIdle(0));
|
||||||
|
|
||||||
|
if (m_stateRx == StIdle) {
|
||||||
|
setStateRx(gotoInit(0)); // State goes ready if init is performed
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (DSPAcquisitionStart::match(message))
|
||||||
|
{
|
||||||
|
if (m_stateRx == StReady) {
|
||||||
|
setStateRx(gotoRunning(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (DSPAcquisitionStop::match(message))
|
||||||
|
{
|
||||||
|
setStateRx(gotoIdle(0));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (DSPGenerationInit::match(message))
|
||||||
|
{
|
||||||
|
setStateTx(gotoIdle(1));
|
||||||
|
|
||||||
|
if (m_stateTx == StIdle) {
|
||||||
|
setStateTx(gotoInit(1)); // State goes ready if init is performed
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (DSPGenerationStart::match(message))
|
||||||
|
{
|
||||||
|
if (m_stateTx == StReady) {
|
||||||
|
setStateTx(gotoRunning(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (DSPGenerationStop::match(message))
|
||||||
|
{
|
||||||
|
setStateTx(gotoIdle(1));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (SetSampleMIMO::match(message)) {
|
||||||
|
const auto& cmd = (const SetSampleMIMO&) message;
|
||||||
|
handleSetMIMO(cmd.getSampleMIMO());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (AddBasebandSampleSink::match(message))
|
||||||
|
{
|
||||||
|
const auto& msg = (const AddBasebandSampleSink&) message;
|
||||||
|
BasebandSampleSink* sink = msg.getSampleSink();
|
||||||
|
unsigned int isource = msg.getIndex();
|
||||||
|
|
||||||
|
if (isource < m_basebandSampleSinks.size())
|
||||||
|
{
|
||||||
|
m_basebandSampleSinks[isource].push_back(sink);
|
||||||
|
// initialize sample rate and center frequency in the sink:
|
||||||
|
int sourceStreamSampleRate = m_deviceSampleMIMO->getSourceSampleRate(isource);
|
||||||
|
quint64 sourceCenterFrequency = m_deviceSampleMIMO->getSourceCenterFrequency(isource);
|
||||||
|
auto *msgToSink = new DSPSignalNotification(sourceStreamSampleRate, sourceCenterFrequency);
|
||||||
|
sink->pushMessage(msgToSink);
|
||||||
|
// start the sink:
|
||||||
|
if (m_stateRx == StRunning) {
|
||||||
|
sink->start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (RemoveBasebandSampleSink::match(message))
|
||||||
|
{
|
||||||
|
const auto& msg = (const RemoveBasebandSampleSink&) message;
|
||||||
|
BasebandSampleSink* sink = msg.getSampleSink();
|
||||||
|
unsigned int isource = msg.getIndex();
|
||||||
|
|
||||||
|
if (isource < m_basebandSampleSinks.size())
|
||||||
|
{
|
||||||
|
if (m_stateRx == StRunning) {
|
||||||
|
sink->stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_basebandSampleSinks[isource].remove(sink);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (AddBasebandSampleSource::match(message))
|
||||||
|
{
|
||||||
|
const auto& msg = (const AddBasebandSampleSource&) message;
|
||||||
|
BasebandSampleSource *sampleSource = msg.getSampleSource();
|
||||||
|
unsigned int isink = msg.getIndex();
|
||||||
|
|
||||||
|
if (isink < m_basebandSampleSources.size())
|
||||||
|
{
|
||||||
|
m_basebandSampleSources[isink].push_back(sampleSource);
|
||||||
|
// initialize sample rate and center frequency in the sink:
|
||||||
|
int sinkStreamSampleRate = m_deviceSampleMIMO->getSinkSampleRate(isink);
|
||||||
|
quint64 sinkCenterFrequency = m_deviceSampleMIMO->getSinkCenterFrequency(isink);
|
||||||
|
auto *msgToSource = new DSPSignalNotification(sinkStreamSampleRate, sinkCenterFrequency);
|
||||||
|
sampleSource->pushMessage(msgToSource);
|
||||||
|
// start the sink:
|
||||||
|
if (m_stateTx == StRunning) {
|
||||||
|
sampleSource->start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (RemoveBasebandSampleSource::match(message))
|
||||||
|
{
|
||||||
|
const auto& msg = (const RemoveBasebandSampleSource&) message;
|
||||||
|
BasebandSampleSource* sampleSource = msg.getSampleSource();
|
||||||
|
unsigned int isink = msg.getIndex();
|
||||||
|
|
||||||
|
if (isink < m_basebandSampleSources.size())
|
||||||
|
{
|
||||||
|
sampleSource->stop();
|
||||||
|
m_basebandSampleSources[isink].remove(sampleSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (AddMIMOChannel::match(message))
|
||||||
|
{
|
||||||
|
const auto& msg = (const AddMIMOChannel&) message;
|
||||||
|
MIMOChannel *channel = msg.getChannel();
|
||||||
|
m_mimoChannels.push_back(channel);
|
||||||
|
|
||||||
|
for (unsigned int isource = 0; isource < m_deviceSampleMIMO->getNbSourceStreams(); isource++)
|
||||||
|
{
|
||||||
|
auto *notif = new DSPMIMOSignalNotification(
|
||||||
|
m_deviceSampleMIMO->getSourceSampleRate(isource),
|
||||||
|
m_deviceSampleMIMO->getSourceCenterFrequency(isource),
|
||||||
|
true,
|
||||||
|
isource
|
||||||
|
);
|
||||||
|
channel->pushMessage(notif);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned int isink = 0; isink < m_deviceSampleMIMO->getNbSinkStreams(); isink++)
|
||||||
|
{
|
||||||
|
auto *notif = new DSPMIMOSignalNotification(
|
||||||
|
m_deviceSampleMIMO->getSinkSampleRate(isink),
|
||||||
|
m_deviceSampleMIMO->getSinkCenterFrequency(isink),
|
||||||
|
false,
|
||||||
|
isink
|
||||||
|
);
|
||||||
|
channel->pushMessage(notif);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_stateRx == StRunning) {
|
||||||
|
channel->startSinks();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_stateTx == StRunning) {
|
||||||
|
channel->startSources();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (RemoveMIMOChannel::match(message))
|
||||||
|
{
|
||||||
|
const auto& msg = (const RemoveMIMOChannel&) message;
|
||||||
|
MIMOChannel *channel = msg.getChannel();
|
||||||
|
channel->stopSinks();
|
||||||
|
channel->stopSources();
|
||||||
|
m_mimoChannels.remove(channel);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (AddSpectrumSink::match(message))
|
||||||
|
{
|
||||||
|
const auto& msg = (const AddSpectrumSink&) message;
|
||||||
|
m_spectrumSink = msg.getSampleSink();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (RemoveSpectrumSink::match(message))
|
||||||
|
{
|
||||||
|
const auto& msg = (const RemoveSpectrumSink&) message;
|
||||||
|
BasebandSampleSink* spectrumSink = msg.getSampleSink();
|
||||||
|
spectrumSink->stop();
|
||||||
|
m_spectrumSink = nullptr;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (SetSpectrumSinkInput::match(message))
|
||||||
|
{
|
||||||
|
const auto& msg = (const SetSpectrumSinkInput&) message;
|
||||||
|
bool spectrumInputSourceElseSink = msg.getSourceElseSink();
|
||||||
|
unsigned int spectrumInputIndex = msg.getIndex();
|
||||||
|
|
||||||
|
if ((spectrumInputSourceElseSink != m_spectrumInputSourceElseSink) || (spectrumInputIndex != m_spectrumInputIndex))
|
||||||
|
{
|
||||||
|
if ((!spectrumInputSourceElseSink) && (spectrumInputIndex < m_deviceSampleMIMO->getNbSinkStreams())) // add the source listener
|
||||||
|
{
|
||||||
|
if (m_spectrumSink)
|
||||||
|
{
|
||||||
|
auto *notif = new DSPSignalNotification(
|
||||||
|
m_deviceSampleMIMO->getSinkSampleRate(spectrumInputIndex),
|
||||||
|
m_deviceSampleMIMO->getSinkCenterFrequency(spectrumInputIndex));
|
||||||
|
m_spectrumSink->pushMessage(notif);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_spectrumSink && spectrumInputSourceElseSink && (spectrumInputIndex < m_deviceSampleMIMO->getNbSinkFifos()))
|
||||||
|
{
|
||||||
|
auto *notif = new DSPSignalNotification(
|
||||||
|
m_deviceSampleMIMO->getSourceSampleRate(spectrumInputIndex),
|
||||||
|
m_deviceSampleMIMO->getSourceCenterFrequency(spectrumInputIndex));
|
||||||
|
m_spectrumSink->pushMessage(notif);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_spectrumInputSourceElseSink = spectrumInputSourceElseSink;
|
||||||
|
m_spectrumInputIndex = spectrumInputIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DSPDeviceMIMOEngine::handleInputMessages()
|
||||||
|
{
|
||||||
|
Message* message;
|
||||||
|
|
||||||
|
while ((message = m_inputMessageQueue.pop()) != 0)
|
||||||
|
{
|
||||||
|
qDebug("DSPDeviceMIMOEngine::handleInputMessages: message: %s", message->getIdentifier());
|
||||||
|
|
||||||
|
if (handleMessage(*message)) {
|
||||||
delete message;
|
delete message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
#include "dsp/dsptypes.h"
|
#include "dsp/dsptypes.h"
|
||||||
#include "util/message.h"
|
#include "util/message.h"
|
||||||
#include "util/messagequeue.h"
|
#include "util/messagequeue.h"
|
||||||
#include "util/syncmessenger.h"
|
|
||||||
#include "util/movingaverage.h"
|
#include "util/movingaverage.h"
|
||||||
#include "util/incrementalvector.h"
|
#include "util/incrementalvector.h"
|
||||||
#include "export.h"
|
#include "export.h"
|
||||||
@ -252,8 +251,8 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString errorMessage(int subsystemIndex); //!< Return the current error message
|
QString errorMessage(int subsystemIndex) const; //!< Return the current error message
|
||||||
QString deviceDescription(); //!< Return the device description
|
QString deviceDescription() const; //!< Return the device description
|
||||||
|
|
||||||
void configureCorrections(bool dcOffsetCorrection, bool iqImbalanceCorrection, int isource); //!< Configure source DSP corrections
|
void configureCorrections(bool dcOffsetCorrection, bool iqImbalanceCorrection, int isource); //!< Configure source DSP corrections
|
||||||
|
|
||||||
@ -320,7 +319,6 @@ private:
|
|||||||
int m_sampleMIMOSequence;
|
int m_sampleMIMOSequence;
|
||||||
|
|
||||||
MessageQueue m_inputMessageQueue; //<! Input message queue. Post here.
|
MessageQueue m_inputMessageQueue; //<! Input message queue. Post here.
|
||||||
SyncMessenger m_syncMessenger; //!< Used to process messages synchronously with the thread
|
|
||||||
|
|
||||||
typedef std::list<BasebandSampleSink*> BasebandSampleSinks;
|
typedef std::list<BasebandSampleSink*> BasebandSampleSinks;
|
||||||
std::vector<BasebandSampleSinks> m_basebandSampleSinks; //!< ancillary sample sinks on main thread (per input stream)
|
std::vector<BasebandSampleSinks> m_basebandSampleSinks; //!< ancillary sample sinks on main thread (per input stream)
|
||||||
@ -358,13 +356,13 @@ private:
|
|||||||
|
|
||||||
void handleSetMIMO(DeviceSampleMIMO* mimo); //!< Manage MIMO device setting
|
void handleSetMIMO(DeviceSampleMIMO* mimo); //!< Manage MIMO device setting
|
||||||
void iqCorrections(SampleVector::iterator begin, SampleVector::iterator end, int isource, bool imbalanceCorrection);
|
void iqCorrections(SampleVector::iterator begin, SampleVector::iterator end, int isource, bool imbalanceCorrection);
|
||||||
|
bool handleMessage(const Message& cmd);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleDataRxSync(); //!< Handle data when Rx samples have to be processed synchronously
|
void handleDataRxSync(); //!< Handle data when Rx samples have to be processed synchronously
|
||||||
void handleDataRxAsync(int streamIndex); //!< Handle data when Rx samples have to be processed asynchronously
|
void handleDataRxAsync(int streamIndex); //!< Handle data when Rx samples have to be processed asynchronously
|
||||||
void handleDataTxSync(); //!< Handle data when Tx samples have to be processed synchronously
|
void handleDataTxSync(); //!< Handle data when Tx samples have to be processed synchronously
|
||||||
void handleDataTxAsync(int streamIndex); //!< Handle data when Tx samples have to be processed asynchronously
|
void handleDataTxAsync(int streamIndex); //!< Handle data when Tx samples have to be processed asynchronously
|
||||||
void handleSynchronousMessages(); //!< Handle synchronous messages with the thread
|
|
||||||
void handleInputMessages(); //!< Handle input message queue
|
void handleInputMessages(); //!< Handle input message queue
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
Loading…
Reference in New Issue
Block a user