Move safety constants to opendbc (#2145)

* move to opendbc

* all passing

* do the rest

* fix

* and another

* order

* and update ref to master
This commit is contained in:
Shane Smiskol
2025-02-11 22:14:44 -06:00
committed by GitHub
parent 72a99e9e9d
commit d3508ff042
48 changed files with 182 additions and 189 deletions

View File

@@ -37,7 +37,7 @@ RUN pip3 install --break-system-packages --no-cache-dir $PYTHONPATH/panda/[dev]
# TODO: this should be a "pip install" or not even in this repo at all
RUN git config --global --add safe.directory $PYTHONPATH/panda
ENV OPENDBC_REF="0eab9bf26e1b36678db4f198986091c82e538967"
ENV OPENDBC_REF="950e7b34efa64d2ad41df3300652661fbae06f57"
RUN cd /tmp/ && \
git clone --depth 1 https://github.com/commaai/opendbc opendbc_repo && \
cd opendbc_repo && git fetch origin $OPENDBC_REF && git checkout FETCH_HEAD && rm -rf .git/ && \

View File

@@ -5,7 +5,7 @@ from .python.canhandle import CanHandle # noqa: F401
from .python.utils import logger # noqa: F401
from .python import (Panda, PandaDFU, isotp, # noqa: F401
pack_can_buffer, unpack_can_buffer, calculate_checksum,
DLC_TO_LEN, LEN_TO_DLC, ALTERNATIVE_EXPERIENCE, CANPACKET_HEAD_SIZE)
DLC_TO_LEN, LEN_TO_DLC, CANPACKET_HEAD_SIZE)
# panda jungle

View File

@@ -5,6 +5,7 @@ import contextlib
import random
from termcolor import cprint
from opendbc.safety import Safety
from panda import Panda, PandaJungle
NUM_PANDAS_PER_TEST = 1
@@ -88,7 +89,7 @@ def can_loopback(sender):
def test_loopback():
# disable safety modes
for panda in pandas:
panda.set_safety_mode(Panda.SAFETY_ELM327 if FOR_RELEASE_BUILDS else Panda.SAFETY_ALLOUTPUT)
panda.set_safety_mode(Safety.SAFETY_ELM327 if FOR_RELEASE_BUILDS else Safety.SAFETY_ALLOUTPUT)
# perform loopback with jungle as a sender
can_loopback(jungle)
@@ -99,7 +100,7 @@ def test_loopback():
# enable safety modes
for panda in pandas:
panda.set_safety_mode(Panda.SAFETY_SILENT)
panda.set_safety_mode(Safety.SAFETY_SILENT)
#################################################################
############################# MAIN ##############################

View File

@@ -1,6 +1,7 @@
#!/usr/bin/env python3
import os
import random
from opendbc.safety import Safety
from panda import PandaJungle
def get_test_string():
@@ -9,7 +10,7 @@ def get_test_string():
if __name__ == "__main__":
p = PandaJungle()
p.set_safety_mode(PandaJungle.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
print("Spamming all buses...")
while True:

View File

@@ -1,10 +1,11 @@
#!/usr/bin/env python3
import argparse
from tqdm import tqdm
from panda import Panda
from opendbc.car.carlog import carlog
from opendbc.car.uds import UdsClient, MessageTimeoutError, NegativeResponseError, InvalidSubAddressError, \
SESSION_TYPE, DATA_IDENTIFIER_TYPE
from opendbc.safety import Safety
from panda import Panda
if __name__ == "__main__":
parser = argparse.ArgumentParser()
@@ -63,7 +64,7 @@ if __name__ == "__main__":
exit()
panda = Panda(serial=args.serial)
panda.set_safety_mode(Panda.SAFETY_ELM327, 1 if args.no_obd else 0)
panda.set_safety_mode(Safety.SAFETY_ELM327, 1 if args.no_obd else 0)
print("querying addresses ...")
with tqdm(addrs) as t:
for addr in t:

View File

@@ -1,6 +1,7 @@
#!/usr/bin/env python3
import time
import struct
from opendbc.safety import Safety
from panda import Panda
from hexdump import hexdump
from panda.python.isotp import isotp_send, isotp_recv
@@ -30,7 +31,7 @@ def get_supported_pids():
if __name__ == "__main__":
panda = Panda()
panda.set_safety_mode(Panda.SAFETY_ELM327)
panda.set_safety_mode(Safety.SAFETY_ELM327)
panda.can_clear(0)
# 09 02 = Get VIN

View File

@@ -1,6 +1,7 @@
#!/usr/bin/env python3
import binascii
from opendbc.safety import Safety
from panda import Panda
def tesla_tester():
@@ -13,7 +14,7 @@ def tesla_tester():
# Now set the panda from its default of SAFETY_SILENT (read only) to SAFETY_ALLOUTPUT
# Careful, as this will let us send any CAN messages we want (which could be very bad!)
print("Setting Panda to output mode...")
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
# BDY 0x248 is the MCU_commands message, which includes folding mirrors, opening the trunk, frunk, setting the cars lock state and more.
# For our test, we will edit the 3rd byte, which is MCU_lockRequest. 0x01 will lock, 0x02 will unlock:
@@ -26,7 +27,7 @@ def tesla_tester():
#Back to safety...
print("Disabling output on Panda...")
p.set_safety_mode(Panda.SAFETY_SILENT)
p.set_safety_mode(Safety.SAFETY_SILENT)
print("Reading VIN from 0x568. This is painfully slow and can take up to 3 minutes (1 minute per message; 3 messages needed for full VIN)...")

View File

@@ -9,6 +9,8 @@ import binascii
from functools import wraps, partial
from itertools import accumulate
from opendbc.safety import Safety
from .base import BaseHandle
from .constants import FW_PATH, McuType
from .dfu import PandaDFU
@@ -101,43 +103,8 @@ ensure_health_packet_version = partial(ensure_version, "health", "HEALTH_PACKET_
class ALTERNATIVE_EXPERIENCE:
DEFAULT = 0
DISABLE_DISENGAGE_ON_GAS = 1
DISABLE_STOCK_AEB = 2
RAISE_LONGITUDINAL_LIMITS_TO_ISO_MAX = 8
ALLOW_AEB = 16
class Panda:
# matches cereal.car.CarParams.SafetyModel
SAFETY_SILENT = 0
SAFETY_HONDA_NIDEC = 1
SAFETY_TOYOTA = 2
SAFETY_ELM327 = 3
SAFETY_GM = 4
SAFETY_HONDA_BOSCH_GIRAFFE = 5
SAFETY_FORD = 6
SAFETY_HYUNDAI = 8
SAFETY_CHRYSLER = 9
SAFETY_TESLA = 10
SAFETY_SUBARU = 11
SAFETY_MAZDA = 13
SAFETY_NISSAN = 14
SAFETY_VOLKSWAGEN_MQB = 15
SAFETY_ALLOUTPUT = 17
SAFETY_GM_ASCM = 18
SAFETY_NOOUTPUT = 19
SAFETY_HONDA_BOSCH = 20
SAFETY_VOLKSWAGEN_PQ = 21
SAFETY_SUBARU_PREGLOBAL = 22
SAFETY_HYUNDAI_LEGACY = 23
SAFETY_HYUNDAI_COMMUNITY = 24
SAFETY_STELLANTIS = 25
SAFETY_FAW = 26
SAFETY_BODY = 27
SAFETY_HYUNDAI_CANFD = 28
SERIAL_DEBUG = 0
SERIAL_ESP = 1
SERIAL_LIN1 = 2
@@ -747,7 +714,7 @@ class Panda:
def set_power_save(self, power_save_enabled=0):
self._handle.controlWrite(Panda.REQUEST_OUT, 0xe7, int(power_save_enabled), 0, b'')
def set_safety_mode(self, mode=SAFETY_SILENT, param=0):
def set_safety_mode(self, mode=Safety.SAFETY_SILENT, param=0):
self._handle.controlWrite(Panda.REQUEST_OUT, 0xdc, mode, param, b'')
def set_obd(self, obd):

View File

@@ -9,6 +9,7 @@ import os
import time
import random
import argparse
from opendbc.safety import Safety
from panda import Panda
def get_test_string():
@@ -47,8 +48,8 @@ def run_test(sleep_duration):
raise Exception("Connect white/grey and black panda to run this test!")
# disable safety modes
black_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
other_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
black_panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
other_panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
# test health packet
print("black panda health", black_panda.health())
@@ -62,9 +63,9 @@ def run_test(sleep_duration):
print("Number of cycles:", counter, "Non-zero bus errors:", nonzero_bus_errors, "Zero bus errors:", zero_bus_errors, "Content errors:", content_errors)
# Toggle relay
black_panda.set_safety_mode(Panda.SAFETY_SILENT)
black_panda.set_safety_mode(Safety.SAFETY_SILENT)
time.sleep(1)
black_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
black_panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
time.sleep(1)

View File

@@ -10,6 +10,7 @@ import time
import random
import argparse
from opendbc.safety import Safety
from panda import Panda
def get_test_string():
@@ -48,8 +49,8 @@ def run_test(sleep_duration):
raise Exception("Connect white/grey and black panda to run this test!")
# disable safety modes
black_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
other_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
black_panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
other_panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
# test health packet
print("black panda health", black_panda.health())
@@ -69,9 +70,9 @@ def run_test(sleep_duration):
if (time.time() - temp_start_time) > 3600 * 6:
# Toggle relay
black_panda.set_safety_mode(Panda.SAFETY_SILENT)
black_panda.set_safety_mode(Safety.SAFETY_SILENT)
time.sleep(1)
black_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
black_panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
time.sleep(1)
temp_start_time = time.time()

View File

@@ -9,6 +9,7 @@ import time
import random
import argparse
from opendbc.safety import Safety
from panda import Panda
def get_test_string():
@@ -50,8 +51,8 @@ def run_test(sleep_duration):
raise Exception("Connect white/grey and black panda to run this test!")
# disable safety modes
black_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
other_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
black_panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
other_panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
# test health packet
print("black panda health", black_panda.health())
@@ -60,7 +61,7 @@ def run_test(sleep_duration):
# test black -> other
while True:
# Switch on relay
black_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
black_panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
time.sleep(0.05)
if not test_buses(black_panda, other_panda, (0, False, [0])):
@@ -68,7 +69,7 @@ def run_test(sleep_duration):
raise Exception("Open error")
# Switch off relay
black_panda.set_safety_mode(Panda.SAFETY_SILENT)
black_panda.set_safety_mode(Safety.SAFETY_SILENT)
time.sleep(0.05)
if not test_buses(black_panda, other_panda, (0, False, [0, 2])):

View File

@@ -4,6 +4,7 @@ import time
import threading
from typing import Any
from opendbc.safety import Safety
from panda import Panda
JUNGLE = "JUNGLE" in os.environ
@@ -30,9 +31,9 @@ if __name__ == "__main__":
raise Exception("Connect two pandas to perform this test!")
sender = Panda(serials[0])
receiver = Panda(serials[1]) # type: ignore
receiver.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
receiver.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
sender.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
sender.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
# Start transmisson
threading.Thread(target=flood_tx, args=(sender,)).start()

View File

@@ -4,6 +4,7 @@ import time
from collections import defaultdict
import binascii
from opendbc.safety import Safety
from panda import Panda
# fake
@@ -16,7 +17,7 @@ def can_printer():
time.sleep(1)
p.can_clear(0xFFFF)
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
start = sec_since_boot()
lp = sec_since_boot()

View File

@@ -3,6 +3,7 @@ import os
import time
import random
from collections import defaultdict
from opendbc.safety import Safety
from panda import Panda, calculate_checksum, DLC_TO_LEN
from panda import PandaJungle
from panda.tests.hitl.helpers import time_many_sends
@@ -44,14 +45,14 @@ def panda_init(serial, enable_canfd=False, enable_non_iso=False):
p.set_can_data_speed_kbps(bus, 2000)
if enable_non_iso:
p.set_canfd_non_iso(bus, True)
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
return p
def test_canfd_throughput(p, p_recv=None):
two_pandas = p_recv is not None
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
if two_pandas:
p_recv.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p_recv.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
# enable output mode
else:
p.set_can_loopback(True)

View File

@@ -1,11 +1,12 @@
#!/usr/bin/env python3
from opendbc.safety import Safety
from panda import Panda
# This script is intended to be used in conjunction with the echo_loopback_test.py test script from panda jungle.
# It sends a reversed response back for every message received containing b"test".
if __name__ == "__main__":
p = Panda()
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
p.set_power_save(False)
while True:

View File

@@ -10,6 +10,7 @@ import time
import threading
from collections import deque
from opendbc.safety import Safety
from panda import Panda
def lin_checksum(dat):
@@ -61,7 +62,7 @@ class ELMCarSimulator():
self.__on = on
def start(self):
self.panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
self.panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
if self.__lin_enable:
self.__lin_monitor_thread.start()
if self.__can_enable:

View File

@@ -2,6 +2,7 @@ import time
import pytest
from opendbc.car.hyundai.values import HyundaiSafetyFlags
from opendbc.safety import Safety
from panda import Panda
@@ -37,9 +38,9 @@ def test_hw_type(p):
def test_heartbeat(p, panda_jungle):
panda_jungle.set_ignition(True)
# TODO: add more cases here once the tests aren't super slow
p.set_safety_mode(mode=Panda.SAFETY_HYUNDAI, param=HyundaiSafetyFlags.FLAG_HYUNDAI_LONG)
p.set_safety_mode(mode=Safety.SAFETY_HYUNDAI, param=HyundaiSafetyFlags.FLAG_HYUNDAI_LONG)
p.send_heartbeat()
assert p.health()['safety_mode'] == Panda.SAFETY_HYUNDAI
assert p.health()['safety_mode'] == Safety.SAFETY_HYUNDAI
assert p.health()['safety_param'] == HyundaiSafetyFlags.FLAG_HYUNDAI_LONG
# shouldn't do anything once we're in a car safety mode
@@ -49,7 +50,7 @@ def test_heartbeat(p, panda_jungle):
h = p.health()
assert h['heartbeat_lost']
assert h['safety_mode'] == Panda.SAFETY_SILENT
assert h['safety_mode'] == Safety.SAFETY_SILENT
assert h['safety_param'] == 0
assert h['controls_allowed'] == 0

View File

@@ -1,11 +1,12 @@
import time
from flaky import flaky
from opendbc.safety import Safety
from panda import Panda
from panda.tests.hitl.helpers import time_many_sends
def test_can_loopback(p):
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
p.set_can_loopback(True)
for bus in (0, 1, 2):
@@ -30,7 +31,7 @@ def test_can_loopback(p):
def test_reliability(p):
MSG_COUNT = 100
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
p.set_can_loopback(True)
p.set_can_speed_kbps(0, 1000)
@@ -60,7 +61,7 @@ def test_reliability(p):
@flaky(max_runs=6, min_passes=1)
def test_throughput(p):
# enable output mode
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
# enable CAN loopback mode
p.set_can_loopback(True)

View File

@@ -6,7 +6,7 @@ import threading
from flaky import flaky
from collections import defaultdict
from panda import Panda
from opendbc.safety import Safety
from panda.tests.hitl.conftest import PandaGroup
from panda.tests.hitl.helpers import time_many_sends, get_random_can_messages, clear_can_buffers
@@ -27,7 +27,7 @@ def test_send_recv(p, panda_jungle):
print(f"two pandas bus {bus}, 100 messages at speed {speed:4d}, comp speed is {comp_kbps:7.2f}, {saturation_pct:6.2f}%")
# Run tests in both directions
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
test(p, panda_jungle)
test(panda_jungle, p)
@@ -84,7 +84,7 @@ def test_latency(p, panda_jungle):
.format(bus, num_messages, speed, average_latency, average_comp_kbps, average_saturation_pct))
# Run tests in both directions
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
test(p, panda_jungle)
test(panda_jungle, p)
@@ -126,12 +126,12 @@ def test_gen2_loopback(p, panda_jungle):
print("Bus:", bus, "address:", addr, "OBD:", obd, "OK")
# Run tests in both directions
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
test(p, panda_jungle)
test(panda_jungle, p)
# Test extended frame address with ELM327 mode
p.set_safety_mode(Panda.SAFETY_ELM327)
p.set_safety_mode(Safety.SAFETY_ELM327)
test(p, panda_jungle, 0x18DB33F1)
test(panda_jungle, p, 0x18DB33F1)
@@ -153,7 +153,7 @@ def test_bulk_write(p, panda_jungle):
packet += [[0xaa, msg, 0], [0xaa, msg, 1], [0xaa, msg, 2]] * NUM_MESSAGES_PER_BUS
# Disable timeout
panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
panda.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
panda.can_send_many(packet, timeout=0)
print(f"Done sending {4 * NUM_MESSAGES_PER_BUS} messages!", time.monotonic())
print(panda.health())
@@ -175,7 +175,7 @@ def test_bulk_write(p, panda_jungle):
raise Exception("Did not receive all messages!")
def test_message_integrity(p):
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
p.set_can_loopback(True)
for i in range(250):
sent_msgs = defaultdict(set)

View File

@@ -1,10 +1,11 @@
import time
from opendbc.safety import Safety
from panda import Panda
def test_safety_nooutput(p):
p.set_safety_mode(Panda.SAFETY_SILENT)
p.set_safety_mode(Safety.SAFETY_SILENT)
p.set_can_loopback(True)
# send a message on bus 0
@@ -20,10 +21,10 @@ def test_safety_nooutput(p):
def test_canfd_safety_modes(p):
# works on all pandas
p.set_safety_mode(Panda.SAFETY_TOYOTA)
assert p.health()['safety_mode'] == Panda.SAFETY_TOYOTA
p.set_safety_mode(Safety.SAFETY_TOYOTA)
assert p.health()['safety_mode'] == Safety.SAFETY_TOYOTA
# shouldn't be able to set a CAN-FD safety mode on non CAN-FD panda
p.set_safety_mode(Panda.SAFETY_HYUNDAI_CANFD)
expected_mode = Panda.SAFETY_HYUNDAI_CANFD if p.get_type() in Panda.H7_DEVICES else Panda.SAFETY_SILENT
p.set_safety_mode(Safety.SAFETY_HYUNDAI_CANFD)
expected_mode = Safety.SAFETY_HYUNDAI_CANFD if p.get_type() in Panda.H7_DEVICES else Safety.SAFETY_SILENT
assert p.health()['safety_mode'] == expected_mode

View File

@@ -2,6 +2,7 @@ import time
import pytest
import itertools
from opendbc.safety import Safety
from panda import Panda
from panda.tests.hitl.conftest import PandaGroup
@@ -19,7 +20,7 @@ def test_harness_status(p, panda_jungle):
# between the tests.
for ignition, orientation in itertools.product([True, False], [Panda.HARNESS_STATUS_NC, Panda.HARNESS_STATUS_NORMAL, Panda.HARNESS_STATUS_FLIPPED]):
print()
p.set_safety_mode(Panda.SAFETY_ELM327)
p.set_safety_mode(Safety.SAFETY_ELM327)
panda_jungle.set_harness_orientation(orientation)
panda_jungle.set_ignition(ignition)

View File

@@ -6,6 +6,7 @@ import random
import argparse
from itertools import permutations
from opendbc.safety import Safety
from panda import Panda
def get_test_string():
@@ -25,7 +26,7 @@ def run_test_w_pandas(pandas, sleep_duration):
print("H", h)
for hh in h:
hh.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
hh.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
# test both directions
for ho in permutations(list(range(len(h))), r=2):

View File

@@ -7,6 +7,7 @@ import itertools
import threading
from typing import Any
from opendbc.safety import Safety
from panda import Panda
JUNGLE = "JUNGLE" in os.environ
@@ -44,9 +45,9 @@ if __name__ == "__main__":
raise Exception("Connect two pandas to perform this test!")
sender = Panda(serials[0])
receiver = Panda(serials[1])
receiver.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
receiver.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
sender.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
sender.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
# Start transmisson
threading.Thread(target=flood_tx, args=(sender,)).start()

View File

@@ -1,15 +1,16 @@
#!/usr/bin/env python
import time
from opendbc.safety import Safety
from panda import Panda
p = Panda()
while True:
p.set_safety_mode(Panda.SAFETY_TOYOTA)
p.set_safety_mode(Safety.SAFETY_TOYOTA)
p.send_heartbeat()
print("ON")
time.sleep(1)
p.set_safety_mode(Panda.SAFETY_NOOUTPUT)
p.set_safety_mode(Safety.SAFETY_NOOUTPUT)
p.send_heartbeat()
print("OFF")
time.sleep(1)

View File

@@ -6,7 +6,7 @@ import numpy as np
from collections.abc import Callable
from opendbc.can.packer import CANPacker # pylint: disable=import-error
from panda import ALTERNATIVE_EXPERIENCE
from opendbc.safety import ALTERNATIVE_EXPERIENCE
from panda.tests.libpanda import libpanda_py
MAX_WRONG_COUNTERS = 5

View File

@@ -3,7 +3,7 @@ import unittest
import panda.tests.safety.common as common
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
from panda.tests.safety.common import CANPackerPanda
@@ -15,7 +15,7 @@ class TestBody(common.PandaSafetyTest):
def setUp(self):
self.packer = CANPackerPanda("comma_body")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_BODY, 0)
self.safety.set_safety_hooks(Safety.SAFETY_BODY, 0)
self.safety.init_tests()
def _motors_data_msg(self, speed_l, speed_r):

View File

@@ -2,7 +2,7 @@
import unittest
from opendbc.car.chrysler.values import ChryslerSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -29,7 +29,7 @@ class TestChryslerSafety(common.PandaCarSafetyTest, common.MotorTorqueSteeringSa
def setUp(self):
self.packer = CANPackerPanda("chrysler_pacifica_2017_hybrid_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_CHRYSLER, 0)
self.safety.set_safety_hooks(Safety.SAFETY_CHRYSLER, 0)
self.safety.init_tests()
def _button_msg(self, cancel=False, resume=False):
@@ -91,7 +91,7 @@ class TestChryslerRamDTSafety(TestChryslerSafety):
def setUp(self):
self.packer = CANPackerPanda("chrysler_ram_dt_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_CHRYSLER, ChryslerSafetyFlags.FLAG_CHRYSLER_RAM_DT)
self.safety.set_safety_hooks(Safety.SAFETY_CHRYSLER, ChryslerSafetyFlags.FLAG_CHRYSLER_RAM_DT)
self.safety.init_tests()
def _speed_msg(self, speed):
@@ -115,7 +115,7 @@ class TestChryslerRamHDSafety(TestChryslerSafety):
def setUp(self):
self.packer = CANPackerPanda("chrysler_ram_hd_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_CHRYSLER, ChryslerSafetyFlags.FLAG_CHRYSLER_RAM_HD)
self.safety.set_safety_hooks(Safety.SAFETY_CHRYSLER, ChryslerSafetyFlags.FLAG_CHRYSLER_RAM_HD)
self.safety.init_tests()
def _speed_msg(self, speed):

View File

@@ -3,7 +3,7 @@ import unittest
import panda.tests.safety.common as common
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
@@ -20,7 +20,7 @@ class TestNoOutput(TestDefaultRxHookBase):
def setUp(self):
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_NOOUTPUT, 0)
self.safety.set_safety_hooks(Safety.SAFETY_NOOUTPUT, 0)
self.safety.init_tests()
@@ -29,7 +29,7 @@ class TestSilent(TestNoOutput):
def setUp(self):
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_SILENT, 0)
self.safety.set_safety_hooks(Safety.SAFETY_SILENT, 0)
self.safety.init_tests()
@@ -40,7 +40,7 @@ class TestAllOutput(TestDefaultRxHookBase):
def setUp(self):
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_ALLOUTPUT, 0)
self.safety.set_safety_hooks(Safety.SAFETY_ALLOUTPUT, 0)
self.safety.init_tests()
def test_spam_can_buses(self):
@@ -65,7 +65,7 @@ class TestAllOutputPassthrough(TestAllOutput):
def setUp(self):
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_ALLOUTPUT, 1)
self.safety.set_safety_hooks(Safety.SAFETY_ALLOUTPUT, 1)
self.safety.init_tests()

View File

@@ -3,7 +3,8 @@ import unittest
import panda.tests.safety.common as common
from panda import DLC_TO_LEN, Panda
from opendbc.safety import Safety
from panda import DLC_TO_LEN
from panda.tests.libpanda import libpanda_py
from panda.tests.safety.test_defaults import TestDefaultRxHookBase
@@ -18,7 +19,7 @@ class TestElm327(TestDefaultRxHookBase):
def setUp(self):
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_ELM327, 0)
self.safety.set_safety_hooks(Safety.SAFETY_ELM327, 0)
self.safety.init_tests()
def test_tx_hook(self):

View File

@@ -6,7 +6,7 @@ import unittest
import panda.tests.safety.common as common
from opendbc.car.ford.values import FordSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
from panda.tests.safety.common import CANPackerPanda
@@ -366,7 +366,7 @@ class TestFordCANFDStockSafety(TestFordSafetyBase):
def setUp(self):
self.packer = CANPackerPanda("ford_lincoln_base_pt")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_FORD, FordSafetyFlags.FLAG_FORD_CANFD)
self.safety.set_safety_hooks(Safety.SAFETY_FORD, FordSafetyFlags.FLAG_FORD_CANFD)
self.safety.init_tests()
@@ -443,7 +443,7 @@ class TestFordLongitudinalSafety(TestFordLongitudinalSafetyBase):
self.packer = CANPackerPanda("ford_lincoln_base_pt")
self.safety = libpanda_py.libpanda
# Make sure we enforce long safety even without long flag for CAN
self.safety.set_safety_hooks(Panda.SAFETY_FORD, 0)
self.safety.set_safety_hooks(Safety.SAFETY_FORD, 0)
self.safety.init_tests()
@@ -458,7 +458,7 @@ class TestFordCANFDLongitudinalSafety(TestFordLongitudinalSafetyBase):
def setUp(self):
self.packer = CANPackerPanda("ford_lincoln_base_pt")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_FORD, FordSafetyFlags.FLAG_FORD_LONG_CONTROL | FordSafetyFlags.FLAG_FORD_CANFD)
self.safety.set_safety_hooks(Safety.SAFETY_FORD, FordSafetyFlags.FLAG_FORD_LONG_CONTROL | FordSafetyFlags.FLAG_FORD_CANFD)
self.safety.init_tests()

View File

@@ -2,7 +2,7 @@
import unittest
from opendbc.car.gm.values import GMSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -99,7 +99,7 @@ class TestGmSafetyBase(common.PandaCarSafetyTest, common.DriverTorqueSteeringSaf
self.packer = CANPackerPanda("gm_global_a_powertrain_generated")
self.packer_chassis = CANPackerPanda("gm_global_a_chassis")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_GM, 0)
self.safety.set_safety_hooks(Safety.SAFETY_GM, 0)
self.safety.init_tests()
def _pcm_status_msg(self, enable):
@@ -159,7 +159,7 @@ class TestGmAscmSafety(GmLongitudinalBase, TestGmSafetyBase):
self.packer = CANPackerPanda("gm_global_a_powertrain_generated")
self.packer_chassis = CANPackerPanda("gm_global_a_chassis")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_GM, 0)
self.safety.set_safety_hooks(Safety.SAFETY_GM, 0)
self.safety.init_tests()
@@ -189,7 +189,7 @@ class TestGmCameraSafety(TestGmCameraSafetyBase):
self.packer = CANPackerPanda("gm_global_a_powertrain_generated")
self.packer_chassis = CANPackerPanda("gm_global_a_chassis")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_GM, GMSafetyFlags.FLAG_GM_HW_CAM)
self.safety.set_safety_hooks(Safety.SAFETY_GM, GMSafetyFlags.FLAG_GM_HW_CAM)
self.safety.init_tests()
def test_buttons(self):
@@ -221,7 +221,7 @@ class TestGmCameraLongitudinalSafety(GmLongitudinalBase, TestGmCameraSafetyBase)
self.packer = CANPackerPanda("gm_global_a_powertrain_generated")
self.packer_chassis = CANPackerPanda("gm_global_a_chassis")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_GM, GMSafetyFlags.FLAG_GM_HW_CAM | GMSafetyFlags.FLAG_GM_HW_CAM_LONG)
self.safety.set_safety_hooks(Safety.SAFETY_GM, GMSafetyFlags.FLAG_GM_HW_CAM | GMSafetyFlags.FLAG_GM_HW_CAM_LONG)
self.safety.init_tests()

View File

@@ -3,7 +3,7 @@ import unittest
import numpy as np
from opendbc.car.honda.values import HondaSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda, MAX_WRONG_COUNTERS
@@ -268,7 +268,7 @@ class TestHondaNidecSafetyBase(HondaBase):
def setUp(self):
self.packer = CANPackerPanda("honda_civic_touring_2016_can_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HONDA_NIDEC, 0)
self.safety.set_safety_hooks(Safety.SAFETY_HONDA_NIDEC, 0)
self.safety.init_tests()
def _send_brake_msg(self, brake, aeb_req=0, bus=0):
@@ -358,7 +358,7 @@ class TestHondaNidecPcmAltSafety(TestHondaNidecPcmSafety):
def setUp(self):
self.packer = CANPackerPanda("acura_ilx_2016_can_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HONDA_NIDEC, HondaSafetyFlags.FLAG_HONDA_NIDEC_ALT)
self.safety.set_safety_hooks(Safety.SAFETY_HONDA_NIDEC, HondaSafetyFlags.FLAG_HONDA_NIDEC_ALT)
self.safety.init_tests()
def _acc_state_msg(self, main_on):
@@ -423,7 +423,7 @@ class TestHondaBoschAltBrakeSafetyBase(TestHondaBoschSafetyBase):
"""
def setUp(self):
super().setUp()
self.safety.set_safety_hooks(Panda.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_ALT_BRAKE)
self.safety.set_safety_hooks(Safety.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_ALT_BRAKE)
self.safety.init_tests()
def _user_brake_msg(self, brake):
@@ -445,7 +445,7 @@ class TestHondaBoschSafety(HondaPcmEnableBase, TestHondaBoschSafetyBase):
"""
def setUp(self):
super().setUp()
self.safety.set_safety_hooks(Panda.SAFETY_HONDA_BOSCH, 0)
self.safety.set_safety_hooks(Safety.SAFETY_HONDA_BOSCH, 0)
self.safety.init_tests()
@@ -472,7 +472,7 @@ class TestHondaBoschLongSafety(HondaButtonEnableBase, TestHondaBoschSafetyBase):
def setUp(self):
super().setUp()
self.safety.set_safety_hooks(Panda.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_BOSCH_LONG)
self.safety.set_safety_hooks(Safety.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_BOSCH_LONG)
self.safety.init_tests()
def _send_gas_brake_msg(self, gas, accel):
@@ -532,7 +532,7 @@ class TestHondaBoschRadarlessSafety(HondaPcmEnableBase, TestHondaBoschRadarlessS
def setUp(self):
super().setUp()
self.safety.set_safety_hooks(Panda.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_RADARLESS)
self.safety.set_safety_hooks(Safety.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_RADARLESS)
self.safety.init_tests()
@@ -543,7 +543,7 @@ class TestHondaBoschRadarlessAltBrakeSafety(HondaPcmEnableBase, TestHondaBoschRa
def setUp(self):
super().setUp()
self.safety.set_safety_hooks(Panda.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_RADARLESS | HondaSafetyFlags.FLAG_HONDA_ALT_BRAKE)
self.safety.set_safety_hooks(Safety.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_RADARLESS | HondaSafetyFlags.FLAG_HONDA_ALT_BRAKE)
self.safety.init_tests()
@@ -557,7 +557,7 @@ class TestHondaBoschRadarlessLongSafety(common.LongitudinalAccelSafetyTest, Hond
def setUp(self):
super().setUp()
self.safety.set_safety_hooks(Panda.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_RADARLESS | HondaSafetyFlags.FLAG_HONDA_BOSCH_LONG)
self.safety.set_safety_hooks(Safety.SAFETY_HONDA_BOSCH, HondaSafetyFlags.FLAG_HONDA_RADARLESS | HondaSafetyFlags.FLAG_HONDA_BOSCH_LONG)
self.safety.init_tests()
def _accel_msg(self, accel):

View File

@@ -3,7 +3,7 @@ import random
import unittest
from opendbc.car.hyundai.values import HyundaiSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -74,7 +74,7 @@ class TestHyundaiSafety(HyundaiButtonBase, common.PandaCarSafetyTest, common.Dri
def setUp(self):
self.packer = CANPackerPanda("hyundai_kia_generic")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI, 0)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI, 0)
self.safety.init_tests()
def _button_msg(self, buttons, main_button=0, bus=0):
@@ -123,7 +123,7 @@ class TestHyundaiSafetyAltLimits(TestHyundaiSafety):
def setUp(self):
self.packer = CANPackerPanda("hyundai_kia_generic")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI, HyundaiSafetyFlags.FLAG_HYUNDAI_ALT_LIMITS)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI, HyundaiSafetyFlags.FLAG_HYUNDAI_ALT_LIMITS)
self.safety.init_tests()
@@ -134,7 +134,7 @@ class TestHyundaiSafetyCameraSCC(TestHyundaiSafety):
def setUp(self):
self.packer = CANPackerPanda("hyundai_kia_generic")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI, HyundaiSafetyFlags.FLAG_HYUNDAI_CAMERA_SCC)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI, HyundaiSafetyFlags.FLAG_HYUNDAI_CAMERA_SCC)
self.safety.init_tests()
@@ -142,7 +142,7 @@ class TestHyundaiLegacySafety(TestHyundaiSafety):
def setUp(self):
self.packer = CANPackerPanda("hyundai_kia_generic")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_LEGACY, 0)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI_LEGACY, 0)
self.safety.init_tests()
@@ -150,7 +150,7 @@ class TestHyundaiLegacySafetyEV(TestHyundaiSafety):
def setUp(self):
self.packer = CANPackerPanda("hyundai_kia_generic")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_LEGACY, 1)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI_LEGACY, 1)
self.safety.init_tests()
def _user_gas_msg(self, gas):
@@ -162,7 +162,7 @@ class TestHyundaiLegacySafetyHEV(TestHyundaiSafety):
def setUp(self):
self.packer = CANPackerPanda("hyundai_kia_generic")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_LEGACY, 2)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI_LEGACY, 2)
self.safety.init_tests()
def _user_gas_msg(self, gas):
@@ -180,7 +180,7 @@ class TestHyundaiLongitudinalSafety(HyundaiLongitudinalBase, TestHyundaiSafety):
def setUp(self):
self.packer = CANPackerPanda("hyundai_kia_generic")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI, HyundaiSafetyFlags.FLAG_HYUNDAI_LONG)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI, HyundaiSafetyFlags.FLAG_HYUNDAI_LONG)
self.safety.init_tests()
def _accel_msg(self, accel, aeb_req=False, aeb_decel=0):

View File

@@ -3,7 +3,7 @@ from parameterized import parameterized_class
import unittest
from opendbc.car.hyundai.values import HyundaiSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -103,7 +103,7 @@ class TestHyundaiCanfdHDA1Base(TestHyundaiCanfdBase):
def setUp(self):
self.packer = CANPackerPanda("hyundai_canfd")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, self.SAFETY_PARAM)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI_CANFD, self.SAFETY_PARAM)
self.safety.init_tests()
@@ -146,7 +146,7 @@ class TestHyundaiCanfdHDA1AltButtons(TestHyundaiCanfdHDA1Base):
def setUp(self):
self.packer = CANPackerPanda("hyundai_canfd")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_ALT_BUTTONS | self.SAFETY_PARAM)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_ALT_BUTTONS | self.SAFETY_PARAM)
self.safety.init_tests()
def _button_msg(self, buttons, main_button=0, bus=1):
@@ -181,7 +181,7 @@ class TestHyundaiCanfdHDA2EV(TestHyundaiCanfdBase):
def setUp(self):
self.packer = CANPackerPanda("hyundai_canfd")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_HDA2 | HyundaiSafetyFlags.FLAG_HYUNDAI_EV_GAS)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_HDA2 | HyundaiSafetyFlags.FLAG_HYUNDAI_EV_GAS)
self.safety.init_tests()
@@ -201,7 +201,7 @@ class TestHyundaiCanfdHDA2EVAltSteering(TestHyundaiCanfdBase):
def setUp(self):
self.packer = CANPackerPanda("hyundai_canfd")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_HDA2 | HyundaiSafetyFlags.FLAG_HYUNDAI_EV_GAS |
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_HDA2 | HyundaiSafetyFlags.FLAG_HYUNDAI_EV_GAS |
HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_HDA2_ALT_STEERING)
self.safety.init_tests()
@@ -223,7 +223,7 @@ class TestHyundaiCanfdHDA2LongEV(HyundaiLongitudinalBase, TestHyundaiCanfdHDA2EV
def setUp(self):
self.packer = CANPackerPanda("hyundai_canfd")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_HDA2 |
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_HDA2 |
HyundaiSafetyFlags.FLAG_HYUNDAI_LONG | HyundaiSafetyFlags.FLAG_HYUNDAI_EV_GAS)
self.safety.init_tests()
@@ -264,7 +264,7 @@ class TestHyundaiCanfdHDA1Long(HyundaiLongitudinalBase, TestHyundaiCanfdHDA1Base
def setUp(self):
self.packer = CANPackerPanda("hyundai_canfd")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CAMERA_SCC | self.SAFETY_PARAM)
self.safety.set_safety_hooks(Safety.SAFETY_HYUNDAI_CANFD, HyundaiSafetyFlags.FLAG_HYUNDAI_CAMERA_SCC | self.SAFETY_PARAM)
self.safety.init_tests()
def _accel_msg(self, accel, aeb_req=False, aeb_decel=0):

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python3
import unittest
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -30,7 +30,7 @@ class TestMazdaSafety(common.PandaCarSafetyTest, common.DriverTorqueSteeringSafe
def setUp(self):
self.packer = CANPackerPanda("mazda_2017")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_MAZDA, 0)
self.safety.set_safety_hooks(Safety.SAFETY_MAZDA, 0)
self.safety.init_tests()
def _torque_meas_msg(self, torque):

View File

@@ -2,7 +2,7 @@
import unittest
from opendbc.car.nissan.values import NissanSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -30,7 +30,7 @@ class TestNissanSafety(common.PandaCarSafetyTest, common.AngleSteeringSafetyTest
def setUp(self):
self.packer = CANPackerPanda("nissan_x_trail_2017_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_NISSAN, 0)
self.safety.set_safety_hooks(Safety.SAFETY_NISSAN, 0)
self.safety.init_tests()
def _angle_cmd_msg(self, angle: float, enabled: bool):
@@ -90,7 +90,7 @@ class TestNissanSafetyAltEpsBus(TestNissanSafety):
def setUp(self):
self.packer = CANPackerPanda("nissan_x_trail_2017_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_NISSAN, NissanSafetyFlags.FLAG_NISSAN_ALT_EPS_BUS)
self.safety.set_safety_hooks(Safety.SAFETY_NISSAN, NissanSafetyFlags.FLAG_NISSAN_ALT_EPS_BUS)
self.safety.init_tests()
@@ -99,7 +99,7 @@ class TestNissanLeafSafety(TestNissanSafety):
def setUp(self):
self.packer = CANPackerPanda("nissan_leaf_2018_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_NISSAN, 0)
self.safety.set_safety_hooks(Safety.SAFETY_NISSAN, 0)
self.safety.init_tests()
def _user_brake_msg(self, brake):

View File

@@ -3,7 +3,7 @@ import enum
import unittest
from opendbc.car.subaru.values import SubaruSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -77,7 +77,7 @@ class TestSubaruSafetyBase(common.PandaCarSafetyTest):
def setUp(self):
self.packer = CANPackerPanda("subaru_global_2017_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_SUBARU, self.FLAGS)
self.safety.set_safety_hooks(Safety.SAFETY_SUBARU, self.FLAGS)
self.safety.init_tests()
def _set_prev_torque(self, t):

View File

@@ -2,7 +2,7 @@
import unittest
from opendbc.car.subaru.values import SubaruSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -30,7 +30,7 @@ class TestSubaruPreglobalSafety(common.PandaCarSafetyTest, common.DriverTorqueSt
def setUp(self):
self.packer = CANPackerPanda(self.DBC)
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_SUBARU_PREGLOBAL, self.FLAGS)
self.safety.set_safety_hooks(Safety.SAFETY_SUBARU_PREGLOBAL, self.FLAGS)
self.safety.init_tests()
def _set_prev_torque(self, t):

View File

@@ -3,7 +3,7 @@ import unittest
import numpy as np
from opendbc.car.tesla.values import TeslaSafetyFlags
from panda import Panda
from opendbc.safety import Safety
import panda.tests.safety.common as common
from panda.tests.libpanda import libpanda_py
from panda.tests.safety.common import CANPackerPanda
@@ -79,7 +79,7 @@ class TestTeslaSteeringSafety(TestTeslaSafety, common.AngleSteeringSafetyTest):
def setUp(self):
self.packer = CANPackerPanda("tesla_can")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TESLA, 0)
self.safety.set_safety_hooks(Safety.SAFETY_TESLA, 0)
self.safety.init_tests()
def _angle_cmd_msg(self, angle: float, enabled: bool):
@@ -114,7 +114,7 @@ class TestTeslaRavenSteeringSafety(TestTeslaSteeringSafety):
def setUp(self):
self.packer = CANPackerPanda("tesla_can")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TESLA, TeslaSafetyFlags.FLAG_TESLA_RAVEN)
self.safety.set_safety_hooks(Safety.SAFETY_TESLA, TeslaSafetyFlags.FLAG_TESLA_RAVEN)
self.safety.init_tests()
def _angle_meas_msg(self, angle: float):
@@ -167,7 +167,7 @@ class TestTeslaChassisLongitudinalSafety(TestTeslaLongitudinalSafety):
def setUp(self):
self.packer = CANPackerPanda("tesla_can")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TESLA, TeslaSafetyFlags.FLAG_TESLA_LONG_CONTROL)
self.safety.set_safety_hooks(Safety.SAFETY_TESLA, TeslaSafetyFlags.FLAG_TESLA_LONG_CONTROL)
self.safety.init_tests()
@@ -179,7 +179,7 @@ class TestTeslaPTLongitudinalSafety(TestTeslaLongitudinalSafety):
def setUp(self):
self.packer = CANPackerPanda("tesla_powertrain")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TESLA, TeslaSafetyFlags.FLAG_TESLA_LONG_CONTROL | TeslaSafetyFlags.FLAG_TESLA_POWERTRAIN)
self.safety.set_safety_hooks(Safety.SAFETY_TESLA, TeslaSafetyFlags.FLAG_TESLA_LONG_CONTROL | TeslaSafetyFlags.FLAG_TESLA_POWERTRAIN)
self.safety.init_tests()

View File

@@ -5,7 +5,7 @@ import unittest
import itertools
from opendbc.car.toyota.values import ToyotaSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -147,7 +147,7 @@ class TestToyotaSafetyTorque(TestToyotaSafetyBase, common.MotorTorqueSteeringSaf
def setUp(self):
self.packer = CANPackerPanda("toyota_nodsu_pt_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TOYOTA, self.EPS_SCALE)
self.safety.set_safety_hooks(Safety.SAFETY_TOYOTA, self.EPS_SCALE)
self.safety.init_tests()
@@ -167,7 +167,7 @@ class TestToyotaSafetyAngle(TestToyotaSafetyBase, common.AngleSteeringSafetyTest
def setUp(self):
self.packer = CANPackerPanda("toyota_nodsu_pt_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_LTA)
self.safety.set_safety_hooks(Safety.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_LTA)
self.safety.init_tests()
# Only allow LKA msgs with no actuation
@@ -269,7 +269,7 @@ class TestToyotaAltBrakeSafety(TestToyotaSafetyTorque):
def setUp(self):
self.packer = CANPackerPanda("toyota_new_mc_pt_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_ALT_BRAKE)
self.safety.set_safety_hooks(Safety.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_ALT_BRAKE)
self.safety.init_tests()
def _user_brake_msg(self, brake):
@@ -314,7 +314,7 @@ class TestToyotaStockLongitudinalTorque(TestToyotaStockLongitudinalBase, TestToy
def setUp(self):
self.packer = CANPackerPanda("toyota_nodsu_pt_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_STOCK_LONGITUDINAL)
self.safety.set_safety_hooks(Safety.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_STOCK_LONGITUDINAL)
self.safety.init_tests()
@@ -323,7 +323,7 @@ class TestToyotaStockLongitudinalAngle(TestToyotaStockLongitudinalBase, TestToyo
def setUp(self):
self.packer = CANPackerPanda("toyota_nodsu_pt_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_STOCK_LONGITUDINAL | ToyotaSafetyFlags.FLAG_TOYOTA_LTA)
self.safety.set_safety_hooks(Safety.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_STOCK_LONGITUDINAL | ToyotaSafetyFlags.FLAG_TOYOTA_LTA)
self.safety.init_tests()
@@ -336,7 +336,7 @@ class TestToyotaSecOcSafety(TestToyotaStockLongitudinalBase):
def setUp(self):
self.packer = CANPackerPanda("toyota_secoc_pt_generated")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_STOCK_LONGITUDINAL | ToyotaSafetyFlags.FLAG_TOYOTA_SECOC)
self.safety.set_safety_hooks(Safety.SAFETY_TOYOTA, self.EPS_SCALE | ToyotaSafetyFlags.FLAG_TOYOTA_STOCK_LONGITUDINAL | ToyotaSafetyFlags.FLAG_TOYOTA_SECOC)
self.safety.init_tests()
# This platform also has alternate brake and PCM messages, but same naming in the DBC, so same packers work

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python3
import unittest
import numpy as np
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -144,7 +144,7 @@ class TestVolkswagenMqbStockSafety(TestVolkswagenMqbSafety):
def setUp(self):
self.packer = CANPackerPanda("vw_mqb_2010")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_VOLKSWAGEN_MQB, 0)
self.safety.set_safety_hooks(Safety.SAFETY_VOLKSWAGEN_MQB, 0)
self.safety.init_tests()
def test_spam_cancel_safety_check(self):
@@ -166,7 +166,7 @@ class TestVolkswagenMqbLongSafety(TestVolkswagenMqbSafety):
def setUp(self):
self.packer = CANPackerPanda("vw_mqb_2010")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_VOLKSWAGEN_MQB, VolkswagenSafetyFlags.FLAG_VOLKSWAGEN_LONG_CONTROL)
self.safety.set_safety_hooks(Safety.SAFETY_VOLKSWAGEN_MQB, VolkswagenSafetyFlags.FLAG_VOLKSWAGEN_LONG_CONTROL)
self.safety.init_tests()
# stock cruise controls are entirely bypassed under openpilot longitudinal control

View File

@@ -2,7 +2,7 @@
import unittest
from opendbc.car.volkswagen.values import VolkswagenSafetyFlags
from panda import Panda
from opendbc.safety import Safety
from panda.tests.libpanda import libpanda_py
import panda.tests.safety.common as common
from panda.tests.safety.common import CANPackerPanda
@@ -127,7 +127,7 @@ class TestVolkswagenPqStockSafety(TestVolkswagenPqSafety):
def setUp(self):
self.packer = CANPackerPanda("vw_golf_mk4")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_VOLKSWAGEN_PQ, 0)
self.safety.set_safety_hooks(Safety.SAFETY_VOLKSWAGEN_PQ, 0)
self.safety.init_tests()
def test_spam_cancel_safety_check(self):
@@ -149,7 +149,7 @@ class TestVolkswagenPqLongSafety(TestVolkswagenPqSafety, common.LongitudinalAcce
def setUp(self):
self.packer = CANPackerPanda("vw_golf_mk4")
self.safety = libpanda_py.libpanda
self.safety.set_safety_hooks(Panda.SAFETY_VOLKSWAGEN_PQ, VolkswagenSafetyFlags.FLAG_VOLKSWAGEN_LONG_CONTROL)
self.safety.set_safety_hooks(Safety.SAFETY_VOLKSWAGEN_PQ, VolkswagenSafetyFlags.FLAG_VOLKSWAGEN_LONG_CONTROL)
self.safety.init_tests()
# stock cruise controls are entirely bypassed under openpilot longitudinal control

View File

@@ -1,6 +1,6 @@
from opendbc.car.toyota.values import ToyotaSafetyFlags
from opendbc.safety import Safety
import panda.tests.libpanda.libpanda_py as libpanda_py
from panda import Panda
def to_signed(d, bits):
ret = d
@@ -10,49 +10,49 @@ def to_signed(d, bits):
def is_steering_msg(mode, param, addr):
ret = False
if mode in (Panda.SAFETY_HONDA_NIDEC, Panda.SAFETY_HONDA_BOSCH):
if mode in (Safety.SAFETY_HONDA_NIDEC, Safety.SAFETY_HONDA_BOSCH):
ret = (addr == 0xE4) or (addr == 0x194) or (addr == 0x33D) or (addr == 0x33DA) or (addr == 0x33DB)
elif mode == Panda.SAFETY_TOYOTA:
elif mode == Safety.SAFETY_TOYOTA:
ret = addr == (0x191 if param & ToyotaSafetyFlags.FLAG_TOYOTA_LTA else 0x2E4)
elif mode == Panda.SAFETY_GM:
elif mode == Safety.SAFETY_GM:
ret = addr == 384
elif mode == Panda.SAFETY_HYUNDAI:
elif mode == Safety.SAFETY_HYUNDAI:
ret = addr == 832
elif mode == Panda.SAFETY_CHRYSLER:
elif mode == Safety.SAFETY_CHRYSLER:
ret = addr == 0x292
elif mode == Panda.SAFETY_SUBARU:
elif mode == Safety.SAFETY_SUBARU:
ret = addr == 0x122
elif mode == Panda.SAFETY_FORD:
elif mode == Safety.SAFETY_FORD:
ret = addr == 0x3d3
elif mode == Panda.SAFETY_NISSAN:
elif mode == Safety.SAFETY_NISSAN:
ret = addr == 0x169
return ret
def get_steer_value(mode, param, to_send):
torque, angle = 0, 0
if mode in (Panda.SAFETY_HONDA_NIDEC, Panda.SAFETY_HONDA_BOSCH):
if mode in (Safety.SAFETY_HONDA_NIDEC, Safety.SAFETY_HONDA_BOSCH):
torque = (to_send.data[0] << 8) | to_send.data[1]
torque = to_signed(torque, 16)
elif mode == Panda.SAFETY_TOYOTA:
elif mode == Safety.SAFETY_TOYOTA:
if param & ToyotaSafetyFlags.FLAG_TOYOTA_LTA:
angle = (to_send.data[1] << 8) | to_send.data[2]
angle = to_signed(angle, 16)
else:
torque = (to_send.data[1] << 8) | (to_send.data[2])
torque = to_signed(torque, 16)
elif mode == Panda.SAFETY_GM:
elif mode == Safety.SAFETY_GM:
torque = ((to_send.data[0] & 0x7) << 8) | to_send.data[1]
torque = to_signed(torque, 11)
elif mode == Panda.SAFETY_HYUNDAI:
elif mode == Safety.SAFETY_HYUNDAI:
torque = (((to_send.data[3] & 0x7) << 8) | to_send.data[2]) - 1024
elif mode == Panda.SAFETY_CHRYSLER:
elif mode == Safety.SAFETY_CHRYSLER:
torque = (((to_send.data[0] & 0x7) << 8) | to_send.data[1]) - 1024
elif mode == Panda.SAFETY_SUBARU:
elif mode == Safety.SAFETY_SUBARU:
torque = ((to_send.data[3] & 0x1F) << 8) | to_send.data[2]
torque = -to_signed(torque, 13)
elif mode == Panda.SAFETY_FORD:
elif mode == Safety.SAFETY_FORD:
angle = ((to_send.data[0] << 3) | (to_send.data[1] >> 5)) - 1000
elif mode == Panda.SAFETY_NISSAN:
elif mode == Safety.SAFETY_NISSAN:
angle = (to_send.data[0] << 10) | (to_send.data[1] << 2) | (to_send.data[2] >> 6)
angle = -angle + (1310 * 100)
return torque, angle

View File

@@ -2,6 +2,7 @@
import os
import time
from opendbc.safety import Safety
from panda import Panda
@@ -12,7 +13,7 @@ if __name__ == "__main__":
with Panda(disable_checks=False) as p:
if not flag_set:
p.set_heartbeat_disabled()
p.set_safety_mode(Panda.SAFETY_ELM327, 30)
p.set_safety_mode(Safety.SAFETY_ELM327, 30)
flag_set = True
# shutdown when told

View File

@@ -1,6 +1,7 @@
import time
import pytest
from opendbc.safety import Safety
from panda import Panda, PandaJungle
PANDA_SERIAL = "28002d000451323431333839"
@@ -48,7 +49,7 @@ def setup_state(panda, jungle, state):
jungle.set_panda_individual_power(OBDC_PORT, 1)
wait_for_boot(panda, jungle)
set_som_shutdown_flag(panda)
panda.set_safety_mode(Panda.SAFETY_SILENT)
panda.set_safety_mode(Safety.SAFETY_SILENT)
panda.send_heartbeat()
wait_for_som_shutdown(panda, jungle)
else:
@@ -82,7 +83,7 @@ def wait_for_full_poweroff(jungle, timeout=30):
def check_som_boot_flag(panda):
h = panda.health()
return h['safety_mode'] == Panda.SAFETY_ELM327 and h['safety_param'] == 30
return h['safety_mode'] == Safety.SAFETY_ELM327 and h['safety_param'] == 30
def set_som_shutdown_flag(panda):
panda.set_can_data_speed_kbps(0, 1000)

View File

@@ -2,6 +2,7 @@
import os
import random
from opendbc.safety import Safety
from panda import Panda
def get_test_string():
@@ -9,7 +10,7 @@ def get_test_string():
if __name__ == "__main__":
p = Panda()
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
print("Spamming all buses...")
while True:

View File

@@ -2,6 +2,7 @@
import struct
import time
from opendbc.safety import Safety
from panda import Panda
if __name__ == "__main__":
@@ -15,7 +16,7 @@ if __name__ == "__main__":
t2 = time.time()
print("100 requests took %.2f ms" % ((t2 - t1) * 1000))
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
p.set_safety_mode(Safety.SAFETY_ALLOUTPUT)
a = 0
while True:

View File

@@ -2,7 +2,8 @@
import random
import unittest
from panda import Panda, DLC_TO_LEN, USBPACKET_MAX_SIZE, pack_can_buffer, unpack_can_buffer
from opendbc.safety import Safety
from panda import DLC_TO_LEN, USBPACKET_MAX_SIZE, pack_can_buffer, unpack_can_buffer
from panda.tests.libpanda import libpanda_py
lpp = libpanda_py.libpanda
@@ -101,7 +102,7 @@ class TestPandaComms(unittest.TestCase):
def test_can_send_usb(self):
lpp.set_safety_hooks(Panda.SAFETY_ALLOUTPUT, 0)
lpp.set_safety_hooks(Safety.SAFETY_ALLOUTPUT, 0)
for bus in range(3):
with self.subTest(bus=bus):