Эх сурвалжийг харах

add apollodriver_nvcan.near complete.

yuchuli 1 сар өмнө
parent
commit
0c9fb35f2b

+ 73 - 0
src/apollo/code/apollodriver_nvcan/.gitignore

@@ -0,0 +1,73 @@
+# This file is used to ignore files which are generated
+# ----------------------------------------------------------------------------
+
+*~
+*.autosave
+*.a
+*.core
+*.moc
+*.o
+*.obj
+*.orig
+*.rej
+*.so
+*.so.*
+*_pch.h.cpp
+*_resource.rc
+*.qm
+.#*
+*.*#
+core
+!core/
+tags
+.DS_Store
+.directory
+*.debug
+Makefile*
+*.prl
+*.app
+moc_*.cpp
+ui_*.h
+qrc_*.cpp
+Thumbs.db
+*.res
+*.rc
+/.qmake.cache
+/.qmake.stash
+
+# qtcreator generated files
+*.pro.user*
+
+# xemacs temporary files
+*.flc
+
+# Vim temporary files
+.*.swp
+
+# Visual Studio generated files
+*.ib_pdb_index
+*.idb
+*.ilk
+*.pdb
+*.sln
+*.suo
+*.vcproj
+*vcproj.*.*.user
+*.ncb
+*.sdf
+*.opensdf
+*.vcxproj
+*vcxproj.*
+
+# MinGW generated files
+*.Debug
+*.Release
+
+# Python byte code
+*.pyc
+
+# Binaries
+# --------
+*.dll
+*.exe
+

+ 66 - 0
src/apollo/code/apollodriver_nvcan/apollodriver_nvcan.pro

@@ -0,0 +1,66 @@
+#qmake apollodriver_nvcan.pro  
+#make
+
+QT -= gui
+
+CONFIG += c++11 console
+CONFIG -= app_bundle
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+        main.cpp
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
+
+INCLUDEPATH += /opt/apollo/neo/include
+INCLUDEPATH += /apollo_workspace/bazel-bin/external/apollo_src
+
+
+LIBS += -L/opt/apollo/neo/lib/cyber -lcyber -lcyber_binary -lcyber_state
+
+LIBS += /opt/apollo/neo/lib/cyber/component/*.so
+LIBS += /opt/apollo/neo/lib/cyber/context/*.so
+LIBS += /opt/apollo/neo/lib/cyber/io/*.so
+LIBS += /opt/apollo/neo/lib/cyber/logger/*.so
+LIBS += /opt/apollo/neo/lib/cyber/parameter/*.so
+LIBS += /opt/apollo/neo/lib/cyber/plugin_manager/*.so
+LIBS += /opt/apollo/neo/lib/cyber/node/*.so
+LIBS += /opt/apollo/neo/lib/cyber/blocker/*.so
+LIBS += /opt/apollo/neo/lib/cyber/class_loader/*.so
+LIBS += /opt/apollo/neo/lib/cyber/profiler/*.so
+LIBS += /opt/apollo/neo/lib/cyber/scheduler/*.so
+LIBS += /opt/apollo/neo/lib/cyber/service/*.so
+LIBS += /opt/apollo/neo/lib/cyber/statistics/*.so
+LIBS += /opt/apollo/neo/lib/cyber/task/*.so
+LIBS += /opt/apollo/neo/lib/cyber/common/*.so
+LIBS += /opt/apollo/neo/lib/cyber/service_discovery/*.so
+LIBS += /opt/apollo/neo/lib/cyber/transport/*.so
+LIBS += /opt/apollo/neo/lib/cyber/message/*.so
+LIBS += /opt/apollo/neo/lib/cyber/proto/*.so
+LIBS += /opt/apollo/neo/lib/cyber/croutine/*.so
+LIBS += /opt/apollo/neo/lib/cyber/event/*.so
+LIBS += /opt/apollo/neo/lib/cyber/time/*.so
+
+LIBS += -L/opt/apollo/neo/lib/3rd-fastdds-wrap -lfastrtps
+
+LIBS += -L/lib/aarch64-linux-gnu -lgflags -lglog
+
+LIBS += -L/usr/local/lib/ -lbvar
+
+LIBS += -L/opt/apollo/neo/lib/3rd-protobuf -lprotobuf
+
+LIBS += -L$$PWD -lnvcan
+

+ 39 - 0
src/apollo/code/apollodriver_nvcan/basecan.h

@@ -0,0 +1,39 @@
+#ifndef BASECAN_H
+#define BASECAN_H
+
+
+class basecan_msg
+{
+  public:
+    unsigned int id;
+    bool isExtern;
+    bool isRemote;
+    unsigned char nLen;
+    unsigned char data[8];
+    double frecvtime;
+#ifdef SEND_STAT
+    int64_t mSetTime;  //Used for calucate send latency
+#endif
+};
+
+class basecan
+{
+public:
+    basecan();
+    ~basecan();
+    virtual int GetMessage(const int nch,basecan_msg * pMsg,const int nCap);
+    virtual int SetMessage(const int nch,basecan_msg * pMsg); //Send Message
+
+    virtual void startdev();
+    virtual void stopdev();
+
+
+//signals:
+//    void SIG_CANOPENSTATE(bool bCAN,int nR,const char * strres);
+//    void SIGTEST();
+
+public:
+    virtual void CmdSend();
+};
+
+#endif // BASECAN_H

+ 98 - 0
src/apollo/code/apollodriver_nvcan/main.cpp

@@ -0,0 +1,98 @@
+#include <QCoreApplication>
+
+#include <thread>
+#include <mutex>
+#include <iostream>
+
+#include "cyber/cyber.h"
+#include "cyber/time/rate.h"
+#include "cyber/time/time.h"
+#include "nvcan.h"
+
+bool gbthreadrun = true;
+bool gbcanopen = false;
+
+nvcan * gpccan;
+
+std::vector<basecan_msg> gsendmsgvector1;
+std::vector<basecan_msg> gsendmsgvector2;
+const int SENDMSGBUFSIZE = 3000;
+
+std::mutex mMutexcan1;
+std::mutex mMutexcan2;
+
+std::thread * gpthreadsendrecv;
+
+void threadsendrecv()
+{
+    int i;
+
+
+    while(gbthreadrun)
+    {
+        if(gbcanopen)
+        {
+            basecan_msg xmsg[2500];
+            int nRec1,nRec2,nSend1,nSend2;
+            if((nRec1 =gpccan->GetMessage(0,xmsg,2500))>0)
+            {
+//                sharecanmsg(mparecv0,xmsg,nRec1,0);
+            }
+
+            if((nRec2 =gpccan->GetMessage(1,xmsg,2500))>0)
+            {
+//                sharecanmsg(mparecv1,xmsg,nRec2,1);
+            }
+
+
+            nSend1 = 0;
+            nSend2 = 0;
+
+            mMutexcan1.lock();
+            for(i=0;i<gsendmsgvector1.size();i++)
+            {
+                gpccan->SetMessage(0,&(gsendmsgvector1.at(i)));
+            }
+            gsendmsgvector1.clear();
+            mMutexcan1.unlock();
+
+            mMutexcan2.lock();
+            for(i=0;i<gsendmsgvector2.size();i++)
+            {
+                gpccan->SetMessage(1,&(gsendmsgvector2.at(i)));
+            }
+            gsendmsgvector2.clear();
+            mMutexcan2.unlock();
+
+            std::this_thread::sleep_for(std::chrono::milliseconds(1));
+        }
+        else
+        {
+          std::this_thread::sleep_for(std::chrono::milliseconds(1));
+        }
+//        mpcan->mfault->SetFaultState(0, 0, "ok");
+    }
+
+    std::cout<<"  threadsendrecv exit."<<std::endl;
+    qDebug("thread canctrl complete."); 
+}
+
+
+
+int main(int argc, char *argv[])
+{
+    QCoreApplication a(argc, argv);
+
+    apollo::cyber::Init("apllodriver_nvcan");
+    std::unique_ptr<apollo::cyber::Node> pilot_node  = apollo::cyber::CreateNode("apllodriver_nvcan");
+
+    gpthreadsendrecv = new std::thread(threadsendrecv);
+
+    apollo::cyber::WaitForShutdown();
+
+    gbthreadrun = false;
+    gpthreadsendrecv->join();
+    std::cout<<" Shut Down."<<std::endl;
+
+    return 0;
+}

+ 41 - 0
src/apollo/code/apollodriver_nvcan/nvcan.h

@@ -0,0 +1,41 @@
+#ifndef NVCAN_H
+#define NVCAN_H
+#include "basecan.h"
+
+#include <vector>
+#include <mutex>
+
+#include <thread>
+
+class nvcan : public basecan
+{
+public:
+    nvcan();
+    ~nvcan();
+public:
+    void startdev();
+    void stopdev();
+
+    int GetMessage(const int nch,basecan_msg * pMsg,const int nCap);
+    int SetMessage(const int nch,basecan_msg * pMsg);
+
+//private slots:
+//    void onMsg(bool bCAN,int nR,const char * strres);
+
+private:
+    void threadrun();
+    std::vector<basecan_msg> mMsgRecvBuf[2];
+
+    std::vector<basecan_msg> mMsgSendBuf[2];
+
+    std::mutex mMutex;
+
+    bool mbCANOpen = false;
+    bool mbRunning = false;
+    int mnDevNum;
+
+    bool mbRun = true;
+    std::thread * mpthreadnvcan;
+};
+
+#endif // NVCAN_H