Преглед изворни кода

change apollo nvcan adchassis. test ok.

yuchuli пре 3 недеља
родитељ
комит
c7ece04cd7

+ 3 - 1
src/apollo/apollolib/adchassis/decodechassis.cpp

@@ -48,6 +48,8 @@ static void ShareChassis(void * pa,iv::chassis  * pchassis)
         std::cout<<"ShareChassis Error."<<std::endl;
         return;
     }
+    
+//    std::cout<<" share chassis."<<std::endl;
 
     chassisfun * p = (chassisfun *) pa;
     (*p)(pchassis);
@@ -546,7 +548,7 @@ int ProcShenLanCANFDChassis(void *pa, iv::can::canmsg *pmsg)
 
                 xchassis.set_angle_feedback(static_cast<float>(ang));
      //           ShareChassis(pa,&xchassis);
-                if(ang<30)std::cout<<"ang: "<<xchassis.angle_feedback()<<std::endl;
+     //           if(ang<30)std::cout<<"ang: "<<xchassis.angle_feedback()<<std::endl;
             }
             else
             {

+ 1 - 1
src/apollo/apollolib/nvcan/basecan.h

@@ -9,7 +9,7 @@ class basecan_msg
     bool isExtern;
     bool isRemote;
     unsigned char nLen;
-    unsigned char data[8];
+    unsigned char data[64];
     double frecvtime;
 #ifdef SEND_STAT
     int64_t mSetTime;  //Used for calucate send latency

+ 8 - 2
src/apollo/apollolib/nvcan/nvcan.cpp

@@ -159,7 +159,6 @@ void nvcan::threadrun()
         for (i=0; i<currmax; i++) {  /* check all CAN RAW sockets */
 
             if (FD_ISSET(s[i], &rdfs)) {
-
                 nLastRecv = std::chrono::system_clock::now().time_since_epoch().count()/1e6;
                 /* these settings may be modified by recvmsg() */
                 iov.iov_len = sizeof(frame);
@@ -181,6 +180,7 @@ void nvcan::threadrun()
 //                    return 1;
                 }
 
+
                 if ((size_t)nbytes == CAN_MTU)
                     maxdlen = CAN_MAX_DLEN;
                 else if ((size_t)nbytes == CANFD_MTU)
@@ -193,18 +193,22 @@ void nvcan::threadrun()
                 nrecvcount++;
   //              qDebug("receive msg.");
                 mMutex.lock();
+                
 
                 basecan_msg msg;
                 msg.id = frame.can_id&0x1fffffff;
+                
                 if((frame.can_id&0x80000000)!= 0)msg.isExtern = true;
                 else msg.isExtern = false;
                 if((frame.can_id&0x40000000)!= 0)msg.isRemote = true;
                 else msg.isRemote = false;
                 msg.nLen = frame.len;
+                int ndl = msg.nLen;
 //                if(msg.id == 0x1c2)qDebug("id = %08x",msg.id);
-                if((frame.len<=64)&&(frame.len>0))memcpy(msg.data,frame.data,frame.len);
+                if((frame.len<=64)&&(frame.len>0))memcpy(msg.data,frame.data,ndl);
 
                 msg.frecvtime = 0.0;
+                
                 for (cmsg = CMSG_FIRSTHDR(&xmsghdr);
                      cmsg && (cmsg->cmsg_level == SOL_SOCKET);
                      cmsg = CMSG_NXTHDR(&xmsghdr,cmsg)) {
@@ -233,6 +237,7 @@ void nvcan::threadrun()
                         std::cout<<" type is SO_RXQ_OVFL"<<std::endl;
  //                       memcpy(&dropcnt[i], CMSG_DATA(cmsg), sizeof(__u32));
                 }
+                
 
                 if(mMsgRecvBuf[i].size()<BUF_SIZE)
                 {
@@ -244,6 +249,7 @@ void nvcan::threadrun()
             }
         }
 
+
         if((std::chrono::steady_clock::now().time_since_epoch().count()/1e6 - nLastRecv)> 1000)
         {
             if(nRecvState == 0)

+ 2 - 1
src/apollo/code/apollochassis/main.cpp

@@ -32,6 +32,7 @@ void RecvCANMsg(const std::shared_ptr<iv::can::canmsg> &xmsg)
 void ChassisCallBack(iv::chassis * pchassis)
 {
     iv::chassis* raw_ptr = new iv::chassis();
+    raw_ptr->CopyFrom(*pchassis);
     std::shared_ptr<iv::chassis> chassis_ptr(raw_ptr);
 
     chassis_writer_->Write(chassis_ptr);
@@ -56,7 +57,7 @@ int main(int argc, char *argv[])
 
 
 
-    std::string strvehtype = std::string("shenlanfd");
+    std::string strvehtype = std::string("SHENLAN_CANFD");
     gpChassis = new Adchassis(&gchassisfun,strvehtype);
 
     apollo::cyber::WaitForShutdown();

+ 1 - 1
src/apollo/code/apollodriver_nvcan/basecan.h

@@ -9,7 +9,7 @@ class basecan_msg
     bool isExtern;
     bool isRemote;
     unsigned char nLen;
-    unsigned char data[8];
+    unsigned char data[64];
     double frecvtime;
 #ifdef SEND_STAT
     int64_t mSetTime;  //Used for calucate send latency