@ -1,5 +1,7 @@
from cereal import car
from opendbc . can . parser import CANParser
from opendbc . can . can_define import CANDefine
from selfdrive . config import Conversions as CV
from selfdrive . car . interfaces import CarStateBase
from selfdrive . car . chrysler . values import DBC , STEER_THRESHOLD
@ -69,52 +71,53 @@ class CarState(CarStateBase):
def update ( self , cp , cp_cam ) :
# update prevs, update must run once per loop
self . prev_left_blinker_on = self . left_blinker_on
self . prev_right_blinker_on = self . right_blinker_on
ret = car . CarState . new_message ( )
self . frame_23b = int ( cp . vl [ " WHEEL_BUTTONS " ] [ ' COUNTER ' ] )
self . frame = int ( cp . vl [ " EPS_STATUS " ] [ ' COUNTER ' ] )
self . door_all_closed = not any ( [ cp . vl [ " DOORS " ] [ ' DOOR_OPEN_FL ' ] ,
cp . vl [ " DOORS " ] [ ' DOOR_OPEN_FR ' ] ,
cp . vl [ " DOORS " ] [ ' DOOR_OPEN_RL ' ] ,
cp . vl [ " DOORS " ] [ ' DOOR_OPEN_RR ' ] ] )
self . seatbelt = ( cp . vl [ " SEATBELT_STATUS " ] [ ' SEATBELT_DRIVER_UNLATCHED ' ] == 0 )
ret . doorOpen = any ( [ cp . vl [ " DOORS " ] [ ' DOOR_OPEN_FL ' ] ,
cp . vl [ " DOORS " ] [ ' DOOR_OPEN_FR ' ] ,
cp . vl [ " DOORS " ] [ ' DOOR_OPEN_RL ' ] ,
cp . vl [ " DOORS " ] [ ' DOOR_OPEN_RR ' ] ] )
ret . seatbeltUnlatched = cp . vl [ " SEATBELT_STATUS " ] [ ' SEATBELT_DRIVER_UNLATCHED ' ] == 1
ret . brakePressed = cp . vl [ " BRAKE_2 " ] [ ' BRAKE_PRESSED_2 ' ] == 5 # human-only
ret . brake = 0
ret . brakeLights = ret . brakePressed
ret . gas = cp . vl [ " ACCEL_GAS_134 " ] [ ' ACCEL_134 ' ]
ret . gasPressed = ret . gas > 1e-5
self . brake_pressed = cp . vl [ " BRAKE_2 " ] [ ' BRAKE_PRESSED_2 ' ] == 5 # human-only
self . pedal_gas = cp . vl [ " ACCEL_GAS_134 " ] [ ' ACCEL_134 ' ]
self . esp_disabled = ( cp . vl [ " TRACTION_BUTTON " ] [ ' TRACTION_OFF ' ] == 1 )
self . v_wheel_fl = cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_FL ' ]
self . v_wheel_rr = cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_RR ' ]
self . v_wheel_rl = cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_RL ' ]
self . v_wheel_fr = cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_FR ' ]
self . v_ego_raw = ( cp . vl [ ' SPEED_1 ' ] [ ' SPEED_LEFT ' ] + cp . vl [ ' SPEED_1 ' ] [ ' SPEED_RIGHT ' ] ) / 2.
self . v_ego , self . a_ego = self . update_speed_kf ( self . v_ego_raw )
self . standstill = not self . v_ego_raw > 0.001
self . angle_steers = cp . vl [ " STEERING " ] [ ' STEER_ANGLE ' ]
self . angle_steers_rate = cp . vl [ " STEERING " ] [ ' STEERING_RATE ' ]
self . gear_shifter = self . parse_gear_shifter ( self . shifter_values . get ( cp . vl [ ' GEAR ' ] [ ' PRNDL ' ] , None ) )
self . main_on = cp . vl [ " ACC_2 " ] [ ' ACC_STATUS_2 ' ] == 7 # ACC is green.
self . left_blinker_on = cp . vl [ " STEERING_LEVERS " ] [ ' TURN_SIGNALS ' ] == 1
self . right_blinker_on = cp . vl [ " STEERING_LEVERS " ] [ ' TURN_SIGNALS ' ] == 2
self . steer_torque_driver = cp . vl [ " EPS_STATUS " ] [ " TORQUE_DRIVER " ]
self . steer_torque_motor = cp . vl [ " EPS_STATUS " ] [ " TORQUE_MOTOR " ]
self . steer_override = abs ( self . steer_torque_driver ) > STEER_THRESHOLD
ret . wheelSpeeds . fl = cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_FL ' ]
ret . wheelSpeeds . rr = cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_RR ' ]
ret . wheelSpeeds . rl = cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_RL ' ]
ret . wheelSpeeds . fr = cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_FR ' ]
ret . vEgoRaw = ( cp . vl [ ' SPEED_1 ' ] [ ' SPEED_LEFT ' ] + cp . vl [ ' SPEED_1 ' ] [ ' SPEED_RIGHT ' ] ) / 2.
ret . vEgo , ret . aEgo = self . update_speed_kf ( ret . vEgoRaw )
ret . standstill = not ret . vEgoRaw > 0.001
ret . leftBlinker = cp . vl [ " STEERING_LEVERS " ] [ ' TURN_SIGNALS ' ] == 1
ret . rightBlinker = cp . vl [ " STEERING_LEVERS " ] [ ' TURN_SIGNALS ' ] == 2
ret . steeringAngle = cp . vl [ " STEERING " ] [ ' STEER_ANGLE ' ]
ret . steeringRate = cp . vl [ " STEERING " ] [ ' STEERING_RATE ' ]
ret . gearShifter = self . parse_gear_shifter ( self . shifter_values . get ( cp . vl [ ' GEAR ' ] [ ' PRNDL ' ] , None ) )
ret . cruiseState . enabled = cp . vl [ " ACC_2 " ] [ ' ACC_STATUS_2 ' ] == 7 # ACC is green.
ret . cruiseState . available = ret . cruiseState . enabled # FIXME: for now same as enabled
ret . cruiseState . speed = cp . vl [ " DASHBOARD " ] [ ' ACC_SPEED_CONFIG_KPH ' ] * CV . KPH_TO_MS
ret . steeringTorque = cp . vl [ " EPS_STATUS " ] [ " TORQUE_DRIVER " ]
ret . steeringTorqueEps = cp . vl [ " EPS_STATUS " ] [ " TORQUE_MOTOR " ]
ret . steeringPressed = abs ( ret . steeringTorque ) > STEER_THRESHOLD
steer_state = cp . vl [ " EPS_STATUS " ] [ " LKAS_STATE " ]
self . steer_error = steer_state == 4 or ( steer_state == 0 and self . v_ego > self . CP . minSteerSpeed )
self . user_brake = 0
self . brake_lights = self . brake_pressed
self . v_cruise_pcm = cp . vl [ " DASHBOARD " ] [ ' ACC_SPEED_CONFIG_KPH ' ]
self . pcm_acc_status = self . main_on
self . steer_error = steer_state == 4 or ( steer_state == 0 and ret . vEgo > self . CP . minSteerSpeed )
self . generic_t oggle = bool ( cp . vl [ " STEERING_LEVERS " ] [ ' HIGH_BEAM_FLASH ' ] )
ret . genericToggle = bool ( cp . vl [ " STEERING_LEVERS " ] [ ' HIGH_BEAM_FLASH ' ] )
self . lkas_counter = cp_cam . vl [ " LKAS_COMMAND " ] [ ' COUNTER ' ]
self . lkas_car_model = cp_cam . vl [ " LKAS_HUD " ] [ ' CAR_MODEL ' ]
self . lkas_status_ok = cp_cam . vl [ " LKAS_HEARTBIT " ] [ ' LKAS_STATUS_OK ' ]
return ret