@ -4,8 +4,7 @@ from opendbc.can.can_define import CANDefine
from selfdrive . car . interfaces import CarStateBase
from selfdrive . car . interfaces import CarStateBase
from opendbc . can . parser import CANParser
from opendbc . can . parser import CANParser
from selfdrive . config import Conversions as CV
from selfdrive . config import Conversions as CV
from selfdrive . car . toyota . values import CAR , DBC , STEER_THRESHOLD , NO_STOP_TIMER_CAR
from selfdrive . car . toyota . values import CAR , DBC , STEER_THRESHOLD , NO_STOP_TIMER_CAR , TSS2_CAR
from selfdrive . swaglog import cloudlog
class CarState ( CarStateBase ) :
class CarState ( CarStateBase ) :
@ -20,7 +19,9 @@ class CarState(CarStateBase):
self . needs_angle_offset = True
self . needs_angle_offset = True
self . accurate_steer_angle_seen = False
self . accurate_steer_angle_seen = False
self . angle_offset = 0.
self . angle_offset = 0.
self . logged_setme_vals = set ( )
self . low_speed_lockout = False
self . acc_type = 1
def update ( self , cp , cp_cam ) :
def update ( self , cp , cp_cam ) :
ret = car . CarState . new_message ( )
ret = car . CarState . new_message ( )
@ -76,16 +77,20 @@ class CarState(CarStateBase):
if self . CP . carFingerprint == CAR . LEXUS_IS :
if self . CP . carFingerprint == CAR . LEXUS_IS :
ret . cruiseState . available = cp . vl [ " DSU_CRUISE " ] [ " MAIN_ON " ] != 0
ret . cruiseState . available = cp . vl [ " DSU_CRUISE " ] [ " MAIN_ON " ] != 0
ret . cruiseState . speed = cp . vl [ " DSU_CRUISE " ] [ " SET_SPEED " ] * CV . KPH_TO_MS
ret . cruiseState . speed = cp . vl [ " DSU_CRUISE " ] [ " SET_SPEED " ] * CV . KPH_TO_MS
self . low_speed_lockout = False
else :
else :
ret . cruiseState . available = cp . vl [ " PCM_CRUISE_2 " ] [ " MAIN_ON " ] != 0
ret . cruiseState . available = cp . vl [ " PCM_CRUISE_2 " ] [ " MAIN_ON " ] != 0
ret . cruiseState . speed = cp . vl [ " PCM_CRUISE_2 " ] [ " SET_SPEED " ] * CV . KPH_TO_MS
ret . cruiseState . speed = cp . vl [ " PCM_CRUISE_2 " ] [ " SET_SPEED " ] * CV . KPH_TO_MS
self . low_speed_lockout = cp . vl [ " PCM_CRUISE_2 " ] [ " LOW_SPEED_LOCKOUT " ] == 2
val = cp_cam . vl [ " ACC_CONTROL " ] [ " SET_ME_X01 " ]
if self . CP . carFingerprint in TSS2_CAR :
if val not in self . logged_setme_vals and val != 1 :
self . acc_type = cp_cam . vl [ " ACC_CONTROL " ] [ " ACC_TYPE " ]
self . logged_setme_vals . add ( val )
cloudlog . event ( " setme_vals " , vals = self . logged_setme_vals , car = self . CP . carFingerprint )
# some TSS2 cars have low speed lockout permanently set, so ignore on those cars
# these cars are identified by an ACC_TYPE value of 2.
# TODO: it may be possible to avoid the lockout and gain stop and go if you
# send your own ACC_CONTROL msg on startup with ACC_TYPE set to 1
if ( self . CP . carFingerprint not in TSS2_CAR and self . CP . carFingerprint != CAR . LEXUS_IS ) or \
( self . CP . carFingerprint in TSS2_CAR and self . acc_type == 1 ) :
self . low_speed_lockout = cp . vl [ " PCM_CRUISE_2 " ] [ " LOW_SPEED_LOCKOUT " ] == 2
self . pcm_acc_status = cp . vl [ " PCM_CRUISE " ] [ " CRUISE_STATE " ]
self . pcm_acc_status = cp . vl [ " PCM_CRUISE " ] [ " CRUISE_STATE " ]
if self . CP . carFingerprint in NO_STOP_TIMER_CAR or self . CP . enableGasInterceptor :
if self . CP . carFingerprint in NO_STOP_TIMER_CAR or self . CP . enableGasInterceptor :
@ -192,14 +197,16 @@ class CarState(CarStateBase):
signals = [
signals = [
( " FORCE " , " PRE_COLLISION " , 0 ) ,
( " FORCE " , " PRE_COLLISION " , 0 ) ,
( " PRECOLLISION_ACTIVE " , " PRE_COLLISION " , 0 ) ,
( " PRECOLLISION_ACTIVE " , " PRE_COLLISION " , 0 ) ,
( " SET_ME_X01 " , " ACC_CONTROL " , 1 )
]
]
# use steering message to check if panda is connected to frc
# use steering message to check if panda is connected to frc
checks = [
checks = [
( " STEERING_LKA " , 42 ) ,
( " STEERING_LKA " , 42 ) ,
( " PRE_COLLISION " , 0 ) , # TODO: figure out why freq is inconsistent
( " PRE_COLLISION " , 0 ) , # TODO: figure out why freq is inconsistent
( " ACC_CONTROL " , 0 ) ,
]
]
if CP . carFingerprint in TSS2_CAR :
signals . append ( ( " ACC_TYPE " , " ACC_CONTROL " , 0 ) )
checks . append ( ( " ACC_CONTROL " , 33 ) )
return CANParser ( DBC [ CP . carFingerprint ] [ " pt " ] , signals , checks , 2 )
return CANParser ( DBC [ CP . carFingerprint ] [ " pt " ] , signals , checks , 2 )