import copy
from cereal import car
from selfdrive . car . subaru . values import CAR
VisualAlert = car . CarControl . HUDControl . VisualAlert
def subaru_checksum ( packer , values , addr ) :
dat = packer . make_can_msg ( addr , 0 , values ) [ 2 ]
dat = [ ord ( i ) for i in dat ]
return ( sum ( dat [ 1 : ] ) + ( addr >> 8 ) + addr ) & 0xff
def create_steering_control ( packer , car_fingerprint , apply_steer , frame , steer_step ) :
if car_fingerprint == CAR . IMPREZA :
#counts from 0 to 15 then back to 0 + 16 for enable bit
getting ready for Python 3 (#619)
* tabs to spaces
python 2 to 3: https://portingguide.readthedocs.io/en/latest/syntax.html#tabs-and-spaces
* use the new except syntax
python 2 to 3: https://portingguide.readthedocs.io/en/latest/exceptions.html#the-new-except-syntax
* make relative imports absolute
python 2 to 3: https://portingguide.readthedocs.io/en/latest/imports.html#absolute-imports
* Queue renamed to queue in python 3
Use the six compatibility library to support both python 2 and 3: https://portingguide.readthedocs.io/en/latest/stdlib-reorg.html#renamed-modules
* replace dict.has_key() with in
python 2 to 3: https://portingguide.readthedocs.io/en/latest/dicts.html#removed-dict-has-key
* make dict views compatible with python 3
python 2 to 3: https://portingguide.readthedocs.io/en/latest/dicts.html#dict-views-and-iterators
Where needed, wrapping things that will be a view in python 3 with a list(). For example, if it's accessed with []
Python 3 has no iter*() methods, so just using the values() instead of itervalues() as long as it's not too performance intensive. Note that any minor performance hit of using a list instead of a view will go away when switching to python 3. If it is intensive, we could use the six version.
* Explicitly use truncating division
python 2 to 3: https://portingguide.readthedocs.io/en/latest/numbers.html#division
python 3 treats / as float division. When we want the result to be an integer, use //
* replace map() with list comprehension where a list result is needed.
In python 3, map() returns an iterator.
python 2 to 3: https://portingguide.readthedocs.io/en/latest/iterators.html#new-behavior-of-map-and-filter
* replace filter() with list comprehension
In python 3, filter() returns an interatoooooooooooor.
python 2 to 3: https://portingguide.readthedocs.io/en/latest/iterators.html#new-behavior-of-map-and-filter
* wrap zip() in list() where we need the result to be a list
python 2 to 3: https://portingguide.readthedocs.io/en/latest/iterators.html#new-behavior-of-zip
* clean out some lint
Removes these pylint warnings:
************* Module selfdrive.car.chrysler.chryslercan
W: 15, 0: Unnecessary semicolon (unnecessary-semicolon)
W: 16, 0: Unnecessary semicolon (unnecessary-semicolon)
W: 25, 0: Unnecessary semicolon (unnecessary-semicolon)
************* Module common.dbc
W:101, 0: Anomalous backslash in string: '\?'. String constant might be missing an r prefix. (anomalous-backslash-in-string)
************* Module selfdrive.car.gm.interface
R:102, 6: Redefinition of ret.minEnableSpeed type from float to int (redefined-variable-type)
R:103, 6: Redefinition of ret.mass type from int to float (redefined-variable-type)
************* Module selfdrive.updated
R: 20, 6: Redefinition of r type from int to str (redefined-variable-type)
7 years ago
idx = ( ( frame / / steer_step ) % 16 )
values = {
" Counter " : idx ,
" LKAS_Output " : apply_steer ,
" LKAS_Request " : 1 if apply_steer != 0 else 0 ,
" SET_1 " : 1
}
values [ " Checksum " ] = subaru_checksum ( packer , values , 0x122 )
return packer . make_can_msg ( " ES_LKAS " , 0 , values )
def create_steering_status ( packer , car_fingerprint , apply_steer , frame , steer_step ) :
if car_fingerprint == CAR . IMPREZA :
values = { }
values [ " Checksum " ] = subaru_checksum ( packer , { } , 0x322 )
return packer . make_can_msg ( " ES_LKAS_State " , 0 , values )
def create_es_distance ( packer , es_distance_msg , pcm_cancel_cmd ) :
values = copy . copy ( es_distance_msg )
if pcm_cancel_cmd :
values [ " Main " ] = 1
values [ " Checksum " ] = subaru_checksum ( packer , values , 545 )
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 )
values [ " Checksum " ] = subaru_checksum ( packer , values , 802 )
return packer . make_can_msg ( " ES_LKAS_State " , 0 , values )