42 #include "babymegclient.h"
62 connect(
this,SIGNAL(DataAcq()),
this,SLOT(run()));
63 tcpSocket =
new QTcpSocket(
this);
65 connect(tcpSocket,SIGNAL(readyRead()),
this,SLOT(
ReadToBuffer()));
68 connect(
this, SIGNAL(error(
int,QString)),
69 this, SLOT(DisplayError(
int,QString)));
70 name = QHostInfo::localHostName();
73 QString domain = QHostInfo::localDomainName();
74 if (!domain.isEmpty())
75 name = name + QChar(
'.') + domain;
77 if (name!=QString(
"localhost"))
78 name = QString(
"localhost");
79 qDebug()<<
"- " + name;
81 m_bSocketIsConnected =
false;
83 DataAcqStartFlag =
false;
92 BabyMEGClient::~BabyMEGClient()
102 myBabyMEGInfo = pInfo;
108 void BabyMEGClient::DisplayError(
int socketError,
const QString &message)
110 switch (socketError){
111 case QAbstractSocket::RemoteHostClosedError:
113 case QAbstractSocket::HostNotFoundError:
114 qDebug()<<
"The host was not found. Please check the host name and the port number";
116 case QAbstractSocket::ConnectionRefusedError:
117 qDebug()<<
"The connection was refused by the peer. Make sure the server is running?";
120 qDebug()<<
"Error: " << message;
130 for (
int i=0;i<2;i++)
137 memcpy((
char *)&value,b,4);
146 QByteArray b = QByteArray::fromRawData((
char *)&a,4);
148 for (
int i=0;i<2;i++)
165 for (
int i=0;i<4;i++)
172 memcpy((
char *)&value,b,8);
182 QByteArray data = QByteArray::fromRawData((
char *)&a,8);
183 qDebug() << data.toHex();
193 m_bSocketIsConnected =
false;
195 qDebug()<<
"Client is started!";
197 if (!this->isRunning())
202 for(
int i = 0; i < 5; i++){
203 tcpSocket->connectToHost(name,port,QIODevice::ReadWrite);
204 if (tcpSocket->waitForConnected(5000))
206 m_bSocketIsConnected =
true;
207 qDebug(
"Connect to BabyMEG Server ... Ok");
209 qDebug()<<
"Send the initial parameter request";
210 if (tcpSocket->state()==QAbstractSocket::ConnectedState)
219 qDebug(
"Connection to BabyMEG server failed");
222 qDebug(
"Please check the babyMEG server: if started");
232 if(m_bSocketIsConnected && tcpSocket->state()==QAbstractSocket::ConnectedState)
241 qDebug() <<
"SendCommandToBabyMEGShortConnection";
243 bool connected = (tcpSocket->state() == QTcpSocket::ConnectedState);
246 tcpSocket->disconnectFromHost();
247 if(tcpSocket->state() != QAbstractSocket::UnconnectedState)
248 tcpSocket->waitForDisconnected();
251 tcpSocket->connectToHost(name,port,QIODevice::ReadWrite);
252 if (tcpSocket->waitForConnected(10000))
255 qDebug()<<
"Connection is built.";
257 if(tcpSocket->state()==QAbstractSocket::ConnectedState)
259 qDebug()<<
"Send String [" << s <<
"]\n"<<
"length["<<s.size()<<
"]\n";
266 tcpSocket->waitForBytesWritten();
270 qDebug()<<
"Connect state is abnormal:"<<tcpSocket->state();
281 qDebug()<<
"Send Command";
282 if(m_bSocketIsConnected && tcpSocket->state()==QAbstractSocket::ConnectedState)
285 tcpSocket->write(
"COMD");
286 tcpSocket->waitForBytesWritten();
291 tcpSocket->write(Scmd);
292 tcpSocket->write(
"SLM");
293 tcpSocket->waitForBytesWritten();
307 int numBytes = tcpSocket->bytesAvailable();
310 dat = tcpSocket->read(numBytes);
318 qDebug()<<
"[Empty dat: error]"<<tcpSocket->errorString();
332 if(buffer.size()>= 8){
333 QByteArray CMD = buffer.left(4);
334 QByteArray DLEN = buffer.mid(4,4);
340 if (tmp <= (buffer.size() - 8))
348 else if (CMD ==
"DATR")
350 else if (CMD ==
"COMD")
352 else if (CMD ==
"QUIT")
354 else if (CMD ==
"COMS")
356 else if (CMD ==
"QUIS")
358 else if (CMD ==
"INFG")
365 QByteArray PARA = buffer.left(tmp);
366 qDebug()<<
"[INFO]"<<PARA;
369 buffer.remove(0,tmp);
370 qDebug()<<
"INFO has been received!!!!";
385 QByteArray RESP = buffer.left(tmp);
386 qDebug()<<
"5.Readbytes:"<<RESP.size();
389 buffer.remove(0,tmp);
396 tcpSocket->disconnectFromHost();
397 if(tcpSocket->state() != QAbstractSocket::UnconnectedState)
398 tcpSocket->waitForDisconnected();
399 m_bSocketIsConnected =
false;
400 qDebug()<<
"Disconnect Server";
401 qDebug()<<
"Client is End!";
402 qDebug()<<
"You can close this application or restart to connect Server.";
407 QByteArray RESP = buffer.left(tmp);
408 qDebug()<<
"5.Readbytes:"<<RESP.size();
412 buffer.remove(0,tmp);
419 tcpSocket->disconnectFromHost();
420 if(tcpSocket->state() != QAbstractSocket::UnconnectedState)
421 tcpSocket->waitForDisconnected();
422 m_bSocketIsConnected =
false;
423 qDebug()<<
"Disconnect Server";
427 QByteArray PARA = buffer.left(tmp);
428 qDebug()<<
"[INFG]"<<PARA;
431 buffer.remove(0,tmp);
432 qDebug()<<
"INFG has been received!!!!";
437 qDebug()<<
"Unknow Type";
452 QByteArray DATA = buffer.left(tmp);
453 qDebug()<<
"5.Readbytes:"<<DATA.size();
456 buffer.remove(0,tmp);
459 qDebug()<<
"Next Block ..." << numBlock;
474 while (buffer.size()>=(tmp+8))
476 CMD1 = buffer.left(4);
477 qDebug()<<
"CMD"<< CMD1;
480 DLEN1 = buffer.mid(4,4);
482 qDebug() <<
"[2]First 4 bytes + length" << CMD1 <<
"["<<CMD1.toHex()<<
"]";
483 qDebug() <<
"[2]Command[" << CMD1 <<
"]";
484 qDebug() <<
"[2]Body Length[" << tmp1 <<
"]";
487 DATA1 = buffer.left(tmp1);
490 buffer.remove(0,tmp1);
491 qDebug()<<
"End of DataPackeage" << buffer.left(3);
492 qDebug()<<
"[2]Rest buffer [buffer size() =" << buffer.size()<<
"]";
494 qDebug()<<
"[2]Next Block ..." << numBlock;
498 qDebug()<<
"[CMD1]"<<CMD1.toHex();
501 qDebug()<<
"[ReadNextBlock:buffer size]"<<buffer.size();
518 if (tcpSocket->state()==QAbstractSocket::ConnectedState)
523 WrtNum = tcpSocket->write(array,4);
526 qDebug()<<
"Error for sending a command";
528 if(WrtNum != array.size())
530 qDebug()<<
"Uncorrectly sending";
533 tcpSocket->waitForBytesWritten();
535 qDebug()<<
"[Done: Send Command]"<<array<<
"[Send bytes]"<<WrtNum;
540 qDebug()<<
"Not in Connected state";
552 void BabyMEGClient::run()
BabyMEGClient(int myPort, QObject *parent=0)
void MGH_LM_Parse_Para(QByteArray cmdstr)
void MGH_LM_Parse_Para_Infg(QByteArray cmdstr)
void SendCommandToBabyMEG()
void ReadNextBlock(int tmp)
void HexDisplay(double a)
void SendCommandToBabyMEGShortConnection(QByteArray s)
void SetInfo(BabyMEGInfo *pInfo)
double MGH_LM_Byte2Double(QByteArray InByte)
int MGH_LM_Byte2Int(QByteArray InByte)
void SendCommand(QString s)
QByteArray MGH_LM_Int2Byte(int a)
void DispatchDataPackage(int tmp)
void MGH_LM_Send_DataPackage(QByteArray DATA)
void MGH_LM_Send_CMDPackage(QByteArray DATA)