mirror of https://github.com/rusefi/opendbc.git
Compare commits
6 Commits
5adb62bf04
...
3ba8e77bd4
Author | SHA1 | Date |
---|---|---|
Dean Lee | 3ba8e77bd4 | |
Aaron Logan | 7e3b518d33 | |
Adeeb Shihadeh | 98a700dce5 | |
Shane Smiskol | f12052306e | |
Shane Smiskol | 23b83b51e3 | |
Dean Lee | 8faada0494 |
|
@ -14,6 +14,10 @@ jobs:
|
|||
unit-tests:
|
||||
name: unit tests
|
||||
runs-on: ubuntu-20.04
|
||||
#strategy:
|
||||
# fail-fast: false
|
||||
# matrix:
|
||||
# run: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Build Docker image
|
||||
|
|
|
@ -15,7 +15,7 @@ repos:
|
|||
- --check-hidden
|
||||
- --builtins clear,rare,informal,usage,code,names,en-GB_to_en-US
|
||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||
rev: v1.2.0
|
||||
rev: v1.3.0
|
||||
hooks:
|
||||
- id: mypy
|
||||
- repo: https://github.com/PyCQA/flake8
|
||||
|
|
|
@ -81,11 +81,12 @@ public:
|
|||
CANParser(int abus, const std::string& dbc_name, bool ignore_checksum, bool ignore_counter);
|
||||
#ifndef DYNAMIC_CAPNP
|
||||
void update_string(const std::string &data, bool sendcan);
|
||||
void update_strings(const std::vector<std::string> &data, std::vector<SignalValue> &vals, bool sendcan);
|
||||
void UpdateCans(uint64_t sec, const capnp::List<cereal::CanData>::Reader& cans);
|
||||
#endif
|
||||
void UpdateCans(uint64_t sec, const capnp::DynamicStruct::Reader& cans);
|
||||
void UpdateValid(uint64_t sec);
|
||||
std::vector<SignalValue> query_latest();
|
||||
void query_latest(std::vector<SignalValue> &vals, uint64_t last_ts = 0);
|
||||
};
|
||||
|
||||
class CANPacker {
|
||||
|
|
|
@ -78,8 +78,7 @@ cdef extern from "common.h":
|
|||
bool can_valid
|
||||
bool bus_timeout
|
||||
CANParser(int, string, vector[MessageParseOptions], vector[SignalParseOptions])
|
||||
void update_string(string&, bool)
|
||||
vector[SignalValue] query_latest()
|
||||
void update_strings(vector[string]&, vector[SignalValue]&, bool)
|
||||
|
||||
cdef cppclass CANPacker:
|
||||
CANPacker(string)
|
||||
|
|
|
@ -106,6 +106,7 @@ DBC* dbc_parse_from_stream(const std::string &dbc_name, std::istream &stream, Ch
|
|||
std::map<uint32_t, std::vector<Signal>> signals;
|
||||
DBC* dbc = new DBC;
|
||||
dbc->name = dbc_name;
|
||||
std::setlocale(LC_NUMERIC, "C");
|
||||
|
||||
// used to find big endian LSB from MSB and size
|
||||
std::vector<int> be_bits;
|
||||
|
|
|
@ -33,7 +33,7 @@ int64_t get_raw_value(const std::vector<uint8_t> &msg, const Signal &sig) {
|
|||
|
||||
bool MessageState::parse(uint64_t sec, const std::vector<uint8_t> &dat) {
|
||||
for (int i = 0; i < parse_sigs.size(); i++) {
|
||||
auto &sig = parse_sigs[i];
|
||||
const auto &sig = parse_sigs[i];
|
||||
|
||||
int64_t tmp = get_raw_value(dat, sig);
|
||||
if (sig.is_signed) {
|
||||
|
@ -204,14 +204,24 @@ void CANParser::update_string(const std::string &data, bool sendcan) {
|
|||
UpdateValid(last_sec);
|
||||
}
|
||||
|
||||
void CANParser::update_strings(const std::vector<std::string> &data, std::vector<SignalValue> &vals, bool sendcan) {
|
||||
uint64_t current_sec = 0;
|
||||
for (const auto &d : data) {
|
||||
update_string(d, sendcan);
|
||||
if (current_sec == 0) {
|
||||
current_sec = last_sec;
|
||||
}
|
||||
}
|
||||
query_latest(vals, current_sec);
|
||||
}
|
||||
|
||||
void CANParser::UpdateCans(uint64_t sec, const capnp::List<cereal::CanData>::Reader& cans) {
|
||||
//DEBUG("got %d messages\n", cans.size());
|
||||
|
||||
bool bus_empty = true;
|
||||
|
||||
// parse the messages
|
||||
for (int i = 0; i < cans.size(); i++) {
|
||||
auto cmsg = cans[i];
|
||||
for (const auto cmsg : cans) {
|
||||
if (cmsg.getSrc() != bus) {
|
||||
// DEBUG("skip %d: wrong bus\n", cmsg.getAddress());
|
||||
continue;
|
||||
|
@ -301,16 +311,19 @@ void CANParser::UpdateValid(uint64_t sec) {
|
|||
can_valid = (can_invalid_cnt < CAN_INVALID_CNT) && _counters_valid;
|
||||
}
|
||||
|
||||
std::vector<SignalValue> CANParser::query_latest() {
|
||||
std::vector<SignalValue> ret;
|
||||
|
||||
void CANParser::query_latest(std::vector<SignalValue> &vals, uint64_t last_ts) {
|
||||
if (last_ts == 0) {
|
||||
last_ts = last_sec;
|
||||
}
|
||||
for (auto& kv : message_states) {
|
||||
auto& state = kv.second;
|
||||
if (last_sec != 0 && state.last_seen_nanos != last_sec) continue;
|
||||
if (last_ts != 0 && state.last_seen_nanos < last_ts) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (int i = 0; i < state.parse_sigs.size(); i++) {
|
||||
const Signal &sig = state.parse_sigs[i];
|
||||
SignalValue &v = ret.emplace_back();
|
||||
SignalValue &v = vals.emplace_back();
|
||||
v.address = state.address;
|
||||
v.ts_nanos = state.last_seen_nanos;
|
||||
v.name = sig.name;
|
||||
|
@ -319,6 +332,4 @@ std::vector<SignalValue> CANParser::query_latest() {
|
|||
state.all_vals[i].clear();
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# distutils: language = c++
|
||||
# cython: c_string_encoding=ascii, language_level=3
|
||||
|
||||
from cython.operator cimport dereference as deref, preincrement as preinc
|
||||
from libcpp.string cimport string
|
||||
from libcpp.vector cimport vector
|
||||
from libcpp.unordered_set cimport unordered_set
|
||||
|
@ -101,45 +102,29 @@ cdef class CANParser:
|
|||
message_options_v.push_back(mpo)
|
||||
|
||||
self.can = new cpp_CANParser(bus, dbc_name, message_options_v, signal_options_v)
|
||||
self.update_vl()
|
||||
|
||||
cdef unordered_set[uint32_t] update_vl(self):
|
||||
cdef unordered_set[uint32_t] updated_addrs
|
||||
|
||||
new_vals = self.can.query_latest()
|
||||
for cv in new_vals:
|
||||
# Cast char * directly to unicode
|
||||
cv_name = <unicode>cv.name
|
||||
self.vl[cv.address][cv_name] = cv.value
|
||||
self.ts_nanos[cv.address][cv_name] = cv.ts_nanos
|
||||
|
||||
vl_all = self.vl_all[cv.address]
|
||||
if (cv_name in vl_all):
|
||||
vl_all[cv_name].extend(cv.all_values)
|
||||
else:
|
||||
vl_all[cv_name] = cv.all_values
|
||||
|
||||
updated_addrs.insert(cv.address)
|
||||
|
||||
return updated_addrs
|
||||
|
||||
def update_string(self, dat, sendcan=False):
|
||||
for v in self.vl_all.values():
|
||||
for l in v.values():
|
||||
l.clear()
|
||||
|
||||
self.can.update_string(dat, sendcan)
|
||||
return self.update_vl()
|
||||
self.update_strings([])
|
||||
|
||||
def update_strings(self, strings, sendcan=False):
|
||||
for v in self.vl_all.values():
|
||||
for l in v.values():
|
||||
l.clear()
|
||||
|
||||
updated_addrs = set()
|
||||
for s in strings:
|
||||
self.can.update_string(s, sendcan)
|
||||
updated_addrs.update(self.update_vl())
|
||||
cdef vector[SignalValue] new_vals
|
||||
cdef unordered_set[uint32_t] updated_addrs
|
||||
|
||||
self.can.update_strings(strings, new_vals, sendcan)
|
||||
cdef vector[SignalValue].iterator it = new_vals.begin()
|
||||
cdef SignalValue* cv
|
||||
while it != new_vals.end():
|
||||
cv = &deref(it)
|
||||
# Cast char * directly to unicode
|
||||
cv_name = <unicode>cv.name
|
||||
self.vl[cv.address][cv_name] = cv.value
|
||||
self.vl_all[cv.address][cv_name] = cv.all_values
|
||||
self.ts_nanos[cv.address][cv_name] = cv.ts_nanos
|
||||
updated_addrs.insert(cv.address)
|
||||
preinc(it)
|
||||
|
||||
return updated_addrs
|
||||
|
||||
@property
|
||||
|
|
|
@ -57,7 +57,7 @@ class TestCanParserPacker(unittest.TestCase):
|
|||
for i in range(1000):
|
||||
msg = packer.make_can_msg("CAN_FD_MESSAGE", 0, {})
|
||||
dat = can_list_to_can_capnp([msg, ])
|
||||
parser.update_string(dat)
|
||||
parser.update_strings([dat])
|
||||
self.assertEqual(parser.vl["CAN_FD_MESSAGE"]["COUNTER"], i % 256)
|
||||
|
||||
# setting COUNTER should override
|
||||
|
@ -67,7 +67,7 @@ class TestCanParserPacker(unittest.TestCase):
|
|||
"COUNTER": cnt,
|
||||
})
|
||||
dat = can_list_to_can_capnp([msg, ])
|
||||
parser.update_string(dat)
|
||||
parser.update_strings([dat])
|
||||
self.assertEqual(parser.vl["CAN_FD_MESSAGE"]["COUNTER"], cnt)
|
||||
|
||||
# then, should resume counting from the override value
|
||||
|
@ -75,7 +75,7 @@ class TestCanParserPacker(unittest.TestCase):
|
|||
for i in range(100):
|
||||
msg = packer.make_can_msg("CAN_FD_MESSAGE", 0, {})
|
||||
dat = can_list_to_can_capnp([msg, ])
|
||||
parser.update_string(dat)
|
||||
parser.update_strings([dat])
|
||||
self.assertEqual(parser.vl["CAN_FD_MESSAGE"]["COUNTER"], (cnt + i) % 256)
|
||||
|
||||
def test_parser_can_valid(self):
|
||||
|
@ -92,7 +92,7 @@ class TestCanParserPacker(unittest.TestCase):
|
|||
# not valid until the message is seen
|
||||
for _ in range(100):
|
||||
dat = can_list_to_can_capnp([])
|
||||
parser.update_string(dat)
|
||||
parser.update_strings([dat])
|
||||
self.assertFalse(parser.can_valid)
|
||||
|
||||
# valid once seen
|
||||
|
@ -100,7 +100,7 @@ class TestCanParserPacker(unittest.TestCase):
|
|||
t = int(0.01 * i * 1e9)
|
||||
msg = packer.make_can_msg("CAN_FD_MESSAGE", 0, {})
|
||||
dat = can_list_to_can_capnp([msg, ], logMonoTime=t)
|
||||
parser.update_string(dat)
|
||||
parser.update_strings([dat])
|
||||
self.assertTrue(parser.can_valid)
|
||||
|
||||
def test_packer_parser(self):
|
||||
|
@ -141,7 +141,7 @@ class TestCanParserPacker(unittest.TestCase):
|
|||
|
||||
msgs = [packer.make_can_msg(k, 0, v) for k, v in values.items()]
|
||||
bts = can_list_to_can_capnp(msgs)
|
||||
parser.update_string(bts)
|
||||
parser.update_strings([bts])
|
||||
|
||||
for k, v in values.items():
|
||||
for key, val in v.items():
|
||||
|
@ -168,7 +168,7 @@ class TestCanParserPacker(unittest.TestCase):
|
|||
msgs = packer.make_can_msg("VSA_STATUS", 0, values)
|
||||
bts = can_list_to_can_capnp([msgs])
|
||||
|
||||
parser.update_string(bts)
|
||||
parser.update_strings([bts])
|
||||
|
||||
self.assertAlmostEqual(parser.vl["VSA_STATUS"]["USER_BRAKE"], brake)
|
||||
|
||||
|
@ -199,7 +199,7 @@ class TestCanParserPacker(unittest.TestCase):
|
|||
|
||||
msgs = packer.make_can_msg("ES_LKAS", 0, values)
|
||||
bts = can_list_to_can_capnp([msgs])
|
||||
parser.update_string(bts)
|
||||
parser.update_strings([bts])
|
||||
|
||||
self.assertAlmostEqual(parser.vl["ES_LKAS"]["LKAS_Output"], steer)
|
||||
self.assertAlmostEqual(parser.vl["ES_LKAS"]["LKAS_Request"], active)
|
||||
|
@ -306,8 +306,8 @@ class TestCanParserPacker(unittest.TestCase):
|
|||
for _ in range(10):
|
||||
can_strings = []
|
||||
log_mono_time = 0
|
||||
for _ in range(10):
|
||||
log_mono_time = int(random.uniform(1, 60) * 1e+9)
|
||||
for i in range(10):
|
||||
log_mono_time = int(0.01 * i * 1e+9)
|
||||
can_msg = packer.make_can_msg("VSA_STATUS", 0, {})
|
||||
can_strings.append(can_list_to_can_capnp([can_msg], logMonoTime=log_mono_time))
|
||||
parser.update_strings(can_strings)
|
||||
|
|
|
@ -7,7 +7,6 @@ from opendbc.can.packer import CANPacker
|
|||
from opendbc.can.tests.test_packer_parser import can_list_to_can_capnp
|
||||
|
||||
|
||||
|
||||
class TestParser(unittest.TestCase):
|
||||
def _benchmark(self, signals, checks, thresholds, n):
|
||||
parser = CANParser('toyota_new_mc_pt_generated', signals, checks, 0, False)
|
||||
|
@ -33,15 +32,14 @@ class TestParser(unittest.TestCase):
|
|||
else:
|
||||
t1 = time.process_time_ns()
|
||||
for m in can_msgs:
|
||||
parser.update_string(m)
|
||||
parser.update_strings([m])
|
||||
t2 = time.process_time_ns()
|
||||
|
||||
ets.append(t2 - t1)
|
||||
|
||||
et = sum(ets) / len(ets)
|
||||
avg_nanos = et / len(can_msgs)
|
||||
method = 'update_strings' if n > 1 else 'update_string'
|
||||
print('%s: [%s] %.1fms to parse %s, avg: %dns' % (self._testMethodName, method, et/1e6, len(can_msgs), avg_nanos))
|
||||
print('%s: [%d] %.1fms to parse %s, avg: %dns' % (self._testMethodName, n, et/1e6, len(can_msgs), avg_nanos))
|
||||
|
||||
minn, maxx = thresholds
|
||||
self.assertLess(avg_nanos, maxx)
|
||||
|
@ -51,8 +49,8 @@ class TestParser(unittest.TestCase):
|
|||
signals = [
|
||||
("ACCEL_CMD", "ACC_CONTROL"),
|
||||
]
|
||||
self._benchmark(signals, [('ACC_CONTROL', 10)], (5000, 7000), 1)
|
||||
self._benchmark(signals, [('ACC_CONTROL', 10)], (2200, 3300), 10)
|
||||
self._benchmark(signals, [('ACC_CONTROL', 10)], (4000, 18000), 1)
|
||||
self._benchmark(signals, [('ACC_CONTROL', 10)], (700, 3000), 10)
|
||||
|
||||
def test_performance_all_signals(self):
|
||||
signals = [
|
||||
|
@ -70,8 +68,8 @@ class TestParser(unittest.TestCase):
|
|||
("ACCEL_CMD_ALT", "ACC_CONTROL"),
|
||||
("CHECKSUM", "ACC_CONTROL"),
|
||||
]
|
||||
self._benchmark(signals, [('ACC_CONTROL', 10)], (12000, 19000), 1)
|
||||
self._benchmark(signals, [('ACC_CONTROL', 10)], (7000, 13000), 10)
|
||||
self._benchmark(signals, [('ACC_CONTROL', 10)], (10000, 19000), 1)
|
||||
self._benchmark(signals, [('ACC_CONTROL', 10)], (1300, 5000), 10)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -396,7 +396,7 @@ CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front
|
|||
CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
|
||||
CM_ SG_ 865 GAS_PEDAL_ALT "copy of main GAS_PEDAL. Both use 8 bits. Might indicate that this message is for pedals.";
|
||||
CM_ SG_ 865 CLUTCH_RELEASED "boolean of clutch for 6MT.";
|
||||
CM_ SG_ 865 ACC_FAULTED "1 when ACC is faulted and the PCM disallows engagement";
|
||||
CM_ SG_ 865 ACC_FAULTED "1 when ACC is faulted and the PCM disallows engagement. Also describes a lockout when the ACC_CONTROL->ACC_MALFUNCTION bit is set.";
|
||||
CM_ SG_ 921 UI_SET_SPEED "set speed shown in the vehicle's UI with the vehicle's unit";
|
||||
CM_ SG_ 921 TEMP_ACC_FAULTED "1 when the UI is displaying or playing fault-related alerts or sounds. Also 1 when pressing main on.";
|
||||
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
|
||||
|
|
|
@ -56,7 +56,7 @@ BO_ 361 LKAS: 8 XXX
|
|||
SG_ LKA_ACTIVE : 52|1@0+ (1,0) [0|15] "" XXX
|
||||
SG_ SET_0x80_2 : 31|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
|
||||
SG_ DESIRED_ANGLE : 7|18@0+ (-0.01,1310) [0|255] "" XXX
|
||||
SG_ DESIRED_ANGLE : 7|18@0+ (-0.01,1310) [-1311.43|1310] "" XXX
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 389 STEER_TORQUE_SENSOR: 8 XXX
|
||||
|
|
|
@ -52,7 +52,7 @@ BO_ 361 LKAS: 8 XXX
|
|||
SG_ LKA_ACTIVE : 52|1@0+ (1,0) [0|15] "" XXX
|
||||
SG_ SET_0x80_2 : 31|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
|
||||
SG_ DESIRED_ANGLE : 7|18@0+ (-0.01,1310) [0|255] "" XXX
|
||||
SG_ DESIRED_ANGLE : 7|18@0+ (-0.01,1310) [-1311.43|1310] "" XXX
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 389 STEER_TORQUE_SENSOR: 8 XXX
|
||||
|
|
|
@ -441,7 +441,7 @@ CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front
|
|||
CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
|
||||
CM_ SG_ 865 GAS_PEDAL_ALT "copy of main GAS_PEDAL. Both use 8 bits. Might indicate that this message is for pedals.";
|
||||
CM_ SG_ 865 CLUTCH_RELEASED "boolean of clutch for 6MT.";
|
||||
CM_ SG_ 865 ACC_FAULTED "1 when ACC is faulted and the PCM disallows engagement";
|
||||
CM_ SG_ 865 ACC_FAULTED "1 when ACC is faulted and the PCM disallows engagement. Also describes a lockout when the ACC_CONTROL->ACC_MALFUNCTION bit is set.";
|
||||
CM_ SG_ 921 UI_SET_SPEED "set speed shown in the vehicle's UI with the vehicle's unit";
|
||||
CM_ SG_ 921 TEMP_ACC_FAULTED "1 when the UI is displaying or playing fault-related alerts or sounds. Also 1 when pressing main on.";
|
||||
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
|
||||
|
|
|
@ -441,7 +441,7 @@ CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front
|
|||
CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
|
||||
CM_ SG_ 865 GAS_PEDAL_ALT "copy of main GAS_PEDAL. Both use 8 bits. Might indicate that this message is for pedals.";
|
||||
CM_ SG_ 865 CLUTCH_RELEASED "boolean of clutch for 6MT.";
|
||||
CM_ SG_ 865 ACC_FAULTED "1 when ACC is faulted and the PCM disallows engagement";
|
||||
CM_ SG_ 865 ACC_FAULTED "1 when ACC is faulted and the PCM disallows engagement. Also describes a lockout when the ACC_CONTROL->ACC_MALFUNCTION bit is set.";
|
||||
CM_ SG_ 921 UI_SET_SPEED "set speed shown in the vehicle's UI with the vehicle's unit";
|
||||
CM_ SG_ 921 TEMP_ACC_FAULTED "1 when the UI is displaying or playing fault-related alerts or sounds. Also 1 when pressing main on.";
|
||||
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
|
||||
|
|
|
@ -441,7 +441,7 @@ CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front
|
|||
CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
|
||||
CM_ SG_ 865 GAS_PEDAL_ALT "copy of main GAS_PEDAL. Both use 8 bits. Might indicate that this message is for pedals.";
|
||||
CM_ SG_ 865 CLUTCH_RELEASED "boolean of clutch for 6MT.";
|
||||
CM_ SG_ 865 ACC_FAULTED "1 when ACC is faulted and the PCM disallows engagement";
|
||||
CM_ SG_ 865 ACC_FAULTED "1 when ACC is faulted and the PCM disallows engagement. Also describes a lockout when the ACC_CONTROL->ACC_MALFUNCTION bit is set.";
|
||||
CM_ SG_ 921 UI_SET_SPEED "set speed shown in the vehicle's UI with the vehicle's unit";
|
||||
CM_ SG_ 921 TEMP_ACC_FAULTED "1 when the UI is displaying or playing fault-related alerts or sounds. Also 1 when pressing main on.";
|
||||
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
|
||||
|
|
|
@ -1169,28 +1169,39 @@ BO_ 644 Motor_Bremse: 6 XXX
|
|||
SG_ MOB_Bremsstgr : 16|11@1+ (0.048852,0) [0|100] "Unit_PerCent" Vector__XXX
|
||||
SG_ MOB_Bremsmom : 27|13@1+ (4,0) [0|32760] "Unit_NewtoMeter" Bremse_MK25AESP
|
||||
|
||||
BO_ 870 AWV: 5 XXX
|
||||
SG_ AWV_2_Gurtstraffer : 39|1@1+ (1,0) [0|1] "" Bremsbooster
|
||||
SG_ AWV_Infoton : 38|1@1+ (1,0) [0|1] "" Gateway_Kbi_VW_A,Bremsbooster
|
||||
SG_ AWV_2_Warnsymbol : 37|1@1+ (1,0) [0|1] "" Gateway_Kbi_VW_A,Bremsbooster
|
||||
SG_ AWV_2_Warnton : 36|1@1+ (1,0) [0|1] "" Gateway_Kbi_VW_A,Bremsbooster
|
||||
SG_ AWV_2_Ruckprofil : 33|3@1+ (1,0) [0|7] "" Bremsbooster
|
||||
SG_ AWV_2_Freigabe : 32|1@1+ (1,0) [0|1] "" Bremsbooster
|
||||
SG_ AWV_2_Umfeldwarn : 31|1@1+ (1,0) [0|1] "" Bremsbooster
|
||||
SG_ AWV_2_SU_Lampe : 30|1@1+ (1,0) [0|1] "" Bremsbooster
|
||||
SG_ AWV_2_SU_Gong : 29|1@1+ (1,0) [0|1] "" Bremsbooster
|
||||
SG_ AWV_2_SU_Bremsruck : 28|1@1+ (1,0) [0|1] "" Bremsbooster
|
||||
SG_ AWV_2_SU_Warnzeit : 26|2@1+ (1,0) [0|3] "" Bremsbooster
|
||||
SG_ AWV_2_Fehler : 25|1@1+ (1,0) [0|1] "" Gateway_Kbi_VW_A,Bremsbooster
|
||||
SG_ AWV_2_Status : 24|1@1+ (1,0) [0|1] "" Gateway_Kbi_VW_A,Bremsbooster
|
||||
SG_ AWV_res_20 : 20|4@1+ (1,0) [0|0] "" Bremsbooster
|
||||
SG_ AWV_1_Parameter : 18|2@1+ (1,0) [0|3] "" Bremsbooster
|
||||
SG_ AWV_1_Prefill : 17|1@1+ (1,0) [0|1] "" Bremsbooster
|
||||
SG_ AWV_1_Freigabe : 16|1@1+ (1,0) [0|1] "" Bremsbooster
|
||||
SG_ AWV_Text : 12|4@1+ (1,0) [0|15] "" Gateway_Kbi_VW_A,Bremsbooster
|
||||
SG_ AWV_Zaehler : 8|4@1+ (1,0) [0|15] "" Bremsbooster
|
||||
SG_ AWV_Checksumme : 0|8@1+ (1,0) [0|255] "" Bremsbooster
|
||||
|
||||
BO_ 870 AWV: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX
|
||||
SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Vector__XXX
|
||||
SG_ AWV_Text : 12|4@1+ (1,0) [0|14] "" Vector__XXX
|
||||
SG_ AWV_1_Freigabe : 16|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_1_Prefill : 17|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_1_Parameter : 18|2@1+ (1,0) [0|3] "" Vector__XXX
|
||||
SG_ AWV_only : 20|4@1+ (1,0) [0|0] "" Vector__XXX
|
||||
SG_ AWV_CityANB_Auspraegung : 21|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_Halten : 22|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ ANB_Teilbremsung_Freigabe : 23|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_Status : 24|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_Fehler : 25|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_SU_Warnzeit : 26|2@1+ (1,0) [0|3] "" Vector__XXX
|
||||
SG_ AWV_2_SU_Bremsruck : 28|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_SU_Gong : 29|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_SU_Lampe : 30|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_Umfeldwarn : 31|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_Freigabe : 32|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_Ruckprofil : 33|3@1+ (1,0) [0|7] "" Vector__XXX
|
||||
SG_ AWV_2_Warnton : 36|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_Warnsymbol : 37|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_Infoton : 38|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_Gurtstraffer : 39|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_Konfiguration_Menueanf : 40|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_Konfiguration_Vorw_Menueanf : 41|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_Konfiguration_Status : 42|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_Konfiguration_Vorw_Status : 43|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ AWV_2_Abstandswarnung : 51|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ ANB_Zielbremsung_Freigabe : 52|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ ANB_CM_Anforderung : 53|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ ANB_Ziel_Teilbrems_Verz_Anf : 54|10@1+ (0.024,-20.016) [0|1023] "Unit_MeterPerSeconSquar" Vector__XXX
|
||||
|
||||
BO_ 1470 LDW_Status: 8 XXX
|
||||
SG_ LDW_Lernmodus_rechts : 0|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ LDW_Lernmodus_links : 2|2@1+ (1,0) [0|3] "" XXX
|
||||
|
@ -1543,6 +1554,34 @@ CM_ SG_ 1470 XX_DLCORTLC2 "Might be DLC or TLC, might have wrong size";
|
|||
|
||||
CM_ SG_ 1550 MFA_v_Signal_02 "0=km/h, 1=mph";
|
||||
|
||||
VAL_ 870 AWV_Text 0 "kein_Text" 1 "FrontAssist_aus" 2 "FrontAssist_startet" 3 "FrontAssist_Warnung" 4 "FrontAssist_Sens_reinig" 5 "FrontAssist_Failure" 6 "FrontAssist_Demo" 7 "Vorhalt" 8 "Bremsung_wird_gerade_durchgefuehrt" 9 "Sensor_not_verfuegbar" 10 "Sensor_reinigen" 11 "Service_notwendig_Failure" 12 "Funktion_vom_Fahrer_deactivated" 13 "Funktion_vom_Fahrer_activated" 14 "FrontAssist_zur_Zeit_not_verfuegbar__rev_Failure";
|
||||
VAL_ 870 AWV_1_Freigabe 0 "nicht_freigegeben" 1 "freigegeben";
|
||||
VAL_ 870 AWV_1_Prefill 0 "keine_Prefill_Anf" 1 "Prefill_Anf";
|
||||
VAL_ 870 AWV_1_Parameter 0 "Defaultparametersatz" 1 "Par_leicht_erh_Empf" 2 "Par_erh_Empf" 3 "Par_hoechster_Empf";
|
||||
VAL_ 870 AWV_only 0 "ACC_und_AWV_verbaut" 1 "AWV_ohne_ACC_verbaut";
|
||||
VAL_ 870 AWV_CityANB_Auspraegung 0 "autom_Bremsung_im_ges_vBereich" 1 "autom_Bremsung_im_def_vBereich";
|
||||
VAL_ 870 AWV_Halten 0 "keine_Anforderung" 1 "Anforderung_das_Fzg_im_Stillstand_zu_halten";
|
||||
VAL_ 870 ANB_Teilbremsung_Freigabe 0 "Teilbremsung_nicht_freigegeben" 1 "Teilbremsung_freigegeben";
|
||||
VAL_ 870 AWV_2_Status 0 "Lampe_aus" 1 "Lampe_ein";
|
||||
VAL_ 870 AWV_2_Fehler 0 "Lampe_aus" 1 "Lampe_ein";
|
||||
VAL_ 870 AWV_2_SU_Warnzeit 0 "frueh" 1 "normal" 2 "spaet" 3 "adaptiv";
|
||||
VAL_ 870 AWV_2_SU_Bremsruck 0 "Bremsruck_deaktiviert" 1 "Bremsruck_aktiviert";
|
||||
VAL_ 870 AWV_2_SU_Gong 0 "Gong_deaktiviert" 1 "Gong_aktiviert";
|
||||
VAL_ 870 AWV_2_SU_Lampe 0 "Lampe_deaktiviert" 1 "Lampe_aktiviert";
|
||||
VAL_ 870 AWV_2_Umfeldwarn 0 "keine_Warnung" 1 "Warnung";
|
||||
VAL_ 870 AWV_2_Freigabe 0 "keine_Ruckfreigabe" 1 "Ruckfreigabe";
|
||||
VAL_ 870 AWV_2_Ruckprofil 0 "kein_Ruck" 1 "Ruckprofil_1" 2 "Ruckprofil_2" 3 "Ruckprofil_3" 4 "Ruckprofil_4" 5 "Ruckprofil_5" 6 "not_erlaubt" 7 "not_erlaubt";
|
||||
VAL_ 870 AWV_2_Warnton 0 "Aus" 1 "Ein";
|
||||
VAL_ 870 AWV_2_Warnsymbol 0 "Aus" 1 "Ein";
|
||||
VAL_ 870 AWV_Infoton 0 "Aus" 1 "Ein";
|
||||
VAL_ 870 AWV_2_Gurtstraffer 0 "Gurt_not_straffen" 1 "Gurt_straffen";
|
||||
VAL_ 870 AWV_Konfiguration_Menueanf 0 "Menue_deaktivieren" 1 "Menue_aktivieren";
|
||||
VAL_ 870 AWV_Konfiguration_Vorw_Menueanf 0 "Menue_deaktivieren" 1 "Menue_aktivieren";
|
||||
VAL_ 870 AWV_Konfiguration_Status 0 "AWV_inaktiv" 1 "AWV_aktiv";
|
||||
VAL_ 870 AWV_Konfiguration_Vorw_Status 0 "AWV_Vorwarnung_inaktiv" 1 "AWV_Vorwarnung_aktiv";
|
||||
VAL_ 870 AWV_2_Abstandswarnung 0 "kein_Warnhinweis" 1 "Warnhinweis";
|
||||
VAL_ 870 ANB_Zielbremsung_Freigabe 0 "Zielbremsung_nicht_freigegeben" 1 "Zielbremsung_freigegeben";
|
||||
VAL_ 870 ANB_CM_Anforderung 0 "keine_Anforderung" 1 "Anforderung_aktiv";
|
||||
|
||||
VAL_ 872 ACS_Sta_ADR 2 "ADR_passiv" 0 "ADR_nicht_aktiv" 1 "ADR_aktiv" 3 "irrev_Fehler" ;
|
||||
VAL_ 872 ACS_ADR_Schub 1 "Verz_begr_auf_Schub" 0 "Verz_nicht_begr_auf_Schub" ;
|
||||
|
|
Loading…
Reference in New Issue