from cereal import car
from opendbc . can . parser import CANParser
from selfdrive . car . interfaces import CarStateBase
from selfdrive . car . body . values import DBC
STARTUP_TICKS = 100
class CarState ( CarStateBase ) :
def update ( self , cp ) :
ret = car . CarState . new_message ( )
ret . wheelSpeeds . fl = cp . vl [ ' MOTORS_DATA ' ] [ ' SPEED_L ' ]
ret . wheelSpeeds . fr = cp . vl [ ' MOTORS_DATA ' ] [ ' SPEED_R ' ]
ret . vEgoRaw = ( ( ret . wheelSpeeds . fl + ret . wheelSpeeds . fr ) / 2. ) * self . CP . wheelSpeedFactor
ret . vEgo , ret . aEgo = self . update_speed_kf ( ret . vEgoRaw )
ret . standstill = False
# irrelevant for non-car
ret . doorOpen = False
ret . seatbeltUnlatched = False
ret . gearShifter = car . CarState . GearShifter . drive
ret . steeringTorque = 0
ret . steeringAngleDeg = 0
ret . steeringPressed = False
ret . cruiseState . enabled = True
ret . cruiseState . available = True
ret . cruiseState . speed = 0
return ret
@staticmethod
def get_can_parser ( CP ) :
signals = [
# sig_name, sig_address
( " SPEED_L " , " MOTORS_DATA " ) ,
( " SPEED_R " , " MOTORS_DATA " ) ,
( " ELEC_ANGLE_L " , " MOTORS_DATA " ) ,
( " ELEC_ANGLE_R " , " MOTORS_DATA " ) ,
( " MOTOR_ERR_L " , " MOTORS_DATA " ) ,
( " MOTOR_ERR_R " , " MOTORS_DATA " ) ,
( " IGNITION " , " VAR_VALUES " ) ,
( " ENABLE_MOTORS " , " VAR_VALUES " ) ,
( " MCU_TEMP " , " BODY_DATA " ) ,
( " BATT_VOLTAGE " , " BODY_DATA " ) ,
]
checks = [
( " MOTORS_DATA " , 100 ) ,
( " VAR_VALUES " , 10 ) ,
( " BODY_DATA " , 1 ) ,
]
return CANParser ( DBC [ CP . carFingerprint ] [ " pt " ] , signals , checks , 0 )