@ -2,7 +2,7 @@ import copy
from collections import deque
from cereal import car
from openpilot . common . conversions import Conversions as CV
from openpilot . selfdrive . car . tesla . values import DBC , CANBUS , GEAR_MAP , DOORS , BUTTONS
from openpilot . selfdrive . car . tesla . values import CAR , DBC , CANBUS , GEAR_MAP , DOORS , BUTTONS
from openpilot . selfdrive . car . interfaces import CarStateBase
from opendbc . can . parser import CANParser
from opendbc . can . can_define import CANDefine
@ -37,13 +37,15 @@ class CarState(CarStateBase):
ret . brakePressed = bool ( cp . vl [ " BrakeMessage " ] [ " driverBrakeStatus " ] != 1 )
# Steering wheel
self . hands_on_level = cp . vl [ " EPAS_sysStatus " ] [ " EPAS_handsOnLevel " ]
self . steer_warning = self . can_define . dv [ " EPAS_sysStatus " ] [ " EPAS_eacErrorCode " ] . get ( int ( cp . vl [ " EPAS_sysStatus " ] [ " EPAS_eacErrorCode " ] ) , None )
steer_status = self . can_define . dv [ " EPAS_sysStatus " ] [ " EPAS_eacStatus " ] . get ( int ( cp . vl [ " EPAS_sysStatus " ] [ " EPAS_eacStatus " ] ) , None )
epas_status = cp_cam . vl [ " EPAS3P_sysStatus " ] if self . CP . carFingerprint == CAR . MODELS_RAVEN else cp . vl [ " EPAS_sysStatus " ]
ret . steeringAngleDeg = - cp . vl [ " EPAS_sysStatus " ] [ " EPAS_internalSAS " ]
self . hands_on_level = epas_status [ " EPAS_handsOnLevel " ]
self . steer_warning = self . can_define . dv [ " EPAS_sysStatus " ] [ " EPAS_eacErrorCode " ] . get ( int ( epas_status [ " EPAS_eacErrorCode " ] ) , None )
steer_status = self . can_define . dv [ " EPAS_sysStatus " ] [ " EPAS_eacStatus " ] . get ( int ( epas_status [ " EPAS_eacStatus " ] ) , None )
ret . steeringAngleDeg = - epas_status [ " EPAS_internalSAS " ]
ret . steeringRateDeg = - cp . vl [ " STW_ANGLHP_STAT " ] [ " StW_AnglHP_Spd " ] # This is from a different angle sensor, and at different rate
ret . steeringTorque = - cp . vl [ " EPAS_sysStatus " ] [ " EPAS_torsionBarTorque " ]
ret . steeringTorque = - epas_status [ " EPAS_torsionBarTorque " ]
ret . steeringPressed = ( self . hands_on_level > 0 )
ret . steerFaultPermanent = steer_status == " EAC_FAULT "
ret . steerFaultTemporary = ( self . steer_warning not in ( " EAC_ERROR_IDLE " , " EAC_ERROR_HANDS_ON " ) )
@ -85,6 +87,9 @@ class CarState(CarStateBase):
ret . rightBlinker = ( cp . vl [ " GTW_carState " ] [ " BC_indicatorRStatus " ] == 1 )
# Seatbelt
if self . CP . carFingerprint == CAR . MODELS_RAVEN :
ret . seatbeltUnlatched = ( cp . vl [ " DriverSeat " ] [ " buckleStatus " ] != 1 )
else :
ret . seatbeltUnlatched = ( cp . vl [ " SDM1 " ] [ " SDM_bcklDrivStatus " ] != 1 )
# TODO: blindspot
@ -111,9 +116,14 @@ class CarState(CarStateBase):
( " DI_state " , 10 ) ,
( " STW_ACTN_RQ " , 10 ) ,
( " GTW_carState " , 10 ) ,
( " SDM1 " , 10 ) ,
( " BrakeMessage " , 50 ) ,
]
if CP . carFingerprint == CAR . MODELS_RAVEN :
messages . append ( ( " DriverSeat " , 20 ) )
else :
messages . append ( ( " SDM1 " , 10 ) )
return CANParser ( DBC [ CP . carFingerprint ] [ ' chassis ' ] , messages , CANBUS . chassis )
@staticmethod
@ -122,4 +132,8 @@ class CarState(CarStateBase):
# sig_address, frequency
( " DAS_control " , 40 ) ,
]
if CP . carFingerprint == CAR . MODELS_RAVEN :
messages . append ( ( " EPAS3P_sysStatus " , 100 ) )
return CANParser ( DBC [ CP . carFingerprint ] [ ' chassis ' ] , messages , CANBUS . autopilot_chassis )