Subaru: calculate checksum in can packer (#1356)

* subaru checksum moved to can packer

* unused
pull/1360/head
Adeeb 5 years ago committed by GitHub
parent df5b6a4023
commit 789764945c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      selfdrive/car/subaru/carcontroller.py
  2. 1
      selfdrive/car/subaru/carstate.py
  3. 38
      selfdrive/car/subaru/subarucan.py

@ -6,7 +6,7 @@ from opendbc.can.packer import CANPacker
class CarControllerParams():
def __init__(self, car_fingerprint):
def __init__(self):
self.STEER_MAX = 2047 # max_steer 4095
self.STEER_STEP = 2 # how often we update the steer cmd
self.STEER_DELTA_UP = 50 # torque increase per refresh, 0.8s to max
@ -27,7 +27,7 @@ class CarController():
# Setup detection helper. Routes commands to
# an appropriate CAN bus number.
self.params = CarControllerParams(CP.carFingerprint)
self.params = CarControllerParams()
self.packer = CANPacker(DBC[CP.carFingerprint]['pt'])
def update(self, enabled, CS, frame, actuators, pcm_cancel_cmd, visual_alert, left_line, right_line):
@ -56,7 +56,7 @@ class CarController():
if not lkas_enabled:
apply_steer = 0
can_sends.append(subarucan.create_steering_control(self.packer, CS.CP.carFingerprint, apply_steer, frame, P.STEER_STEP))
can_sends.append(subarucan.create_steering_control(self.packer, apply_steer, frame, P.STEER_STEP))
self.apply_steer_last = apply_steer

@ -111,7 +111,6 @@ class CarState(CarStateBase):
("Main", "ES_Distance", 0),
("Signal3", "ES_Distance", 0),
("Checksum", "ES_LKAS_State", 0),
("Counter", "ES_LKAS_State", 0),
("Keep_Hands_On_Wheel", "ES_LKAS_State", 0),
("Empty_Box", "ES_LKAS_State", 0),

@ -1,36 +1,24 @@
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]
return (sum(dat[1:]) + (addr >> 8) + addr) & 0xff
def create_steering_control(packer, apply_steer, frame, steer_step):
def create_steering_control(packer, car_fingerprint, apply_steer, frame, steer_step):
# counts from 0 to 15 then back to 0 + 16 for enable bit
idx = ((frame // steer_step) % 16)
if car_fingerprint == CAR.IMPREZA:
#counts from 0 to 15 then back to 0 + 16 for enable bit
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)
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, 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_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):
@ -38,8 +26,6 @@ def create_es_distance(packer, es_distance_msg, pcm_cancel_cmd):
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):
@ -51,6 +37,4 @@ def create_es_lkas(packer, es_lkas_msg, visual_alert, left_line, right_line):
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)

Loading…
Cancel
Save