|
@@ -21,7 +21,9 @@ Radio::Radio()
|
|
//shareMem:send
|
|
//shareMem:send
|
|
mpmem_radio_send_addr = iv::modulecomm::RegisterSend("v2r_send",100,1);
|
|
mpmem_radio_send_addr = iv::modulecomm::RegisterSend("v2r_send",100,1);
|
|
m_sVin="A1000000CATARCS02";
|
|
m_sVin="A1000000CATARCS02";
|
|
- m_bEnReceive=false;
|
|
|
|
|
|
+ //m_bEnReceive=false;
|
|
|
|
+ m_iAppend=-1;
|
|
|
|
+ m_data.clear();
|
|
/////////////////////////////
|
|
/////////////////////////////
|
|
}
|
|
}
|
|
Radio::~Radio()
|
|
Radio::~Radio()
|
|
@@ -180,7 +182,7 @@ void Radio::closeSerial()
|
|
}
|
|
}
|
|
void Radio::heartBeat()
|
|
void Radio::heartBeat()
|
|
{
|
|
{
|
|
- m_bEnReceive=true;
|
|
|
|
|
|
+ //m_bEnReceive=true;
|
|
if(m_bEnConnect) {
|
|
if(m_bEnConnect) {
|
|
if(m_bSerialOpen==false) {
|
|
if(m_bSerialOpen==false) {
|
|
openSerial();
|
|
openSerial();
|
|
@@ -226,7 +228,7 @@ void Radio::heartBeat()
|
|
closeSerial();
|
|
closeSerial();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- m_bEnReceive=false;
|
|
|
|
|
|
+ //m_bEnReceive=false;
|
|
}
|
|
}
|
|
void Radio::upDataStream()
|
|
void Radio::upDataStream()
|
|
{
|
|
{
|
|
@@ -397,62 +399,70 @@ void Radio::receiveData()
|
|
{
|
|
{
|
|
|
|
|
|
|
|
|
|
- qint64 rLen = m_serialPort_Radio->bytesAvailable();
|
|
|
|
|
|
+ if(m_iAppend==-1) {
|
|
|
|
+ qint64 rLen = m_serialPort_Radio->bytesAvailable();
|
|
|
|
|
|
- if (rLen < 50) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- qDebug() << "rLen:"<<rLen;
|
|
|
|
- char *headdata = new char[1];
|
|
|
|
- if (headdata == NULL) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- memset(headdata, 0, 1);
|
|
|
|
- int ret;
|
|
|
|
- char first;
|
|
|
|
-
|
|
|
|
- for(int i=0;i++;i<rLen-4)
|
|
|
|
- {
|
|
|
|
- ret= m_serialPort_Radio->read(headdata, 1);
|
|
|
|
- if(ret <= 0)
|
|
|
|
- {
|
|
|
|
- qDebug() << "read error";
|
|
|
|
|
|
+ if (rLen < 21) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- QByteArray data(headdata, ret);
|
|
|
|
- first = data[i];
|
|
|
|
- if (first == '$') {
|
|
|
|
- delete [] headdata;
|
|
|
|
- break;
|
|
|
|
|
|
+ qDebug() << "rLen:"<<rLen;
|
|
|
|
+
|
|
|
|
+ char first,second;
|
|
|
|
+ QByteArray _ba;
|
|
|
|
+ _ba.clear();
|
|
|
|
+ _ba = m_serialPort_Radio->readAll();
|
|
|
|
+ for(int i=0;i<_ba.size()-1;i++) {
|
|
|
|
+ first = _ba[i];
|
|
|
|
+ second = _ba[i+1];
|
|
|
|
+ if ((first == '$')&&(second == '$')) {
|
|
|
|
+ qDebug() << "find first two byte";
|
|
|
|
+ if(i>0){
|
|
|
|
+ _ba.remove(0,i-1);
|
|
|
|
+ }
|
|
|
|
+ m_iAppend=0;
|
|
|
|
+ m_data.append(_ba);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
- rLen = m_serialPort_Radio->bytesAvailable();
|
|
|
|
- if (rLen < 40) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- char *_data = new char[rLen + 2];
|
|
|
|
- if (_data == NULL) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- memset(_data, 0, rLen + 2);
|
|
|
|
- _data[0]=0x24;
|
|
|
|
- //socket_mutex.lock();
|
|
|
|
- ret = m_serialPort_Radio->read(_data+1, rLen);
|
|
|
|
- //socket_mutex.unlock();
|
|
|
|
- if(ret <= 0)
|
|
|
|
- {
|
|
|
|
- qDebug() << "read error";
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- QByteArray data(_data, ret);
|
|
|
|
|
|
+ } else if(m_iAppend==0) {
|
|
|
|
+ qint64 rLen = m_serialPort_Radio->bytesAvailable();
|
|
|
|
+ int dataLen=m_data.size();
|
|
|
|
+ if (rLen < 50-dataLen) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ QByteArray _ba;
|
|
|
|
+ QByteArray _tmp;
|
|
|
|
+ char first,second;
|
|
|
|
+ _tmp.clear();
|
|
|
|
+ _ba.clear();
|
|
|
|
+ _ba = m_serialPort_Radio->readAll();
|
|
|
|
+ for(int i=0;i<_ba.size()-1;i++) {
|
|
|
|
+ first = _ba[i];
|
|
|
|
+ second = _ba[i+1];
|
|
|
|
+ if ((first == '$')&&(second == '$')) {
|
|
|
|
+ qDebug() << "find first two byte";
|
|
|
|
+ if(i>0){
|
|
|
|
+ _tmp.append(_ba);
|
|
|
|
+ _ba.remove(i,(_ba.size()-1));
|
|
|
|
+ _tmp.remove(0,i-1);
|
|
|
|
+ } else if(i==0) {
|
|
|
|
+ _tmp.append(_ba);
|
|
|
|
+ _ba.remove(i,(_ba.size()-1));
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- delete [] _data;
|
|
|
|
- // 数据拆开
|
|
|
|
- ReceiveDecode(data);
|
|
|
|
- replyMessage();
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ m_data.append(_ba);
|
|
|
|
+ ReceiveDecode(m_data);
|
|
|
|
+ replyMessage();
|
|
|
|
+ m_iAppend=-1;
|
|
|
|
+ m_data.clear();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
char Radio::BCCEncode(char sbuf[],int len)//计算校验
|
|
char Radio::BCCEncode(char sbuf[],int len)//计算校验
|