From c48fa45294ec74250a0020e1427e172c2fefe9cd Mon Sep 17 00:00:00 2001 From: jakethesake420 Date: Sun, 16 Nov 2025 12:51:47 -0600 Subject: [PATCH] mazda 2023 --- opendbc/can/dbc.cc | 2 +- opendbc/mazda_2023.dbc | 660 ++++++++++++++++++++++++ panda/board/drivers/can_common.h | 13 +- panda/board/safety/safety_mazda.h | 61 ++- panda/python/__init__.py | 11 +- selfdrive/car/mazda/carcontroller.py | 2 +- selfdrive/car/mazda/carstate.py | 80 +-- selfdrive/car/mazda/fingerprints.py | 8 +- selfdrive/car/mazda/interface.py | 12 +- selfdrive/car/mazda/mazdacan.py | 4 +- selfdrive/car/mazda/values.py | 28 +- selfdrive/car/torque_data/override.toml | 4 +- 12 files changed, 821 insertions(+), 64 deletions(-) create mode 100644 opendbc/mazda_2023.dbc diff --git a/opendbc/can/dbc.cc b/opendbc/can/dbc.cc index 4f2a86725..1936daf7a 100644 --- a/opendbc/can/dbc.cc +++ b/opendbc/can/dbc.cc @@ -67,7 +67,7 @@ ChecksumState* get_checksum(const std::string& dbc_name) { s = new ChecksumState({8, -1, 7, -1, false, CHRYSLER_CHECKSUM, &chrysler_checksum}); } else if (startswith(dbc_name, "comma_body")) { s = new ChecksumState({8, 4, 7, 3, false, PEDAL_CHECKSUM, &pedal_checksum}); - } else if (startswith(dbc_name, "mazda_2019")) { + } else if (startswith(dbc_name, "mazda_2019") || startswith(dbc_name, "mazda_2023")) { s = new ChecksumState({8, 8, 0, 0, true, MAZDA2019_CHECKSUM, &mazda2019_checksum}); } else if (startswith(dbc_name, "mazda_2017")) { s = new ChecksumState({8, -1, 0, -1, true, MAZDA2017_CHECKSUM, &mazda2017_checksum}); diff --git a/opendbc/mazda_2023.dbc b/opendbc/mazda_2023.dbc new file mode 100644 index 000000000..0050ecf4f --- /dev/null +++ b/opendbc/mazda_2023.dbc @@ -0,0 +1,660 @@ +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_: XXX + +BO_ 16 STEER_TORQUE_VB: 8 XXX + SG_ STEER_TORQUE_SENSOR : 5|13@0+ (1,-4000) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 7|2@0+ (1,0) [0|15] "" XXX + SG_ STEER_TORQUE_MOTOR : 8|13@0+ (0.05,-205) [0|15] "" XXX + SG_ BRAKE_PREASURE : 27|12@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_1 : 43|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 47|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_3 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_4 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ CHKSUM : 63|8@0- (1,0) [0|15] "" XXX + +BO_ 17 STEER_TORQUE_VB_2: 8 XXX + SG_ STEER_TORQUE_MOTOR : 7|16@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 23|12@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 27|14@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 45|6@0+ (1,0) [0|15] "" XXX + SG_ CTR : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 18 STEER_VB: 8 XXX + SG_ STEER_ANGLE : 25|14@0- (1,375) [0|65536] "" XXX + SG_ STEER_LEFT_BIT : 26|1@0+ (1,0) [0|1] "" XXX + SG_ CTR : 41|2@0+ (1,0) [0|3] "" XXX + SG_ ENGINE_OFF : 43|2@0+ (1,0) [0|63] "" XXX + SG_ NEW_SIGNAL_2 : 53|6@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_3 : 55|2@0+ (1,0) [0|15] "" XXX + +BO_ 20 NEW_MSG_29: 8 XXX + SG_ RIGHT_BLINK_CLOCK : 23|8@0+ (1,0) [0|1] "" XXX + +BO_ 22 CRZ_CTRL_BTNS: 8 XXX + SG_ SIGNAL : 45|1@0+ (1,0) [0|15] "" XXX + SG_ NOT_SIGNAL : 46|1@0+ (1,0) [0|3] "" XXX + SG_ CRZ_CTRL_BTN_PRESSED : 48|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 51|3@0+ (1,0) [0|7] "" XXX + +BO_ 24 BRAKE_PEDAL_VB: 8 XXX + SG_ BRAKE_PEDAL_PRESSED_AND_ENGINE_ON : 0|1@0+ (1,0) [0|3] "" XXX + SG_ NOT_BRAKE_PEDAL_PRESSED : 6|1@0+ (1,0) [0|3] "" XXX + SG_ BRAKE_PRESSED : 7|1@0+ (1,0) [0|65535] "" XXX + SG_ NOT_BRAKE_PEDAL_PRESSED_AND_ENGINE_ON : 15|1@0+ (1,0) [0|7] "" XXX + +BO_ 26 ENGINE_DATA_VB: 8 XXX + SG_ RPM : 7|13@0+ (1,0) [0|15] "" XXX + SG_ PEDAL_GAS : 39|10@0+ (1,0) [0|15] "" XXX + SG_ ENGINE_ON : 52|1@0+ (1,0) [0|15] "" XXX + SG_ CHKSUM : 63|8@0- (1,0) [0|15] "" XXX + +BO_ 29 WHEEL: 8 XXX + SG_ ENCODER_1 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ ENCODER_2 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ SPEED : 39|16@0+ (1,0) [0|127] "" XXX + SG_ NEW_SIGNAL_2 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ STANDSTILL : 52|1@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_1 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 31 GEAR_VB: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ GEAR : 36|4@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX + +BO_ 37 BLANK_1: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX + +BO_ 44 BLANK_2: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|16777215] "" XXX + SG_ NEW_SIGNAL_4 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_2 : 39|16@0+ (1,0) [0|16777215] "" XXX + SG_ NEW_SIGNAL_3 : 55|16@0+ (1,0) [0|65535] "" XXX + +BO_ 59 STEER_RATE: 8 XXX + SG_ STEER_ANGLE : 23|16@0+ (0.05,-1600) [-500|500] "" XXX + SG_ CHKSUM : 39|8@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_1 : 43|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 47|4@0+ (1,0) [0|15] "" XXX + SG_ STEER_ANGLE_RATE : 55|8@0+ (0.05,0) [0|65535] "" XXX + +BO_ 96 STEER2: 8 XXX + SG_ STEER__ : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ SPEED : 18|16@0- (0.00621371,-62.1371) [-65635|65635] "MPH" XXX + SG_ CAR_MOVING_FORWARD : 21|1@0+ (1,0) [0|15] "" XXX + SG_ CAR_REVERSING : 22|1@0+ (1,0) [0|1] "" XXX + SG_ ENGINE_OFF : 23|1@0+ (1,0) [0|1] "" XXX + SG_ TURN_OFF : 32|1@0+ (1,0) [0|1] "" XXX + SG_ ENGINE_ON : 33|1@0+ (1,0) [0|1] "" XXX + SG_ TURN_ON : 34|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_4 : 45|1@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 48|4@1+ (1,0) [0|15] "" XXX + SG_ CTR : 55|4@0+ (1,0) [0|15] "" XXX + SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 116 BRAKE_2: 8 XXX + SG_ BRAKE_PRESSURE : 3|9@0+ (1,-152) [0|511] "" XXX + +BO_ 117 NEW_MSG_31_MAIN: 8 XXX + +BO_ 120 BCM_ECHO_MAYBE: 8 XXX + SG_ EPS_MOTOR_TORQUE_MAYBE : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ BRAKE_MAYBE : 39|8@0+ (1,0) [0|65535] "" XXX + +BO_ 121 NEW_MSG_39: 8 XXX + SG_ NEW_SIGNAL_3 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_2 : 16|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_1 : 25|10@0+ (1,0) [0|3] "" XXX + +BO_ 128 RADARS: 8 XXX + SG_ NEW_SIGNAL_3 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 15|1@0+ (1,0) [0|255] "" XXX + SG_ REAR_LEFT : 17|1@0+ (1,0) [0|1] "" XXX + SG_ FRONT_RIGHT : 18|1@0+ (1,0) [0|1] "" XXX + SG_ FRONT_LEFT : 19|1@0+ (1,0) [0|255] "" XXX + SG_ REAR_RIGHT : 20|1@0+ (1,0) [0|15] "" XXX + SG_ FRONT : 21|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 59|4@0+ (1,0) [0|255] "" XXX + +BO_ 129 NEW_MSG_19: 8 XXX + SG_ NEW_SIGNAL_2 : 15|1@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_3 : 31|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 47|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_5 : 56|8@1+ (1,0) [0|15] "" XXX + +BO_ 130 STEER_AUX: 8 XXX + SG_ STEER_ANGLE : 23|14@0+ (0.2,-1600) [0|65535] "" XXX + SG_ NEW_SIGNAL_2 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 55|16@0- (1,0) [0|65535] "" XXX + +BO_ 132 NEW_MSG_84: 8 XXX + SG_ STEER_ANGLE : 23|16@0+ (1,0) [0|65535] "" XXX + +BO_ 133 NEW_MSG_35: 8 XXX + SG_ STEER_ANGLE : 23|16@0+ (1,0) [0|65535] "" XXX + +BO_ 134 STEER_OLD: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ STEER_ANGLE : 25|14@0- (0.1,36) [0|1023] "" XXX + +BO_ 135 STEER: 8 XXX + SG_ STEER_ANGLE : 23|16@0+ (0.1,-1600) [0|65535] "" XXX + +BO_ 136 NEW_MSG_40: 8 XXX + SG_ NEW_SIGNAL_4 : 4|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_5 : 5|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_6 : 6|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 36|13@0+ (1,0) [0|8191] "" XXX + SG_ NEW_SIGNAL_2 : 59|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 60|1@0+ (1,0) [0|1] "" XXX + +BO_ 137 SPEED: 8 XXX + SG_ SPEED : 23|16@0+ (1,-12) [0|65535] "" XXX + +BO_ 145 BLINK_INFO: 8 XXX + SG_ RIGHT_BLINK : 12|1@0+ (1,0) [0|3] "" XXX + SG_ LEFT_BLINK : 13|1@0+ (1,0) [0|3] "" XXX + SG_ Speed : 27|12@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 40|8@1+ (1,0) [0|255] "" XXX + SG_ CTR : 51|4@0+ (1,0) [0|15] "" XXX + SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX + +BO_ 151 NEW_MSG_97: 8 XXX + +BO_ 155 NEW_MSG_43: 8 XXX + SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|16777215] "" XXX + SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|255] "" XXX + +BO_ 157 CRZ_BTNS: 8 XXX + SG_ RES : 2|1@0+ (1,0) [0|1] "" XXX + SG_ SET_M : 3|1@0+ (1,0) [0|1] "" XXX + SG_ SET_P : 4|1@0+ (1,0) [0|1] "" XXX + SG_ CAN : 5|1@0+ (1,0) [0|1] "" XXX + SG_ STATIC_0 : 7|2@0+ (1,0) [0|7] "" XXX + SG_ STATIC_1 : 10|7@0+ (1,0) [0|15] "" XXX + SG_ MODE_LKAS : 11|1@0+ (1,0) [0|1] "" XXX + SG_ MODE_ACC : 13|1@0+ (1,0) [0|3] "" XXX + SG_ STATIC_2 : 19|32@0+ (1,0) [0|7] "" XXX + SG_ CTR : 48|4@1+ (1,0) [0|15] "" XXX + SG_ CHKSUM : 56|8@1+ (1,0) [0|63] "" XXX + +BO_ 159 BRAKE_PEDAL: 8 XXX + SG_ REVERSE : 1|1@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_1 : 2|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 4|1@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_3 : 40|6@1+ (1,0) [0|15] "" XXX + SG_ BRAKE_NOT_PRESSED : 58|1@0+ (1,0) [0|1] "" XXX + SG_ BRAKE_PRESSED : 59|1@0+ (1,0) [0|1] "" XXX + +BO_ 253 NEW_MSG_34: 8 XXX + SG_ NEW_SIGNAL_1 : 36|5@0+ (1,0) [0|31] "" XXX + +BO_ 256 CAM_Start: 8 XXX + SG_ DISTANCE_LEAD_CAR : 0|12@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 2|2@0+ (1,0) [0|1] "" XXX + SG_ ACTIVE_TARGET : 4|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 20|12@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_5 : 24|12@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_10 : 44|12@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_7 : 56|4@1+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_8 : 61|2@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 63|2@0+ (1,0) [0|3] "" XXX + +BO_ 257 LKAS: 8 XXX + SG_ LEAD_DIST : 0|12@0+ (1,0) [0|255] "" XXX + SG_ SET_19 : 2|2@0+ (1,0) [0|255] "" XXX + SG_ ANGLE_TARGET : 20|12@0+ (1,0) [0|4095] "" XXX + SG_ UNKNOWN : 24|12@0+ (1,0) [0|4095] "" XXX + SG_ MAX_TORQUE__ : 44|12@0- (1,0) [0|4095] "" XXX + SG_ SET_0 : 48|1@1+ (1,0) [0|3] "" XXX + SG_ CTR : 59|4@0+ (1,0) [0|255] "" XXX + SG_ CTR_ACT : 61|2@0+ (1,0) [0|3] "" XXX + SG_ SET_0_1 : 63|2@0+ (1,0) [0|3] "" XXX + +BO_ 258 NEW_MSG_3: 8 XXX + SG_ NEW_SIGNAL_6 : 1|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_1 : 13|10@0- (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 18|10@0- (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 39|10@0- (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_5 : 44|10@0- (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 59|4@0+ (1,0) [0|255] "" XXX + +BO_ 259 NEW_MSG_5: 8 XXX + SG_ NEW_SIGNAL_1 : 0|12@0- (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 19|11@0- (1,0) [0|10000000] "" XXX + SG_ NEW_SIGNAL_3 : 39|10@0- (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_4 : 44|10@0- (1,0) [0|1] "" XXX + +BO_ 260 NEW_MSG_6: 8 XXX + SG_ NEW_SIGNAL_1 : 0|12@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 20|12@0- (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 24|12@0+ (1,0) [0|1] "" XXX + +BO_ 261 NEW_MSG_7: 8 XXX + SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX + +BO_ 262 NEW_MSG_8: 8 XXX + SG_ NEW_SIGNAL_2 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 15|8@0- (1,0) [0|255] "" XXX + +BO_ 263 NEW_MSG_9: 8 XXX + SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX + +BO_ 264 NEW_MSG_2: 8 XXX + SG_ CRZ_CTRL_PRESSED : 48|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 49|3@1+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_1 : 56|8@1+ (1,0) [0|15] "" XXX + +BO_ 273 NEW_MSG_26: 8 XXX + SG_ NEW_SIGNAL_1 : 23|4@0+ (1,0) [0|3] "" XXX + +BO_ 274 NEW_MSG_27: 8 XXX + SG_ NEW_SIGNAL_1 : 39|8@0+ (1,0) [0|1] "" XXX + +BO_ 277 NEW_MSG_24: 8 XXX + SG_ NEW_SIGNAL_1 : 47|8@0+ (1,0) [0|1] "" XXX + +BO_ 278 NEW_MSG_25: 8 XXX + +BO_ 288 NEW_MSG_30: 8 XXX + +BO_ 289 NEW_MSG_28: 8 XXX + SG_ NEW_SIGNAL_1 : 55|8@0+ (1,0) [0|1] "" XXX + +BO_ 290 NEW_MSG_23: 8 XXX + SG_ NEW_SIGNAL_1 : 31|5@0+ (1,0) [0|255] "" XXX + +BO_ 291 NEW_MSG_22: 8 XXX + SG_ NEW_SIGNAL_1 : 39|8@0+ (1,0) [0|255] "" XXX + +BO_ 292 NEW_MSG_18: 8 XXX + SG_ NEW_SIGNAL_1 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 293 NEW_MSG_12: 8 XXX + SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 19|4@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 39|16@0+ (1,0) [0|255] "" XXX + +BO_ 294 NEW_MSG_13: 8 XXX + SG_ NEW_SIGNAL_3 : 7|16@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 59|4@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 61|2@0+ (1,0) [0|1] "" XXX + +BO_ 304 CAM_LANES: 8 XXX + SG_ DISTANCE_TO_LEFT_LANE : 1|10@0- (1,0) [0|1] "" XXX + SG_ RIGHT_LANE_DETECTED : 4|1@0+ (1,0) [0|255] "" XXX + SG_ LEFT_LANE_DETECTED : 7|1@0+ (1,0) [0|1] "" XXX + SG_ DISTANCE_TO_RIGHT_LANE : 23|10@0- (1,0) [0|2047] "" XXX + SG_ DISTANCE_TO_LEFT_LANE_LOW_RES : 29|8@0+ (1,0) [0|4095] "" XXX + SG_ DISTANCE_TO_RIGHT_LANE_LOW_RES : 37|8@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_3 : 59|4@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 61|2@0+ (1,0) [0|3] "" XXX + +BO_ 305 CAM_LANES_2_MAYBE: 8 XXX + SG_ NEW_SIGNAL_4 : 23|8@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_5 : 56|4@1+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 61|2@0+ (1,0) [0|3] "" XXX + +BO_ 306 CAM_LANE_3_MAYBE: 8 XXX + SG_ STEER : 7|10@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 13|10@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 19|10@0+ (1,0) [0|63] "" XXX + SG_ NEW_SIGNAL_4 : 25|10@0+ (1,0) [0|1] "" XXX + SG_ LANE_DETECTED_1 : 44|1@0+ (1,0) [0|1] "" XXX + SG_ LANE_DETECTED_2 : 45|1@0+ (1,0) [0|1] "" XXX + +BO_ 307 NEW_MSG_1: 8 XXX + SG_ NEW_SIGNAL_4 : 7|10@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 13|10@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 19|10@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 25|10@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_5 : 61|6@0+ (1,0) [0|1] "" XXX + +BO_ 308 ACC_POSSIBLY: 8 XXX + SG_ NEW_SIGNAL_2 : 0|7@0+ (1,0) [0|63] "" XXX + SG_ NEW_SIGNAL_6 : 4|1@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 18|7@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 36|7@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_7 : 37|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 54|7@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_8 : 55|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 310 NEW_MSG_10: 8 XXX + SG_ NEW_SIGNAL_2 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 56|4@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 61|2@0+ (1,0) [0|3] "" XXX + +BO_ 320 NEW_MSG_4: 8 XXX + SG_ NEW_SIGNAL_4 : 16|1@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 27|7@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 36|9@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 43|6@0+ (1,0) [0|1] "" XXX + +BO_ 321 NEW_MSG_11: 8 XXX + SG_ NEW_SIGNAL_1 : 5|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 32|1@0+ (1,0) [0|1] "" XXX + +BO_ 336 NEW_MSG_20: 8 XXX + SG_ NEW_SIGNAL_2 : 7|8@0+ (1,0) [0|4095] "" XXX + SG_ NEW_SIGNAL_1 : 11|12@0+ (1,0) [0|127] "" XXX + SG_ NEW_SIGNAL_3 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_5 : 47|8@0+ (1,0) [0|255] "" XXX + +BO_ 342 NEW_MSG_21: 8 XXX + SG_ NEW_SIGNAL_7 : 7|16@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_8 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_5 : 39|16@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 40|4@1+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_3 : 48|4@1+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_4 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_1 : 56|4@1+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 63|4@0+ (1,0) [0|15] "" XXX + +BO_ 352 NEW_MSG_14: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX + +BO_ 354 CAM_KEEP_ALIVE_1: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 55|30@0+ (1,0) [0|65535] "" XXX + +BO_ 355 NEW_MSG_15: 8 XXX + SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|127] "" XXX + +BO_ 356 NEW_MSG_16: 8 XXX + SG_ NEW_SIGNAL_1 : 56|4@1+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 61|2@0+ (1,0) [0|3] "" XXX + +BO_ 357 NEW_MSG_17: 8 XXX + SG_ NEW_SIGNAL_2 : 7|32@0+ (1,0) [0|4294967295] "" XXX + SG_ NEW_SIGNAL_3 : 56|4@1+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_1 : 61|2@0+ (1,0) [0|3] "" XXX + +BO_ 358 CAM_End: 8 XXX + SG_ NEW_SIGNAL_4 : 11|14@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 59|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 61|2@0+ (1,0) [0|3] "" XXX + +BO_ 512 NEW_MSG_32: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX + +BO_ 514 ENGINE_DATA: 8 XXX + SG_ RPM : 7|14@0+ (1,0) [0|8191] "" XXX + SG_ NEW_SIGNAL_1 : 19|12@0+ (1,0) [0|255] "" XXX + SG_ PEDAL_GAS : 39|10@0+ (1,0) [0|65535] "" XXX + SG_ ENGINE_ON : 52|1@0+ (1,0) [0|1] "" XXX + SG_ CHKSUM : 56|8@1+ (1,0) [0|255] "" XXX + +BO_ 515 NEW_MSG_36: 8 XXX + SG_ NEW_SIGNAL_1 : 31|5@0+ (1,0) [0|31] "" XXX + +BO_ 529 NEW_MSG_31: 8 XXX + SG_ NEW_SIGNAL_3 : 8|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_4 : 24|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 39|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 47|4@0+ (1,0) [0|15] "" XXX + +BO_ 533 WHEEL_SPEEDS: 8 XXX + SG_ FL : 7|16@0+ (0.01,-100) [0|65535] "" XXX + SG_ FR : 23|16@0+ (0.01,-100) [0|65535] "" XXX + SG_ RL : 39|16@0+ (0.01,-100) [0|65535] "" XXX + SG_ RR : 55|16@0+ (0.01,-100) [0|65535] "" XXX + +BO_ 535 SPEED_OLD: 8 XXX + SG_ SPEED : 39|16@0+ (0.01,0) [0|65535] "" XXX + +BO_ 537 MANUAL_GEAR: 8 XXX + SG_ NEW_SIGNAL_2 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ GEAR : 33|2@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX + +BO_ 542 ACC: 8 XXX + SG_ CTR1 : 3|4@0+ (1,0) [0|31] "" XXX + SG_ DERIVATIVE : 7|4@0+ (1,0) [0|1] "" XXX + SG_ CTR2 : 11|4@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_5 : 12|1@0+ (1,0) [0|1] "" XXX + SG_ ACC_ACTIVE : 13|1@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_4 : 15|2@0+ (1,0) [0|3] "" XXX + SG_ ACCEL_CMD : 23|12@0+ (1,-2000) [0|8191] "" XXX + SG_ ACC_ACTIVE2 : 27|1@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_1 : 35|4@0+ (1,0) [0|15] "" XXX + SG_ CTR3 : 37|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_6 : 39|2@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_7 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_9 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_11 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 543 NEW_MSG_21F: 8 XXX + SG_ NEW_SIGNAL_1 : 22|7@0+ (1,0) [0|127] "" XXX + SG_ NEW_SIGNAL_2 : 31|8@0+ (1,0) [0|255] "" XXX + +BO_ 546 ACC_2: 8 XXX + SG_ NEW_SIGNAL_3 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 11|4@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_5 : 17|2@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_7 : 19|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_6 : 23|4@0+ (1,0) [0|63] "" XXX + SG_ NEW_SIGNAL_2 : 31|16@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 47|16@0+ (1,0) [0|65535] "" XXX + SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX + +BO_ 547 NEW_MSG_223: 8 XXX + +BO_ 552 GEAR: 8 XXX + SG_ NEW_SIGNAL_1 : 0|1@0+ (1,0) [0|1] "" XXX + SG_ SHIFT : 8|1@0+ (1,0) [0|1] "" XXX + SG_ TORQUE_CONVERTER_LOCK : 11|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 16|1@0+ (1,0) [0|1] "" XXX + SG_ GEAR : 33|4@1+ (1,0) [0|255] "" XXX + SG_ GEAR_SHIFT : 43|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_3 : 56|6@1+ (1,0) [0|63] "" XXX + +BO_ 576 STEER_TORQUE: 8 XXX + SG_ STEER_TORQUE_SENSOR : 7|16@0+ (1,0) [0|65535] "" XXX + +BO_ 585 EPS_LKAS: 8 XXX + SG_ LKAS_REQUEST : 7|16@0- (1,0) [0|65535] "" XXX + SG_ STEER_FEEL : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 48|8@1+ (1,0) [0|255] "" XXX + SG_ CHECKSUM : 56|8@1+ (1,0) [0|255] "" XXX + +BO_ 587 EPS_FEEDBACK: 8 XXX + SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [0|65535] "" XXX + SG_ CPU_0_VIOL : 23|8@0+ (1,0) [0|15] "" XXX + SG_ CPU_1_VIOL : 31|8@0+ (1,0) [0|255] "" XXX + SG_ CPU_2_VIOL : 39|8@0+ (1,0) [0|255] "" XXX + SG_ CPU_3_VIOL : 47|8@0+ (1,0) [0|255] "" XXX + SG_ CPU_1_STATE : 48|4@1+ (1,0) [0|15] "" XXX + SG_ CPU_0_STATE : 55|4@0+ (1,0) [0|15] "" XXX + SG_ CPU_3_STATE : 56|4@1+ (1,0) [0|15] "" XXX + SG_ CPU_2_STATE : 63|4@0+ (1,0) [0|15] "" XXX + +BO_ 608 NEW_MSG_41: 8 XXX + SG_ NEW_SIGNAL_1 : 8|7@1+ (1,0) [0|15] "" XXX + +BO_ 640 NEW_MSG_280: 8 XXX + SG_ NEW_SIGNAL_1 : 2|3@0+ (1,0) [0|7] "" XXX + +BO_ 1029 NEW_MSG_405: 8 XXX + SG_ LEFT_TURN_SIGNAL_PULSE : 48|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT_TURN_SIGNAL_PULSE : 49|1@0+ (1,0) [0|1] "" XXX + +BO_ 1034 KEEP_ALIVE_2: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 39|16@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_5 : 55|16@0+ (1,0) [0|255] "" XXX + +BO_ 1045 NEW_MSG_415: 8 XXX + SG_ AUTO_HOLD_ACTIVE : 4|1@0+ (1,0) [0|1] "" XXX + SG_ AUTO_HOLD_ENABLED : 22|1@0+ (1,0) [0|3] "" XXX + SG_ PARKING_BRAKE_ACTIVE : 37|1@0+ (1,0) [0|1] "" XXX + SG_ CTR : 51|4@0+ (1,0) [0|15] "" XXX + SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1066 NEW_MSG_42A: 8 XXX + +BO_ 1067 NEW_MSG_33: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 42|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_5 : 43|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_6 : 44|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 45|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_7 : 47|8@0+ (1,0) [0|3] "" XXX + +BO_ 1078 NEW_MSG_44: 8 XXX + SG_ IGNITION : 10|1@1+ (1,0) [0|255] "" XXX + +BO_ 1087 BRAKE_PEDAL_BUS1: 8 XXX + SG_ NEW_SIGNAL_3 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ LEFT_TURN_SIGNAL_PULSE : 32|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT_TURN_SIGNAL_PULSE : 34|1@0+ (1,0) [0|1] "" XXX + SG_ BRAKE_PEDAL_PRESSED : 42|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_5 : 47|4@0+ (1,0) [0|15] "" XXX + +BO_ 1098 CRUZE_STATE: 8 XXX + SG_ NEW_SIGNAL_7 : 1|1@0+ (1,0) [0|1] "" XXX + SG_ CRZ_STATE : 6|3@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_1 : 13|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 18|1@0+ (1,0) [0|1] "" XXX + SG_ CRZ_SPEED : 31|9@0+ (1,0) [0|255] "" XXX + SG_ DISTANCE_SETTING : 38|3@0+ (1,0) [0|4] "" XXX + SG_ NEW_SIGNAL_5 : 42|1@0+ (1,0) [0|1] "" XXX + SG_ STOCK_LKAS_MODE : 44|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_4 : 45|1@0+ (1,0) [0|1] "" XXX + +BO_ 1100 NEW_MSG_44C: 8 XXX + SG_ TRAFFIC_SIGN_SYSTEM_ENABLED_1 : 4|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 5|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_4 : 8|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 10|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 37|1@0+ (1,0) [0|1] "" XXX + +BO_ 1103 NEW_MSG_42: 8 XXX + SG_ NEW_SIGNAL_1 : 12|12@0+ (1,0) [0|4095] "" XXX + +BO_ 1120 CAM_KEEP_ALIVE_2: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX + +BO_ 1167 SYSTEM_SETTINGS: 8 XXX + SG_ IMPERIAL_UNIT : 15|1@0+ (1,0) [0|1] "" XXX + +BO_ 1170 NEW_MSG_492: 8 XXX + SG_ MRCC_NOT_ALLOWED : 12|1@0+ (1,0) [0|1] "" XXX + SG_ MRRC_ALLOWED : 13|1@0+ (1,0) [0|3] "" XXX + +BO_ 1200 KEEP_ALIVE_3: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 39|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_2 : 55|16@0+ (1,0) [0|255] "" XXX + +BO_ 1209 KEEP_ALIVE_1: 8 XXX + SG_ NEW_SIGNAL_8 : 4|5@0+ (1,0) [0|127] "" XXX + SG_ NEW_SIGNAL_7 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_6 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_5 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1216 CAM_69: 8 XXX + SG_ NEW_SIGNAL_2 : 7|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 39|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_5 : 55|12@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_1 : 56|4@1+ (1,0) [0|15] "" XXX + +BO_ 1436 CAM_71: 8 XXX + SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX + +BO_ 1866 NEW_MSG_37: 8 XXX + SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1867 EPS_FEEDBACK2: 8 XXX + SG_ HALL2 : 7|16@0- (-1,0) [0|65535] "" XXX + SG_ HALL3 : 23|16@0- (-1,0) [0|65535] "" XXX + SG_ HALL4 : 39|16@0- (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_5 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ CTR : 63|8@0+ (1,0) [0|65535] "" XXX + +BO_ 1868 EPS_FEEDBACK3: 8 XXX + SG_ OUT1 : 7|16@0- (1,-32767) [0|65535] "" XXX + SG_ OUT2 : 23|16@0- (1,0) [0|65535] "" XXX + SG_ OUT3 : 39|16@0- (-1,0) [0|65535] "" XXX + SG_ OUT4 : 55|16@0- (-1,0) [0|65535] "" XXX + +CM_ SG_ 31 GEAR "13-P, 12-R, 11-N, 1-6-D"; +VAL_ 31 GEAR 13 "P" 12 "R" 11 "N" 1 "D" 2 "D" 3 "D" 4 "D" 5 "D" 6 "D"; +VAL_ 537 GEAR 0 "P" 1 "D" 2 "R"; +VAL_ 552 GEAR 13 "P" 12 "R" 11 "N" 1 "D" 2 "D" 3 "D" 4 "D" 5 "D" 6 "D"; +VAL_ 552 GEAR_SHIFT 6 "6th" 5 "5th" 4 "4th" 3 "3rd" 2 "2nd" 1 "1st" 14 "Shift" 13 "Park" 11 "Neutral" 12 "Reverse"; +VAL_ 1098 CRZ_STATE 1 "CRUISE_DISABLED" 2 "CRUISE_READY" 4 "GAS_OVERRIDE" 3 "CRUISE_ENABLE"; +VAL_ 1098 DISTANCE_SETTING 4 "CLOSE" 3 "MEDIUM_CLOSE" 2 "MEDIUM_FAR" 1 "FAR" 0 "ACC_DISABLED"; diff --git a/panda/board/drivers/can_common.h b/panda/board/drivers/can_common.h index c54e587ce..48b9288c2 100644 --- a/panda/board/drivers/can_common.h +++ b/panda/board/drivers/can_common.h @@ -197,10 +197,9 @@ void can_set_forwarding(uint8_t from, uint8_t to) { void ignition_can_hook(CANPacket_t *to_push) { int bus = GET_BUS(to_push); + int addr = GET_ADDR(to_push); + int len = GET_LEN(to_push); if (bus == 0) { - int addr = GET_ADDR(to_push); - int len = GET_LEN(to_push); - // GM exception if ((addr == 0x1F1) && (len == 8)) { // SystemPowerMode (2=Run, 3=Crank Request) @@ -226,9 +225,13 @@ void ignition_can_hook(CANPacket_t *to_push) { ignition_can_cnt = 0U; } + } else if (bus == 1) { + // Mazda 2019 exception + if ((addr == 0x274) && (len == 8)) { + ignition_can = (GET_BYTE(to_push, 5) & 0x4U) != 0U; + ignition_can_cnt = 0U; + } } else if (bus == 2) { - int addr = GET_ADDR(to_push); - int len = GET_LEN(to_push); // GM exception, SDGM cars have this message on bus 2 if ((addr == 0x1F1) && (len == 8)) { // SystemPowerMode (2=Run, 3=Crank Request) diff --git a/panda/board/safety/safety_mazda.h b/panda/board/safety/safety_mazda.h index 9ec1a6787..8bc5ba94a 100644 --- a/panda/board/safety/safety_mazda.h +++ b/panda/board/safety/safety_mazda.h @@ -29,6 +29,10 @@ #define MAZDA_2019_CRZ_BTNS 0x9d // rx on main tx on camera. DBC: CRZ_BTNS #define MAZDA_2019_ACC 0x220 // main bus. DBC: ACC +#define MAZDA_2023_SPEED 0x215 // main bus. DBC: WHEEL_SPEEDS +#define MAZDA_2023_BRAKE 0x9F // main bus. DBC: BRAKE_PEDAL +#define MAZDA_2023_ACC 0x21e // main bus. DBC: ACC + #define MAZDA_TI_LKAS 0x249 // CAN bus numbers @@ -39,13 +43,16 @@ // param flag masks const int FLAG_GEN1 = 1; const int FLAG_GEN2 = 2; -const int FLAG_TORQUE_INTERCEPTOR = 4; -const int FLAG_RADAR_INTERCEPTOR = 8; -const int FLAG_NO_FSC = 16; -const int FLAG_NO_MRCC = 32; +const int FLAG_GEN3 = 4; +const int FLAG_TORQUE_INTERCEPTOR = 8; +const int FLAG_RADAR_INTERCEPTOR = 16; +const int FLAG_NO_FSC = 32; +const int FLAG_NO_MRCC = 64; +const int FLAG_MANUAL_TRANSMISSION = 128; bool gen1 = false; bool gen2 = false; +bool gen3 = false; bool torque_interceptor = false; bool radar_interceptor = false; bool no_fsc = false; @@ -84,7 +91,7 @@ const CanMsg MAZDA_TI_RI_TX_MSGS[] = {{MAZDA_LKAS, 0, 8}, {MAZDA_TI_LKAS, 1, 8}, {MAZDA_RADAR_363, 0, 8}, {MAZDA_RADAR_364, 0, 8}, {MAZDA_RADAR_365, 0, 8}, {MAZDA_RADAR_366, 0, 8}, {MAZDA_RADAR_499, 0, 8}}; -const CanMsg MAZDA_2019_TX_MSGS[] = {{MAZDA_TI_LKAS, 1, 8}, {MAZDA_2019_ACC, 2, 8}}; +const CanMsg MAZDA_2019_TX_MSGS[] = {{MAZDA_TI_LKAS, 1, 8}, {MAZDA_2019_ACC, 2, 8}, {MAZDA_2023_ACC, 2, 8}}; RxCheck mazda_rx_checks[] = { {.msg = {{MAZDA_CRZ_CTRL, 0, 8, .frequency = 50U}, { 0 }, { 0 }}}, @@ -110,8 +117,17 @@ RxCheck mazda_2019_rx_checks[] = { {.msg = {{MAZDA_2019_STEER_TORQUE, 1, 8, .frequency = 50U}, { 0 }, { 0 }}}, }; +RxCheck mazda_2023_rx_checks[] = { + {.msg = {{MAZDA_2023_BRAKE, 0, 8, .frequency = 5U}, { 0 }, { 0 }}}, + {.msg = {{MAZDA_2019_GAS, 2, 8, .frequency = 100U}, { 0 }, { 0 }}}, + {.msg = {{MAZDA_2019_CRUISE, 1, 8, .frequency = 10U}, { 0 }, { 0 }}}, + {.msg = {{MAZDA_2023_SPEED, 2, 8, .frequency = 30U}, { 0 }, { 0 }}}, + {.msg = {{MAZDA_2019_STEER_TORQUE, 1, 8, .frequency = 50U}, { 0 }, { 0 }}}, +}; + // track msgs coming from OP so that we know what CAM msgs to drop and what to forward static void mazda_rx_hook(const CANPacket_t *to_push) { + print("pcm_cruise_check"); int addr = GET_ADDR(to_push); if ((int)GET_BUS(to_push) == MAZDA_MAIN) { if (gen1){ @@ -163,6 +179,16 @@ static void mazda_rx_hook(const CANPacket_t *to_push) { generic_rx_checks(addr == MAZDA_2019_SPEED); } + if (gen3) { + if (addr == MAZDA_2023_BRAKE) { + brake_pressed = (GET_BYTE(to_push, 7) & 0x8U); + } + if (addr == MAZDA_2023_SPEED) { + int speed = ( (GET_BYTE(to_push, 0) << 8) | (GET_BYTE(to_push, 1)) ) - 10000; // Front Left Wheel Speed + vehicle_moving = speed != 0; + } + generic_rx_checks(false); + } } if ((GET_BUS(to_push) == MAZDA_AUX)) { @@ -171,9 +197,20 @@ static void mazda_rx_hook(const CANPacket_t *to_push) { update_sample(&torque_driver, torque_driver_new); } - if (addr == MAZDA_2019_STEER_TORQUE && gen2) { + if (addr == MAZDA_2019_STEER_TORQUE && (gen2 || gen3)) { update_sample(&torque_driver, (int16_t)(GET_BYTE(to_push, 0) << 8 | GET_BYTE(to_push, 1))); } + + if (gen3) { + if (addr == MAZDA_2019_CRUISE) { + uint8_t state = GET_BYTE(to_push, 0) & 0x70U; + bool cruise_engaged = (0x30U == state); + bool cruise_override = (0x40U == state); + //bool cruise_disable = (state == 0x10U); + acc_main_on = true; + pcm_cruise_check(cruise_engaged || cruise_override); + } + } } if ((GET_BUS(to_push) == MAZDA_CAM)) { @@ -189,6 +226,12 @@ static void mazda_rx_hook(const CANPacket_t *to_push) { } generic_rx_checks(addr == MAZDA_2019_CRUISE); } + if (gen3) { + if (addr == MAZDA_2019_GAS) { + gas_pressed = (GET_BYTE(to_push, 4) || ((GET_BYTE(to_push, 5) & 0xC0U))); + } + generic_rx_checks(false); + } } } @@ -218,7 +261,7 @@ static bool mazda_tx_hook(const CANPacket_t *to_send) { } } } - if (gen2 && (bus == MAZDA_AUX) && (addr == MAZDA_TI_LKAS)) { + if ((gen2 || gen3) && (bus == MAZDA_AUX) && (addr == MAZDA_TI_LKAS)) { int desired_torque = (int16_t)((GET_BYTE(to_send, 0) << 8) | GET_BYTE(to_send, 1)); // signal is signed if (steer_torque_cmd_checks(desired_torque, -1, MAZDA_2019_STEERING_LIMITS)) { tx = false; @@ -260,6 +303,7 @@ static safety_config mazda_init(uint16_t param) { safety_config ret = BUILD_SAFETY_CFG(mazda_rx_checks, MAZDA_TX_MSGS); gen1 = GET_FLAG(param, FLAG_GEN1); gen2 = GET_FLAG(param, FLAG_GEN2); + gen3 = GET_FLAG(param, FLAG_GEN3); radar_interceptor = GET_FLAG(param, FLAG_RADAR_INTERCEPTOR); torque_interceptor = GET_FLAG(param, FLAG_TORQUE_INTERCEPTOR); no_fsc = GET_FLAG(param, FLAG_NO_FSC); @@ -281,6 +325,9 @@ static safety_config mazda_init(uint16_t param) { if (gen2) { ret = BUILD_SAFETY_CFG(mazda_2019_rx_checks, MAZDA_2019_TX_MSGS); } + if (gen3) { + ret = BUILD_SAFETY_CFG(mazda_2023_rx_checks, MAZDA_2019_TX_MSGS); + } return ret; } diff --git a/panda/python/__init__.py b/panda/python/__init__.py index 6501dbea7..d088edea0 100644 --- a/panda/python/__init__.py +++ b/panda/python/__init__.py @@ -244,10 +244,13 @@ class Panda: FLAG_MAZDA_GEN1 = 1 FLAG_MAZDA_GEN2 = 2 - FLAG_MAZDA_TORQUE_INTERCEPTOR = 4 - FLAG_MAZDA_RADAR_INTERCEPTOR = 8 - FLAG_MAZDA_NO_FSC = 16 - FLAG_MAZDA_NO_MRCC = 32 + FLAG_MAZDA_GEN3 = 4 + FLAG_MAZDA_TORQUE_INTERCEPTOR = 8 + FLAG_MAZDA_RADAR_INTERCEPTOR = 16 + FLAG_MAZDA_NO_FSC = 32 + FLAG_MAZDA_NO_MRCC = 64 + FLAG_MAZDA_MANUAL_TRANSMISSION = 128 + def __init__(self, serial: str | None = None, claim: bool = True, disable_checks: bool = True, can_speed_kbps: int = 500): self._connect_serial = serial diff --git a/selfdrive/car/mazda/carcontroller.py b/selfdrive/car/mazda/carcontroller.py index 2d3648787..696674767 100644 --- a/selfdrive/car/mazda/carcontroller.py +++ b/selfdrive/car/mazda/carcontroller.py @@ -106,7 +106,7 @@ class CarController(CarControllerBase): if self.frame % 2 == 0: can_sends.extend(mazdacan.create_radar_command(self.packer, self.frame, CC.longActive, CS, hold)) - else: + elif self.CP.flags & MazdaFlags.GEN2: raw_acc_output = (CC.actuators.accel * 200) + 2000 if CC.longActive: if self.params.get_bool("BlendedACC"): diff --git a/selfdrive/car/mazda/carstate.py b/selfdrive/car/mazda/carstate.py index 86c91b358..e35de4720 100644 --- a/selfdrive/car/mazda/carstate.py +++ b/selfdrive/car/mazda/carstate.py @@ -41,7 +41,7 @@ class CarState(CarStateBase): self.update = self.update_gen1 if CP.flags & MazdaFlags.GEN1: self.update = self.update_gen1 - if CP.flags & MazdaFlags.GEN2: + if CP.flags & MazdaFlags.GEN2 or CP.flags & MazdaFlags.GEN3: self.update = self.update_gen2 def update_gen1(self, cp, cp_cam, cp_body, frogpilot_variables): @@ -184,11 +184,6 @@ class CarState(CarStateBase): #self.shifting = cp_cam.vl["GEAR"]["SHIFT"] #self.torque_converter_lock = cp_cam.vl["GEAR"]["TORQUE_CONVERTER_LOCK"] - ret.steeringAngleDeg = cp.vl["STEER"]["STEER_ANGLE"] # updated at 100hz and its high resolution - ret.steeringRateDeg = (ret.steeringAngleDeg - self._prev_steering_angle) / DT_CTRL - self._prev_steering_angle = ret.steeringAngleDeg - #ret.steeringRateDeg = cp.vl["STEER"]["STEER_RATE"] # This signal doesn't seem accurate - ret.steeringTorque = cp_body.vl["EPS_FEEDBACK"]["STEER_TORQUE_SENSOR"] ret.gas = cp_cam.vl["ENGINE_DATA"]["PEDAL_GAS"] @@ -209,10 +204,19 @@ class CarState(CarStateBase): ret.steerFaultTemporary = False # TODO locate signal. Car shows light on dash if there is a fault ret.standstill = cp_cam.vl["SPEED"]["SPEED"] * unit_conversion < 0.1 - ret.cruiseState.speed = cp.vl["CRUZE_STATE"]["CRZ_SPEED"] * unit_conversion - ret.cruiseState.enabled = (cp.vl["CRUZE_STATE"]["CRZ_STATE"] >= 2) - ret.cruiseState.available = (cp.vl["CRUZE_STATE"]["CRZ_STATE"] != 0) - ret.cruiseState.standstill = ret.standstill if not self.CP.openpilotLongitudinalControl else False + if self.CP.flags & MazdaFlags.GEN2: + ret.steeringAngleDeg = cp_cam.vl["STEER"]["STEER_ANGLE"] + ret.cruiseState.speed = cp.vl["CRUZE_STATE"]["CRZ_SPEED"] * unit_conversion + ret.cruiseState.enabled = (cp.vl["CRUZE_STATE"]["CRZ_STATE"] >= 2) + ret.cruiseState.available = (cp.vl["CRUZE_STATE"]["CRZ_STATE"] != 0) + else: + ret.steeringAngleDeg = cp.vl["STEER"]["STEER_ANGLE"] + ret.cruiseState.speed = cp_body.vl["CRUZE_STATE"]["CRZ_SPEED"] * unit_conversion + ret.cruiseState.enabled = (cp_body.vl["CRUZE_STATE"]["CRZ_STATE"] >= 3) + ret.cruiseState.available = (cp_body.vl["CRUZE_STATE"]["CRZ_STATE"] >= 2) + ret.cruiseState.standstill = ret.standstill + ret.steeringRateDeg = (ret.steeringAngleDeg - self._prev_steering_angle) / DT_CTRL + self._prev_steering_angle = ret.steeringAngleDeg self.cp = cp self.cp_cam = cp_cam @@ -224,6 +228,7 @@ class CarState(CarStateBase): return ret, fp_ret + @staticmethod def get_ti_messages(CP): messages = [] @@ -231,29 +236,15 @@ class CarState(CarStateBase): messages += [ ("TI_FEEDBACK", 50), ] - elif CP.flags & MazdaFlags.GEN2: + elif CP.flags & (MazdaFlags.GEN2 | MazdaFlags.GEN3): messages += [ ("EPS_FEEDBACK", 50), - ("EPS_FEEDBACK2", 50), - ("EPS_FEEDBACK3", 50), ] return messages @staticmethod def get_can_parser(CP, FPCP): messages = [] - - if not (CP.flags & MazdaFlags.GEN2): - messages += [ - # sig_address, frequency - ("CRZ_BTNS", 10), - ("BLINK_INFO", 10), - ("STEER", 67), - ("STEER_RATE", 83), - ("STEER_TORQUE", 83), - ("WHEEL_SPEEDS", 100), - ] - if CP.flags & MazdaFlags.GEN1: messages += [ ("ENGINE_DATA", 100), @@ -264,6 +255,12 @@ class CarState(CarStateBase): ("DOORS", 10), ("GEAR", 20), ("BSM", 10), + ("CRZ_BTNS", 10), + ("BLINK_INFO", 10), + ("STEER", 67), + ("STEER_RATE", 83), + ("STEER_TORQUE", 83), + ("WHEEL_SPEEDS", 100), ] if not (CP.flags & MazdaFlags.RADAR_INTERCEPTOR) and not (CP.flags & MazdaFlags.NO_MRCC): @@ -271,14 +268,22 @@ class CarState(CarStateBase): ("CRZ_CTRL", 50), ] - if CP.flags & MazdaFlags.GEN2: + if not CP.flags & MazdaFlags.GEN1: messages += [ ("BRAKE_PEDAL", 5), - ("CRUZE_STATE", 10), ("BLINK_INFO", 10), - ("ACC", 50), ("SYSTEM_SETTINGS", 10), - ("STEER", 100) + ("ACC", 50), + ] + + if CP.flags & MazdaFlags.GEN2: + messages += [ + ("CRUZE_STATE", 10), + ] + + if CP.flags & MazdaFlags.GEN3: + messages += [ + ("STEER", 50), ] return CANParser(DBC[CP.carFingerprint]["pt"], messages, 0) @@ -306,14 +311,12 @@ class CarState(CarStateBase): (msg,10), ] - if CP.flags & MazdaFlags.GEN2: + if not CP.flags & MazdaFlags.GEN1: messages += [ ("ENGINE_DATA", 100), - ("STEER_TORQUE", 100), ("WHEEL_SPEEDS", 100), ("SPEED", 50), ] - if CP.flags & MazdaFlags.MANUAL_TRANSMISSION: messages += [ ("MANUAL_GEAR", 50), @@ -323,8 +326,19 @@ class CarState(CarStateBase): ("GEAR", 40), ] + if CP.flags & MazdaFlags.GEN2: + messages += [ + ("STEER", 50), + ] + return CANParser(DBC[CP.carFingerprint]["pt"], messages, 2) @staticmethod def get_body_can_parser(CP): - return CANParser(DBC[CP.carFingerprint]["pt"], CarState.get_ti_messages(CP), 1) + messages = CarState.get_ti_messages(CP) + if CP.flags & MazdaFlags.GEN3: + messages += [ + ("CRUZE_STATE", 10), + ] + + return CANParser(DBC[CP.carFingerprint]["pt"], messages, 1) diff --git a/selfdrive/car/mazda/fingerprints.py b/selfdrive/car/mazda/fingerprints.py index e8006a5d9..56cfc18fb 100644 --- a/selfdrive/car/mazda/fingerprints.py +++ b/selfdrive/car/mazda/fingerprints.py @@ -351,5 +351,11 @@ FW_VERSIONS = { b'PX03-21PS1-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PX4K-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], - }, + } } + +FINGERPRINTS ={ + CAR.MAZDA_CX_30_2023: [{ + 32: 8, 80: 8, 112: 8, 113: 8, 114: 8, 115: 8, 116: 8, 124: 8, 125: 8, 126: 8, 128: 8, 130: 8, 132: 8, 133: 8, 135: 8, 136: 8, 145: 8, 146: 8, 148: 8, 150: 8, 151: 8, 152: 8, 154: 8, 159: 8, 192: 8, 253: 8, 304: 8, 357: 8, 514: 8, 520: 8, 530: 8, 531: 8, 532: 8, 533: 8, 537: 8, 552: 8, 570: 8, 628: 8, 830: 8, 831: 8, 832: 8, 835: 8, 836: 8, 960: 8, 1034: 8, 1044: 8, 1045: 8, 1066: 8, 1068: 8, 1077: 8, 1078: 8, 1081: 8, 1088: 8, 1095: 8, 1096: 8, 1098: 8, 1099: 8, 1106: 8, 1120: 8, 1121: 8, 1170: 8, 1254: 8, 1264: 8, 1324: 8, 1325: 8, 1409: 8, 1430: 8 + }], +} \ No newline at end of file diff --git a/selfdrive/car/mazda/interface.py b/selfdrive/car/mazda/interface.py index d254ef345..7907b3526 100755 --- a/selfdrive/car/mazda/interface.py +++ b/selfdrive/car/mazda/interface.py @@ -5,7 +5,7 @@ import numpy as np from cereal import car, custom from panda import Panda from openpilot.common.conversions import Conversions as CV -from openpilot.selfdrive.car.mazda.values import CAR, LKAS_LIMITS, MazdaFlags, GEN1, GEN2 +from openpilot.selfdrive.car.mazda.values import CAR, LKAS_LIMITS, MazdaFlags, GEN1, GEN2, GEN3 from openpilot.selfdrive.car import create_button_events, get_safety_config from openpilot.selfdrive.car.interfaces import CarInterfaceBase, TorqueFromLateralAccelCallbackType, LateralAccelFromTorqueCallbackType from openpilot.common.params import Params @@ -17,6 +17,7 @@ EventName = car.CarEvent.EventName NON_LINEAR_TORQUE_PARAMS = { CAR.MAZDA_3_2019: (4.6, 0.6, 0.134, 0.3605), CAR.MAZDA_CX_30: (4.68689, 0.79999, 0.18244, 0.38763), + CAR.MAZDA_CX_30_2023: (4.68689, 0.79999, 0.18244, 0.38763), CAR.MAZDA_CX_50: (4.68689, 0.79999, 0.18244, 0.38763) } @@ -115,11 +116,18 @@ class CarInterface(CarInterfaceBase): ret.startingState = True ret.steerActuatorDelay = 0.335 + if candidate in GEN3: + ret.safetyConfigs[0].safetyParam |= Panda.FLAG_MAZDA_GEN3 + ret.experimentalLongitudinalAvailable = False + ret.openpilotLongitudinalControl = False + if p.get_bool("ManualTransmission"): + ret.flags |= MazdaFlags.MANUAL_TRANSMISSION.value + ret.steerLimitTimer = 0.8 CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) - if candidate not in (CAR.MAZDA_CX5_2022, CAR.MAZDA_3_2019, CAR.MAZDA_CX_30, CAR.MAZDA_CX_50) and not ret.flags & MazdaFlags.TORQUE_INTERCEPTOR: + if candidate not in (CAR.MAZDA_CX5_2022, CAR.MAZDA_3_2019, CAR.MAZDA_CX_30, CAR.MAZDA_CX_50, CAR.MAZDA_3_2023, CAR.MAZDA_CX_30_2023) and not ret.flags & MazdaFlags.TORQUE_INTERCEPTOR: ret.minSteerSpeed = LKAS_LIMITS.DISABLE_SPEED * CV.KPH_TO_MS ret.centerToFront = ret.wheelbase * 0.41 diff --git a/selfdrive/car/mazda/mazdacan.py b/selfdrive/car/mazda/mazdacan.py index 919e19677..3302dbdc3 100644 --- a/selfdrive/car/mazda/mazdacan.py +++ b/selfdrive/car/mazda/mazdacan.py @@ -67,12 +67,12 @@ def create_steering_control(packer, CP, frame, apply_steer, lkas): } msgs.append(packer.make_can_msg("CAM_LKAS2", 1, values)) - elif CP.flags & MazdaFlags.GEN2: + elif CP.flags & ( MazdaFlags.GEN2 | MazdaFlags.GEN3 ): bus = 1 sig_name = "EPS_LKAS" values = { "LKAS_REQUEST": apply_steer, - "STEER_FEEL": 12000, + "STEER_FEEL": 10000, } msgs.append(packer.make_can_msg(sig_name, bus, values)) diff --git a/selfdrive/car/mazda/values.py b/selfdrive/car/mazda/values.py index c8f3e243c..bdf44fb1f 100644 --- a/selfdrive/car/mazda/values.py +++ b/selfdrive/car/mazda/values.py @@ -31,7 +31,7 @@ class CarControllerParams: self.TI_STEER_DRIVER_MULTIPLIER = 40 # weight driver torque self.TI_STEER_DRIVER_FACTOR = 1 # from dbc self.TI_STEER_ERROR_MAX = 350 # max delta between torque cmd and torque motor - if CP.flags & MazdaFlags.GEN2: + if CP.flags & (MazdaFlags.GEN2 | MazdaFlags.GEN3): self.STEER_MAX = 8000 self.STEER_DELTA_UP = 45 # torque increase per refresh self.STEER_DELTA_DOWN = 80 # torque decrease per refresh @@ -62,16 +62,19 @@ class MazdaFlags(IntFlag): # Gen 1 hardware: same CAN messages and same camera GEN1 = 1 GEN2 = 2 - TORQUE_INTERCEPTOR = 4 - RADAR_INTERCEPTOR = 8 - NO_FSC = 16 - NO_MRCC = 32 - MANUAL_TRANSMISSION = 64 + GEN3 = 4 + TORQUE_INTERCEPTOR = 8 + RADAR_INTERCEPTOR = 16 + NO_FSC = 32 + NO_MRCC = 64 + MANUAL_TRANSMISSION = 128 @dataclass class MazdaPlatformConfig(PlatformConfig): dbc_dict: DbcDict = field(default_factory=lambda: dbc_dict('mazda_2017', None)) def init(self): + if self.flags & MazdaFlags.GEN3: + self.dbc_dict = dbc_dict('mazda_2023', None) if self.flags & MazdaFlags.GEN2: self.dbc_dict = dbc_dict('mazda_2019', None) elif self.flags & MazdaFlags.GEN1 and self.flags & MazdaFlags.RADAR_INTERCEPTOR: @@ -116,7 +119,7 @@ class CAR(Platforms): flags=MazdaFlags.GEN2, ) MAZDA_CX_30 = MazdaPlatformConfig( - [MazdaCarDocs("Mazda CX-30 2019-24")], + [MazdaCarDocs("Mazda CX-30 2019-22")], MazdaCarSpecs(mass=3375 * CV.LB_TO_KG, wheelbase=2.814, steerRatio=15.5), flags=MazdaFlags.GEN2, ) @@ -125,6 +128,16 @@ class CAR(Platforms): MazdaCarSpecs(mass=3375 * CV.LB_TO_KG, wheelbase=2.814, steerRatio=15.5), flags=MazdaFlags.GEN2, ) + MAZDA_3_2023 = MazdaPlatformConfig( + [MazdaCarDocs("Mazda 3 2024-26")], + MazdaCarSpecs(mass=3000 * CV.LB_TO_KG, wheelbase=2.725, steerRatio=18.8), + flags=MazdaFlags.GEN3, + ) + MAZDA_CX_30_2023 = MazdaPlatformConfig( + [MazdaCarDocs("Mazda CX-30 23-26")], + MazdaCarSpecs(mass=3375 * CV.LB_TO_KG, wheelbase=2.814, steerRatio=15.5), + flags=MazdaFlags.GEN3, + ) class LKAS_LIMITS: @@ -169,3 +182,4 @@ FW_QUERY_CONFIG = FwQueryConfig( DBC = CAR.create_dbc_map() GEN1 = CAR.with_flags(MazdaFlags.GEN1) GEN2 = CAR.with_flags(MazdaFlags.GEN2) +GEN3 = CAR.with_flags(MazdaFlags.GEN3) diff --git a/selfdrive/car/torque_data/override.toml b/selfdrive/car/torque_data/override.toml index 53f5ace97..25580757a 100644 --- a/selfdrive/car/torque_data/override.toml +++ b/selfdrive/car/torque_data/override.toml @@ -81,5 +81,7 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "HONDA_HRV_3G" = [2.5, 1.2, 0.2] "MAZDA_3_2019" = [1.45, 3.0, 0.33] +"MAZDA_3_2023" = [1.45, 3.0, 0.33] "MAZDA_CX_30" = [1.45, 3.0, 0.33] -"MAZDA_CX_50" = [1.45, 3.0, 0.33] \ No newline at end of file +"MAZDA_CX_30_2023" = [1.45, 3.0, 0.33] +"MAZDA_CX_50" = [1.45, 3.0, 0.33]