Jelajahi Sumber

add IVSysManWithoutWin.pro for cmd Program Man.

yuchuli 3 tahun lalu
induk
melakukan
e34961c205

+ 184 - 0
src/common/common/xodr/OpenDrive/ObjectSignal.cpp

@@ -8,11 +8,120 @@ Object_outlines_outline::Object_outlines_outline()
 
 
 }
 }
 
 
+int Object_outlines_outline::Getid(int & id)
+{
+    if(mid.size() == 0)return 0;
+    id = mid[0];
+    return 1;
+}
+
+int Object_outlines_outline::GetfillType(string & fillType)
+{
+    if(mfillType.size() == 0)return 0;
+    fillType = mfillType[0];
+    return 1;
+}
+
+int Object_outlines_outline::Getouter(bool & outer)
+{
+    if(mouter.size() == 0)return 0;
+    outer = mouter[0];
+    return 1;
+}
+
+int Object_outlines_outline::Getclosed(bool & closed)
+{
+    if(mclosed.size() == 0)return 0;
+    closed = mclosed[0];
+    return 1;
+}
+
+int Object_outlines_outline::GetlaneType(string laneType)
+{
+    if(mlaneType.size() == 0)return 0;
+    laneType = mlaneType[0];
+    return 1;
+}
+
+void Object_outlines_outline::Setid(int & id)
+{
+    if(mid.size()>0)mid.clear();
+    mid.push_back(id);
+}
+
+void Object_outlines_outline::SetfillType(string & fillType)
+{
+    if(mfillType.size()>0)mfillType.clear();
+    mfillType.push_back(fillType);
+}
+
+void Object_outlines_outline::Setouter(bool & outer)
+{
+    if(mouter.size() > 0)mouter.clear();
+    mouter.push_back(outer);
+}
+
+void Object_outlines_outline::Setclosed(bool & closed)
+{
+    if(mclosed.size() > 0)mclosed.clear();
+    mclosed.push_back(closed);
+}
+
+void Object_outlines_outline::SetlaneType(string laneType)
+{
+    if(mlaneType.size() > 0)mlaneType.clear();
+    mlaneType.push_back(laneType);
+}
+
+
+void Object_outlines_outline::Clearid()
+{
+    if(mid.size() > 0)mid.clear();
+}
+
+void Object_outlines_outline::ClearfillType()
+{
+    if(mfillType.size() > 0)mfillType.clear();
+}
+
+void Object_outlines_outline::Clearouter()
+{
+    if(mouter.size() > 0)mouter.clear();
+}
+
+void Object_outlines_outline::Clearclosed()
+{
+    if(mclosed.size() > 0)mclosed.clear();
+}
+
+void Object_outlines_outline::ClearlaneType()
+{
+    if(mlaneType.size() > 0)mlaneType.clear();
+}
+
 Object_outlines::Object_outlines()
 Object_outlines::Object_outlines()
 {
 {
 
 
 }
 }
 
 
+int Object_outlines::GetObject_outlines_outline(Object_outlines_outline & xoutline)
+{
+    if(moutline.size() == 0)return 0;
+    xoutline = moutline[0];
+    return 1;
+}
+
+void Object_outlines::SetObject_outlines_outline(Object_outlines_outline & xoutline)
+{
+    if(moutline.size() > 0)moutline.clear();
+    moutline.push_back(xoutline);
+}
+
+void Object_outlines::ClearObject_outlines_outline()
+{
+    if(moutline.size() > 0)moutline.clear();
+}
+
 Object_material::Object_material()
 Object_material::Object_material()
 {
 {
 
 
@@ -464,6 +573,12 @@ int Object::GetparkingSpace(Object_parkingSpace &parkingSpace)
     return 1;
     return 1;
 }
 }
 
 
+Object_outlines * Object::Getoutlines()
+{
+    if(mObject_outlines.size()<1)return 0;
+    return &(mObject_outlines[0]);
+}
+
 void Object::Sett(double t)
 void Object::Sett(double t)
 {
 {
     mt = t;
     mt = t;
@@ -567,6 +682,17 @@ void Object::ResetparkingSpace()
     if(mObject_parkingSpace.size()>0)mObject_parkingSpace.clear();
     if(mObject_parkingSpace.size()>0)mObject_parkingSpace.clear();
 }
 }
 
 
+void Object::Setoutlines(Object_outlines &xObject_outlines)
+{
+    if(mObject_outlines.size()>0)mObject_outlines.clear();
+    mObject_outlines.push_back(xObject_outlines);
+}
+
+void Object::Resetoutlines()
+{
+    if(mObject_outlines.size()>0) mObject_outlines.clear();
+}
+
 vector<Object_repeat> * Object::GetObjectrepeatVector()
 vector<Object_repeat> * Object::GetObjectrepeatVector()
 {
 {
     return &mObject_repeat;
     return &mObject_repeat;
@@ -698,6 +824,64 @@ void Object::DeleteObjectmaterial(unsigned int index)
 }
 }
 
 
 
 
+//Object outlines_outline
+
+vector<Object_outlines_outline> * Object::GetObjectoutlineVector()
+{
+    return &mObject_outlines_outline;
+}
+
+Object_outlines_outline* Object::GetObjectoutline(unsigned int i)
+{
+    if ((mObject_outlines_outline.size()>0)&&(i<(mObject_outlines_outline.size())))
+        return &(mObject_outlines_outline.at(i));
+    else
+        return NULL;
+}
+unsigned int Object::GetObjectoutlineCount()
+{
+    return mObject_outlines_outline.size();
+}
+
+Object_outlines_outline*			Object::GetLastObjectoutline()
+{
+    if (mObject_outlines_outline.size()>0)
+        return &mObject_outlines_outline.at(mObject_outlines_outline.size()-1);
+    else
+        return NULL;
+}
+
+Object_outlines_outline*			Object::GetLastAddedObjectoutline()
+{
+    if(mLastAddedObjectoutline<mObject_outlines_outline.size())
+        return &mObject_outlines_outline.at(mLastAddedObjectoutline);
+    else
+        return NULL;
+}
+
+unsigned int Object::AddObjectoutline()
+{
+    mObject_outlines_outline.push_back(Object_outlines_outline());
+    mLastAddedObjectoutline = mObject_outlines_outline.size()-1;
+    return mLastAddedObjectoutline;
+}
+
+unsigned int Object::CloneObjectoutline(unsigned int index)
+{
+    if(index<(mObject_outlines_outline.size()-1))
+        mObject_outlines_outline.insert(mObject_outlines_outline.begin()+index+1, mObject_outlines_outline[index]);
+    else if(index==mObject_outlines_outline.size()-1)
+        mObject_outlines_outline.push_back(mObject_outlines_outline[index]);
+    mLastAddedObjectoutline=index+1;
+    return mLastAddedObjectoutline;
+}
+
+void Object::DeleteObjectoutline(unsigned int index)
+{
+    mObject_outlines_outline.erase(mObject_outlines_outline.begin()+index);
+}
+
+
 signal_positionRoad::signal_positionRoad(double s, double t, double zOffset, double hOffset, double pitch, double roll)
 signal_positionRoad::signal_positionRoad(double s, double t, double zOffset, double hOffset, double pitch, double roll)
 {
 {
     ms = s;
     ms = s;

+ 45 - 1
src/common/common/xodr/OpenDrive/ObjectSignal.h

@@ -14,9 +14,30 @@ private:
     vector<string> mfillType;
     vector<string> mfillType;
     vector<bool> mouter;
     vector<bool> mouter;
     vector<bool> mclosed;
     vector<bool> mclosed;
-    vector<string> mlaneTYpe;
+    vector<string> mlaneType;
 public:
 public:
     Object_outlines_outline();
     Object_outlines_outline();
+
+public:
+    int Getid(int & id);
+    int GetfillType(string & fillType);
+    int Getouter(bool & outer);
+    int Getclosed(bool & closed);
+    int GetlaneType(string laneType);
+
+    void Setid(int & id);
+    void SetfillType(string & fillType);
+    void Setouter(bool & outer);
+    void Setclosed(bool & closed);
+    void SetlaneType(string laneType);
+
+    void Clearid();
+    void ClearfillType();
+    void Clearouter();
+    void Clearclosed();
+    void ClearlaneType();
+
+
 };
 };
 
 
 class Object_outlines
 class Object_outlines
@@ -26,6 +47,11 @@ private:
 
 
 public:
 public:
     Object_outlines();
     Object_outlines();
+
+public:
+    int GetObject_outlines_outline(Object_outlines_outline & xoutline);
+    void SetObject_outlines_outline(Object_outlines_outline & xoutline);
+    void ClearObject_outlines_outline();
 };
 };
 
 
 class Object_material
 class Object_material
@@ -176,8 +202,12 @@ private:
     vector<Object_repeat> mObject_repeat;
     vector<Object_repeat> mObject_repeat;
     vector<Object_material> mObject_material;
     vector<Object_material> mObject_material;
 
 
+    vector<Object_outlines> mObject_outlines;
+    vector<Object_outlines_outline> mObject_outlines_outline;
+
     unsigned int mLastAddedObjectrepeat;
     unsigned int mLastAddedObjectrepeat;
     unsigned int mLastAddedObjectmaterial;
     unsigned int mLastAddedObjectmaterial;
+    unsigned int mLastAddedObjectoutline;
 
 
 public:
 public:
 
 
@@ -203,6 +233,8 @@ public:
 
 
     int GetparkingSpace(Object_parkingSpace & parkingSpace);
     int GetparkingSpace(Object_parkingSpace & parkingSpace);
 
 
+    Object_outlines * Getoutlines();
+
     void Sett(double t);
     void Sett(double t);
     void SetzOffset(double zOffset);
     void SetzOffset(double zOffset);
     void Settype(string type);
     void Settype(string type);
@@ -224,6 +256,9 @@ public:
     void SetparkingSpace(Object_parkingSpace parkingSpace);
     void SetparkingSpace(Object_parkingSpace parkingSpace);
     void ResetparkingSpace();
     void ResetparkingSpace();
 
 
+    void Setoutlines(Object_outlines &xObject_outlines);
+    void Resetoutlines();
+
     vector<Object_repeat> * GetObjectrepeatVector();
     vector<Object_repeat> * GetObjectrepeatVector();
     Object_repeat* GetObjectrepeat(unsigned int i);
     Object_repeat* GetObjectrepeat(unsigned int i);
     unsigned int GetObjectrepeatCount();
     unsigned int GetObjectrepeatCount();
@@ -243,6 +278,15 @@ public:
     unsigned int AddObjectmaterial();
     unsigned int AddObjectmaterial();
     unsigned int CloneObjectmaterial(unsigned int index);
     unsigned int CloneObjectmaterial(unsigned int index);
     void DeleteObjectmaterial(unsigned int index);
     void DeleteObjectmaterial(unsigned int index);
+
+    vector<Object_outlines_outline> * GetObjectoutlineVector();
+    Object_outlines_outline* GetObjectoutline(unsigned int i);
+    unsigned int GetObjectoutlineCount();
+    Object_outlines_outline*			GetLastObjectoutline();
+    Object_outlines_outline*			GetLastAddedObjectoutline();
+    unsigned int AddObjectoutline();
+    unsigned int CloneObjectoutline(unsigned int index);
+    void DeleteObjectoutline(unsigned int index);
 };
 };
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 
 

+ 0 - 1
src/tool/IVSysMan/IVSysMan.pro

@@ -43,7 +43,6 @@ contains(QMAKE_HOST.os, Windows){
     DEFINES +=  IV_OS_UNIX
     DEFINES +=  IV_OS_UNIX
 }
 }
 
 
-
 SOURCES += \
 SOURCES += \
     ../../include/msgtype/switch.pb.cc \
     ../../include/msgtype/switch.pb.cc \
         main.cpp \
         main.cpp \

+ 74 - 0
src/tool/IVSysMan/IVSysManWithoutWin.pro

@@ -0,0 +1,74 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2019-08-27T14:22:56
+#
+#-------------------------------------------------
+
+QT       += core xml
+#QT       += console
+QT += dbus
+
+QT -= gui
+
+CONFIG += c++11 console
+CONFIG -= app_bundle
+
+#greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = IVSysManWithoutWin
+#TEMPLATE = app
+
+QMAKE_CXXFLAGS +=  -g
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which has been marked as 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 you use 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
+
+#include($$PWD/ResScheduling/ResScheduling.pri)
+
+!include(../../../include/common.pri ) {
+    error( "Couldn't find the common.pri file!" )
+}
+
+!include(../../../include/ivprotobuf.pri ) {
+    error( "Couldn't find the ivprotobuf.pri file!" )
+}
+
+
+contains(QMAKE_HOST.os, Windows){
+    DEFINES += IV_OS_WIN
+}else{
+    DEFINES +=  IV_OS_UNIX
+}
+
+SOURCES += \
+    ../../include/msgtype/switch.pb.cc \
+        mainwithoutwin.cpp \
+    sysman.cpp \
+    progmon.cpp \
+    cpumem.cpp \
+    ../../include/msgtype/fault.pb.cc \
+    progunit.cpp
+
+HEADERS += \
+    ../../include/msgtype/switch.pb.h \
+    sysman.h \
+    progmon.h \
+    cpumem.h \
+    ../../include/msgtype/fault.pb.h \
+    progunit.h
+
+
+#FORMS += \
+#        mainwindow.ui
+
+#RESOURCES += \
+#    ivsysman.qrc

+ 203 - 0
src/tool/IVSysMan/mainwithoutwin.cpp

@@ -0,0 +1,203 @@
+
+#include <QCoreApplication>
+#include <QSharedMemory>
+#include <thread>
+#include <iostream>
+
+#include <string>
+#include "ivlog.h"
+#include "ivfault.h"
+#include "ivbacktrace.h"
+#include "ivexit.h"
+
+#include "sysman.h"
+#include "progmon.h"
+#include "sysman.h"
+
+#include <signal.h>
+
+std::string gstrxmlpath;
+std::string carStatePath;
+std::string locateInfoPath;
+iv::Ivlog * ivlog;
+iv::Ivfault * ivfault;
+
+ProgMon * mPM;
+SysMan * mpSysMan;
+void * mpivexit;
+
+#define USE_ONEIVSYSMAN
+
+
+bool gbOneThreadRunning ;
+bool gbOneThreadRun ;
+void threadOne(QSharedMemory * pshare,int ncount)
+{
+    while(gbOneThreadRun)
+    {
+        pshare->lock();
+        int * pdata = (int *)pshare->data();
+        if(*pdata != ncount)
+        {
+            *pdata = ncount;
+            qDebug("another thread want running.");
+        }
+        pshare->unlock();
+        std::this_thread::sleep_for(std::chrono::milliseconds(10));
+    }
+
+    gbOneThreadRunning = false;
+}
+
+
+void sigint_handler(int sig){
+    if(sig == SIGINT){
+        // ctrl+c退出时执行的代码
+        std::cout << "ctrl+c pressed!" << std::endl;
+//		app_stopped = true;
+        int i;
+        for(i=0;i<mPM->mvectorprog.size();i++)
+        {
+            mPM->mvectorprog[i].mbautostart = false;
+        }
+        for(i=0;i<mPM->mvectorprog.size();i++)
+        {
+            if(mPM->mvectorprog[i].mbRun)
+            {
+                char strexitcode[255];
+                snprintf(strexitcode,255,"adcivexit-%d",mPM->mvectorprog[i].mpid);
+                qDebug("pid is %d",mPM->mvectorprog[i].mpid);
+                iv::ivexit::ExecIVExitCmd(mpivexit,strexitcode);
+                QThread::msleep(5);
+            }
+        }
+
+        iv::ivexit::ExecIVExitCmd(mpivexit,"adcivexit-test");   // test iv exit code. can comment this line.
+
+        mPM->requestInterruption();
+        qint64 time;
+        time = QDateTime::currentMSecsSinceEpoch();
+        mPM->requestInterruption();
+        gbOneThreadRun = false;
+        while((QDateTime::currentMSecsSinceEpoch() - time)<1500)
+        {
+            if((mPM->isFinished())&&(gbOneThreadRunning == false))
+            {
+                qDebug("finish");
+                break;
+            }
+        }
+
+
+        delete mPM;
+        delete mpSysMan;
+        qDebug(" Now IVSYSMan Exit.");
+        exit(0);
+    }
+}
+
+
+int main(int argc, char *argv[])
+{
+    QCoreApplication a(argc, argv);
+
+#ifdef  USE_ONEIVSYSMAN
+
+    QSharedMemory shareMem("IVSysMan_Count");
+
+    int ncount = 0;
+    bool bHaveAnother = false;
+    if(shareMem.attach())
+    {
+        shareMem.lock();
+        int * pdata = (int *)shareMem.data();
+        ncount = (*pdata)+1;
+        qDebug("now IVSysMan_Count is %d",ncount);
+        *pdata = ncount;
+        shareMem.unlock();
+
+        std::this_thread::sleep_for(std::chrono::milliseconds(100));
+        shareMem.lock();
+        pdata = (int *)shareMem.data();
+        if(*pdata != ncount)
+        {
+            qDebug("Another IVSysMan Running");
+            bHaveAnother = true;
+        }
+        *pdata = ncount;
+        shareMem.unlock();
+
+    }
+    else
+    {
+        shareMem.create(100);
+        shareMem.lock();
+        int * pdata = (int *)shareMem.data();
+        *pdata = 1;
+        qDebug("now IVSysMan_Count is %d",*pdata);
+        shareMem.unlock();
+    }
+
+    if(bHaveAnother == true)
+    {
+        qDebug("Another IVSysMan Running.");
+        return 0;
+    }
+
+    void * ponethread = new std::thread(threadOne,&shareMem,ncount);
+    (void *)ponethread;
+
+
+#endif
+
+    RegisterIVBackTrace();
+
+    ivlog = new iv::Ivlog("IVSysMan");
+    ivfault = new iv::Ivfault("IVSysMan");
+
+    if(argc>1)
+    {
+        gstrxmlpath = argv[1];
+        if(argc>3)
+        {
+            locateInfoPath = argv[2];
+            carStatePath = argv[3];
+        }
+    }
+    else
+    {
+        gstrxmlpath = "./IVSysMan.xml";
+        carStatePath = "./carState.xml";
+        locateInfoPath = "./locateInfo.xml";
+    }
+
+    ivlog->debug("gstrxmlpath 启动配置文件路径:%s", gstrxmlpath.c_str());
+    ivlog->debug("resManager.xml path: %s", carStatePath.c_str());
+    ivlog->debug("resManager.xml path: %s", locateInfoPath.c_str());
+
+    qDebug("sys running.");
+
+
+     mPM = new ProgMon(gstrxmlpath.data());
+     mpSysMan = new SysMan(gstrxmlpath);
+     mpivexit = iv::ivexit::RegIVExitCmd();
+
+
+    int i;
+    int nsize = mPM->mvectorprog.size();
+    for(i=0;i<nsize;i++)
+    {
+        ProgUnit * pu = &(mPM->mvectorprog.at(i));
+        if(pu->mbautostart)
+        {
+            mPM->StartProc(pu);
+        }
+    }
+
+    mPM->start();
+
+    signal(SIGINT, sigint_handler);
+
+
+    return a.exec();
+}