diff --git a/.github/workflows/selfdrive_tests.yaml b/.github/workflows/selfdrive_tests.yaml index 67cbc5f097..a91e9862ac 100644 --- a/.github/workflows/selfdrive_tests.yaml +++ b/.github/workflows/selfdrive_tests.yaml @@ -315,7 +315,7 @@ jobs: run: | ${{ env.RUN }} "source selfdrive/test/setup_xvfb.sh && \ source selfdrive/test/setup_vsound.sh && \ - CI=1 pytest tools/sim/tests/test_metadrive_bridge.py" + CI=1 pytest -s tools/sim/tests/test_metadrive_bridge.py" create_ui_report: # This job name needs to be the same as UI_JOB_NAME in ui_preview.yaml diff --git a/opendbc_repo b/opendbc_repo index 4bfb262fd5..130bf3183f 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit 4bfb262fd52bc6946de1c8280efc424910bd9d60 +Subproject commit 130bf3183f4ab871ee8dd56b122cfbb038542606 diff --git a/panda b/panda index 3ff97305c5..978ee19005 160000 --- a/panda +++ b/panda @@ -1 +1 @@ -Subproject commit 3ff97305c565d5e43931052b9ec4747b2f617401 +Subproject commit 978ee190051806f8e5b7b8fede6b6be4e4db4aae diff --git a/selfdrive/car/card.py b/selfdrive/car/card.py index b8735359e1..f00cbe55e1 100755 --- a/selfdrive/car/card.py +++ b/selfdrive/car/card.py @@ -7,8 +7,6 @@ import cereal.messaging as messaging from cereal import car, log -from panda import ALTERNATIVE_EXPERIENCE - from openpilot.common.params import Params from openpilot.common.realtime import config_realtime_process, Priority, Ratekeeper from openpilot.common.swaglog import cloudlog, ForwardingHandler @@ -19,6 +17,7 @@ from opendbc.car.carlog import carlog from opendbc.car.fw_versions import ObdCallback from opendbc.car.car_helpers import get_car, get_radar_interface from opendbc.car.interfaces import CarInterfaceBase, RadarInterfaceBase +from opendbc.safety import ALTERNATIVE_EXPERIENCE from openpilot.selfdrive.pandad import can_capnp_to_list, can_list_to_can_capnp from openpilot.selfdrive.car.cruise import VCruiseHelper from openpilot.selfdrive.car.car_specific import MockCarState diff --git a/selfdrive/debug/clear_dtc.py b/selfdrive/debug/clear_dtc.py index 2c7f525d80..3578930388 100755 --- a/selfdrive/debug/clear_dtc.py +++ b/selfdrive/debug/clear_dtc.py @@ -4,6 +4,7 @@ import argparse from subprocess import check_output, CalledProcessError from opendbc.car.carlog import carlog from opendbc.car.uds import UdsClient, MessageTimeoutError, SESSION_TYPE, DTC_GROUP_TYPE +from opendbc.safety import Safety from panda import Panda parser = argparse.ArgumentParser(description="clear DTC status") @@ -24,7 +25,7 @@ except CalledProcessError as e: raise e panda = Panda() -panda.set_safety_mode(Panda.SAFETY_ELM327) +panda.set_safety_mode(Safety.SAFETY_ELM327) uds_client = UdsClient(panda, args.addr, bus=args.bus) print("extended diagnostic session ...") try: diff --git a/selfdrive/debug/hyundai_enable_radar_points.py b/selfdrive/debug/hyundai_enable_radar_points.py index 27e6c68c0e..8612018b08 100755 --- a/selfdrive/debug/hyundai_enable_radar_points.py +++ b/selfdrive/debug/hyundai_enable_radar_points.py @@ -18,6 +18,7 @@ from subprocess import check_output, CalledProcessError from opendbc.car.carlog import carlog from opendbc.car.uds import UdsClient, SESSION_TYPE, DATA_IDENTIFIER_TYPE +from opendbc.safety import Safety from panda.python import Panda class ConfigValues(NamedTuple): @@ -96,7 +97,7 @@ if __name__ == "__main__": sys.exit(0) panda = Panda() - panda.set_safety_mode(Panda.SAFETY_ELM327) + panda.set_safety_mode(Safety.SAFETY_ELM327) uds_client = UdsClient(panda, 0x7D0, bus=args.bus) print("\n[START DIAGNOSTIC SESSION]") diff --git a/selfdrive/debug/read_dtc_status.py b/selfdrive/debug/read_dtc_status.py index 4ae471aefa..56f32abf46 100755 --- a/selfdrive/debug/read_dtc_status.py +++ b/selfdrive/debug/read_dtc_status.py @@ -4,6 +4,7 @@ import argparse from subprocess import check_output, CalledProcessError from opendbc.car.carlog import carlog from opendbc.car.uds import UdsClient, SESSION_TYPE, DTC_REPORT_TYPE, DTC_STATUS_MASK_TYPE, get_dtc_num_as_str, get_dtc_status_names +from opendbc.safety import Safety from panda import Panda parser = argparse.ArgumentParser(description="read DTC status") @@ -24,7 +25,7 @@ except CalledProcessError as e: raise e panda = Panda() -panda.set_safety_mode(Panda.SAFETY_ELM327) +panda.set_safety_mode(Safety.SAFETY_ELM327) uds_client = UdsClient(panda, args.addr, bus=args.bus) print("extended diagnostic session ...") uds_client.diagnostic_session_control(SESSION_TYPE.EXTENDED_DIAGNOSTIC) diff --git a/selfdrive/debug/vw_mqb_config.py b/selfdrive/debug/vw_mqb_config.py index 69d2951941..bc92d3a4c4 100755 --- a/selfdrive/debug/vw_mqb_config.py +++ b/selfdrive/debug/vw_mqb_config.py @@ -6,6 +6,7 @@ from enum import IntEnum from opendbc.car.carlog import carlog from opendbc.car.uds import UdsClient, MessageTimeoutError, NegativeResponseError, SESSION_TYPE,\ DATA_IDENTIFIER_TYPE, ACCESS_TYPE +from opendbc.safety import Safety from panda import Panda from datetime import date @@ -38,7 +39,7 @@ if __name__ == "__main__": carlog.setLevel('DEBUG') panda = Panda() - panda.set_safety_mode(Panda.SAFETY_ELM327) + panda.set_safety_mode(Safety.SAFETY_ELM327) bus = 1 if panda.has_obd() else 0 uds_client = UdsClient(panda, MQB_EPS_CAN_ADDR, MQB_EPS_CAN_ADDR + RX_OFFSET, bus, timeout=0.2) diff --git a/selfdrive/selfdrived/selfdrived.py b/selfdrive/selfdrived/selfdrived.py index cf189df57b..9d30090b8b 100755 --- a/selfdrive/selfdrived/selfdrived.py +++ b/selfdrive/selfdrived/selfdrived.py @@ -7,7 +7,7 @@ import cereal.messaging as messaging from cereal import car, log from msgq.visionipc import VisionIpcClient, VisionStreamType -from panda import ALTERNATIVE_EXPERIENCE +from opendbc.safety import ALTERNATIVE_EXPERIENCE from openpilot.common.params import Params diff --git a/selfdrive/test/process_replay/migration.py b/selfdrive/test/process_replay/migration.py index 14934f8521..fbe891abea 100644 --- a/selfdrive/test/process_replay/migration.py +++ b/selfdrive/test/process_replay/migration.py @@ -6,15 +6,15 @@ import traceback from cereal import messaging, car, log from opendbc.car.fingerprints import MIGRATION -from opendbc.car.toyota.values import EPS_SCALE -from opendbc.car.ford.values import CAR as FORD, FordFlags +from opendbc.car.toyota.values import EPS_SCALE, ToyotaSafetyFlags +from opendbc.car.ford.values import CAR as FORD, FordFlags, FordSafetyFlags +from opendbc.car.hyundai.values import HyundaiSafetyFlags from openpilot.selfdrive.modeld.constants import ModelConstants from openpilot.selfdrive.modeld.fill_model_msg import fill_xyz_poly, fill_lane_line_meta from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_encode_index from openpilot.selfdrive.controls.lib.longitudinal_planner import get_accel_from_plan from openpilot.system.manager.process_config import managed_processes from openpilot.tools.lib.logreader import LogIterable -from panda import Panda MessageWithIndex = tuple[int, capnp.lib.capnp._DynamicStructReader] MigrationOps = tuple[list[tuple[int, capnp.lib.capnp._DynamicStructReader]], list[capnp.lib.capnp._DynamicStructReader], list[int]] @@ -269,19 +269,19 @@ def migrate_carOutput(msgs): def migrate_pandaStates(msgs): # TODO: safety param migration should be handled automatically safety_param_migration = { - "TOYOTA_PRIUS": EPS_SCALE["TOYOTA_PRIUS"] | Panda.FLAG_TOYOTA_STOCK_LONGITUDINAL, - "TOYOTA_RAV4": EPS_SCALE["TOYOTA_RAV4"] | Panda.FLAG_TOYOTA_ALT_BRAKE, - "KIA_EV6": Panda.FLAG_HYUNDAI_EV_GAS | Panda.FLAG_HYUNDAI_CANFD_HDA2, + "TOYOTA_PRIUS": EPS_SCALE["TOYOTA_PRIUS"] | ToyotaSafetyFlags.FLAG_TOYOTA_STOCK_LONGITUDINAL, + "TOYOTA_RAV4": EPS_SCALE["TOYOTA_RAV4"] | ToyotaSafetyFlags.FLAG_TOYOTA_ALT_BRAKE, + "KIA_EV6": HyundaiSafetyFlags.FLAG_HYUNDAI_EV_GAS | HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_HDA2, } # TODO: get new Ford route - safety_param_migration |= {car: Panda.FLAG_FORD_LONG_CONTROL for car in (set(FORD) - FORD.with_flags(FordFlags.CANFD))} + safety_param_migration |= {car: FordSafetyFlags.FLAG_FORD_LONG_CONTROL for car in (set(FORD) - FORD.with_flags(FordFlags.CANFD))} # Migrate safety param base on carParams CP = next((m.carParams for _, m in msgs if m.which() == 'carParams'), None) assert CP is not None, "carParams message not found" fingerprint = MIGRATION.get(CP.carFingerprint, CP.carFingerprint) if fingerprint in safety_param_migration: - safety_param = safety_param_migration[fingerprint] + safety_param = safety_param_migration[fingerprint].value elif len(CP.safetyConfigs): safety_param = CP.safetyConfigs[0].safetyParam if CP.safetyConfigs[0].safetyParamDEPRECATED != 0: diff --git a/selfdrive/test/process_replay/process_replay.py b/selfdrive/test/process_replay/process_replay.py index 45210f1648..1135aeb874 100755 --- a/selfdrive/test/process_replay/process_replay.py +++ b/selfdrive/test/process_replay/process_replay.py @@ -18,11 +18,11 @@ from cereal import car from cereal.services import SERVICE_LIST from msgq.visionipc import VisionIpcServer, get_endpoint_name as vipc_get_endpoint_name from opendbc.car.car_helpers import get_car, interfaces +from opendbc.safety import ALTERNATIVE_EXPERIENCE from openpilot.common.params import Params from openpilot.common.prefix import OpenpilotPrefix from openpilot.common.timeout import Timeout from openpilot.common.realtime import DT_CTRL -from panda.python import ALTERNATIVE_EXPERIENCE from openpilot.selfdrive.car.card import can_comm_callbacks from openpilot.system.manager.process_config import managed_processes from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_camera_state, available_streams diff --git a/tools/sim/lib/simulated_car.py b/tools/sim/lib/simulated_car.py index 253623ded7..402ac1a21e 100644 --- a/tools/sim/lib/simulated_car.py +++ b/tools/sim/lib/simulated_car.py @@ -1,11 +1,12 @@ +import traceback import cereal.messaging as messaging from opendbc.can.packer import CANPacker from opendbc.can.parser import CANParser +from opendbc.car.honda.values import HondaSafetyFlags from openpilot.common.params import Params from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp from openpilot.tools.sim.lib.common import SimulatorState -from panda.python import Panda class SimulatedCar: @@ -94,14 +95,18 @@ class SimulatedCar: 'controlsAllowed': True, 'safetyModel': 'hondaBosch', 'alternativeExperience': self.sm["carParams"].alternativeExperience, - 'safetyParam': Panda.FLAG_HONDA_RADARLESS | Panda.FLAG_HONDA_BOSCH_LONG, + 'safetyParam': HondaSafetyFlags.FLAG_HONDA_RADARLESS.value | HondaSafetyFlags.FLAG_HONDA_BOSCH_LONG.value, } self.pm.send('pandaStates', dat) def update(self, simulator_state: SimulatorState): - self.send_can_messages(simulator_state) + try: + self.send_can_messages(simulator_state) - if self.idx % 50 == 0: # only send panda states at 2hz - self.send_panda_state(simulator_state) + if self.idx % 50 == 0: # only send panda states at 2hz + self.send_panda_state(simulator_state) - self.idx += 1 + self.idx += 1 + except Exception: + traceback.print_exc() + raise