فهرست منبع

test radio message merge

HAPO-9# 3 سال پیش
والد
کامیت
3c64cf5da0
2فایلهای تغییر یافته به همراه64 افزوده شده و 52 حذف شده
  1. 61 51
      src/v2x/CommunicatePlatform/radio.cpp
  2. 3 1
      src/v2x/CommunicatePlatform/radio.h

+ 61 - 51
src/v2x/CommunicatePlatform/radio.cpp

@@ -21,7 +21,9 @@ Radio::Radio()
     //shareMem:send
     mpmem_radio_send_addr = iv::modulecomm::RegisterSend("v2r_send",100,1);
     m_sVin="A1000000CATARCS02";
-    m_bEnReceive=false;
+    //m_bEnReceive=false;
+    m_iAppend=-1;
+    m_data.clear();
     /////////////////////////////
 }
 Radio::~Radio()
@@ -180,7 +182,7 @@ void Radio::closeSerial()
 }
 void Radio::heartBeat()
 {
-    m_bEnReceive=true;
+    //m_bEnReceive=true;
     if(m_bEnConnect) {
         if(m_bSerialOpen==false) {
             openSerial();
@@ -226,7 +228,7 @@ void Radio::heartBeat()
             closeSerial();
         }
     }
-    m_bEnReceive=false;
+    //m_bEnReceive=false;
 }
 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;
         }
-        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)//计算校验

+ 3 - 1
src/v2x/CommunicatePlatform/radio.h

@@ -157,9 +157,10 @@ public:
     void setGpsImuMemory(gpsImuM m);
     void sendResponseMessage(int type);
 private:
+    int m_iAppend;
     QSerialPort *m_serialPort_Radio;
     bool m_bSerialOpen;
-    bool m_bEnReceive;
+    //bool m_bEnReceive;
     QTimer *timer;
     bool m_bEnConnect;
     QQueue<QByteArray> readData;
@@ -182,6 +183,7 @@ private:
     iv::Ivlog *mivlog;
     void * mpmem_radio_send_addr = nullptr; //电台发送给brain数据地址
     //////////
+    QByteArray m_data;
 private slots:
     void receiveData();
     void heartBeat();