Browse Source

change detection_chassis. add sterra es chassis for controller.

yuchuli 5 months ago
parent
commit
0eac1b8b86

+ 3 - 0
include/candbc.h

@@ -78,6 +78,8 @@ public:
 
     CANParser(int abus, const std::string& dbc_name,
               const std::vector<std::pair<uint32_t, int>> &messages);
+    CANParser(int abus, const std::string& dbc_name,std::istringstream & stringstream,
+              const std::vector<std::pair<uint32_t, int>> &messages);
     CANParser(int abus, const std::string& dbc_name, bool ignore_checksum, bool ignore_counter);
     void update(const std::vector<CanData> &can_data, std::vector<SignalValue> &vals);
     void query_latest(std::vector<SignalValue> &vals, uint64_t last_ts = 0);
@@ -95,6 +97,7 @@ private:
 
 public:
     CANPacker(const std::string& dbc_name);
+    CANPacker(const std::string& dbc_name,std::istringstream & stringstream);
     std::vector<uint8_t> pack(uint32_t address, const std::vector<SignalPackValue> &values);
     const Msg* lookup_message(uint32_t address);
 };

+ 2 - 0
include/common_dbc.h

@@ -74,6 +74,8 @@ typedef struct ChecksumState {
 } ChecksumState;
 
 DBC* dbc_parse(const std::string& dbc_path);
+DBC* dbc_parse_res(const std::string& dbcname, std::istream &istringstream);
 DBC* dbc_parse_from_stream(const std::string &dbc_name, std::istream &stream, ChecksumState *checksum = nullptr, bool allow_duplicate_msg_name=false);
 const DBC* dbc_lookup(const std::string& dbc_name);
+const DBC* dbc_lookup_res(const std::string& dbc_name, std::istream &istringstream);
 std::vector<std::string> get_dbc_names();

+ 3 - 0
src/common/candbc/candbc.h

@@ -78,6 +78,8 @@ public:
 
     CANParser(int abus, const std::string& dbc_name,
               const std::vector<std::pair<uint32_t, int>> &messages);
+    CANParser(int abus, const std::string& dbc_name,std::istringstream & stringstream,
+              const std::vector<std::pair<uint32_t, int>> &messages);
     CANParser(int abus, const std::string& dbc_name, bool ignore_checksum, bool ignore_counter);
     void update(const std::vector<CanData> &can_data, std::vector<SignalValue> &vals);
     void query_latest(std::vector<SignalValue> &vals, uint64_t last_ts = 0);
@@ -95,6 +97,7 @@ private:
 
 public:
     CANPacker(const std::string& dbc_name);
+    CANPacker(const std::string& dbc_name,std::istringstream & stringstream);
     std::vector<uint8_t> pack(uint32_t address, const std::vector<SignalPackValue> &values);
     const Msg* lookup_message(uint32_t address);
 };

+ 2 - 0
src/common/candbc/common_dbc.h

@@ -74,6 +74,8 @@ typedef struct ChecksumState {
 } ChecksumState;
 
 DBC* dbc_parse(const std::string& dbc_path);
+DBC* dbc_parse_res(const std::string& dbcname, std::istream &istringstream);
 DBC* dbc_parse_from_stream(const std::string &dbc_name, std::istream &stream, ChecksumState *checksum = nullptr, bool allow_duplicate_msg_name=false);
 const DBC* dbc_lookup(const std::string& dbc_name);
+const DBC* dbc_lookup_res(const std::string& dbc_name, std::istream &istringstream);
 std::vector<std::string> get_dbc_names();

+ 24 - 1
src/common/candbc/dbc.cc

@@ -10,6 +10,7 @@
 #include <iterator>
 #include <cstring>
 #include <clocale>
+#include <sstream>
 
 #include "candbc.h"
 #include "common_dbc.h"
@@ -219,6 +220,11 @@ DBC* dbc_parse(const std::string& dbc_path) {
   return dbc_parse_from_stream(dbc_name, infile, checksum.get());
 }
 
+DBC* dbc_parse_res(const std::string& dbcname, std::istream &resstream){
+    std::unique_ptr<ChecksumState> checksum(get_checksum(dbcname));
+    return dbc_parse_from_stream(dbcname, resstream, checksum.get());
+}
+
 const std::string get_dbc_root_path() {
   char *basedir = std::getenv("BASEDIR");
   if (basedir != NULL) {
@@ -234,7 +240,11 @@ const DBC* dbc_lookup(const std::string& dbc_name) {
 
   std::string dbc_file_path = dbc_name;
   if (!std::filesystem::exists(dbc_file_path)) {
-    dbc_file_path = get_dbc_root_path() + "/" + dbc_name + ".dbc";
+      std::string rootpath = get_dbc_root_path();
+      if(rootpath == "")
+          dbc_file_path = dbc_name;
+      else
+        dbc_file_path = rootpath + "/" + dbc_name + ".dbc";
   }
 
   std::unique_lock lk(lock);
@@ -245,6 +255,19 @@ const DBC* dbc_lookup(const std::string& dbc_name) {
   return it->second;
 }
 
+const DBC* dbc_lookup_res(const std::string& dbc_name, std::istream &istringstream){
+    static std::mutex lock;
+    static std::map<std::string, DBC*> dbcs;
+
+
+    std::unique_lock lk(lock);
+    auto it = dbcs.find(dbc_name);
+    if (it == dbcs.end()) {
+        it = dbcs.insert(it, {dbc_name, dbc_parse_res(dbc_name,istringstream)});
+    }
+    return it->second;
+}
+
 std::vector<std::string> get_dbc_names() {
   static const std::string& dbc_file_path = get_dbc_root_path();
   std::vector<std::string> dbcs;

+ 14 - 0
src/common/candbc/packer.cc

@@ -4,10 +4,12 @@
 #include <map>
 #include <stdexcept>
 #include <utility>
+#include <sstream>
 
 #include "candbc.h"
 
 
+
 void set_value(std::vector<uint8_t> &msg, const Signal &sig, int64_t ival) {
   int i = sig.lsb / 8;
   int bits = sig.size;
@@ -39,6 +41,18 @@ CANPacker::CANPacker(const std::string& dbc_name) {
   }
 }
 
+CANPacker::CANPacker(const std::string& dbc_name,std::istringstream & stringstream)
+{
+    std::istringstream x1("hello");
+    dbc = dbc_lookup_res(dbc_name,stringstream);
+    assert(dbc);
+    for (const auto& msg : dbc->msgs) {
+        for (const auto& sig : msg.sigs) {
+            signal_lookup[std::make_pair(msg.address, sig.name)] = sig;
+        }
+    }
+}
+
 std::vector<uint8_t> CANPacker::pack(uint32_t address, const std::vector<SignalPackValue> &signals) {
   auto msg_it = dbc->addr_to_msg.find(address);
   if (msg_it == dbc->addr_to_msg.end()) {

+ 39 - 0
src/common/candbc/parser.cc

@@ -131,6 +131,45 @@ CANParser::CANParser(int abus, const std::string& dbc_name, const std::vector<st
   }
 }
 
+CANParser::CANParser(int abus, const std::string& dbc_name, std::istringstream & stringstream,const std::vector<std::pair<uint32_t, int>> &messages)
+    : bus(abus) {
+    dbc = dbc_lookup_res(dbc_name,stringstream);
+    assert(dbc);
+
+    bus_timeout_threshold = std::numeric_limits<uint64_t>::max();
+
+    for (const auto& [address, frequency] : messages) {
+        // disallow duplicate message checks
+        if (message_states.find(address) != message_states.end()) {
+            std::stringstream is;
+            is << "Duplicate Message Check: " << address;
+            throw std::runtime_error(is.str());
+        }
+
+        MessageState &state = message_states[address];
+        state.address = address;
+        // state.check_frequency = op.check_frequency,
+
+            // msg is not valid if a message isn't received for 10 consecutive steps
+            if (frequency > 0) {
+            state.check_threshold = (1000000000ULL / frequency) * 10;
+
+            // bus timeout threshold should be 10x the fastest msg
+            bus_timeout_threshold = std::min(bus_timeout_threshold, state.check_threshold);
+        }
+
+        const Msg *msg = dbc->addr_to_msg.at(address);
+        state.name = msg->name;
+        state.size = msg->size;
+        assert(state.size <= 64);  // max signal size is 64 bytes
+
+        // track all signals for this message
+        state.parse_sigs = msg->sigs;
+        state.vals.resize(msg->sigs.size());
+        state.all_vals.resize(msg->sigs.size());
+    }
+}
+
 CANParser::CANParser(int abus, const std::string& dbc_name, bool ignore_checksum, bool ignore_counter)
   : bus(abus) {
   // Add all messages and signals

+ 891 - 0
src/controller/controller_chery_sterra_es/ADCC_CH.dbc

@@ -0,0 +1,891 @@
+VERSION ""
+
+
+NS_ : 
+        NS_DESC_
+        CM_
+        BA_DEF_
+        BA_
+        VAL_
+        CAT_DEF_
+        CAT_
+        FILTER
+        BA_DEF_DEF_
+        EV_DATA_
+        ENVVAR_DATA_
+        SGTYPE_
+        SGTYPE_VAL_
+        BA_DEF_SGTYPE_
+        BA_SGTYPE_
+        SIG_TYPE_REF_
+        VAL_TABLE_
+        SIG_GROUP_
+        SIG_VALTYPE_
+        SIGTYPE_VALTYPE_
+        BO_TX_BU_
+        BA_DEF_REL_
+        BA_REL_
+        BA_DEF_DEF_REL_
+        BU_SG_REL_
+        BU_EV_REL_
+        BU_BO_REL_
+        SG_MUL_VAL_
+
+BS_:
+
+BU_: ADCC_CH 
+
+
+BO_ 405 ADS_EPS_1: 24 ADCC_CH
+ SG_ ADS_1_CRC1 : 7|8@0+ (1,0) [0|255] ""  Vector__XXX
+ SG_ ADS_1_RollgCntr1 : 11|4@0+ (1,0) [0|14] ""  Vector__XXX
+ SG_ ADS_1_Resd1 : 15|4@0+ (1,0) [0|15] ""  Vector__XXX
+ SG_ ADS_1_SteerAgReq : 21|14@0+ (0.1,-780) [-780|780] "degree"  Vector__XXX
+ SG_ ADS_1_SteerAgVld : 37|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_1_SteerPilotAgEna : 39|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_1_CRC2 : 71|8@0+ (1,0) [0|255] ""  Vector__XXX
+ SG_ ADS_1_RollgCntr2 : 75|4@0+ (1,0) [0|14] ""  Vector__XXX
+ SG_ ADS_1_Resd2 : 79|4@0+ (1,0) [0|15] ""  Vector__XXX
+ SG_ ADS_1_SteerTqEna : 83|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_1_LdwWarningCmd : 85|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_1_LdwWarningCmdVld : 87|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_1_SteerMaxTqReq : 95|13@0+ (0.02,-80) [-80|80] "Nm"  Vector__XXX
+ SG_ ADS_1_SteerMinTqReq : 111|13@0+ (0.02,-80) [-80|80] "Nm"  Vector__XXX
+ SG_ ADS_1_ADSHealthSts : 125|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ CutOutFreshvalues_2CB_S : 135|16@0+ (1,0) [0|65535] ""  Vector__XXX
+ SG_ CutOutMAC_2CB_S : 151|48@0+ (1,0) [0|281474976710655] ""  Vector__XXX
+
+BO_ 444 ADS_EPS_3: 24 ADCC_CH
+ SG_ ADS_3_CRC1 : 7|8@0+ (1,0) [0|255] ""  Vector__XXX
+ SG_ ADS_3_RollgCntr1 : 11|4@0+ (1,0) [0|14] ""  Vector__XXX
+ SG_ ADS_3_Resd1 : 15|4@0+ (1,0) [0|15] ""  Vector__XXX
+ SG_ ADS_3_SteerParkAgReq : 21|14@0+ (0.1,-780) [-780|780] "degree"  Vector__XXX
+ SG_ ADS_3_SteerParkAgVld : 37|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_3_SteerParkAgEna : 39|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_3_CRC2 : 71|8@0+ (1,0) [0|255] ""  Vector__XXX
+ SG_ ADS_3_RollgCntr2 : 75|4@0+ (1,0) [0|14] ""  Vector__XXX
+ SG_ ADS_3_Resd2 : 79|4@0+ (1,0) [0|15] ""  Vector__XXX
+ SG_ ADS_3_ParkFcnMode : 127|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_3_ADSParkHealthSts : 125|2@0+ (1,0) [0|3] ""  Vector__XXX
+
+BO_ 345 ADS_ONEBOX_1: 24 ADCC_CH
+ SG_ ADS_1_CRC1 : 7|8@0+ (1,0) [0|255] ""  Vector__XXX
+ SG_ ADS_1_RollgCntr1 : 11|4@0+ (1,0) [0|14] ""  Vector__XXX
+ SG_ ADS_1_Resd1 : 15|4@0+ (1,0) [0|15] ""  Vector__XXX
+ SG_ ADS_1_PilotCtrlRepSta : 23|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_1_PilotParkCtrlType : 21|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_PilotParkBrkDecTar : 19|12@0+ (0.01,-20) [-20|20] "m/s2"  Vector__XXX
+ SG_ ADS_1_PilotParkCtrlRepMod : 33|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_1_PilotParkBrkDecTarVld : 34|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_PilotParkBrkDecTarEnable : 35|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_PilotParkDec2StpReq : 36|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_PilotParkDriOffReq : 37|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_StopDist : 47|16@0+ (1,0) [0|65535] "mm"  Vector__XXX
+ SG_ ADS_1_ParkCtrlMod : 58|3@0+ (1,0) [0|7] ""  Vector__XXX
+ SG_ ADS_1_PreFillReq : 59|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_EPBCtrlReqValid : 60|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_EPBCtrlReq : 62|2@0+ (1,0) [0|3] ""  Vector__XXX
+
+BO_ 359 ADS_VCU_1: 24 ADCC_CH
+ SG_ ADS_1_CRC1 : 7|8@0+ (1,0) [0|255] ""  Vector__XXX
+ SG_ ADS_1_RollgCntr1 : 11|4@0+ (1,0) [0|14] ""  Vector__XXX
+ SG_ ADS_1_Resd1 : 15|4@0+ (1,0) [0|15] ""  Vector__XXX
+ SG_ ADS_1_DrvTarTq : 23|16@0+ (1,0) [0|65535] "NM"  Vector__XXX
+ SG_ ADS_1_DrvTarTqVld : 32|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_DrvCtrlReq : 34|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_1_CtrlReqMod : 36|2@0+ (1,0) [0|3] ""  Vector__XXX
+ SG_ ADS_1_DrvTarTqEnable : 37|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_AMAPRequest : 38|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_AMAPRequestVld : 39|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_ADCCAvl : 40|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_AMAPTqLimit : 55|10@0+ (1,0) [0|1023] "NM"  Vector__XXX
+ SG_ ADS_1_AMAPTqLimitVld : 41|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_CRC2 : 71|8@0+ (1,0) [0|255] ""  Vector__XXX
+ SG_ ADS_1_RollgCntr2 : 75|4@0+ (1,0) [0|14] ""  Vector__XXX
+ SG_ ADS_1_Resd2 : 79|4@0+ (1,0) [0|15] ""  Vector__XXX
+ SG_ ADS_1_TarGearReq : 82|3@0+ (1,0) [0|7] ""  Vector__XXX
+ SG_ ADS_1_TarGearReqVld : 83|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_GearCtrlEnable : 85|1@0+ (1,0) [0|1] ""  Vector__XXX
+ SG_ ADS_1_RpaPTReadyReq : 86|1@0+ (1,0) [0|1] ""  Vector__XXX
+
+BO_ 715 EPS_3: 8 Vector__XXX
+ SG_ EPS_3_CRC : 7|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ EPS_3_RollgCntr : 11|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ EPS_3_Resd : 15|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ TorsionBarTorque : 23|10@0+ (0.01,0) [0|10.23] "Nm"  ADCC_CH
+ SG_ TorsionBarTorqueDir : 28|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ TosionBarTorqueValid : 29|1@0+ (1,0) [0|1] ""  ADCC_CH
+
+BO_ 421 EPS_4: 48 Vector__XXX
+ SG_ EPS_4_CRC1 : 7|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ EPS_4_RollgCntr1 : 11|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ EPS_4_Resd1 : 15|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ EPS_4_AgParkCtrlAvl : 17|2@0+ (1,0) [0|3] ""  ADCC_CH
+ SG_ EPS_4_AgPilotCtrlAvl : 31|2@0+ (1,0) [0|3] ""  ADCC_CH
+ SG_ EPS_4_AgPilotCtrlSts : 20|3@0+ (1,0) [0|7] ""  ADCC_CH
+ SG_ EPS_4_TqCtrlAvl : 22|2@0+ (1,0) [0|3] ""  ADCC_CH
+ SG_ EPS_4_TqCtrlSts : 26|3@0+ (1,0) [0|7] ""  ADCC_CH
+ SG_ EPS_4_LdwWarnSts : 29|3@0+ (1,0) [0|7] ""  ADCC_CH
+ SG_ EPS_4_LdwWarnStsVD : 38|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ EPS_4_AgParkCtrlSts : 34|3@0+ (1,0) [0|7] ""  ADCC_CH
+ SG_ EPS_4_CRC2 : 71|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ EPS_4_RollgCntr2 : 75|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ EPS_4_Resd2 : 79|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ EPS_4_SteerPinionTq : 87|12@0+ (0.02,-40) [-40|40] "Nm"  ADCC_CH
+ SG_ EPS_4_SteerPinionTqVld : 88|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ EPS_4_AsscMotCrtTq : 103|11@0+ (0.02,-20) [-20|20] "Nm"  ADCC_CH
+ SG_ EPS_4_AsscMotCrtTqVld : 104|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ EPS_4_CRC3 : 135|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ EPS_4_RollgCntr3 : 139|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ EPS_4_Resd3 : 143|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ EPS_4_SteerDrvrOvrd : 160|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ EPS_4_SteerDrvrOvrdVld : 161|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ EPS_4_SteerMod : 175|3@0+ (1,0) [0|7] ""  ADCC_CH
+ SG_ EPS_4_CRC4 : 199|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ EPS_4_RollgCntr4 : 203|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ EPS_4_Resd4 : 207|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ EPS_4_Tq2 : 231|11@0+ (0.02,-20) [-20|20] "Nm"  ADCC_CH
+ SG_ EPS_4_CRC5 : 263|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ EPS_4_RollgCntr5 : 267|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ EPS_4_Resd5 : 271|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ EPS_4_OverrangeFeedback : 279|3@0+ (1,0) [0|7] ""  ADCC_CH
+ SG_ EPS_4_ADSMaxTq : 276|13@0+ (0.02,-80) [-80|80] "Nm"  ADCC_CH
+ SG_ EPS_4_ADSMinTq : 295|13@0+ (0.02,-80) [-80|80] "Nm"  ADCC_CH
+ SG_ EPS_4_OverrangeFeedbackVD : 298|1@0+ (1,0) [0|1] ""  ADCC_CH
+
+BO_ 335 ONEBOX_5: 24 Vector__XXX
+ SG_ ONEBOX_5_CRC1 : 7|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ ONEBOX_5_RollgCntr1 : 11|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ ONEBOX_5_Resd1 : 15|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ ONEBOX_5_PilotParkBrkDecCtlAvl : 16|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_PilotParkBrkDecActSts : 18|2@0+ (1,0) [0|3] ""  ADCC_CH
+ SG_ ONEBOX_5_CddAdcActiveVehHld : 19|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_APCFailureSts : 23|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ ONEBOX_5_APCStatus : 26|3@0+ (1,0) [0|7] ""  ADCC_CH
+ SG_ ONEBOX_5_ApaAvl : 27|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_RpaAvl : 28|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_MebAvl : 29|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_CddApActiveVehHld : 30|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_SysBrkP : 39|10@0+ (1,0) [0|1022] "Bar"  ADCC_CH
+ SG_ ONEBOX_5_SysBrkPVld : 40|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_AbpActSts : 41|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_AbpAvlSts : 42|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_AwbActSts : 43|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_AwbAvlSts : 44|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_AbaActSts : 45|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_AbaAvlSts : 48|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ ONEBOX_5_AbaLvlSts : 50|2@0+ (1,0) [0|3] ""  ADCC_CH
+
+BO_ 1209 VCU_2_G: 8 Vector__XXX
+ SG_ VCU_2_G_CRC : 7|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ VCU_2_G_RollgCntr : 11|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ VCU_2_G_Resd : 15|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ VCU_GasPedalPosition : 49|10@0+ (0.1,0) [0|100] "%"  ADCC_CH
+ SG_ VCU_GasPedalPositionInvalidData : 24|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_HVReady : 38|1@0+ (1,0) [0|1] ""  ADCC_CH
+
+BO_ 56 VCU_COM_10: 16 Vector__XXX
+ SG_ VCU_10_CRC : 7|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ VCU_10_RollgCntr : 11|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ VCU_10_Resd : 15|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ VCU_TargetGear : 20|3@0+ (1,0) [0|7] ""  ADCC_CH
+ SG_ VCU_ActualGear : 23|3@0+ (1,0) [0|7] ""  ADCC_CH
+ SG_ VCU_TargetGearValidData : 28|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_ActualGearValidData : 29|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_BrakePedalStsValidData : 30|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_BrakePedalSts : 31|1@0+ (1,0) [0|1] ""  ADCC_CH
+
+BO_ 75 VCU_ADCC_12: 24 Vector__XXX
+ SG_ VCU_12_CRC1 : 7|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ VCU_12_RollgCntr1 : 11|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ VCU_12_Resd1 : 15|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ VCU_12_DrvrGearIntervention : 49|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_12_PtTqActvSts : 50|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_12_PtTqAvl : 52|2@0+ (1,0) [0|3] ""  ADCC_CH
+ SG_ VCU_12_DriverTorqueDesired : 23|16@0+ (1,-32768) [-32768|32767] "NM"  ADCC_CH
+ SG_ VCU_12_DrvrAccrPedlOvrd : 53|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_12_VehWhlActTq : 39|16@0+ (1,-32768) [-32768|32767] "NM"  ADCC_CH
+ SG_ VCU_12_VehWhlActTqVld : 48|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_12_CRC2 : 71|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ VCU_12_RollgCntr2 : 75|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ VCU_12_Resd2 : 79|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ VCU_12_PtTqMax : 87|16@0+ (1,-32768) [-32768|32767] "NM"  ADCC_CH
+ SG_ VCU_12_PtTqMaxVld : 103|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_12_GasPedalInhabition : 101|1@0+ (1,0) [0|1] ""  ADCC_CH
+ SG_ VCU_12_CRC3 : 135|8@0+ (1,0) [0|255] ""  ADCC_CH
+ SG_ VCU_12_RollgCntr3 : 139|4@0+ (1,0) [0|14] ""  ADCC_CH
+ SG_ VCU_12_Resd3 : 143|4@0+ (1,0) [0|15] ""  ADCC_CH
+ SG_ VCU_12_VehWhlActTqADS : 151|16@0+ (1,0) [0|65535] "NM"  ADCC_CH
+ SG_ VCU_12_VehWhlActTqADSVld : 167|1@0+ (1,0) [0|1] ""  ADCC_CH
+
+
+CM_ "Version:V3.4,Date:2023.04.26,Author:FangZheng,Review:ZhonglingWang,Approval:JiancaiLi,Description:(ADS_BNCM_1(0x367))1、change the ID and Msg Cycle Time(ms)
+2、change the Signal Value Description:
+   ADAS_enum_ParkingQuitInd
+   ADAS_enum_ParkingDriOperateInd
+   ADAS_enum_ParkingPauseInd
+3、add signal:
+   ParkOutDirectionSt`
+(BNCM_4(0x36F))1、change the ID and Msg Cycle Time(ms)
+2、change Start Bit:
+   BNCM_4_RpaDeviceDisSts
+   BNCM_4_BLEConnSts
+   BNCM_4_BLEErrStatus`
+(PDC_Priv_xx_Point)add“unknown”Type in the Signal “Point_xx_High”'s Signal  for Value Description PDC`
+(PDC_3(0x587))change the Bit Length for DA:
+BOOT_Version_Number
+HardWare_Version_Number
+SoftWare_Version_Number;
+Version:V3.41,Date:2023.05.29,Author:ZhengFang,Review:ZhonglingWang,Approval:JiancaiLi,Description:(FCM_TSR00_03(0x415))change Signal Max. Value(phys) for HOLO:
+FCM_TsrInternal_ID01
+FCM_TsrInternal_ID02
+FCM_TsrInternal_ID03`
+(FCM_Lane_Left(0x416))change Signal Max. Value(phys) for HOLO:
+FCM_ConeRoadEdgeModelC3_Left
+FCM_LeftLaneModelC3
+FCM_NextLeftLaneModelC3`
+(FCM_Lane_Right(0x417))change Signal Max. Value(phys) for HOLO:
+FCM_ConeRoadEdgeModelC3_Right
+FCM_RightLaneModelC3
+FCM_NextRightLaneModelC3`
+(ADS_Parking_Status(0x20F))change the Msg ID to 0x20F for PDC`
+(FCM_RoadInformation(0x400))add signal:FCM_FailureSts For FRM(HOLO);
+Version:V3.5,Date:2023.06.15,Author:ZhengFang,Review:ZhonglingWang,Approval:JiancaiLi,Description:(LCM_2(0x02E))add Signal Value Description for LCM:
+INS_Calib_Status:0x3:Ins_Solution Divergence
+add signal:
+LCM_2_BlockCounter
+Ins_PrecisionStatus
+GNSS_Sts`
+(LCM_3(0x026))add signal for LCM:
+LCM_3_BlockCounter`
+(LCM_10(0x124))add signal for LCM:
+LCM_10_BlockCounter`
+(ASU_1(0x4C1))delete signal for DA:
+ASU_1_Resd1;
+Version:V3.51,Date:2023.07.12,Author:ZhengFang,Review:ZhonglingWang,Approval:JiancaiLi,Description:(FLZCU_1(0x23B))add this message for DA;
+Version:V3.52,Date:2023.07.19,Author:ZhengFang,Review:ZhonglingWang,Approval:JiancaiLi,Description:(FLZCU_1(0x24B))add new signal for DA`
+(FLZCU_9(0x49D))add new signal for DA`
+(FRZCU_1(0x2AB))add this message for DA`
+(RZCU_2(0x2BB))add this message for DA;
+Version:V3.601,Date:2023.07.29,Author:ZhengFang,Review:ZhonglingWang,Approval:JiancaiLi,Description:(TCM_1(0x4AF))add this message for DA`
+(ADS_COM_1(0x30F))add signal for DA
+ADCC_SurroundCameraErrorSts
+ADCC_SysReadySts`
+(FLZCU_1(0x23B))add signal for DA:
+HoodLockSts
+FL_SeatOccupiedSts
+FL_SeatBeltFaultStatus`
+(FLZCU_9(0x49D))add E2E for DA`
+(FLZCU_12(0x406))add signal for DA:
+FLZCU_FrontWiperParkStatus
+FLZCU_FrontWiperWipingStatus
+RearViewFoldSts`
+(FRZCU_1(0x2AB))add signal for DA:
+RHFDoorLockSts
+RHRDoorLockSts`
+(RZCU_2(0x2BB))add signal for DA:
+LHRDoorLockSts
+TrunkLockSts`
+(RZCU_7(0x4EA))add signal for DA:
+RZCU_RearWiperWipingStatus
+RZCU_RearWiperParkStatus`
+(VCC_1(0x40B))add message and signal for DA:
+VCC_1_CarMode`
+(FCM_RoadInformation(0x400))add signal for FRM(HOLO):
+FCM_NumObstacles;
+Version:V3.602,Date:2023.10.16,Author:ZhengFang,Review:ZhonglingWang,Approval:JiancaiLi,Description:(ADS_COM_1(0x30F))add signal for DA:
+ADS_1_APARPASts`
+(ADS_COM_3(0x31A))add signal for DA:
+ADS_3_LKSMod
+ADS_3_LKSSts
+ADS_3_ELKSts
+ADS_3_LKSLeftTrackingSt
+ADS_3_LKSRightTrackingSt
+ADS_3_ELKLeftActiveSt
+ADS_3_ELKRightActiveSt`
+(ADS_VCU_2(0x023))add this message for APA for RE;
+Version:V4.000,Date:2023.12.28,Author:ZhengFang,Review:ZhonglingWang,Approval:JiancaiLi,Description:(ADCC_FCM_1(0x204))add this send message for FM(BOSCH)、FM(HOLO)`
+(VCU_1_G(0x4B4))change Signal Value Description for CH :
+VCU_DriveMode:from
+0x0:ECO
+0x1:NORMAL
+0x2:SPORT
+0x3:SNOW(Res)
+0x4:MUD(Res)
+0x5:Offroad(Res)
+0x6:Not Display
+0x7:SAND(Res)
+to
+0x0:Not Active
+0x1:ECO
+0x2:Normal
+0x3:Sport
+0x4:Snow
+0x5:Off Road
+0x6:Individual
+0x7:Reserved`
+(ADS_COM_3(0x31A))change Signal Value Description for DA:
+ADS_3_ICATextinfo:from
+0x8~0xF:reserved
+to
+0x8:Urgent TOR request
+0x9~0xF:reserved`
+(FLZCU_2(0x25B))add this message for DA`
+(ADCC_FCM_1(0x204))change Signal Value Description for FM(BOSCH)、FM(HOLO):
+ADCC_Health_Status:from
+0x0:HealthFailure
+0x1:Health
+to
+0x0:Health
+0x1:Failure
+0x2~0x3:reserved;
+Version:V4.1,Date:2024.03.02,Author:ZhengFang,Review:ZhonglingWang,Approval:JiancaiLi,Description:()merge main project and international project and REEV rpoject`
+(ADS_COM_3(0x31A))change Signal Value Description for DA:
+ADS_3_ICATextinfo:from
+0x9~0xF:reserved
+to
+0x9: uncentered 
+0xA: Too Large curve
+0xB: Abnormal tire pressure
+0xC: Camera block
+0xD-0xF: reserved`
+(ADS_BNCM_1(0x367))change Signal Value Description for DA:
+ADAS_enum_ParkingDriOperateInd:from
+0x23:Req_PS_Repeat_Input
+to
+0x23: Req_Remove_Charging;
+ ";
+
+CM_ BO_ 405 "中配的ADCC与低配的FCM共用此帧信号,中配FCM不发此帧报文";
+CM_ BO_ 444 "APA与ADCC共用此帧信号";
+CM_ BO_ 345 "非冗余配置,此帧信号在中配发送,低配不发送;冗余配置,此帧信号与0x14A为冗余关系;";
+CM_ BO_ 359 "中配的ADCC与低配的FCM共用此帧信号,中配FCM不发此帧报文";
+CM_ SG_ 405 ADS_1_CRC1 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0004";
+CM_ SG_ 405 ADS_1_RollgCntr1 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 405 ADS_1_Resd1 "Profile1A:E2E Reserved";
+CM_ SG_ 405 ADS_1_SteerAgReq "转向转角请求";
+CM_ SG_ 405 ADS_1_SteerAgVld "转向转角请求有效位";
+CM_ SG_ 405 ADS_1_SteerPilotAgEna "转向转角控制使能";
+CM_ SG_ 405 ADS_1_CRC2 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0005";
+CM_ SG_ 405 ADS_1_RollgCntr2 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 405 ADS_1_Resd2 "Profile1A:E2E Reserved";
+CM_ SG_ 405 ADS_1_SteerTqEna "转向转矩控制使能";
+CM_ SG_ 405 ADS_1_LdwWarningCmd "车道偏离振动请求";
+CM_ SG_ 405 ADS_1_LdwWarningCmdVld "车道偏离振动请求有效位";
+CM_ SG_ 405 ADS_1_SteerMaxTqReq "最大转矩控制请求值";
+CM_ SG_ 405 ADS_1_SteerMinTqReq "最小转矩控制请求值";
+CM_ SG_ 444 ADS_3_CRC1 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0006";
+CM_ SG_ 444 ADS_3_RollgCntr1 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 444 ADS_3_Resd1 "Profile1A:E2E Reserved";
+CM_ SG_ 444 ADS_3_SteerParkAgReq "转向转角请求";
+CM_ SG_ 444 ADS_3_SteerParkAgVld "转向转角请求有效位";
+CM_ SG_ 444 ADS_3_SteerParkAgEna "转向转角控制使能";
+CM_ SG_ 444 ADS_3_CRC2 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0007";
+CM_ SG_ 444 ADS_3_RollgCntr2 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 444 ADS_3_Resd2 "Profile1A:E2E Reserved";
+CM_ SG_ 444 ADS_3_ParkFcnMode "ADS功能模式请求";
+CM_ SG_ 345 ADS_1_CRC1 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0008";
+CM_ SG_ 345 ADS_1_RollgCntr1 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 345 ADS_1_Resd1 "Profile1A:E2E Reserved";
+CM_ SG_ 345 ADS_1_PilotCtrlRepSta "Pilot  Control Request";
+CM_ SG_ 345 ADS_1_PilotParkCtrlType "Park  control state";
+CM_ SG_ 345 ADS_1_PilotParkBrkDecTar "Pilot/Parkt target deceleration(-12~12m/s2)";
+CM_ SG_ 345 ADS_1_PilotParkCtrlRepMod "Pilot/Park control request mode";
+CM_ SG_ 345 ADS_1_PilotParkBrkDecTarVld "Pilot/Park target deceleration valid";
+CM_ SG_ 345 ADS_1_PilotParkBrkDecTarEnable "Pilot/Park target deceleration enable";
+CM_ SG_ 345 ADS_1_PilotParkDec2StpReq "Pilot/Park  deceleration to stop request";
+CM_ SG_ 345 ADS_1_PilotParkDriOffReq "Pilot/Park drive off request";
+CM_ SG_ 345 ADS_1_StopDist "Parking distance request";
+CM_ SG_ 345 ADS_1_ParkCtrlMod "Parking control mode request";
+CM_ SG_ 345 ADS_1_PreFillReq "Park PreFill request";
+CM_ SG_ 345 ADS_EPBCtrlReqValid "EPB功能请求有效";
+CM_ SG_ 345 ADS_EPBCtrlReq "EPB功能请求";
+CM_ SG_ 359 ADS_1_CRC1 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x000B";
+CM_ SG_ 359 ADS_1_RollgCntr1 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 359 ADS_1_Resd1 "Profile1A:E2E Reserved";
+CM_ SG_ 359 ADS_1_DrvTarTq "ADS Drive traget torque  Request";
+CM_ SG_ 359 ADS_1_DrvTarTqVld "ADS Drive traget torque  Request valid";
+CM_ SG_ 359 ADS_1_DrvCtrlReq "ADS Drive Control Request";
+CM_ SG_ 359 ADS_1_CtrlReqMod "ADS Drive Control Mode";
+CM_ SG_ 359 ADS_1_DrvTarTqEnable "ADS Drive traget torque  Request enable";
+CM_ SG_ 359 ADS_1_AMAPRequest "域控ADCC 踏板误加速使能信
+号";
+CM_ SG_ 359 ADS_1_AMAPRequestVld "域控ADCC 踏板误加速使能信
+号有效值";
+CM_ SG_ 359 ADS_1_ADCCAvl "ADCC Function State
+ADCC整体可用状态";
+CM_ SG_ 359 ADS_1_AMAPTqLimit "AMAP function limit Tq 
+踏板误加速功能限制扭矩范围";
+CM_ SG_ 359 ADS_1_AMAPTqLimitVld "AMAP function limit Tq valid
+踏板误加速功能限制扭矩范围有效位";
+CM_ SG_ 359 ADS_1_CRC2 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x000C";
+CM_ SG_ 359 ADS_1_RollgCntr2 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 359 ADS_1_Resd2 "Profile1A:E2E Reserved";
+CM_ SG_ 359 ADS_1_TarGearReq "ADS Target Gear Request";
+CM_ SG_ 359 ADS_1_TarGearReqVld "ADS Target Gear Request Valid";
+CM_ SG_ 359 ADS_1_GearCtrlEnable "ADS Gear Control Enable";
+CM_ SG_ 359 ADS_1_RpaPTReadyReq "RPA功能用于PT ready保持的标识位";
+CM_ SG_ 715 EPS_3_CRC "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x002F";
+CM_ SG_ 715 EPS_3_RollgCntr "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 715 EPS_3_Resd "Profile1A:E2E Reserved";
+CM_ SG_ 715 TorsionBarTorque "Torsion BarTorque";
+CM_ SG_ 715 TorsionBarTorqueDir "Torsion Bar Torque Direction";
+CM_ SG_ 715 TosionBarTorqueValid "Tosion Bar Torque Valid";
+CM_ SG_ 421 EPS_4_CRC1 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0030";
+CM_ SG_ 421 EPS_4_RollgCntr1 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 421 EPS_4_Resd1 "Profile1A:E2E Reserved";
+CM_ SG_ 421 EPS_4_AgParkCtrlAvl "EPS监控自身故障,并反馈是否具备执行泊车转角控制的能力,握手信号";
+CM_ SG_ 421 EPS_4_AgPilotCtrlAvl "EPS监控自身故障,并反馈是否具备执行行车转角控制的能力,握手信号";
+CM_ SG_ 421 EPS_4_TqCtrlAvl "EPS监控自身故障,并反馈是否具备执行转矩控制的能力,握手信号";
+CM_ SG_ 421 EPS_4_LdwWarnStsVD "振动状态有效位";
+CM_ SG_ 421 EPS_4_CRC2 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0031";
+CM_ SG_ 421 EPS_4_RollgCntr2 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 421 EPS_4_Resd2 "Profile1A:E2E Reserved";
+CM_ SG_ 421 EPS_4_SteerPinionTq "电机执行扭矩最终会换算到手力端,";
+CM_ SG_ 421 EPS_4_AsscMotCrtTq "电机端扭矩";
+CM_ SG_ 421 EPS_4_CRC3 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0032";
+CM_ SG_ 421 EPS_4_RollgCntr3 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 421 EPS_4_Resd3 "Profile1A:E2E Reserved";
+CM_ SG_ 421 EPS_4_SteerDrvrOvrd "EPS作驾驶员转向干预退出防护策略,阈值和持续时间可标定(由ADS和EPS共同确定)";
+CM_ SG_ 421 EPS_4_SteerMod "EPS当前工作模式";
+CM_ SG_ 421 EPS_4_CRC4 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0033";
+CM_ SG_ 421 EPS_4_RollgCntr4 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 421 EPS_4_Resd4 "Profile1A:E2E Reserved";
+CM_ SG_ 421 EPS_4_CRC5 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0034";
+CM_ SG_ 421 EPS_4_RollgCntr5 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 421 EPS_4_Resd5 "Profile1A:E2E Reserved";
+CM_ SG_ 421 EPS_4_ADSMaxTq "最大转矩限制值";
+CM_ SG_ 421 EPS_4_ADSMinTq "最小转矩限制值";
+CM_ SG_ 335 ONEBOX_5_CRC1 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0055";
+CM_ SG_ 335 ONEBOX_5_RollgCntr1 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 335 ONEBOX_5_Resd1 "Profile1A:E2E Reserved";
+CM_ SG_ 335 ONEBOX_5_PilotParkBrkDecCtlAvl "Pilot deceleration control interface available";
+CM_ SG_ 335 ONEBOX_5_PilotParkBrkDecActSts "Pilot deceleration control status";
+CM_ SG_ 335 ONEBOX_5_CddAdcActiveVehHld "Flag indicate that vehicle is actively hold by longitudinal actuator controller";
+CM_ SG_ 335 ONEBOX_5_APCFailureSts "error status";
+CM_ SG_ 335 ONEBOX_5_APCStatus "response park control status";
+CM_ SG_ 335 ONEBOX_5_ApaAvl "response APA available status";
+CM_ SG_ 335 ONEBOX_5_RpaAvl "response RPA/AVP(include HPA) available status";
+CM_ SG_ 335 ONEBOX_5_MebAvl "response MEB available status";
+CM_ SG_ 335 ONEBOX_5_CddApActiveVehHld "Flag indicate that vehicle is actively hold by longitudinal actuator controller";
+CM_ SG_ 335 ONEBOX_5_SysBrkP "Driver pedal pressure";
+CM_ SG_ 335 ONEBOX_5_SysBrkPVld "Driver pedal pressure status";
+CM_ SG_ 335 ONEBOX_5_AbpActSts "ABP active status";
+CM_ SG_ 335 ONEBOX_5_AbpAvlSts "ABP available status";
+CM_ SG_ 335 ONEBOX_5_AwbActSts "AWB active status";
+CM_ SG_ 335 ONEBOX_5_AwbAvlSts "AWB available status";
+CM_ SG_ 335 ONEBOX_5_AbaActSts "ABA active status";
+CM_ SG_ 335 ONEBOX_5_AbaAvlSts "ABA available status";
+CM_ SG_ 335 ONEBOX_5_AbaLvlSts "ABA level status";
+CM_ SG_ 1209 VCU_2_G_CRC "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x005D";
+CM_ SG_ 1209 VCU_2_G_RollgCntr "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 1209 VCU_2_G_Resd "Profile1A:E2E Reserved";
+CM_ SG_ 1209 VCU_GasPedalPosition "Driver/Cruise control
+This signal including compositive informations which are actual gas pedal position and dummy Cruise control gas pedal position";
+CM_ SG_ 1209 VCU_HVReady "HV Ready";
+CM_ SG_ 56 VCU_10_CRC "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x0068";
+CM_ SG_ 56 VCU_10_RollgCntr "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 56 VCU_10_Resd "Profile1A:E2E Reserved";
+CM_ SG_ 56 VCU_TargetGear "Target gear";
+CM_ SG_ 56 VCU_ActualGear "actual gear";
+CM_ SG_ 56 VCU_TargetGearValidData "valid Target gear";
+CM_ SG_ 56 VCU_ActualGearValidData "valid actual gear";
+CM_ SG_ 75 VCU_12_CRC1 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x006D";
+CM_ SG_ 75 VCU_12_RollgCntr1 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 75 VCU_12_Resd1 "Profile1A:E2E Reserved";
+CM_ SG_ 75 VCU_12_DrvrGearIntervention "Driver Intervention Gear status";
+CM_ SG_ 75 VCU_12_PtTqActvSts "VCU Torque Active State";
+CM_ SG_ 75 VCU_12_PtTqAvl "VCU PT Torque Available";
+CM_ SG_ 75 VCU_12_DriverTorqueDesired "Driver Torque Desieed";
+CM_ SG_ 75 VCU_12_DrvrAccrPedlOvrd "Driver Accelerator Pedal Override";
+CM_ SG_ 75 VCU_12_VehWhlActTq "实际总的轮端扭矩值反馈";
+CM_ SG_ 75 VCU_12_VehWhlActTqVld "实际总的轮端扭矩值有效状态";
+CM_ SG_ 75 VCU_12_CRC2 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x006E";
+CM_ SG_ 75 VCU_12_RollgCntr2 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 75 VCU_12_Resd2 "Profile1A:E2E Reserved";
+CM_ SG_ 75 VCU_12_PtTqMax "VCU PT Torque Max";
+CM_ SG_ 75 VCU_12_PtTqMaxVld "VCU PT Torque Max status";
+CM_ SG_ 75 VCU_12_GasPedalInhabition "VCU Gas Pedal Inhabition";
+CM_ SG_ 75 VCU_12_CRC3 "Profile1A:E2E CRC (SAE J1850 CRC-8) for 8 Bytes
+DataID:0x006F";
+CM_ SG_ 75 VCU_12_RollgCntr3 "Profile1A:E2E Rolling message counter(the maximum value of Alive counter is 14)";
+CM_ SG_ 75 VCU_12_Resd3 "Profile1A:E2E Reserved";
+CM_ SG_ 75 VCU_12_VehWhlActTqADS "实际响应ADS请求总的轮端扭矩值反馈";
+CM_ SG_ 75 VCU_12_VehWhlActTqADSVld "实际响应ADS请求总的轮端扭矩值有效状态";
+
+
+BA_DEF_ BO_  "NmMessage" ENUM "No","Yes";
+BA_DEF_ BO_  "DiagState" ENUM  "No","Yes";
+BA_DEF_ BO_  "DiagRequest" ENUM  "No","Yes";
+BA_DEF_ BO_  "DiagResponse" ENUM  "No","Yes";
+BA_DEF_ BO_  "GenMsgSendType" ENUM  "Cyclic","Event","IfActive","CE","CA","NoMsgSendType";
+BA_DEF_ BO_  "GenMsgCycleTime" INT 0 0;
+BA_DEF_ SG_  "GenSigSendType" ENUM  "Cyclic","OnChange","OnWrite","IfActive","OnChangeWithRepetition","OnWriteWithRepetition","IfActiveWithRepetition","NoSigSendType","OnChangeAndIfActive","OnChangeAndIfActiveWithRepetition","CA","CE","Event";
+BA_DEF_ SG_  "GenSigStartValue" INT 0 0;
+BA_DEF_ SG_  "GenSigInactiveValue" INT 0 0;
+BA_DEF_ BO_  "GenMsgCycleTimeFast" INT 0 0;
+BA_DEF_ BO_  "GenMsgNrOfRepetition" INT 0 0;
+BA_DEF_ BO_  "GenMsgDelayTime" INT 0 0;
+BA_DEF_  "DBName" STRING ;
+BA_DEF_ BO_  "CANFD_BRS" ENUM  "0","1";
+BA_DEF_ BO_  "VFrameFormat" ENUM  "StandardCAN","ExtendedCAN","reserved","reserved","reserved","reserved","reserved","reserved","reserved","reserved","reserved","reserved","reserved","reserved","StandardCAN_FD","ExtendedCAN_FD";
+BA_DEF_  "NmMessageCount" INT 0 255;
+BA_DEF_ BO_  "GenMsgILSupport" ENUM  "No","Yes";
+BA_DEF_ BO_  "GenMsgStartDelayTime" INT 0 65535;
+BA_DEF_ BU_  "NmStationAddress" INT 0 63;
+BA_DEF_ BU_  "NmNode" ENUM  "no","yes";
+BA_DEF_  "NmBaseAddress" HEX 1024 1087;
+BA_DEF_  "BusType" STRING ;
+BA_DEF_ BU_  "NodeLayerModules" STRING ;
+BA_DEF_ BU_  "ECU" STRING ;
+BA_DEF_ BU_  "CANoeJitterMax" INT 0 0;
+BA_DEF_ BU_  "CANoeJitterMin" INT 0 0;
+BA_DEF_ BU_  "CANoeDrift" INT 0 0;
+BA_DEF_ BU_  "CANoeStartDelay" INT 0 0;
+BA_DEF_ SG_ "GenSigMeplex" STRING;
+BA_DEF_ SG_ "GenSigASIL" ENUM "QM","A","B","C","D","";
+BA_DEF_DEF_  "NmMessage" "No";
+BA_DEF_DEF_  "DiagState" "No";
+BA_DEF_DEF_  "DiagRequest" "No";
+BA_DEF_DEF_  "DiagResponse" "No";
+BA_DEF_DEF_  "GenMsgSendType" "Cyclic";
+BA_DEF_DEF_  "GenMsgCycleTime" 0;
+BA_DEF_DEF_  "GenSigSendType" "Cyclic";
+BA_DEF_DEF_  "GenSigStartValue" 0;
+BA_DEF_DEF_  "GenSigInactiveValue" 0;
+BA_DEF_DEF_  "GenMsgCycleTimeFast" 0;
+BA_DEF_DEF_  "GenMsgNrOfRepetition" 0;
+BA_DEF_DEF_  "GenMsgDelayTime" 0;
+BA_DEF_DEF_  "DBName" "";
+BA_DEF_DEF_  "CANFD_BRS" "1";
+BA_DEF_DEF_  "VFrameFormat" "StandardCAN_FD";
+BA_DEF_DEF_  "NmMessageCount" 128;
+BA_DEF_DEF_  "GenMsgILSupport" "No";
+BA_DEF_DEF_  "GenMsgStartDelayTime" 0;
+BA_DEF_DEF_  "NmStationAddress" 0;
+BA_DEF_DEF_  "NmNode" "no";
+BA_DEF_DEF_  "NmBaseAddress" 1024;
+BA_DEF_DEF_  "BusType" "CAN FD";
+BA_DEF_DEF_  "NodeLayerModules" "";
+BA_DEF_DEF_  "ECU" "";
+BA_DEF_DEF_  "CANoeJitterMax" 0;
+BA_DEF_DEF_  "CANoeJitterMin" 0;
+BA_DEF_DEF_  "CANoeDrift" 0;
+BA_DEF_DEF_  "CANoeStartDelay" 0;
+BA_DEF_DEF_ "GenSigMeplex" "";
+BA_DEF_DEF_ "GenSigASIL" "QM";
+BA_ "DBName" "ADCC_CH";
+BA_ "GenMsgILSupport" BO_ 405 1;
+BA_ "GenMsgCycleTime" BO_ 405 10;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_CRC1 5;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_RollgCntr1 5;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_Resd1 5;
+BA_ "GenSigStartValue" SG_ 405 ADS_1_SteerAgReq 7800;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_SteerAgReq 4;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_SteerAgVld 4;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_SteerPilotAgEna 2;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_CRC2 5;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_RollgCntr2 5;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_Resd2 5;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_SteerTqEna 5;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_LdwWarningCmd 5;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_LdwWarningCmdVld 5;
+BA_ "GenSigStartValue" SG_ 405 ADS_1_SteerMaxTqReq 4000;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_SteerMaxTqReq 5;
+BA_ "GenSigStartValue" SG_ 405 ADS_1_SteerMinTqReq 4000;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_SteerMinTqReq 5;
+BA_ "GenSigASIL"  SG_ 405 ADS_1_ADSHealthSts 2;
+BA_ "GenSigASIL"  SG_ 405 CutOutFreshvalues_2CB_S 5;
+BA_ "GenSigASIL"  SG_ 405 CutOutMAC_2CB_S 5;
+BA_ "GenMsgILSupport" BO_ 444 1;
+BA_ "GenMsgCycleTime" BO_ 444 10;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_CRC1 5;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_RollgCntr1 5;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_Resd1 5;
+BA_ "GenSigStartValue" SG_ 444 ADS_3_SteerParkAgReq 7800;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_SteerParkAgReq 2;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_SteerParkAgVld 2;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_SteerParkAgEna 2;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_CRC2 5;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_RollgCntr2 5;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_Resd2 5;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_ParkFcnMode 2;
+BA_ "GenSigASIL"  SG_ 444 ADS_3_ADSParkHealthSts 2;
+BA_ "GenMsgILSupport" BO_ 345 1;
+BA_ "GenMsgCycleTime" BO_ 345 10;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_CRC1 5;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_RollgCntr1 5;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_Resd1 5;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_PilotCtrlRepSta 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_PilotParkCtrlType 2;
+BA_ "GenSigStartValue" SG_ 345 ADS_1_PilotParkBrkDecTar 2000;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_PilotParkBrkDecTar 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_PilotParkCtrlRepMod 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_PilotParkBrkDecTarVld 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_PilotParkBrkDecTarEnable 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_PilotParkDec2StpReq 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_PilotParkDriOffReq 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_StopDist 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_ParkCtrlMod 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_1_PreFillReq 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_EPBCtrlReqValid 2;
+BA_ "GenSigASIL"  SG_ 345 ADS_EPBCtrlReq 2;
+BA_ "GenMsgILSupport" BO_ 359 1;
+BA_ "GenMsgCycleTime" BO_ 359 10;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_CRC1 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_RollgCntr1 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_Resd1 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_DrvTarTq 2;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_DrvTarTqVld 2;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_DrvCtrlReq 2;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_CtrlReqMod 2;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_DrvTarTqEnable 2;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_AMAPRequest 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_AMAPRequestVld 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_ADCCAvl 2;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_AMAPTqLimit 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_AMAPTqLimitVld 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_CRC2 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_RollgCntr2 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_Resd2 5;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_TarGearReq 2;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_TarGearReqVld 2;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_GearCtrlEnable 2;
+BA_ "GenSigASIL"  SG_ 359 ADS_1_RpaPTReadyReq 5;
+BA_ "GenMsgILSupport" BO_ 715 1;
+BA_ "GenMsgCycleTime" BO_ 715 20;
+BA_ "GenSigASIL"  SG_ 715 EPS_3_CRC 5;
+BA_ "GenSigASIL"  SG_ 715 EPS_3_RollgCntr 5;
+BA_ "GenSigASIL"  SG_ 715 EPS_3_Resd 5;
+BA_ "GenSigASIL"  SG_ 715 TorsionBarTorque 4;
+BA_ "GenSigASIL"  SG_ 715 TorsionBarTorqueDir 4;
+BA_ "GenSigASIL"  SG_ 715 TosionBarTorqueValid 4;
+BA_ "GenMsgILSupport" BO_ 421 1;
+BA_ "GenMsgCycleTime" BO_ 421 10;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_CRC1 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_RollgCntr1 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_Resd1 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_AgParkCtrlAvl 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_AgPilotCtrlAvl 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_AgPilotCtrlSts 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_TqCtrlAvl 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_TqCtrlSts 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_LdwWarnSts 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_LdwWarnStsVD 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_AgParkCtrlSts 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_CRC2 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_RollgCntr2 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_Resd2 5;
+BA_ "GenSigStartValue" SG_ 421 EPS_4_SteerPinionTq 2000;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_SteerPinionTq 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_SteerPinionTqVld 2;
+BA_ "GenSigStartValue" SG_ 421 EPS_4_AsscMotCrtTq 1000;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_AsscMotCrtTq 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_AsscMotCrtTqVld 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_CRC3 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_RollgCntr3 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_Resd3 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_SteerDrvrOvrd 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_SteerDrvrOvrdVld 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_SteerMod 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_CRC4 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_RollgCntr4 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_Resd4 5;
+BA_ "GenSigStartValue" SG_ 421 EPS_4_Tq2 1000;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_Tq2 2;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_CRC5 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_RollgCntr5 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_Resd5 5;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_OverrangeFeedback 2;
+BA_ "GenSigStartValue" SG_ 421 EPS_4_ADSMaxTq 4000;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_ADSMaxTq 2;
+BA_ "GenSigStartValue" SG_ 421 EPS_4_ADSMinTq 4000;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_ADSMinTq 2;
+BA_ "GenSigStartValue" SG_ 421 EPS_4_OverrangeFeedbackVD 1;
+BA_ "GenSigASIL"  SG_ 421 EPS_4_OverrangeFeedbackVD 2;
+BA_ "GenMsgILSupport" BO_ 335 1;
+BA_ "GenMsgCycleTime" BO_ 335 10;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_CRC1 5;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_RollgCntr1 5;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_Resd1 5;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_PilotParkBrkDecCtlAvl 2;
+BA_ "GenSigStartValue" SG_ 335 ONEBOX_5_PilotParkBrkDecActSts 1;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_PilotParkBrkDecActSts 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_CddAdcActiveVehHld 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_APCFailureSts 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_APCStatus 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_ApaAvl 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_RpaAvl 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_MebAvl 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_CddApActiveVehHld 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_SysBrkP 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_SysBrkPVld 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_AbpActSts 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_AbpAvlSts 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_AwbActSts 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_AwbAvlSts 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_AbaActSts 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_AbaAvlSts 2;
+BA_ "GenSigASIL"  SG_ 335 ONEBOX_5_AbaLvlSts 2;
+BA_ "GenMsgILSupport" BO_ 1209 1;
+BA_ "GenMsgCycleTime" BO_ 1209 100;
+BA_ "GenSigASIL"  SG_ 1209 VCU_2_G_CRC 5;
+BA_ "GenSigASIL"  SG_ 1209 VCU_2_G_RollgCntr 5;
+BA_ "GenSigASIL"  SG_ 1209 VCU_2_G_Resd 5;
+BA_ "GenSigASIL"  SG_ 1209 VCU_GasPedalPosition 2;
+BA_ "GenSigASIL"  SG_ 1209 VCU_GasPedalPositionInvalidData 2;
+BA_ "GenSigASIL"  SG_ 1209 VCU_HVReady 2;
+BA_ "GenMsgILSupport" BO_ 56 1;
+BA_ "GenMsgCycleTime" BO_ 56 10;
+BA_ "GenSigASIL"  SG_ 56 VCU_10_CRC 5;
+BA_ "GenSigASIL"  SG_ 56 VCU_10_RollgCntr 5;
+BA_ "GenSigASIL"  SG_ 56 VCU_10_Resd 5;
+BA_ "GenSigASIL"  SG_ 56 VCU_TargetGear 2;
+BA_ "GenSigASIL"  SG_ 56 VCU_ActualGear 2;
+BA_ "GenSigASIL"  SG_ 56 VCU_TargetGearValidData 2;
+BA_ "GenSigASIL"  SG_ 56 VCU_ActualGearValidData 2;
+BA_ "GenSigASIL"  SG_ 56 VCU_BrakePedalStsValidData 2;
+BA_ "GenSigASIL"  SG_ 56 VCU_BrakePedalSts 2;
+BA_ "GenMsgILSupport" BO_ 75 1;
+BA_ "GenMsgCycleTime" BO_ 75 10;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_CRC1 5;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_RollgCntr1 5;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_Resd1 2;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_DrvrGearIntervention 2;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_PtTqActvSts 2;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_PtTqAvl 2;
+BA_ "GenSigStartValue" SG_ 75 VCU_12_DriverTorqueDesired 32768;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_DriverTorqueDesired 2;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_DrvrAccrPedlOvrd 2;
+BA_ "GenSigStartValue" SG_ 75 VCU_12_VehWhlActTq 32768;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_VehWhlActTq 2;
+BA_ "GenSigStartValue" SG_ 75 VCU_12_VehWhlActTqVld 1;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_VehWhlActTqVld 2;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_CRC2 5;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_RollgCntr2 5;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_Resd2 5;
+BA_ "GenSigStartValue" SG_ 75 VCU_12_PtTqMax 32768;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_PtTqMax 2;
+BA_ "GenSigStartValue" SG_ 75 VCU_12_PtTqMaxVld 1;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_PtTqMaxVld 2;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_GasPedalInhabition 2;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_CRC3 5;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_RollgCntr3 5;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_Resd3 5;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_VehWhlActTqADS 2;
+BA_ "GenSigStartValue" SG_ 75 VCU_12_VehWhlActTqADSVld 1;
+BA_ "GenSigASIL"  SG_ 75 VCU_12_VehWhlActTqADSVld 2;
+VAL_ 405 ADS_1_SteerAgReq 16383 "Invalid" ;
+VAL_ 405 ADS_1_SteerAgVld 3 "Reserved" 2 "Invalid" 1 "Valid" 0 "Initializing" ;
+VAL_ 405 ADS_1_SteerPilotAgEna 3 "Reserved" 2 "Active" 1 "Reserved" 0 "No request" ;
+VAL_ 405 ADS_1_SteerTqEna 3 "Reserved" 2 "Reserved" 1 "Enable" 0 "Disable" ;
+VAL_ 405 ADS_1_LdwWarningCmd 3 "Reserved" 2 "LevelB(low)" 1 "LevelA(high)" 0 "No request" ;
+VAL_ 405 ADS_1_LdwWarningCmdVld 3 "Reserved" 2 "Invalid" 1 "Valid" 0 "Initializing" ;
+VAL_ 405 ADS_1_SteerMaxTqReq 8191 "Invalid" ;
+VAL_ 405 ADS_1_SteerMinTqReq 8191 "Invalid" ;
+VAL_ 405 ADS_1_ADSHealthSts 3 "reserved" 2 "reserved" 1 "not present" 0 "fail present" ;
+VAL_ 444 ADS_3_SteerParkAgReq 16383 "Invalid" ;
+VAL_ 444 ADS_3_SteerParkAgVld 3 "Reserved" 2 "Invalid" 1 "Valid" 0 "Initializing" ;
+VAL_ 444 ADS_3_SteerParkAgEna 3 "Reserved" 2 "Active" 1 "Ready" 0 "No request" ;
+VAL_ 444 ADS_3_ParkFcnMode 3 " HPA" 2 " RPA" 1 " APA" 0 " No function" ;
+VAL_ 444 ADS_3_ADSParkHealthSts 3 "reserved" 2 "reserved" 1 "not present" 0 "fail present" ;
+VAL_ 345 ADS_1_PilotCtrlRepSta 3 "reserved" 2 "reserved " 1 "L12" 0 "No Request" ;
+VAL_ 345 ADS_1_PilotParkCtrlType 1 "emergency" 0 "comfortable" ;
+VAL_ 345 ADS_1_PilotParkBrkDecTar 4095 "Invalid" ;
+VAL_ 345 ADS_1_PilotParkCtrlRepMod 3 "reserved" 2 "Park Mode" 1 "Pilot Mode" 0 "No Request" ;
+VAL_ 345 ADS_1_PilotParkBrkDecTarVld 1 "Valid" 0 "Invalid" ;
+VAL_ 345 ADS_1_PilotParkBrkDecTarEnable 1 "Enable" 0 "Disable" ;
+VAL_ 345 ADS_1_PilotParkDec2StpReq 1 "Request" 0 "No Request" ;
+VAL_ 345 ADS_1_PilotParkDriOffReq 1 "Request" 0 "No Request" ;
+VAL_ 345 ADS_1_StopDist 65535 "Invalid" ;
+VAL_ 345 ADS_1_ParkCtrlMod 7 "Reserved" 6 "Reserved" 5 "Reserved" 4 "MEB" 3 "AVP/HPA_VPA" 2 "RPA" 1 "APA/RA" 0 "None" ;
+VAL_ 345 ADS_1_PreFillReq 1 "Request" 0 "No Request" ;
+VAL_ 345 ADS_EPBCtrlReqValid 1 "Invalid" 0 "Valid" ;
+VAL_ 345 ADS_EPBCtrlReq 3 "Reserved" 2 "Release" 1 "Lock" 0 "No Request" ;
+VAL_ 359 ADS_1_DrvTarTqVld 1 "Valid" 0 "Invalid" ;
+VAL_ 359 ADS_1_DrvCtrlReq 3 "Reserved" 2 "Reserved" 1 "Req" 0 "No Req" ;
+VAL_ 359 ADS_1_CtrlReqMod 3 "MRM" 2 "Park Mode" 1 "Pilot Mode" 0 "No Request" ;
+VAL_ 359 ADS_1_DrvTarTqEnable 1 "enable" 0 "disenable" ;
+VAL_ 359 ADS_1_AMAPRequest 1 "Request" 0 "No Request" ;
+VAL_ 359 ADS_1_AMAPRequestVld 1 "Valid" 0 "Invalid" ;
+VAL_ 359 ADS_1_ADCCAvl 1 "Available" 0 "Not available" ;
+VAL_ 359 ADS_1_AMAPTqLimitVld 1 "Valid" 0 "Invalid" ;
+VAL_ 359 ADS_1_TarGearReq 7 "Reserved" 6 "Reserved" 5 "Reserved" 4 "D" 3 "N" 2 "R" 1 "P" 0 "No request" ;
+VAL_ 359 ADS_1_TarGearReqVld 1 "Valid" 0 "Invalid" ;
+VAL_ 359 ADS_1_GearCtrlEnable 1 "Disable" 0 "Enable" ;
+VAL_ 359 ADS_1_RpaPTReadyReq 1 "Request" 0 "No request" ;
+VAL_ 715 TorsionBarTorqueDir 1 "negative" 0 "postive" ;
+VAL_ 715 TosionBarTorqueValid 1 "Valid" 0 "Invalid" ;
+VAL_ 421 EPS_4_AgParkCtrlAvl 1 "Available" 0 "Not available " ;
+VAL_ 421 EPS_4_AgPilotCtrlAvl 1 "Available" 0 "Not available " ;
+VAL_ 421 EPS_4_AgPilotCtrlSts 7 "Invalid" 2 "active" 1 "Reserved" 0 "No active" ;
+VAL_ 421 EPS_4_TqCtrlAvl 1 "Available" 0 "Not available " ;
+VAL_ 421 EPS_4_TqCtrlSts 7 "Invalid" 2 "active" 1 "Enable" 0 "Disable" ;
+VAL_ 421 EPS_4_LdwWarnSts 7 "Invalid" 3 "Reserved" 2 "Active LevelB (low)" 1 "Active LevelA (high)" 0 "NotActive" ;
+VAL_ 421 EPS_4_LdwWarnStsVD 1 "Valid" 0 "Invalid " ;
+VAL_ 421 EPS_4_AgParkCtrlSts 7 "Invalid" 2 "active" 1 "Ready" 0 "No active" ;
+VAL_ 421 EPS_4_SteerPinionTq 4095 "Invalid" ;
+VAL_ 421 EPS_4_SteerPinionTqVld 1 "Valid" 0 "Invalid " ;
+VAL_ 421 EPS_4_AsscMotCrtTq 2047 "Invalid" ;
+VAL_ 421 EPS_4_AsscMotCrtTqVld 1 "Valid" 0 "Invalid " ;
+VAL_ 421 EPS_4_SteerDrvrOvrd 1 "Override" 0 "Not override" ;
+VAL_ 421 EPS_4_SteerDrvrOvrdVld 1 "Valid" 0 "Invalid " ;
+VAL_ 421 EPS_4_SteerMod 3 "emergency mode" 2 "driving mode" 1 "parking mode" 0 "no function" ;
+VAL_ 421 EPS_4_Tq2 2047 "Invalid" ;
+VAL_ 421 EPS_4_OverrangeFeedback 7 "reserved" 6 "reserved" 5 "reserved" 4 "reserved" 3 "torque overrange" 2 "anglespeed overrange" 1 "angle overrange" 0 "not overrange" ;
+VAL_ 421 EPS_4_ADSMaxTq 8191 "Invalid" ;
+VAL_ 421 EPS_4_ADSMinTq 8191 "Invalid" ;
+VAL_ 421 EPS_4_OverrangeFeedbackVD 1 "Not Valid" 0 "Valid" ;
+VAL_ 335 ONEBOX_5_PilotParkBrkDecCtlAvl 1 "Not valid" 0 "Valid" ;
+VAL_ 335 ONEBOX_5_PilotParkBrkDecActSts 3 "reserved" 2 "reserved" 1 "Active L12" 0 "Not active" ;
+VAL_ 335 ONEBOX_5_CddAdcActiveVehHld 1 "True" 0 "False" ;
+VAL_ 335 ONEBOX_5_APCFailureSts 8 "APC24(RPA AVP) trigger without secure" 7 "Error" 6 "VehicleBlock" 5 "reserved" 4 "unexpect EPB Apply" 3 "too high speed" 2 "APC24(RPA AVP)  too high slope" 1 "APC1(APA) driver not present" 0 "no error" ;
+VAL_ 335 ONEBOX_5_APCStatus 7 "Reserved" 6 "Reserved" 5 "Reserved" 4 "MEB" 3 "AVP/HPA_VPA" 2 "RPA" 1 "APA" 0 "Not Active" ;
+VAL_ 335 ONEBOX_5_ApaAvl 1 "Available" 0 "Not available" ;
+VAL_ 335 ONEBOX_5_RpaAvl 1 "Available" 0 "Not available" ;
+VAL_ 335 ONEBOX_5_MebAvl 1 "Available" 0 "Not available" ;
+VAL_ 335 ONEBOX_5_CddApActiveVehHld 1 "True" 0 "False" ;
+VAL_ 335 ONEBOX_5_SysBrkP 1023 "Invalid" ;
+VAL_ 335 ONEBOX_5_SysBrkPVld 1 "Available" 0 "Not available" ;
+VAL_ 335 ONEBOX_5_AbpActSts 1 "Active" 0 "Not active" ;
+VAL_ 335 ONEBOX_5_AbpAvlSts 1 "Available" 0 "Not available" ;
+VAL_ 335 ONEBOX_5_AwbActSts 1 "Active" 0 "Not active" ;
+VAL_ 335 ONEBOX_5_AwbAvlSts 1 "Available" 0 "Not available" ;
+VAL_ 335 ONEBOX_5_AbaActSts 1 "Active" 0 "Not active" ;
+VAL_ 335 ONEBOX_5_AbaAvlSts 1 "Available" 0 "Not available" ;
+VAL_ 335 ONEBOX_5_AbaLvlSts 3 "Level3" 2 "Level2" 1 "Level1" 0 "No level" ;
+VAL_ 1209 VCU_GasPedalPosition 1023 "Invalid" ;
+VAL_ 1209 VCU_GasPedalPositionInvalidData 1 "Invalid" 0 "Valid" ;
+VAL_ 1209 VCU_HVReady 1 "LmpON" 0 "LmpOFF" ;
+VAL_ 56 VCU_TargetGear 7 "Invalid" 6 "Reserved" 5 "Reserved" 4 "Target gear D" 3 "Target gear N" 2 "Target gear R" 1 "Target gear P" 0 "No Request" ;
+VAL_ 56 VCU_ActualGear 7 "Invalid" 6 "Reserved" 5 "Reserved" 4 "gear D" 3 "gear N" 2 "gear R" 1 "gear P" 0 "No Request" ;
+VAL_ 56 VCU_TargetGearValidData 1 "V alid" 0 "Not Valid" ;
+VAL_ 56 VCU_ActualGearValidData 1 "V alid" 0 "Not Valid" ;
+VAL_ 56 VCU_BrakePedalStsValidData 1 "Not Valid" 0 "Valid" ;
+VAL_ 56 VCU_BrakePedalSts 1 "Applied" 0 "Not applied" ;
+VAL_ 75 VCU_12_DrvrGearIntervention 1 "Intervention" 0 "No Intervention" ;
+VAL_ 75 VCU_12_PtTqActvSts 1 "Responsed" 0 "Not response " ;
+VAL_ 75 VCU_12_PtTqAvl 3 "fault" 2 "available degraded" 1 "available" 0 "not available" ;
+VAL_ 75 VCU_12_DrvrAccrPedlOvrd 1 "Override" 0 "Not override" ;
+VAL_ 75 VCU_12_VehWhlActTqVld 1 "failure" 0 "no failure " ;
+VAL_ 75 VCU_12_PtTqMaxVld 1 "failure" 0 "no failure " ;
+VAL_ 75 VCU_12_GasPedalInhabition 1 "Intervention" 0 "Not Intervention" ;
+VAL_ 75 VCU_12_VehWhlActTqADSVld 1 "failure" 0 "no failure " ;

+ 3 - 0
src/controller/controller_chery_sterra_es/controller_chery_sterra_es.pro

@@ -41,3 +41,6 @@ LIBS += -lcandbc
 
 HEADERS += \
     sterraes.h
+
+RESOURCES += \
+    sterraes.qrc

+ 68 - 2
src/controller/controller_chery_sterra_es/main.cpp

@@ -24,6 +24,9 @@
 #include "candbc.h"
 #include "sterraes.h"
 
+std::string gstrdbcpath;
+bool gbUseOutDBC;
+
 sterraes * gpsterraes;
 
 static void * gpacansend;
@@ -605,8 +608,42 @@ void sig_int(int signo)
 }
 #endif
 
+
+// void processStream(std::istream& stream) {
+
+//     std::string line;
+
+//     while (std::getline(stream, line)) {
+
+//         std::cout << "Read line: " << line << std::endl;
+
+//     }
+
+// }
+
+
+
+void LoadXML(std::string strxmlpath){
+    iv::xmlparam::Xmlparam xp(strxmlpath);
+    gbUseOutDBC = xp.GetParam("UseOutDBC",false);
+    gstrdbcpath = xp.GetParam("dbcpath","./ADCC_CH.dbc");
+}
+
+
+
+#include <QFile>
+#include <fstream>
 int main(int argc, char *argv[])
 {
+
+     std::istringstream iss("First line.\nSecond line.\n");
+
+
+
+    // // 将 iss 传递给 processStream,这是合法的
+
+    // processStream(iss);
+
     RegisterIVBackTrace();
     showversion("controller_changan_shenlan");
     QCoreApplication a(argc, argv);
@@ -614,12 +651,41 @@ int main(int argc, char *argv[])
     QString strpath = QCoreApplication::applicationDirPath();
 
     if(argc < 2)
-        strpath = strpath + "/controller_changan_shenlan.xml";
+        strpath = strpath + "/controller_chery_sterra_es.xml";
     else
         strpath = argv[1];
     std::cout<<strpath.toStdString()<<std::endl;
 
-    gpsterraes = new sterraes();
+    LoadXML(strpath.toStdString());
+
+    if(gbUseOutDBC == false)
+    {
+        QFile xFile;
+        xFile.setFileName(":/ADCC_CH.dbc");
+        if(xFile.open(QIODevice::ReadOnly))
+        {
+            std::cout<<" open qrc dbc file success. "<<std::endl;
+            QTextStream in(&xFile);
+
+            QString content = in.readAll(); // 读取文件全部内容到QString
+
+            xFile.close();
+
+
+
+            // 将QString转换为std::string,然后传递给std::istringstream
+
+            std::istringstream iss(content.toStdString());
+            gpsterraes = new sterraes(std::string(":/ADCC_CH.dbc"),iss);
+        }
+        else
+            std::cout<<" open qrc dbc file fail. "<<std::endl;
+
+    }
+    else
+    {
+        gpsterraes = new sterraes(gstrdbcpath);
+    }
 
     //    gdecition_def.set_accelerator(-0.5);
     gdecition_def.set_brake(0);

+ 15 - 3
src/controller/controller_chery_sterra_es/sterraes.cpp

@@ -4,9 +4,21 @@
 #include <memory>
 #include <string.h>
 
-sterraes::sterraes() {
 
-    mpPacker =  new CANPacker("./ADCC_CH.dbc");
+sterraes::sterraes(std::string strdbcname) {
+
+    mpPacker =  new CANPacker(strdbcname);
+    initsig();
+}
+
+sterraes::sterraes(std::string strdbcname,std::istringstream & strsteam)
+{
+    mpPacker = new CANPacker(strdbcname,strsteam);
+    initsig();
+}
+
+void sterraes::initsig()
+{
     SignalPackValue sv;
     sv.name = "ADS_1_RollgCntr1";sv.value = 0;mvectorADSEPS1.push_back(sv);
     sv.name = "ADS_1_Resd1";sv.value = 0;mvectorADSEPS1.push_back(sv);
@@ -157,7 +169,7 @@ void sterraes::GetONEBOX1Data(unsigned char * pdata){
 }
 
 void sterraes::GetVCU1Data(unsigned char * pdata){
-    std::vector<uint8_t> xpack =  mpPacker->pack(0x167,mvectorADSEPS3);
+    std::vector<uint8_t> xpack =  mpPacker->pack(0x167,mvectorADSVCU1);
     int i;
     for(i=0;i<24;i++)pdata[i] = xpack[i];
 

+ 5 - 1
src/controller/controller_chery_sterra_es/sterraes.h

@@ -4,10 +4,12 @@
 #include <vector>
 #include "candbc.h"
 
+
 class sterraes
 {
 public:
-    sterraes();
+    sterraes(std::string strdbcname);
+    sterraes(std::string strdbcname,std::istringstream & strsteam);
 
 private:
     std::vector<SignalPackValue> mvectorADSEPS1;
@@ -18,6 +20,8 @@ private:
     CANPacker * mpPacker;
 
 private:
+    void initsig();
+
     void setsignal(std::vector<SignalPackValue> * pvectorspv,std::string strsigname,double value);
 
     void fillcrc(unsigned short dataid,unsigned char * pdata);

+ 5 - 0
src/controller/controller_chery_sterra_es/sterraes.qrc

@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/">
+        <file>ADCC_CH.dbc</file>
+    </qresource>
+</RCC>

+ 61 - 0
src/detection/detection_chassis/decodechassis.cpp

@@ -552,6 +552,67 @@ int ProcShenLanCANFDChassis(void *pa, iv::can::canmsg *pmsg)
     return 0;
 }
 
+int ProcSterraesChassis(void *pa, iv::can::canmsg *pmsg){
+    int i;
+    static iv::chassis xchassis;
+    for(i=0;i<pmsg->rawmsg_size();i++)
+    {
+
+        iv::can::canraw * praw =  pmsg->mutable_rawmsg(i);//&(pmsg->rawmsg(i));
+
+        if(praw->id() == 0x98)
+        {
+            unsigned char byte[24];
+            double vehspeed;
+            if(praw->len() == 24)
+            {
+                memcpy(byte,praw->data().data(),24);
+                unsigned int value;
+                value = byte[2]&0xFF;
+                value = (value<<8) +  static_cast<unsigned int >( byte[3]);
+                value = value>>3;
+                vehspeed = static_cast<double>(value) * 0.0625;
+
+                xchassis.set_vel(static_cast<float>(vehspeed));  //km/s
+                xchassis.set_time(std::chrono::system_clock::now().time_since_epoch().count());
+
+                ShareChassis(pa,&xchassis);
+                //              xchassis.clear_angle_feedback();
+                //              std::cout<<"veh: "<<xchassis.vel()<<std::endl;
+            }
+            else
+            {
+                std::cout<<" 0x98 not 64 bytes. 0x98 bytes: "<<praw->len()<<std::endl;
+            }
+        }
+        if(praw->id() == 0x132)
+        {
+            unsigned char byte[8];
+            double ang;
+            if(praw->len() == 8)
+            {
+                memcpy(byte,praw->data().data(),8);
+                unsigned int value;
+                value = byte[2]&0xFF;
+                value = (value<<8) +  static_cast<unsigned int >( byte[3]);
+                ang = static_cast<double>(value) * 0.0625 - 2048.0;
+
+                xchassis.set_angle_feedback(static_cast<float>(ang));
+                //           ShareChassis(pa,&xchassis);
+                if(ang<30)std::cout<<"ang: "<<xchassis.angle_feedback()<<std::endl;
+            }
+            else
+            {
+                std::cout<<" 0x132 not 64 bytes. 0x132 bytes: "<<praw->len()<<std::endl;
+            }
+        }
+
+    }
+
+
+    return 0;
+}
+
 int ProcHunterChassis(void *pa, iv::can::canmsg *pmsg)
 {
     int i;

+ 4 - 0
src/detection/detection_chassis/decodechassis.h

@@ -28,6 +28,10 @@ int ProcShenLanCANFDChassis(void *pa, iv::can::canmsg *pmsg);
 
 int ProcHunterChassis(void *pa, iv::can::canmsg *pmsg);
 
+int ProcSterraesChassis(void *pa, iv::can::canmsg *pmsg);
+
 void PrintCANRaw(const iv::can::canraw * praw );
 
+
+
 #endif // DECODECHASSIS_H

+ 10 - 2
src/detection/detection_chassis/main.cpp

@@ -29,7 +29,7 @@ bool gbPrintRaw = false;
 
 namespace  iv {
 
-enum VehicleTypeDef {GE3,VV7,MIDCAR,PROBLUE,MIDBUS,HAPO,UNKNOWN, YUHESEN,SHENLAN,SHENLAN_CANFD,HUNTER} gVehicleType;  //车辆类型
+enum VehicleTypeDef {GE3,VV7,MIDCAR,PROBLUE,MIDBUS,HAPO,UNKNOWN, YUHESEN,SHENLAN,SHENLAN_CANFD,HUNTER,STERRAES} gVehicleType;  //车辆类型
 
 
 }
@@ -104,6 +104,9 @@ void Listencan0(const char * strdata,const unsigned int nSize,const unsigned int
     case iv::HUNTER:
         nRtn = ProcHunterChassis(gpa,&xmsg);
         break;
+    case iv::STERRAES:
+        nRtn = ProcSterraesChassis(gpa,&xmsg);
+        break;
     default:
         break;
     }
@@ -154,7 +157,7 @@ int main(int argc, char *argv[])
     showversion("detection_chassis");
     QCoreApplication a(argc, argv);
 
-    gTime.start();
+ //   gTime.start();
 
     QString strpath = QCoreApplication::applicationDirPath();
     if(argc < 2)
@@ -218,6 +221,11 @@ int main(int argc, char *argv[])
         iv::gVehicleType = iv::HUNTER;
     }
 
+   if(strncmp(strvehicletype.data(),"SterraES",255) == 0)
+    {
+        iv::gVehicleType = iv::STERRAES;
+    }
+
 //iv::gVehicleType = iv::MIDBUS;
 
     givlog = new iv::Ivlog(strmodulename.data());

+ 91 - 2
src/python/candbc/cheryes.py

@@ -33,9 +33,30 @@ keyexit = False
 ADS_1_SteerPilotAgEna = 0.0  # 2 activate
 ADS_1_SteerAgVld = 0.0
 ADS_1_SteerAgReq = 0.0
-
 ADS_1_RollgCntr1 = 0.0
 
+ADS_1_DrvCtrlReq = 0.0
+ADS_1_CtrlReqMod = 0.0
+ADS_1_DrvTarTqVld = 0.0
+ADS_1_DrvTarTqEnable = 0.0
+ADS_1_DrvTarTq = 0.0
+ADS_1_TarGearReq = 0.0
+ADS_1_TarGearReqVld = 0.0
+ADS_1_GearCtrlEnable = 1.0
+
+ADS_1_PilotCtrlRepSta = 0.0
+ADS_1_PilotParkCtrlType =  0.0
+ADS_1_PilotParkBrkDecTar = 0.0
+ADS_1_PilotParkCtrlRepMod = 0.0
+ADS_1_PilotParkBrkDecTarVld = 0.0
+ADS_1_PilotParkBrkDecTarEnable = 0.0
+ADS_1_PilotParkDec2StpReq = 0.0
+ADS_1_PilotParkDriOffReq = 0.0
+ADS_1_ParkCtrlMod = 0.0
+
+VCU_RollgCntr1 = 0.0
+ONBOX_RollCntr1 = 0.0
+
 
 def CRCCheck_SAEJ1850(msg : bytes, len : int, idleCrc : bytes)  -> bytearray:
 	dat = bytearray(msg)
@@ -123,11 +144,79 @@ def wheel_task():
 		threading.Timer(0.01, wheel_task).start()
 
 def drive_task():
+	global ADS_1_DrvCtrlReq
+	global ADS_1_CtrlReqMod
+	global ADS_1_DrvTarTqVld
+	global ADS_1_DrvTarTqEnable
+	global ADS_1_DrvTarTq
+	global ADS_1_TarGearReq
+	global ADS_1_TarGearReqVld
+	global ADS_1_GearCtrlEnable
+	global VCU_RollgCntr1
+	addr,msg,bus = packer1.make_can_msg("ADS_VCU_1", 0, {
+	"ADS_1_DrvCtrlReq":ADS_1_DrvCtrlReq,
+	"ADS_1_CtrlReqMod":ADS_1_CtrlReqMod,
+	"ADS_1_DrvTarTqVld":ADS_1_DrvTarTqVld,
+	"ADS_1_DrvTarTqEnable":ADS_1_DrvTarTqEnable,
+	"ADS_1_DrvTarTq":ADS_1_DrvTarTq,
+	"ADS_1_TarGearReq":ADS_1_TarGearReq,
+	"ADS_1_DrvTarTqVld":ADS_1_DrvTarTqVld,
+	"ADS_1_TarGearReqVld":ADS_1_TarGearReqVld,
+	"ADS_1_GearCtrlEnable":ADS_1_GearCtrlEnable,
+	"ADS_1_RollgCntr1":VCU_RollgCntr1,
+	"ADS_1_RollgCntr2":VCU_RollgCntr1,
+	})
+	VCU_RollgCntr1 = VCU_RollgCntr1 + 1.0
+	if(VCU_RollgCntr1>14):
+		VCU_RollgCntr1 = 0.0
+	iddata = [0x000B,0x000C]
+	part1 = FillCheck_Chery(msg[0:8],iddata[0].to_bytes(2,byteorder="little"))
+	part2 = FillCheck_Chery(msg[8:16],iddata[1].to_bytes(2,byteorder="little"))
+	part3 = bytearray(msg[16:24])
+	msgdata = part1 + part2 + part3
+	print("DRIVE: ",fwheel)
+	hex_str = msgdata.hex().upper()  
+	print(hex_str)  
+	sendcandata(addr,bytes(msgdata),bus)
 #	print("drive task.")
 	if (keyexit == False):
-		threading.Timer(1.0, drive_task).start()
+		threading.Timer(0.01, drive_task).start()
 
 def brake_task():
+	global ADS_1_PilotCtrlRepSta
+	global ADS_1_PilotParkCtrlType
+	global ADS_1_PilotParkBrkDecTar
+	global ADS_1_PilotParkCtrlRepMod
+	global ADS_1_PilotParkBrkDecTarVld
+	global ADS_1_PilotParkBrkDecTarEnable
+	global ADS_1_PilotParkDec2StpReq
+	global ADS_1_PilotParkDriOffReq
+	global ADS_1_ParkCtrlMod
+	global ONBOX_RollCntr1
+	addr,msg,bus = packer1.make_can_msg("ADS_ONEBOX_1", 0, {
+	"ADS_1_PilotCtrlRepSta":ADS_1_PilotCtrlRepSta,
+	"ADS_1_PilotParkCtrlType":ADS_1_PilotParkCtrlType,
+	"ADS_1_PilotParkBrkDecTar":ADS_1_PilotParkBrkDecTar,
+	"ADS_1_PilotParkCtrlRepMod":ADS_1_PilotParkCtrlRepMod,
+	"ADS_1_PilotParkBrkDecTarVld":ADS_1_PilotParkBrkDecTarVld,
+	"ADS_1_PilotParkBrkDecTarEnable":ADS_1_PilotParkBrkDecTarEnable,
+	"ADS_1_PilotParkDec2StpReq":ADS_1_PilotParkDec2StpReq,
+	"ADS_1_PilotParkDriOffReq":ADS_1_PilotParkDriOffReq,
+	"ADS_1_ParkCtrlMod":ADS_1_ParkCtrlMod,
+	"ADS_1_RollgCntr1":ONBOX_RollCntr1,
+	})
+	ONBOX_RollCntr1 = ONBOX_RollCntr1 + 1.0
+	if(ONBOX_RollCntr1>14):
+		ONBOX_RollCntr1 = 0.0
+	iddata = [0x0008]
+	part1 = FillCheck_Chery(msg[0:8],iddata[0].to_bytes(2,byteorder="little"))
+	part2 = bytearray(msg[8:16])
+	part3 = bytearray(msg[16:24])
+	msgdata = part1 + part2 + part3
+	print("BRAKE: ",fwheel)
+	hex_str = msgdata.hex().upper()  
+	print(hex_str)  
+	sendcandata(addr,bytes(msgdata),bus)
 #	print("brake task.");
 	if (keyexit == False):
 		threading.Timer(1.0, brake_task).start()