Bläddra i källkod

complete change.

yuchuli 1 månad sedan
förälder
incheckning
33fb14b15d

+ 3 - 0
src/apollo/apollolib/adchassis/Readme.md

@@ -0,0 +1,3 @@
+/apollo/.cache/bazel/679551712d2357b63e6e0ce858ebf90e/execroot/__main__/bazel-out/aarch64-opt-exec-2B5CBBC6/bin/external/com_google_protobuf/protoc -I=./ --cpp_out=./  *.proto
+qmake adchassis.pro  
+make

+ 73 - 0
src/apollo/code/apollochassis/.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
+

+ 5 - 0
src/apollo/code/apollochassis/Readme.md

@@ -0,0 +1,5 @@
+copy libnvcan.so from nvcan folder.
+
+/apollo/.cache/bazel/679551712d2357b63e6e0ce858ebf90e/execroot/__main__/bazel-out/aarch64-opt-exec-2B5CBBC6/bin/external/com_google_protobuf/protoc -I=./ --cpp_out=./  *.proto
+qmake apollodriver_nvcan.pro  
+make

+ 33 - 0
src/apollo/code/apollochassis/adchassis.h

@@ -0,0 +1,33 @@
+#ifndef ADCHASSIS_H
+#define ADCHASSIS_H
+#include <functional>
+
+#include "chassis.pb.h"
+#include "canmsg.pb.h"
+
+#ifndef ADCHASSISFUN
+#define ADCHASSISFUN
+typedef std::function<void(iv::chassis *pchassis)> chassisfun;
+#endif
+
+namespace  iv {
+
+enum VehicleTypeDef {GE3,VV7,MIDCAR,PROBLUE,MIDBUS,HAPO,UNKNOWN, YUHESEN,SHENLAN,SHENLAN_CANFD,HUNTER,STERRAES,SHENLAN_S05,CHANGAN_A07};  //车辆类型
+
+
+}
+
+class  Adchassis
+{
+public:
+    Adchassis(chassisfun * pchassiscall,std::string strvehicletype);
+
+    void ProcCANMsg(iv::can::canmsg &xmsg);
+
+private:
+    chassisfun *mpchassiscall;
+
+    iv::VehicleTypeDef mVehicleType = iv::UNKNOWN;
+};
+
+#endif // ADCHASSIS_H

+ 70 - 0
src/apollo/code/apollochassis/apollochassis.pro

@@ -0,0 +1,70 @@
+#/apollo/.cache/bazel/679551712d2357b63e6e0ce858ebf90e/execroot/__main__/bazel-out/aarch64-opt-exec-2B5CBBC6/bin/external/com_google_protobuf/protoc -I=./ --cpp_out=./  *.proto
+#qmake apollodriver_nvcan.pro  
+#make
+
+QT -= gui core
+
+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 \
+        canraw.pb.cc  \
+        canmsg.pb.cc  \
+        chassis.pb.cc
+
+# 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 -ladchassis
+

+ 14 - 0
src/apollo/code/apollochassis/canmsg.proto

@@ -0,0 +1,14 @@
+
+syntax = "proto2";
+
+package iv.can;
+
+import "canraw.proto";
+
+message canmsg
+{
+ required uint32 index = 1;
+ required uint32 channel = 2;
+ repeated canraw rawmsg = 3;
+ optional int64 mstime = 4;
+};

+ 13 - 0
src/apollo/code/apollochassis/canraw.proto

@@ -0,0 +1,13 @@
+syntax = "proto2";
+
+package iv.can;
+
+message canraw
+{
+ required uint32 id = 1;
+ required bool bExt = 2;
+ required bool bRemote = 3;
+ required uint32 len = 4;
+ required bytes data = 5;
+ optional int64 rectime = 6;  //unit s 20251028
+};

+ 33 - 0
src/apollo/code/apollochassis/chassis.proto

@@ -0,0 +1,33 @@
+syntax = "proto2";
+
+package iv;
+
+message chassis
+{
+  optional int64 time = 1; //ns
+  optional int32 EPSMode = 2  [default = 0]; //0 idle 1 Manual 2 Auto
+  optional int32 EPBFault = 3 [default = 0];  //0 No 1 Have Fault
+  optional int32 DriveMode = 4;      //0 Manual 1 Auto
+  optional int32 Shift = 5;  //0 N  1 D   2 R  3 P  hapo:1p2r3n4d   cheerysterraes 1 P 2 r 3 N 4 D
+  optional int32 AEBAvailable = 6;
+  optional int32 CDDAvailable = 7;
+  optional int32 angle_feedback = 8;
+  optional float torque = 9;
+  optional float vel = 10;   //km/h
+  optional float accstep = 11;
+  optional float soc = 12;
+  optional float brake_feedback = 13;
+  optional int32 EPB_feedback = 14;
+  optional int32 EmergencyStop_feedback = 15;
+  optional int32 brakelight_feedback = 16;
+  optional float range_feedback = 17;
+  optional int32 drivectrltype_feedback = 18;
+  optional int32 brakectrltype_feedback = 19;
+  optional int32 epsctrltype_feedback = 20;
+  optional float frontleftwheel_feedback = 21;
+  optional float frontrightwheel_feedback = 22;
+  optional float rearleftwheel_feedback = 23;
+  optional float rearrightwheel_feedback = 24;
+  optional float engine_speed = 25;
+  
+};

+ 67 - 0
src/apollo/code/apollochassis/main.cpp

@@ -0,0 +1,67 @@
+//#include <QCoreApplication>
+
+#include <thread>
+#include <mutex>
+#include <iostream>
+
+#include "cyber/cyber.h"
+#include "cyber/time/rate.h"
+#include "cyber/time/time.h"
+#include "adchassis.h"
+#include <canmsg.pb.h>
+
+
+
+static Adchassis * gpChassis;
+
+static chassisfun gchassisfun;
+
+
+static std::shared_ptr<apollo::cyber::Writer<iv::chassis>>
+      chassis_writer_;
+static std::shared_ptr<apollo::cyber::Reader<iv::can::canmsg>>
+      can0recv_reader_;
+
+
+
+void RecvCANMsg(const std::shared_ptr<iv::can::canmsg> &xmsg)
+{
+    gpChassis->ProcCANMsg(*xmsg);
+}
+
+void ChassisCallBack(iv::chassis * pchassis)
+{
+    iv::chassis* raw_ptr = new iv::chassis();
+    std::shared_ptr<iv::chassis> chassis_ptr(raw_ptr);
+
+    chassis_writer_->Write(chassis_ptr);
+}
+
+int main(int argc, char *argv[])
+{
+//    QCoreApplication a(argc, argv);
+
+    apollo::cyber::Init("apollochassis");
+    std::unique_ptr<apollo::cyber::Node> pilot_node  = apollo::cyber::CreateNode("apollochassis");
+
+    gchassisfun = std::bind(&ChassisCallBack,std::placeholders::_1);
+
+    chassis_writer_ = pilot_node->CreateWriter<iv::chassis>("/adc/chassis");
+
+    can0recv_reader_ = pilot_node->CreateReader<iv::can::canmsg>(
+        "/adc/canrecv0",
+      [](const std::shared_ptr<iv::can::canmsg> &xmsg) {
+            RecvCANMsg(xmsg);
+      });
+
+
+
+    std::string strvehtype = std::string("shenlanfd");
+    gpChassis = new Adchassis(&gchassisfun,strvehtype);
+
+    apollo::cyber::WaitForShutdown();
+
+    delete gpChassis;
+
+    return 0;
+}

+ 73 - 0
src/apollo/code/apollocontroller_shenlanfd/.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
+

+ 5 - 0
src/apollo/code/apollocontroller_shenlanfd/Readme.md

@@ -0,0 +1,5 @@
+copy libnvcan.so from nvcan folder.
+
+/apollo/.cache/bazel/679551712d2357b63e6e0ce858ebf90e/execroot/__main__/bazel-out/aarch64-opt-exec-2B5CBBC6/bin/external/com_google_protobuf/protoc -I=./ --cpp_out=./  *.proto
+qmake apollodriver_nvcan.pro  
+make

+ 70 - 0
src/apollo/code/apollocontroller_shenlanfd/apollocontroller_shenlanfd.pro

@@ -0,0 +1,70 @@
+#/apollo/.cache/bazel/679551712d2357b63e6e0ce858ebf90e/execroot/__main__/bazel-out/aarch64-opt-exec-2B5CBBC6/bin/external/com_google_protobuf/protoc -I=./ --cpp_out=./  *.proto
+#qmake apollodriver_nvcan.pro  
+#make
+
+QT -= gui core
+
+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 \
+        canraw.pb.cc  \
+        canmsg.pb.cc  \
+        chassis.pb.cc 
+
+# 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 -lshenlanfd
+

+ 39 - 0
src/apollo/code/apollocontroller_shenlanfd/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

+ 14 - 0
src/apollo/code/apollocontroller_shenlanfd/canmsg.proto

@@ -0,0 +1,14 @@
+
+syntax = "proto2";
+
+package iv.can;
+
+import "canraw.proto";
+
+message canmsg
+{
+ required uint32 index = 1;
+ required uint32 channel = 2;
+ repeated canraw rawmsg = 3;
+ optional int64 mstime = 4;
+};

+ 13 - 0
src/apollo/code/apollocontroller_shenlanfd/canraw.proto

@@ -0,0 +1,13 @@
+syntax = "proto2";
+
+package iv.can;
+
+message canraw
+{
+ required uint32 id = 1;
+ required bool bExt = 2;
+ required bool bRemote = 3;
+ required uint32 len = 4;
+ required bytes data = 5;
+ optional int64 rectime = 6;  //unit s 20251028
+};

+ 33 - 0
src/apollo/code/apollocontroller_shenlanfd/chassis.proto

@@ -0,0 +1,33 @@
+syntax = "proto2";
+
+package iv;
+
+message chassis
+{
+  optional int64 time = 1; //ns
+  optional int32 EPSMode = 2  [default = 0]; //0 idle 1 Manual 2 Auto
+  optional int32 EPBFault = 3 [default = 0];  //0 No 1 Have Fault
+  optional int32 DriveMode = 4;      //0 Manual 1 Auto
+  optional int32 Shift = 5;  //0 N  1 D   2 R  3 P  hapo:1p2r3n4d   cheerysterraes 1 P 2 r 3 N 4 D
+  optional int32 AEBAvailable = 6;
+  optional int32 CDDAvailable = 7;
+  optional int32 angle_feedback = 8;
+  optional float torque = 9;
+  optional float vel = 10;   //km/h
+  optional float accstep = 11;
+  optional float soc = 12;
+  optional float brake_feedback = 13;
+  optional int32 EPB_feedback = 14;
+  optional int32 EmergencyStop_feedback = 15;
+  optional int32 brakelight_feedback = 16;
+  optional float range_feedback = 17;
+  optional int32 drivectrltype_feedback = 18;
+  optional int32 brakectrltype_feedback = 19;
+  optional int32 epsctrltype_feedback = 20;
+  optional float frontleftwheel_feedback = 21;
+  optional float frontrightwheel_feedback = 22;
+  optional float rearleftwheel_feedback = 23;
+  optional float rearrightwheel_feedback = 24;
+  optional float engine_speed = 25;
+  
+};

+ 84 - 0
src/apollo/code/apollocontroller_shenlanfd/main.cpp

@@ -0,0 +1,84 @@
+//#include <QCoreApplication>
+
+#include <thread>
+#include <mutex>
+#include <iostream>
+
+#include "cyber/cyber.h"
+#include "cyber/time/rate.h"
+#include "cyber/time/time.h"
+#include "shenlanfd.h"
+#include <canmsg.pb.h>
+#include "chassis.pb.h"
+
+static bool gbthreadrun = true;
+static std::thread * gpthreadsend;
+
+static Shenlanfd * gpShenlanfd;
+
+
+static std::shared_ptr<apollo::cyber::Writer<iv::can::canmsg>>
+      can0send_writer_;
+static std::shared_ptr<apollo::cyber::Reader<iv::can::canmsg>>
+      can0recv_reader_;
+static std::shared_ptr<apollo::cyber::Reader<iv::chassis>>
+        chassis_reader_;
+
+void threadsend()
+{
+    int i;
+
+
+    while(gbthreadrun)
+    {
+        std::this_thread::sleep_for(std::chrono::milliseconds(1));
+    }
+
+    std::cout<<"  threadsendrecv exit."<<std::endl;
+}
+
+void RecvCANMsg(const std::shared_ptr<iv::can::canmsg> &xmsg)
+{
+    
+}
+
+void RecvChassis(const std::shared_ptr<iv::chassis> &xchassis)
+{
+    gpShenlanfd->SetSpeed(xchassis->vel());
+}
+
+int main(int argc, char *argv[])
+{
+//    QCoreApplication a(argc, argv);
+
+    apollo::cyber::Init("apollocontroller_shenlanfd");
+    std::unique_ptr<apollo::cyber::Node> pilot_node  = apollo::cyber::CreateNode("apollocontroller_shenlanfd");
+    can0send_writer_ = pilot_node->CreateWriter<iv::can::canmsg>("/adc/cansend0");
+
+    can0recv_reader_ = pilot_node->CreateReader<iv::can::canmsg>(
+        "/adc/canrecv0",
+      [](const std::shared_ptr<iv::can::canmsg> &xmsg) {
+            RecvCANMsg(xmsg);
+      });
+
+    chassis_reader_ = pilot_node->CreateReader<iv::chassis>(
+        "/adc/chassis",
+        [](const std::shared_ptr<iv::chassis> &xchassis){
+            RecvChassis(xchassis);
+        }
+    );
+
+
+
+    gpShenlanfd = new Shenlanfd();
+    gpthreadsend = new std::thread(threadsend);
+
+    apollo::cyber::WaitForShutdown();
+
+    gbthreadrun = false;
+    gpthreadsend->join();
+    delete gpShenlanfd;
+    std::cout<<" Shut Down."<<std::endl;
+
+    return 0;
+}

+ 52 - 0
src/apollo/code/apollocontroller_shenlanfd/shenlanfd.h

@@ -0,0 +1,52 @@
+#ifndef SHENLANFD_H
+#define SHENLANFD_H
+
+#include <thread>
+#include <iostream>
+#include <mutex>
+
+namespace iv {
+struct dcs
+{
+    double mfTorque;
+    double mfBrake;
+    double mfWheel;
+    double mblampleft;
+    double mblampright;
+};
+
+
+}
+
+class  Shenlanfd
+{
+public:
+    Shenlanfd();
+    ~Shenlanfd();
+
+    void SetSpeed(double fSpeed);
+    void SetDecision(iv::dcs &xdcs);
+
+    void Get1C4(unsigned char * p1C4);
+    void Get24E(unsigned char * p24E);
+    void Get25E(unsigned char * p25E);
+
+private:
+    void threadsend();
+
+    void ExecuteDecision(iv::dcs & xdcs);
+
+
+private:
+    std::thread * mpthreadsend;
+    bool mbRun = true;
+
+    bool mbHaveVehSpd  = false;
+    double mfVehSpd = 0.0;
+
+    iv::dcs mdcs;
+    std::mutex mmutexdcs;
+    int64_t mnLastUpdate = 0;
+};
+
+#endif // SHENLANFD_H