diff --git a/can/common.cc b/can/common.cc index d0ace8c8f03..92f93750411 100644 --- a/can/common.cc +++ b/can/common.cc @@ -69,6 +69,7 @@ unsigned int chrysler_checksum(unsigned int address, uint64_t d, int l) { // Static lookup table for fast computation of CRC8 poly 0x2F, aka 8H2F/AUTOSAR uint8_t crc8_lut_8h2f[256]; +uint8_t crc8_lut_1d[256]; void gen_crc_lookup_table(uint8_t poly, uint8_t crc_lut[]) { uint8_t crc; @@ -90,6 +91,7 @@ void init_crc_lookup_tables() { // At init time, set up static lookup tables for fast CRC computation. gen_crc_lookup_table(0x2F, crc8_lut_8h2f); // CRC-8 8H2F/AUTOSAR for Volkswagen + gen_crc_lookup_table(0x1D, crc8_lut_1d); // CRC-8 SAE-j18650 for Retropilot } unsigned int volkswagen_crc(unsigned int address, uint64_t d, int l) { @@ -190,6 +192,18 @@ unsigned int pedal_checksum(uint64_t d, int l) { return crc; } +unsigned int ocelot_checksum(uint64_t d, int l) { + uint8_t crc = 0xFF; // Standard init value for CRC8 + + // CRC the payload, skipping over the first byte where the CRC lives. + for (int i = 1; i < l; i++) { + crc ^= (d >> (i*8)) & 0xFF; + crc = crc8_lut_1d[crc] ^ crc << 8 ; + } + crc = crc ^ 0xFF; //final xor + + return crc; +} uint64_t read_u64_be(const uint8_t* v) { return (((uint64_t)v[0] << 56) diff --git a/can/common.h b/can/common.h index dd91a6ce729..219dd6c96d8 100644 --- a/can/common.h +++ b/can/common.h @@ -18,6 +18,7 @@ unsigned int chrysler_checksum(unsigned int address, uint64_t d, int l); void init_crc_lookup_tables(); unsigned int volkswagen_crc(unsigned int address, uint64_t d, int l); unsigned int pedal_checksum(uint64_t d, int l); +unsigned int ocelot_checksum(uint64_t d, int l); uint64_t read_u64_be(const uint8_t* v); uint64_t read_u64_le(const uint8_t* v); diff --git a/can/common.pxd b/can/common.pxd index 5519140fa80..9a0ff03bfd7 100644 --- a/can/common.pxd +++ b/can/common.pxd @@ -20,7 +20,9 @@ cdef extern from "common_dbc.h": VOLKSWAGEN_CHECKSUM, VOLKSWAGEN_COUNTER, SUBARU_CHECKSUM, - CHRYSLER_CHECKSUM + CHRYSLER_CHECKSUM, + OCELOT_CHECKSUM, + OCELOT_COUNTER cdef struct Signal: const char* name diff --git a/can/common_dbc.h b/can/common_dbc.h index e5c12ba6c26..e4fbee6232e 100644 --- a/can/common_dbc.h +++ b/can/common_dbc.h @@ -40,6 +40,8 @@ enum SignalType { VOLKSWAGEN_COUNTER, SUBARU_CHECKSUM, CHRYSLER_CHECKSUM, + OCELOT_CHECKSUM, + OCELOT_COUNTER, }; struct Signal { diff --git a/can/common_pyx_setup.py b/can/common_pyx_setup.py new file mode 100644 index 00000000000..a72998425b7 --- /dev/null +++ b/can/common_pyx_setup.py @@ -0,0 +1,94 @@ +import os +import subprocess +import sysconfig +import platform +from distutils.core import Extension, setup # pylint: disable=import-error,no-name-in-module + +from Cython.Build import cythonize +from Cython.Distutils import build_ext + + +ANNOTATE = os.getenv('ANNOTATE') is not None +BASEDIR = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../")) + + +def get_ext_filename_without_platform_suffix(filename): + name, ext = os.path.splitext(filename) + ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') + + if ext_suffix == ext: + return filename + + ext_suffix = ext_suffix.replace(ext, '') + idx = name.find(ext_suffix) + + if idx == -1: + return filename + else: + return name[:idx] + ext + + +class BuildExtWithoutPlatformSuffix(build_ext): + def get_ext_filename(self, ext_name): + filename = super().get_ext_filename(ext_name) + return get_ext_filename_without_platform_suffix(filename) + + +extra_compile_args = ["-std=c++1z", "-Wno-nullability-completeness"] +ARCH = subprocess.check_output(["uname", "-m"], encoding='utf8').rstrip() # pylint: disable=unexpected-keyword-arg +if ARCH == "aarch64": + extra_compile_args += ["-Wno-deprecated-register"] + +if platform.system() == "Darwin": + libdbc = "libdbc.dylib" +else: + libdbc = "libdbc.so" + +extra_link_args = [os.path.join(BASEDIR, 'opendbc', 'can', libdbc)] +include_dirs = [ + BASEDIR, + os.path.join(BASEDIR, 'phonelibs'), +] + +# Build CAN Parser + +setup(name='CAN parser', + cmdclass={'build_ext': BuildExtWithoutPlatformSuffix}, + ext_modules=cythonize( + Extension( + "parser_pyx", + language="c++", + sources=['parser_pyx.pyx'], + extra_compile_args=extra_compile_args, + include_dirs=include_dirs, + extra_link_args=extra_link_args, + ), + nthreads=4, + annotate=ANNOTATE + ), +) + +if platform.system() == "Darwin": + os.system("install_name_tool -change opendbc/can/libdbc.dylib " + BASEDIR + "/opendbc/can/libdbc.dylib parser_pyx.so") + + +# Build CAN Packer + +setup(name='CAN packer', + cmdclass={'build_ext': BuildExtWithoutPlatformSuffix}, + ext_modules=cythonize( + Extension( + "packer_pyx", + language="c++", + sources=['packer_pyx.pyx'], + extra_compile_args=extra_compile_args, + include_dirs=include_dirs, + extra_link_args=extra_link_args, + ), + nthreads=4, + annotate=ANNOTATE + ), +) + +if platform.system() == "Darwin": + os.system("install_name_tool -change opendbc/can/libdbc.dylib " + BASEDIR + "/opendbc/can/libdbc.dylib packer_pyx.so") diff --git a/can/dbc_template.cc b/can/dbc_template.cc index f6d49887137..25b23650494 100644 --- a/can/dbc_template.cc +++ b/can/dbc_template.cc @@ -37,6 +37,10 @@ const Signal sigs_{{address}}[] = { .type = SignalType::PEDAL_CHECKSUM, {% elif address in [512, 513] and sig.name == "COUNTER_PEDAL" %} .type = SignalType::PEDAL_COUNTER, + {% elif checksum_type == "ocelot" and sig.name == "CHECKSUM" %} + .type = SignalType::OCELOT_CHECKSUM, + {% elif checksum_type == "ocelot" and sig.name == "COUNTER" %} + .type = SignalType::OCELOT_COUNTER, {% else %} .type = SignalType::DEFAULT, {% endif %} diff --git a/can/packer.cc b/can/packer.cc index ba675a5b01b..a724e8a0ff8 100644 --- a/can/packer.cc +++ b/can/packer.cc @@ -77,7 +77,7 @@ uint64_t CANPacker::pack(uint32_t address, const std::vector &s } auto sig = sig_it->second; - if ((sig.type != SignalType::HONDA_COUNTER) && (sig.type != SignalType::VOLKSWAGEN_COUNTER)) { + if ((sig.type != SignalType::HONDA_COUNTER) && (sig.type != SignalType::VOLKSWAGEN_COUNTER) && (sig.type != SignalType::OCELOT_COUNTER)) { WARN("COUNTER signal type not valid\n"); } @@ -105,7 +105,11 @@ uint64_t CANPacker::pack(uint32_t address, const std::vector &s } else if (sig.type == SignalType::CHRYSLER_CHECKSUM) { unsigned int chksm = chrysler_checksum(address, ReverseBytes(ret), message_lookup[address].size); ret = set_value(ret, sig, chksm); - } else { + } else if (sig.type == SignalType::OCELOT_CHECKSUM) { + unsigned int chksm = ocelot_checksum(ReverseBytes(ret), message_lookup[address].size); + ret = set_value(ret, sig, chksm); + } + else { //WARN("CHECKSUM signal type not valid\n"); } } diff --git a/can/parser.cc b/can/parser.cc index c6d85d9eed9..7424ae00d21 100644 --- a/can/parser.cc +++ b/can/parser.cc @@ -76,6 +76,15 @@ bool MessageState::parse(uint64_t sec, uint16_t ts_, uint8_t * dat) { if (!update_counter_generic(tmp, sig.b2)) { return false; } + } else if (sig.type == SignalType::OCELOT_CHECKSUM) { + if (ocelot_checksum(dat_le, size) != tmp) { + INFO("0x%X OCELOT CHECKSUM FAIL\n", address); + return false; + } + } else if (sig.type == SignalType::OCELOT_COUNTER) { + if (!update_counter_generic(tmp, sig.b2)) { + return false; + } } vals[i] = tmp * sig.factor + sig.offset; diff --git a/can/parser_pyx.pyx b/can/parser_pyx.pyx index 39f00a5731f..3df8af6affa 100644 --- a/can/parser_pyx.pyx +++ b/can/parser_pyx.pyx @@ -150,7 +150,7 @@ cdef class CANDefine(): self.dbc = dbc_lookup(dbc_name) if not self.dbc: raise RuntimeError("Can't lookup" + dbc_name) - + num_vals = self.dbc[0].num_vals address_to_msg_name = {} diff --git a/can/process_dbc.py b/can/process_dbc.py index 9025331dd48..80e277e3373 100755 --- a/can/process_dbc.py +++ b/can/process_dbc.py @@ -61,6 +61,13 @@ def process(in_fn, out_fn): checksum_start_bit = 7 counter_start_bit = None little_endian = False + elif can_dbc.name.startswith(("ocelot_")): + checksum_type = "ocelot" + checksum_size = 8 + counter_size = 4 + checksum_start_bit = 0 + counter_start_bit = 0 + little_endian = True else: checksum_type = None checksum_size = None diff --git a/ocelot_can.dbc b/ocelot_can.dbc new file mode 100644 index 00000000000..153127e3d43 --- /dev/null +++ b/ocelot_can.dbc @@ -0,0 +1,129 @@ +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_: EPAS HIM EON IBST SAS EPAS TOYOTASAS + +VAL_TABLE_ BRAKEMODE 3 "Reserved" 2 "Position Control" 1 "Relative Control" 0 "Disengadged" ; +VAL_TABLE_ STATUS 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ; +VAL_TABLE_ STEERINGMODE 3 "Reserved" 2 "Position Control" 1 "Torque Control" 0 "Disengadged" ; +VAL_TABLE_ YESNO 1 "Yes" 0 "No" ; + +BO_ 741 STEERING_COMMAND: 5 EON + SG_ REQUESTED_STEER_TORQUE : 29|11@1- (0.5,0) [-512|511.5] "Nm" EPAS + SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" EPAS + SG_ REQUESTED_STEER_ANGLE : 14|15@1- (0.1,0) [-1638.4|1638.3] "deg" EPAS + SG_ STEER_MODE : 12|2@1+ (1,0) [0|3] "" EPAS + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" EPAS + +BO_ 608 STEERING_STATUS: 5 EPAS + SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" EON + SG_ STATUS : 12|4@1+ (1,0) [0|15] "" EON + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" EON + SG_ STEERING_TORQUE_EPS : 29|11@1- (0.8,0) [-819.2|818.4] "Nm" EON + SG_ STEERING_TORQUE_DRIVER : 18|11@1- (0.8,0) [-819.2|818.4] "Nm" EON + SG_ STEERING_OK : 16|1@1+ (1,0) [0|1] "" EON + +BO_ 527 BRAKE_STATUS: 5 IBST + SG_ BRAKE_PEDAL_POSITION : 20|12@1+ (0.015625,-5) [-5|47] "mm" EON + SG_ BRAKE_APPLIED : 18|1@1+ (1,0) [0|1] "" EON + SG_ DRIVER_BRAKE_APPLIED : 17|1@1+ (1,0) [0|1] "" EON + SG_ BRAKE_OK : 16|1@1+ (1,0) [0|1] "" EON + SG_ STATUS : 12|4@1+ (1,0) [0|15] "" EON + SG_ EXT_STATUS1 : 32|4@1+ (1,0) [0|15] "" EON + SG_ EXT_STATUS2 : 36|4@1+ (1,0) [0|15] "" EON + SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" EON + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" EON + +BO_ 526 BRAKE_COMMAND: 6 EON + SG_ BRAKE_POSITION_COMMAND : 32|12@1+ (0.015625,-5) [-5|47] "mm" IBST + SG_ BRAKE_RELATIVE_COMMAND : 16|16@1+ (0.0078125,-252) [-252|252] "" IBST + SG_ BRAKE_MODE : 12|2@1+ (1,0) [0|3] "" IBST + SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" IBST + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" IBST + +BO_ 870 CURRENT_STATE: 4 EON + SG_ ENABLED : 8|1@1+ (1,0) [0|0] "" HIM + SG_ SET_SPEED : 16|8@1+ (1,0) [0|255] "mph" HIM + SG_ CURRENT_SPEED : 24|8@1+ (1,0) [0|255] "kph" IBST + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" HIM + +BO_ 869 HIM_CTRLS: 3 HIM + SG_ SPEEDDN_BTN : 11|1@1+ (1,0) [0|0] "" EON + SG_ SPEEDUP_BTN : 10|1@1+ (1,0) [0|0] "" EON + SG_ CANCEL_BTN : 9|1@1+ (1,0) [0|0] "" EON + SG_ SET_BTN : 8|1@1+ (1,0) [0|0] "" EON + SG_ STATE : 12|4@1+ (1,0) [0|15] "" EON + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" EON + +BO_ 1059 TOYOTA_STEERING_ANGLE_SENSOR3: 1 TOYOTASAS + +BO_ 1222 TOYOTA_STEERING_ANGLE_SENSOR2: 8 TOYOTASAS + +BO_ 37 TOYOTA_STEERING_ANGLE_SENSOR1: 8 TOYOTASAS + SG_ TOYOTA_STEER_RATE : 35|12@0- (1,0) [-2000|2000] "deg/s" EON + SG_ TOYOTA_STEER_FRACTION : 39|4@0- (0.1,0) [-0.7|0.7] "deg" EON + SG_ TOYOTA_STEER_ANGLE : 3|12@0- (1.5,0) [-500|500] "deg" EON + +BO_ 512 GAS_COMMAND: 6 EON + SG_ GAS_COMMAND : 8|16@1+ (0.275676,-33.3567) [0|1] "" PED + SG_ GAS_COMMAND2 : 24|16@1+ (0.13629,-32.71) [0|1] "" PED + SG_ ENABLE : 47|1@1+ (1,0) [0|1] "" PED + SG_ COUNTER : 40|4@1+ (1,0) [0|15] "" PED + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" PED + +BO_ 513 GAS_SENSOR: 6 PED + SG_ PED_GAS : 8|16@1+ (0.275676,-33.3567) [0|1] "" EON + SG_ PED_GAS2 : 24|16@1+ (0.13629,-32.71) [0|1] "" EON + SG_ STATE : 44|4@1+ (1,0) [0|15] "" EON + SG_ COUNTER : 40|4@1+ (1,0) [0|15] "" EON + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" EON + + VAL_ 527 IBOOSTER_BRAKE_APPLIED 1 "Yes" 0 "No" ; + VAL_ 527 BRAKE_OK 1 "Yes" 0 "No" ; + VAL_ 527 STATUS 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ; + VAL_ 526 BRAKE_MODE 3 "Reserved" 2 "Position Control" 1 "Relative Control" 0 "Disengadged" ; + + VAL_ 741 STEER_MODE 3 "Reserved" 2 "Position Control" 1 "Torque Control" 0 "Disengadged" ; + VAL_ 608 STATUS 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ; + VAL_ 608 STEERING_OK 1 "Yes" 0 "No" ; + VAL_ 870 ENABLED 1 "Yes" 0 "No" ; + VAL_ 869 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ; + VAL_ 869 SPEEDUP_BTN 1 "Yes" 0 "No" ; + VAL_ 869 SPEEDDN_BTN 1 "Yes" 0 "No" ; + VAL_ 869 CANCEL_BTN 1 "Yes" 0 "No" ; + VAL_ 869 SET_BTN 1 "Yes" 0 "No" ; + + VAL_ 512 ENABLE 1 "Yes" 0 "No" ; + VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ; diff --git a/ocelot_can.ini b/ocelot_can.ini new file mode 100644 index 00000000000..8b6aad59923 --- /dev/null +++ b/ocelot_can.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,125, +[View_VehicleNetworks] +HIDDEN=3, +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,100,150, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,125,150, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,125,150, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=125,125,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=125,125,125,125,125,125,125, +[View_Networks] +HIDDEN=2, +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,150, +[View_Network] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,150, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=125,100,150, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,150, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=125,100,150, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=125,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11, +DEFINITIONS= +COLUMNWIDTHS=125,50,100,100,100,50,50,50,50,100,100,150, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,100,150, diff --git a/ocelot_controls.dbc b/ocelot_controls.dbc new file mode 100644 index 00000000000..e3e026ebda6 --- /dev/null +++ b/ocelot_controls.dbc @@ -0,0 +1,114 @@ +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_: EON PED IBST EPAS +VAL_TABLE_ BRAKEMODE 3 "Reserved" 2 "Position Control" 1 "Relative Control" 0 "Disengadged" ; +VAL_TABLE_ STATUS 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ; +VAL_TABLE_ YESNO 1 "Yes" 0 "No" ; + +BO_ 512 PEDAL_GAS_COMMAND: 6 EON + SG_ GAS_COMMAND : 8|16@1+ (1,0) [0|1] "" PED + SG_ GAS_COMMAND2 : 24|16@1+ (1,0) [0|1] "" PED + SG_ ENABLE : 47|1@1+ (1,0) [0|1] "" PED + SG_ COUNTER : 40|4@1+ (1,0) [0|15] "" PED + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" PED + +BO_ 513 PEDAL_GAS_SENSOR: 6 PED + SG_ PED_GAS : 8|16@1+ (1,0) [0|1] "" EON + SG_ PED_GAS2 : 24|16@1+ (1,0) [0|1] "" EON + SG_ STATE : 44|4@1+ (1,0) [0|15] "" EON + SG_ COUNTER : 40|4@1+ (1,0) [0|15] "" EON + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" EON + +BO_ 526 OCELOT_BRAKE_COMMAND: 6 EON + SG_ BRAKE_POSITION_COMMAND : 32|12@1+ (0.015625,-5) [-5|47] "mm" IBST + SG_ BRAKE_RELATIVE_COMMAND : 16|16@1+ (0.0078125,-252) [-252|252] "" IBST + SG_ BRAKE_MODE : 12|2@1+ (1,0) [0|3] "" IBST + SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" IBST + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" IBST + +BO_ 527 OCELOT_BRAKE_STATUS: 5 IBST + SG_ BRAKE_PEDAL_POSITION : 20|12@1+ (0.015625,-5) [-5|47] "mm" EON + SG_ BRAKE_APPLIED : 18|1@1+ (1,0) [0|1] "" EON + SG_ DRIVER_BRAKE_APPLIED : 17|1@1+ (1,0) [0|1] "" EON + SG_ BRAKE_OK : 16|1@1+ (1,0) [0|1] "" EON + SG_ STATUS : 12|4@1+ (1,0) [0|15] "" EON + SG_ EXT_STATUS1 : 32|4@1+ (1,0) [0|15] "" EON + SG_ EXT_STATUS2 : 36|4@1+ (1,0) [0|15] "" EON + SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" EON + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" EON + +BO_ 558 STEERING_COMMAND: 5 EON + SG_ STEER_TORQUE : 32|8@1- (0.125,0) [-16|15.875] "Nm" EPAS + SG_ STEER_ANGLE : 16|16@1- (0.125,0) [-4096|4095.875] "deg" EPAS + SG_ STEER_MODE : 12|2@1+ (1,0) [0|3] "" EPAS + SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" EPAS + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" EPAS + +BO_ 559 STEERING_STATUS: 8 EPAS + SG_ STEERING_ANGLE : 40|16@1- (0.125,0) [-4096|4095.875] "deg" EON + SG_ STEERING_SPEED : 24|8@1- (0.015625,0) [-2|1.984375] "rev/s" EON + SG_ STEERING_TORQUE : 16|8@1- (0.125,0) [-16|15.875] "Nm" EON + SG_ CONTROL_STATUS : 12|4@1+ (1,0) [0|15] "" EON + SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" EON + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" EON + SG_ TEMPERATURE : 32|8@1+ (1,-60) [-60|195] "C" EON + SG_ DEBUG_STATES : 56|8@1+ (1,0) [0|255] "" EON + + + +CM_ SG_ 558 STEER_TORQUE "Steering torque request"; +CM_ SG_ 558 STEER_ANGLE "Steering relative angle request for internal close loop controller"; +CM_ SG_ 558 STEER_MODE "Control mode request. +Off - instant 0 torque, +TorqueControl - use steer_torque, +AngleControl - use steer_angle as relative target and steer_torque as feedforward +SoftOff - ramp torque to 0 in 1s, +Command Off after SoftOff to re-enable control."; +CM_ SG_ 558 COUNTER "Rolling counter"; +CM_ SG_ 558 CHECKSUM "Calculated CRC8 per J1850 of the message bytes with first byte ignored"; +CM_ SG_ 559 STEERING_ANGLE "Steering angle calculated from motor position sensor"; +CM_ SG_ 559 STEERING_SPEED "Steering speed calculated from motor position sensor"; +CM_ SG_ 559 STEERING_TORQUE "Motor torque calculated at the steering"; +CM_ SG_ 559 CONTROL_STATUS "Bitwise states: bit0 - sensored torque control is enabled, bit1 - sensor feedback enabled, bit2 - openloop soft off active, bit3 - internal closeloop mode enabled"; +CM_ SG_ 559 COUNTER "Rolling counter"; +CM_ SG_ 559 CHECKSUM "8bit sum of all bytes and message id"; +CM_ SG_ 559 TEMPERATURE "Motor PCB temperature"; +CM_ SG_ 559 DEBUG_STATES "Bitwise status. Refer to source"; +VAL_ 526 BRAKE_MODE 3 "Reserved" 2 "Position Control" 1 "Relative Control" 0 "Disengadged" ; +VAL_ 527 BRAKE_OK 1 "Yes" 0 "No" ; +VAL_ 527 STATUS 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ; +VAL_ 558 STEER_MODE 0 "Off" 1 "TorqueControl" 2 "AngleControl" 3 "SoftOff" ; + diff --git a/ocelot_smart_roadster_pt.dbc b/ocelot_smart_roadster_pt.dbc new file mode 100644 index 00000000000..bfc8a9c07e4 --- /dev/null +++ b/ocelot_smart_roadster_pt.dbc @@ -0,0 +1,110 @@ +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_: EON SMART PED +VAL_TABLE_ BRAKEMODE 3 "Reserved" 2 "Position Control" 1 "Relative Control" 0 "Disengadged" ; +VAL_TABLE_ STATUS 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ; +VAL_TABLE_ STEERINGMODE 3 "Reserved" 2 "Position Control" 1 "Torque Control" 0 "Disengadged" ; +VAL_TABLE_ YESNO 1 "Yes" 0 "No" ; + + + + +BO_ 1585 SMART_ROADSTER_MESSAGE8: 8 SMART + +BO_ 1301 SMART_ROADSTER_MESSAGE7: 7 SMART + +BO_ 816 SMART_ROADSTER_MESSAGE6: 2 SMART + +BO_ 768 SMART_ROADSTER_MESSAGE5: 8 SMART + +BO_ 570 SMART_ROADSTER_MESSAGE4: 8 SMART + +BO_ 568 SMART_ROADSTER_MESSAGE3: 8 SMART + +BO_ 528 SMART_ROADSTER_MESSAGE2: 8 SMART + +BO_ 128 SMARTROADSTERWHEELSPEEDS: 8 SMART + SG_ WHEELSPEED_RL : 55|16@0+ (0.034,0) [0|65535] "mph" EON + SG_ WHEELSPEED_RR : 39|16@0+ (0.034,0) [0|65535] "mph" EON + SG_ WHEELSPEED_FL : 23|16@0+ (0.034,0) [0|65535] "mph" EON + SG_ WHEELSPEED_FR : 7|16@0+ (0.034,0) [0|65535] "mph" EON + +BO_ 194 SMARTSTEERINGANGLESENSOR: 8 SMART + SG_ SMART_STEER_RATE_SIGN : 31|1@1+ (1,0) [0|0] "" EON + SG_ SMART_STEER_RATE_VALUE : 16|15@1+ (0.04375,0) [0|1433.6] "Deg/S" EON + SG_ SMART_STEER_ANGLE_SIGN : 15|1@1+ (1,0) [0|0] "" EON + SG_ SMART_STEER_ANGLE_VALUE : 0|15@1+ (0.04375,0) [0|1433.6] "Deg" EON + +BO_ 784 SMARTTHROTTLEPEDAL: 8 SMART + SG_ THROTTLE_POSITION : 32|16@1+ (0.00156143,0) [0|0] "%" EON + +BO_ 544 BODYCONTROL: 8 SMART + SG_ RIGHT_DOOR : 0|1@1+ (1,0) [0|0] "" EON + SG_ LEFT_DOOR : 7|1@1+ (1,0) [0|0] "" EON + SG_ LEFT_SIGNAL : 5|1@1+ (1,0) [0|0] "" EON + SG_ RIGHT_SIGNAL : 4|1@1+ (1,0) [0|0] "" EON + SG_ SIDELIGHTS : 6|1@1+ (1,0) [0|0] "" EON + +BO_ 144 ABS: 8 SMART + SG_ ESP_STATUS : 6|1@1+ (1,0) [0|0] "" EON + SG_ BRAKEPEDAL : 2|1@1+ (1,0) [0|0] "" EON + SG_ VEHICLESPEED : 45|6@0- (1,0) [0|0] "mph" EON + +BO_ 400 GEAR_PACKET: 8 SMART + SG_ GEAR : 0|8@1+ (1,0) [0|0] "" EON + +BO_ 520 SMART_ROADSTER_MESSAGE1: 8 SMART + + + +CM_ SG_ 741 CHECKSUM "CRC8_J1650 SAE Checksum"; +CM_ SG_ 608 CHECKSUM "CRC8_J1650 SAE Checksum"; +BA_DEF_ BO_ "GenMsgBackgroundColor" STRING ; +BA_DEF_ BO_ "GenMsgForegroundColor" STRING ; +BA_DEF_ BO_ "isj1939dbc" INT 0 0; +BA_DEF_DEF_ "GenMsgBackgroundColor" "#1e1e1e"; +BA_DEF_DEF_ "GenMsgForegroundColor" "#ffffff"; +BA_DEF_DEF_ "isj1939dbc" 0; + + +VAL_ 544 RIGHT_DOOR 0 "Open" 1 "Closed" ; +VAL_ 544 LEFT_DOOR 0 "Open" 1 "Closed" ; +VAL_ 544 LEFT_SIGNAL 0 "Off" 1 "On" ; +VAL_ 544 RIGHT_SIGNAL 0 "Off" 1 "On" ; +VAL_ 544 SIDELIGHTS 0 "Off" 1 "On" ; +VAL_ 144 ESP_STATUS 0 "On" 1 "Off" ; +VAL_ 144 BRAKEPEDAL 0 "Not_pressed" 1 "Pressed" ; +VAL_ 400 GEAR 8 "N" 4 "R" 76 "D" 16 "S" ;