cars: introduce "platformconfig" to be a configuration for all relevant car information (#31542)

* this is decent

* make sure the docs don't change for now

* hackery

* these can live here
old-commit-hash: 1ee8c9aa33
pull/32199/head
Justin Newberry 1 year ago committed by GitHub
parent b4479b4155
commit 351b1e1f5f
  1. 39
      selfdrive/car/__init__.py
  2. 24
      selfdrive/car/body/values.py

@ -1,11 +1,14 @@
# functions common among cars # functions common among cars
from collections import namedtuple from collections import namedtuple
from typing import Dict, List, Optional from dataclasses import dataclass
from enum import ReprEnum
from typing import Dict, List, Optional, Union
import capnp import capnp
from cereal import car from cereal import car
from openpilot.common.numpy_fast import clip, interp from openpilot.common.numpy_fast import clip, interp
from openpilot.selfdrive.car.docs_definitions import CarInfo
# kg of standard extra cargo to count for drive, gas, etc... # kg of standard extra cargo to count for drive, gas, etc...
@ -73,7 +76,9 @@ def scale_tire_stiffness(mass, wheelbase, center_to_front, tire_stiffness_factor
return tire_stiffness_front, tire_stiffness_rear return tire_stiffness_front, tire_stiffness_rear
def dbc_dict(pt_dbc, radar_dbc, chassis_dbc=None, body_dbc=None) -> Dict[str, str]: DbcDict = Dict[str, str]
def dbc_dict(pt_dbc, radar_dbc, chassis_dbc=None, body_dbc=None) -> DbcDict:
return {'pt': pt_dbc, 'radar': radar_dbc, 'chassis': chassis_dbc, 'body': body_dbc} return {'pt': pt_dbc, 'radar': radar_dbc, 'chassis': chassis_dbc, 'body': body_dbc}
@ -236,3 +241,33 @@ class CanSignalRateCalculator:
self.previous_value = current_value self.previous_value = current_value
return self.rate return self.rate
CarInfos = Union[CarInfo, List[CarInfo]]
@dataclass(order=True)
class PlatformConfig:
platform_str: str
car_info: CarInfos
dbc_dict: DbcDict
def __hash__(self) -> int:
return hash(self.platform_str)
class Platforms(str, ReprEnum):
config: PlatformConfig
def __new__(cls, platform_config: PlatformConfig):
member = str.__new__(cls, platform_config.platform_str)
member.config = platform_config
member._value_ = platform_config.platform_str
return member
@classmethod
def create_dbc_map(cls) -> Dict[str, DbcDict]:
return {p.config.platform_str: p.config.dbc_dict for p in cls}
@classmethod
def create_carinfo_map(cls) -> Dict[str, CarInfos]:
return {p.config.platform_str: p.config.car_info for p in cls}

@ -1,8 +1,5 @@
from enum import StrEnum
from typing import Dict
from cereal import car from cereal import car
from openpilot.selfdrive.car import dbc_dict from openpilot.selfdrive.car import PlatformConfig, Platforms, dbc_dict
from openpilot.selfdrive.car.docs_definitions import CarInfo from openpilot.selfdrive.car.docs_definitions import CarInfo
from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries
@ -22,13 +19,12 @@ class CarControllerParams:
pass pass
class CAR(StrEnum): class CAR(Platforms):
BODY = "COMMA BODY" BODY = PlatformConfig(
"COMMA BODY",
CarInfo("comma body", package="All"),
CAR_INFO: Dict[str, CarInfo] = { dbc_dict('comma_body', None),
CAR.BODY: CarInfo("comma body", package="All"), )
}
FW_QUERY_CONFIG = FwQueryConfig( FW_QUERY_CONFIG = FwQueryConfig(
@ -41,7 +37,5 @@ FW_QUERY_CONFIG = FwQueryConfig(
], ],
) )
CAR_INFO = CAR.create_carinfo_map()
DBC = { DBC = CAR.create_dbc_map()
CAR.BODY: dbc_dict('comma_body', None),
}

Loading…
Cancel
Save