41 #include "fiffsimulator.h"
54 #include <QtCore/QtPlugin>
55 #include <QtCore/QTextStream>
56 #include <QtCore/QFile>
57 #include <QMutexLocker>
78 : m_sFiffSimulatorClientAlias(
"mne-x")
79 , m_pRtCmdClient(NULL)
80 , m_bCmdClientIsConnected(false)
81 , m_sFiffSimulatorIP(
"127.0.0.1")
84 , m_pRawMatrixBuffer_In(0)
95 if(m_pFiffSimulatorProducer->isRunning() || this->isRunning())
104 QSharedPointer<FiffSimulator> pFiffSimulatorClone(
new FiffSimulator());
105 return pFiffSimulatorClone;
111 void FiffSimulator::init()
114 m_pRTMSA_FiffSimulator->data()->setName(this->
getName());
118 m_pFiffSimulatorProducer->start();
132 qDebug() <<
"void FiffSimulator::unload()";
141 void FiffSimulator::initConnector()
145 m_pRTMSA_FiffSimulator->data()->initFromFiffInfo(m_pFiffInfo);
146 m_pRTMSA_FiffSimulator->data()->setMultiArraySize(1);
147 m_pRTMSA_FiffSimulator->data()->setVisibility(
true);
148 m_pRTMSA_FiffSimulator->data()->setXMLLayoutFile(
"./mne_x_plugins/resources/FiffSimulator/VectorViewSimLayout.xml");
157 if(p_iNewConnectorId != m_iActiveConnectorId)
162 (*m_pRtCmdClient)[
"selcon"].pValues()[0].setValue(p_iNewConnectorId);
163 (*m_pRtCmdClient)[
"selcon"].send();
165 m_iActiveConnectorId = p_iNewConnectorId;
175 m_pRtCmdClient->requestCommands();
186 m_iBufferSize = m_pRtCmdClient->requestBufsize();
197 QMutexLocker locker(&m_qMutex);
207 if(m_pRtCmdClient.isNull())
208 m_pRtCmdClient = QSharedPointer<RtCmdClient>(
new RtCmdClient);
209 else if(m_bCmdClientIsConnected)
212 m_pRtCmdClient->connectToHost(m_sFiffSimulatorIP);
213 m_pRtCmdClient->waitForConnected(1000);
215 if(m_pRtCmdClient->state() == QTcpSocket::ConnectedState)
219 if(!m_bCmdClientIsConnected)
224 m_pRtCmdClient->requestCommands();
229 m_bCmdClientIsConnected =
true;
240 if(m_qMapConnectors.size() == 0)
241 m_iActiveConnectorId = m_pRtCmdClient->requestConnectors(m_qMapConnectors);
243 QMap<qint32, QString>::const_iterator it;
244 for(it = m_qMapConnectors.begin(); it != m_qMapConnectors.end(); ++it)
245 if(it.value().compare(
"Fiff File Simulator") == 0 && m_iActiveConnectorId != it.key())
251 m_iBufferSize = m_pRtCmdClient->requestBufsize();
264 QMutexLocker locker(&m_qMutex);
265 if(m_bCmdClientIsConnected)
267 m_pRtCmdClient->disconnectFromHost();
268 if(m_pRtCmdClient->ConnectedState != QTcpSocket::UnconnectedState)
269 m_pRtCmdClient->waitForDisconnected();
270 m_bCmdClientIsConnected =
false;
280 while(!(m_pFiffSimulatorProducer->m_iDataClientId > -1 && m_bCmdClientIsConnected))
281 qWarning() <<
"FiffSimulatorProducer is not running! Retry...";
283 if(m_pFiffSimulatorProducer->m_iDataClientId > -1 && m_bCmdClientIsConnected)
286 (*m_pRtCmdClient)[
"measinfo"].pValues()[0].setValue(m_pFiffSimulatorProducer->m_iDataClientId);
287 (*m_pRtCmdClient)[
"measinfo"].send();
289 m_pFiffSimulatorProducer->producerMutex.lock();
290 m_pFiffSimulatorProducer->m_bFlagInfoRequest =
true;
291 m_pFiffSimulatorProducer->producerMutex.unlock();
294 qWarning() <<
"FiffSimulatorProducer is not connected!";
303 if(this->isRunning())
306 if(m_bCmdClientIsConnected && m_pFiffInfo)
309 (*m_pRtCmdClient)[
"bufsize"].pValues()[0].setValue(m_iBufferSize);
310 (*m_pRtCmdClient)[
"bufsize"].send();
314 m_pRawMatrixBuffer_In = QSharedPointer<RawMatrixBuffer>(
new RawMatrixBuffer(8,m_pFiffInfo->nchan,m_iBufferSize));
321 m_pFiffSimulatorProducer->start();
323 while(!m_pFiffSimulatorProducer->m_bFlagMeasuring)
328 (*m_pRtCmdClient)[
"start"].pValues()[0].setValue(m_pFiffSimulatorProducer->m_iDataClientId);
329 (*m_pRtCmdClient)[
"start"].send();
342 if(m_pFiffSimulatorProducer->isRunning())
343 m_pFiffSimulatorProducer->stop();
347 m_bIsRunning =
false;
350 if(this->isRunning())
353 m_pRawMatrixBuffer_In->releaseFromPop();
355 m_pRawMatrixBuffer_In->clear();
357 m_pRTMSA_FiffSimulator->data()->clear();
376 return "Fiff Simulator";
398 QMutexLocker locker(&m_qMutex);
403 matValue = m_pRawMatrixBuffer_In->pop();
406 m_pRTMSA_FiffSimulator->data()->setValue(matValue.cast<
double>());
Contains the declaration of the FiffSimulatorProducer class.
virtual IPlugin::PluginType getType() const
virtual QWidget * setupWidget()
OutputConnectorList m_outputConnectors
Real-time command client.
void cmdConnectionChanged(bool p_bStatus)
virtual QSharedPointer< IPlugin > clone() const
void changeConnector(qint32 p_iNewConnectorId)
static QSharedPointer< PluginOutputData< T > > create(IPlugin *parent, const QString &name, const QString &descr)
The FiffSimulatorProducer class provides a Fiff data producer for a given sampling rate...
IOUtils class declaration.
virtual const char * getName() const
void disconnectCmdClient()