Browse Source

fix(driver_KS136A):add canrecv_producer, but not finished

孙嘉城 3 years ago
parent
commit
1c491957dd

+ 2 - 0
src/driver/driver_ultrasonic_dauxi_KS136A/can_producer_consumer.cpp

@@ -1,5 +1,7 @@
 #include "can_producer_consumer.h"
 
+#include <iostream>
+
 CAN_Producer_Consumer::CAN_Producer_Consumer(const int bufSize)
 {
     bufferSize = bufSize;

+ 0 - 2
src/driver/driver_ultrasonic_dauxi_KS136A/can_producer_consumer.h

@@ -5,8 +5,6 @@
 #include <QMutex>
 #include <QVector>
 
-#include <iostream>
-
 #include "canmsg.pb.h"
 
 class CAN_Producer_Consumer

+ 12 - 15
src/driver/driver_ultrasonic_dauxi_KS136A/canrecv_consumer.cpp

@@ -4,7 +4,6 @@
 
 extern setupConfig_t setupConfig;
 extern iv::msgunit shmSonar;
-extern uint64_t gTime_ms;
 
 CANRecv_Consumer::CANRecv_Consumer(CAN_Producer_Consumer *pBuf)
 {
@@ -95,14 +94,13 @@ void CANRecv_Consumer::run()
                     sensorStatus.fill(false,NUM_OF_SENSOR_MAX);
                     tempSensorID = 0;
                 }
-                if(tempLastResult <= 2000)
-                    emit Enable_Ask(true,tempSensorID,2);
-                else if(tempLastResult <= 3800)
-                    emit Enable_Ask(true,tempSensorID,1);
-                else
-                    emit Enable_Ask(true,tempSensorID,0);
+//                if(tempLastResult <= 2000)
+//                    emit Enable_Ask(true,tempSensorID,2);
+//                else if(tempLastResult <= 3800)
+//                    emit Enable_Ask(true,tempSensorID,1);
+//                else
+//                    emit Enable_Ask(true,tempSensorID,0);
                 decodeTimer.restart();
-                gTime_ms = QDateTime::currentMSecsSinceEpoch();
             }
             else
             {
@@ -145,14 +143,13 @@ void CANRecv_Consumer::run()
                             sensorStatus.fill(false,NUM_OF_SENSOR_MAX);
                             tempSensorID = 0;
                         }
-                        if(tempLastResult <= 2000)
-                            emit Enable_Ask(true,tempSensorID,2);
-                        else if(tempLastResult <= 3800)
-                            emit Enable_Ask(true,tempSensorID,1);
-                        else
-                            emit Enable_Ask(true,tempSensorID,0);
+//                        if(tempLastResult <= 2000)
+//                            emit Enable_Ask(true,tempSensorID,2);
+//                        else if(tempLastResult <= 3800)
+//                            emit Enable_Ask(true,tempSensorID,1);
+//                        else
+//                            emit Enable_Ask(true,tempSensorID,0);
                         decodeTimer.restart();
-                        gTime_ms = QDateTime::currentMSecsSinceEpoch();
                     }
                 }
             }

+ 43 - 0
src/driver/driver_ultrasonic_dauxi_KS136A/canrecv_producer.cpp

@@ -0,0 +1,43 @@
+#include "canrecv_producer.h"
+
+#include <thread>
+
+#include <iostream>
+#include <string>
+//#include <stdlib.h>
+#include <unistd.h>
+
+#include <net/if.h>
+//#include <sys/ioctl.h>
+#include <sys/socket.h>
+
+#include <linux/can.h>
+#include <linux/can/raw.h>
+
+CANRecv_Producer::CANRecv_Producer(CAN_Producer_Consumer *pBuf)
+{
+    pBuffer = pBuf;
+}
+
+CANRecv_Producer::~CANRecv_Producer()
+{
+    requestInterruption();
+    while(this->isFinished() == false);
+    close(s);
+}
+
+void CANRecv_Producer::run()
+{
+    iv::can::canraw xraw;
+
+    if ((s = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0)
+    {
+        perror("socket");
+    }
+
+    while (!QThread::isInterruptionRequested())
+    {
+        std::cout<<"send consumer time :"<<std::endl;
+        sleep(1);
+    }
+}

+ 37 - 0
src/driver/driver_ultrasonic_dauxi_KS136A/canrecv_producer.h

@@ -0,0 +1,37 @@
+#ifndef CANRECV_PRODUCER_H
+#define CANRECV_PRODUCER_H
+
+#include <QObject>
+#include <QTimer>
+#include <QDateTime>
+#include <QThread>
+
+#include "modulecomm.h"
+
+#include "can_producer_consumer.h"
+#include "decode_cfg.h"
+#include "iv_msgunit.h"
+
+class CANRecv_Producer : public QThread
+{
+    Q_OBJECT
+public:
+    CANRecv_Producer(CAN_Producer_Consumer *pBuf);
+    ~CANRecv_Producer();
+
+protected:
+    void run();
+
+private:
+    CAN_Producer_Consumer *pBuffer;
+
+    uint32_t CAN_ID = 0x000u;
+    uint8_t CAN_IDE = 0;
+    uint8_t CAN_RTR = 0;
+    uint8_t CAN_DLC = 0;
+    uint8_t CAN_data[8] = {0};
+
+    int s; /* can raw socket */
+};
+
+#endif // CANRECV_PRODUCER_H

+ 0 - 3
src/driver/driver_ultrasonic_dauxi_KS136A/cansend_consumer.cpp

@@ -16,7 +16,6 @@
 
 extern setupConfig_t setupConfig;
 extern iv::msgunit shmCANSend;
-extern uint64_t gTime_ms;
 
 CANSend_Consumer::CANSend_Consumer(CAN_Producer_Consumer *pBuf)
 {
@@ -124,7 +123,5 @@ void CANSend_Consumer::run()
         {
             perror("write");
         }
-
-        std::cout<<"send consumer time :"<<(QDateTime::currentMSecsSinceEpoch() - gTime_ms)<<std::endl;
     }
 }

+ 2 - 0
src/driver/driver_ultrasonic_dauxi_KS136A/driver_ultrasonic_dauxi_KS136A.pro

@@ -23,6 +23,7 @@ SOURCES += \
         ../../include/msgtype/ultrasonic.pb.cc \
         can_producer_consumer.cpp \
         canrecv_consumer.cpp \
+        canrecv_producer.cpp \
         cansend_consumer.cpp \
         cansend_producer.cpp \
         decode_cfg.cpp \
@@ -34,6 +35,7 @@ HEADERS += \
     ../../include/msgtype/ultrasonic.pb.h \
     can_producer_consumer.h \
     canrecv_consumer.h \
+    canrecv_producer.h \
     cansend_consumer.h \
     cansend_producer.h \
     decode_cfg.h \

+ 2 - 0
src/driver/driver_ultrasonic_dauxi_KS136A/main.cpp

@@ -60,6 +60,8 @@ void ListenCANMsg(const char * strdata,const unsigned int nSize,const unsigned i
     }
 
     CANRecv.Produce_Elements_From_CANMsg(xmsg);
+    std::cout<<"recieve a msg:"<<QDateTime::currentMSecsSinceEpoch()<<std::endl;
+    std::cout<<(unsigned int)(xmsg.rawmsg(0).data()[1])<<std::endl;
 }
 
 void ExitFunc()