import copy
from cereal import car
VisualAlert = car . CarControl . HUDControl . VisualAlert
def create_steering_control ( packer , apply_steer , frame , steer_step ) :
idx = ( frame / steer_step ) % 16
values = {
" Counter " : idx ,
" LKAS_Output " : apply_steer ,
" LKAS_Request " : 1 if apply_steer != 0 else 0 ,
" SET_1 " : 1
}
return packer . make_can_msg ( " ES_LKAS " , 0 , values )
def create_steering_status ( packer , apply_steer , frame , steer_step ) :
return packer . make_can_msg ( " ES_LKAS_State " , 0 , { } )
def create_es_distance ( packer , es_distance_msg , pcm_cancel_cmd ) :
values = copy . copy ( es_distance_msg )
if pcm_cancel_cmd :
values [ " Cruise_Cancel " ] = 1
return packer . make_can_msg ( " ES_Distance " , 0 , values )
def create_es_lkas ( packer , es_lkas_msg , visual_alert , left_line , right_line ) :
values = copy . copy ( es_lkas_msg )
if visual_alert == VisualAlert . steerRequired :
values [ " Keep_Hands_On_Wheel " ] = 1
values [ " LKAS_Left_Line_Visible " ] = int ( left_line )
values [ " LKAS_Right_Line_Visible " ] = int ( right_line )
return packer . make_can_msg ( " ES_LKAS_State " , 0 , values )
# *** Subaru Pre-global ***
def subaru_preglobal_checksum ( packer , values , addr ) :
dat = packer . make_can_msg ( addr , 0 , values ) [ 2 ]
return ( sum ( dat [ : 7 ] ) ) % 256
def create_preglobal_steering_control ( packer , apply_steer , frame , steer_step ) :
idx = ( frame / steer_step ) % 8
values = {
" Counter " : idx ,
" LKAS_Command " : apply_steer ,
" LKAS_Active " : 1 if apply_steer != 0 else 0
}
values [ " Checksum " ] = subaru_preglobal_checksum ( packer , values , " ES_LKAS " )
return packer . make_can_msg ( " ES_LKAS " , 0 , values )
def create_es_throttle_control ( packer , cruise_button , es_accel_msg ) :
values = copy . copy ( es_accel_msg )
values [ " Cruise_Button " ] = cruise_button
values [ " Checksum " ] = subaru_preglobal_checksum ( packer , values , " ES_CruiseThrottle " )
return packer . make_can_msg ( " ES_CruiseThrottle " , 0 , values )