remove some more cereal from toyota + convert CarState to capnp

pull/33208/head
Shane Smiskol 9 months ago
parent e5efda90df
commit 07bc45c81c
  1. 28
      selfdrive/car/card.py
  2. 8
      selfdrive/car/interfaces.py
  3. 3
      selfdrive/car/toyota/carstate.py
  4. 2
      selfdrive/car/toyota/interface.py

@ -1,4 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import capnp
import dataclasses import dataclasses
import os import os
import time import time
@ -15,7 +16,7 @@ from openpilot.common.swaglog import cloudlog, ForwardingHandler
from openpilot.selfdrive.pandad import can_capnp_to_list, can_list_to_can_capnp from openpilot.selfdrive.pandad import can_capnp_to_list, can_list_to_can_capnp
from openpilot.selfdrive.car import DT_CTRL, carlog from openpilot.selfdrive.car import DT_CTRL, carlog
from openpilot.selfdrive.car.structs import CarParams from openpilot.selfdrive.car.structs import CarParams, CarState
from openpilot.selfdrive.car.can_definitions import CanData, CanRecvCallable, CanSendCallable from openpilot.selfdrive.car.can_definitions import CanData, CanRecvCallable, CanSendCallable
from openpilot.selfdrive.car.fw_versions import ObdCallback from openpilot.selfdrive.car.fw_versions import ObdCallback
from openpilot.selfdrive.car.car_helpers import get_car from openpilot.selfdrive.car.car_helpers import get_car
@ -59,19 +60,22 @@ def can_comm_callbacks(logcan: messaging.SubSocket, sendcan: messaging.PubSocket
return can_recv, can_send return can_recv, can_send
def convert_to_capnp(CP: CarParams) -> car.CarParams: def convert_to_capnp(struct: CarParams | CarState) -> capnp.lib.capnp._DynamicStructBuilder:
# TODO: better name or support CarState, CarControl, etc. struct_dict = dataclasses.asdict(struct)
CP_dict = dataclasses.asdict(CP)
del CP_dict['lateralTuning'] if isinstance(struct, CarParams):
CP_capnp = car.CarParams.new_message(**CP_dict) del struct_dict['lateralTuning']
struct_capnp = car.CarParams.new_message(**struct_dict)
# this is the only union, special handling # this is the only union, special handling
which = CP.lateralTuning.which() which = struct.lateralTuning.which()
CP_capnp.lateralTuning.init(which) struct_capnp.lateralTuning.init(which)
lateralTuning_dict = dataclasses.asdict(getattr(CP.lateralTuning, which)) lateralTuning_dict = dataclasses.asdict(getattr(struct.lateralTuning, which))
setattr(CP_capnp.lateralTuning, which, lateralTuning_dict) setattr(struct_capnp.lateralTuning, which, lateralTuning_dict)
else:
struct_capnp = car.CarState.new_message(**struct_dict)
return CP_capnp return struct_capnp
class Car: class Car:
@ -161,7 +165,7 @@ class Car:
# Update carState from CAN # Update carState from CAN
can_strs = messaging.drain_sock_raw(self.can_sock, wait_for_one=True) can_strs = messaging.drain_sock_raw(self.can_sock, wait_for_one=True)
CS = self.CI.update(self.CC_prev, can_capnp_to_list(can_strs)) CS = convert_to_capnp(self.CI.update(self.CC_prev, can_capnp_to_list(can_strs)))
self.sm.update(0) self.sm.update(0)

@ -1,3 +1,4 @@
import copy
import json import json
import os import os
import numpy as np import numpy as np
@ -124,7 +125,8 @@ class CarInterfaceBase(ABC):
return cls.get_params(candidate, gen_empty_fingerprint(), list(), False, False) return cls.get_params(candidate, gen_empty_fingerprint(), list(), False, False)
@classmethod @classmethod
def get_params(cls, candidate: str, fingerprint: dict[int, dict[int, int]], car_fw: list[structs.CarParams.CarFw], experimental_long: bool, docs: bool) -> structs.CarParams: def get_params(cls, candidate: str, fingerprint: dict[int, dict[int, int]], car_fw: list[structs.CarParams.CarFw],
experimental_long: bool, docs: bool) -> structs.CarParams:
ret = CarInterfaceBase.get_std_params(candidate) ret = CarInterfaceBase.get_std_params(candidate)
platform = PLATFORMS[candidate] platform = PLATFORMS[candidate]
@ -257,7 +259,7 @@ class CarInterfaceBase(ABC):
# copy back for next iteration # copy back for next iteration
if self.CS is not None: if self.CS is not None:
self.CS.out = ret.as_reader() self.CS.out = copy.deepcopy(ret)
return ret return ret
@ -362,7 +364,7 @@ class CarStateBase(ABC):
def __init__(self, CP: structs.CarParams): def __init__(self, CP: structs.CarParams):
self.CP = CP self.CP = CP
self.car_fingerprint = CP.carFingerprint self.car_fingerprint = CP.carFingerprint
self.out = car.CarState.new_message() self.out = structs.CarState()
self.cruise_buttons = 0 self.cruise_buttons = 0
self.left_blinker_cnt = 0 self.left_blinker_cnt = 0

@ -1,6 +1,5 @@
import copy import copy
from cereal import car
from opendbc.can.can_define import CANDefine from opendbc.can.can_define import CANDefine
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car import DT_CTRL from openpilot.selfdrive.car import DT_CTRL
@ -51,7 +50,7 @@ class CarState(CarStateBase):
self.lkas_hud = {} self.lkas_hud = {}
def update(self, cp, cp_cam) -> structs.CarState: def update(self, cp, cp_cam) -> structs.CarState:
ret = car.CarState.new_message() ret = structs.CarState()
ret.doorOpen = any([cp.vl["BODY_CONTROL_STATE"]["DOOR_OPEN_FL"], cp.vl["BODY_CONTROL_STATE"]["DOOR_OPEN_FR"], ret.doorOpen = any([cp.vl["BODY_CONTROL_STATE"]["DOOR_OPEN_FL"], cp.vl["BODY_CONTROL_STATE"]["DOOR_OPEN_FR"],
cp.vl["BODY_CONTROL_STATE"]["DOOR_OPEN_RL"], cp.vl["BODY_CONTROL_STATE"]["DOOR_OPEN_RR"]]) cp.vl["BODY_CONTROL_STATE"]["DOOR_OPEN_RL"], cp.vl["BODY_CONTROL_STATE"]["DOOR_OPEN_RR"]])

@ -8,7 +8,7 @@ from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.disable_ecu import disable_ecu from openpilot.selfdrive.car.disable_ecu import disable_ecu
from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.interfaces import CarInterfaceBase
ButtonType = car.CarState.ButtonEvent.Type ButtonType = structs.CarState.ButtonEvent.Type
EventName = car.CarEvent.EventName EventName = car.CarEvent.EventName
SteerControlType = structs.CarParams.SteerControlType SteerControlType = structs.CarParams.SteerControlType

Loading…
Cancel
Save