Skip to content

Commit 70219d7

Browse files
authored
match safety enum in cereal (commaai#285)
* match safety enum in cereal * removing tons of hardcoding * add pythonpath to safety test * Fix safety test in Docker
1 parent a338d39 commit 70219d7

24 files changed

+103
-102
lines changed

.circleci/config.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
- run:
1212
name: Run safety test
1313
command: |
14-
docker run panda_safety /bin/bash -c "cd /panda/tests/safety; ./test.sh"
14+
docker run panda_safety /bin/bash -c "cd /panda/tests/safety; PYTHONPATH=/ ./test.sh"
1515
1616
misra-c2012:
1717
machine:

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v1.5.0
1+
v1.5.1

board/safety.h

+19-18
Original file line numberDiff line numberDiff line change
@@ -45,42 +45,43 @@ typedef struct {
4545
const safety_hooks *hooks;
4646
} safety_hook_config;
4747

48+
// from cereal.car.CarParams.SafetyModel
4849
#define SAFETY_NOOUTPUT 0U
4950
#define SAFETY_HONDA 1U
5051
#define SAFETY_TOYOTA 2U
51-
#define SAFETY_GM 3U
52-
#define SAFETY_HONDA_BOSCH 4U
53-
#define SAFETY_FORD 5U
54-
#define SAFETY_CADILLAC 6U
55-
#define SAFETY_HYUNDAI 7U
56-
#define SAFETY_TESLA 8U
52+
#define SAFETY_ELM327 3U
53+
#define SAFETY_GM 4U
54+
#define SAFETY_HONDA_BOSCH 5U
55+
#define SAFETY_FORD 6U
56+
#define SAFETY_CADILLAC 7U
57+
#define SAFETY_HYUNDAI 8U
5758
#define SAFETY_CHRYSLER 9U
58-
#define SAFETY_SUBARU 10U
59-
#define SAFETY_GM_PASSIVE 11U
60-
#define SAFETY_MAZDA 12U
61-
#define SAFETY_GM_ASCM 0x1334U
62-
#define SAFETY_TOYOTA_IPAS 0x1335U
63-
#define SAFETY_ALLOUTPUT 0x1337U
64-
#define SAFETY_ELM327 0xE327U
59+
#define SAFETY_TESLA 10U
60+
#define SAFETY_SUBARU 11U
61+
#define SAFETY_GM_PASSIVE 12U
62+
#define SAFETY_MAZDA 13U
63+
#define SAFETY_TOYOTA_IPAS 16U
64+
#define SAFETY_ALLOUTPUT 17U
65+
#define SAFETY_GM_ASCM 18U
6566

6667
const safety_hook_config safety_hook_registry[] = {
6768
{SAFETY_NOOUTPUT, &nooutput_hooks},
6869
{SAFETY_HONDA, &honda_hooks},
69-
{SAFETY_HONDA_BOSCH, &honda_bosch_hooks},
7070
{SAFETY_TOYOTA, &toyota_hooks},
71+
{SAFETY_ELM327, &elm327_hooks},
7172
{SAFETY_GM, &gm_hooks},
73+
{SAFETY_HONDA_BOSCH, &honda_bosch_hooks},
7274
{SAFETY_FORD, &ford_hooks},
7375
{SAFETY_CADILLAC, &cadillac_hooks},
7476
{SAFETY_HYUNDAI, &hyundai_hooks},
7577
{SAFETY_CHRYSLER, &chrysler_hooks},
78+
{SAFETY_TESLA, &tesla_hooks},
7679
{SAFETY_SUBARU, &subaru_hooks},
80+
{SAFETY_GM_PASSIVE, &gm_passive_hooks},
7781
{SAFETY_MAZDA, &mazda_hooks},
7882
{SAFETY_TOYOTA_IPAS, &toyota_ipas_hooks},
79-
{SAFETY_GM_PASSIVE, &gm_passive_hooks},
80-
{SAFETY_GM_ASCM, &gm_ascm_hooks},
81-
{SAFETY_TESLA, &tesla_hooks},
8283
{SAFETY_ALLOUTPUT, &alloutput_hooks},
83-
{SAFETY_ELM327, &elm327_hooks},
84+
{SAFETY_GM_ASCM, &gm_ascm_hooks},
8485
};
8586

8687
int safety_set_mode(uint16_t mode, int16_t param) {

boardesp/elm327.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ typedef struct __attribute__((packed)) {
5252
#define PANDA_USB_CAN_WRITE_BUS_NUM 3
5353
#define PANDA_USB_LIN_WRITE_BUS_NUM 2
5454

55+
#define SAFETY_ELM327 3U
56+
5557
typedef struct _elm_tcp_conn {
5658
struct espconn *conn;
5759
struct _elm_tcp_conn *next;
@@ -1420,7 +1422,7 @@ static void ICACHE_FLASH_ATTR elm_process_at_cmd(char *cmd, uint16_t len) {
14201422

14211423
elm_append_rsp_const("\r\r");
14221424
elm_append_rsp_const(IDENT_MSG);
1423-
panda_set_safety_mode(0xE327);
1425+
panda_set_safety_mode(SAFETY_ELM327);
14241426

14251427
elm_proto_reinit(elm_current_proto());
14261428
return;

drivers/linux/panda.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838

3939
#define PANDA_DLC_MASK 0x0F
4040

41+
#define SAFETY_ALLOUTPUT 17
42+
#define SAFETY_NOOUTPUT 0
43+
4144
struct panda_usb_ctx {
4245
struct panda_inf_priv *priv;
4346
u32 ndx;
@@ -156,7 +159,7 @@ static int panda_set_output_enable(struct panda_inf_priv* priv, bool enable){
156159
return usb_control_msg(priv->priv_dev->udev,
157160
usb_sndctrlpipe(priv->priv_dev->udev, 0),
158161
0xDC, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
159-
enable ? 0x1337 : 0, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
162+
enable ? SAFETY_ALLOUTPUT : SAFETY_NOOUTPUT, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
160163
}
161164

162165
static void panda_usb_write_bulk_callback(struct urb *urb)

drivers/windows/panda_shared/panda.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ namespace panda {
4040
typedef enum _PANDA_SAFETY_MODE : uint16_t {
4141
SAFETY_NOOUTPUT = 0,
4242
SAFETY_HONDA = 1,
43-
SAFETY_ALLOUTPUT = 0x1337,
43+
SAFETY_ALLOUTPUT = 17,
4444
} PANDA_SAFETY_MODE;
4545

4646
typedef enum _PANDA_SERIAL_PORT : uint8_t {

python/__init__.py

+15-11
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
DEBUG = os.getenv("PANDADEBUG") is not None
2424

2525
# *** wifi mode ***
26-
2726
def build_st(target, mkfile="Makefile"):
2827
from panda import BASEDIR
2928
cmd = 'cd %s && make -f %s clean && make -f %s %s >/dev/null' % (os.path.join(BASEDIR, "board"), mkfile, mkfile, target)
@@ -109,20 +108,25 @@ def close(self):
109108
# *** normal mode ***
110109

111110
class Panda(object):
111+
112+
# matches cereal.car.CarParams.SafetyModel
112113
SAFETY_NOOUTPUT = 0
113114
SAFETY_HONDA = 1
114115
SAFETY_TOYOTA = 2
115-
SAFETY_GM = 3
116-
SAFETY_HONDA_BOSCH = 4
117-
SAFETY_FORD = 5
118-
SAFETY_CADILLAC = 6
119-
SAFETY_HYUNDAI = 7
120-
SAFETY_TESLA = 8
116+
SAFETY_ELM327 = 3
117+
SAFETY_GM = 4
118+
SAFETY_HONDA_BOSCH = 5
119+
SAFETY_FORD = 6
120+
SAFETY_CADILLAC = 7
121+
SAFETY_HYUNDAI = 8
121122
SAFETY_CHRYSLER = 9
122-
SAFETY_TOYOTA_IPAS = 0x1335
123-
SAFETY_TOYOTA_NOLIMITS = 0x1336
124-
SAFETY_ALLOUTPUT = 0x1337
125-
SAFETY_ELM327 = 0xE327
123+
SAFETY_TESLA = 10
124+
SAFETY_SUBARU = 11
125+
SAFETY_GM_PASSIVE = 12
126+
SAFETY_MAZDA = 13
127+
SAFETY_TOYOTA_IPAS = 16
128+
SAFETY_ALLOUTPUT = 17
129+
SAFETY_GM_ASCM = 18
126130

127131
SERIAL_DEBUG = 0
128132
SERIAL_ESP = 1

tests/can_printer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def sec_since_boot():
1515

1616
def can_printer():
1717
p = Panda()
18-
p.set_safety_mode(0x1337)
18+
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
1919

2020
start = sec_since_boot()
2121
lp = sec_since_boot()

tests/elm_wifi.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ def test_elm_panda_safety_mode_KWPFast():
301301
p_car.kline_drain()
302302

303303
p_elm = Panda("WIFI")
304-
p_elm.set_safety_mode(0xE327);
304+
p_elm.set_safety_mode(Panda.SAFETY_ELM327);
305305

306306
def get_checksum(dat):
307307
result = 0
@@ -625,7 +625,7 @@ def test_elm_panda_safety_mode_ISO15765():
625625
p_car.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
626626

627627
p_elm = Panda("WIFI")
628-
p_elm.set_safety_mode(0xE327);
628+
p_elm.set_safety_mode(Panda.SAFETY_ELM327);
629629

630630
#sim = elm_car_simulator.ELMCarSimulator(serial, lin=False)
631631
#sim.start()

tests/pedal/enter_canloader.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def bulkRead(self, endpoint, length, timeout=0):
5353
args = parser.parse_args()
5454

5555
p = Panda()
56-
p.set_safety_mode(0x1337)
56+
p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
5757

5858
while 1:
5959
if len(p.can_recv()) == 0:

tests/safety/Dockerfile

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FROM ubuntu:16.04
22

3-
RUN apt-get update && apt-get install -y clang make python python-pip git curl locales zlib1g-dev libffi-dev bzip2 libssl-dev libbz2-dev
3+
RUN apt-get update && apt-get install -y clang make python python-pip git curl locales zlib1g-dev libffi-dev bzip2 libssl-dev libbz2-dev libusb-1.0-0
44

55
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && locale-gen
66
ENV LANG en_US.UTF-8
@@ -14,6 +14,6 @@ RUN pyenv install 3.7.3
1414
RUN pyenv global 3.7.3
1515
RUN pyenv rehash
1616

17-
COPY tests/safety/requirements.txt /panda/tests/safety/requirements.txt
18-
RUN pip install -r /panda/tests/safety/requirements.txt
17+
COPY tests/safety/requirements.txt requirements.txt
18+
RUN pip install -r requirements.txt
1919
COPY . /panda

tests/safety/requirements.txt

+2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
cffi==1.11.4
22
numpy==1.14.5
3+
libusb1==1.6.6
4+
requests

tests/safety/test_cadillac.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import unittest
33
import numpy as np
44
import libpandasafety_py
5+
from panda import Panda
56

67
MAX_RATE_UP = 2
78
MAX_RATE_DOWN = 5
@@ -31,7 +32,7 @@ class TestCadillacSafety(unittest.TestCase):
3132
@classmethod
3233
def setUp(cls):
3334
cls.safety = libpandasafety_py.libpandasafety
34-
cls.safety.safety_set_mode(6, 0)
35+
cls.safety.safety_set_mode(Panda.SAFETY_CADILLAC, 0)
3536
cls.safety.init_tests_cadillac()
3637

3738
def _send_msg(self, bus, addr, length):

tests/safety/test_chrysler.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import unittest
55
import numpy as np
66
import libpandasafety_py
7+
from panda import Panda
78

89
MAX_RATE_UP = 3
910
MAX_RATE_DOWN = 3
@@ -35,7 +36,7 @@ class TestChryslerSafety(unittest.TestCase):
3536
@classmethod
3637
def setUp(cls):
3738
cls.safety = libpandasafety_py.libpandasafety
38-
cls.safety.safety_set_mode(9, 0)
39+
cls.safety.safety_set_mode(Panda.SAFETY_CHRYSLER, 0)
3940
cls.safety.init_tests_chrysler()
4041

4142
def _send_msg(self, bus, addr, length):

tests/safety/test_gm.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import unittest
33
import numpy as np
44
import libpandasafety_py
5+
from panda import Panda
56

67
MAX_RATE_UP = 7
78
MAX_RATE_DOWN = 17
@@ -32,7 +33,7 @@ class TestGmSafety(unittest.TestCase):
3233
@classmethod
3334
def setUp(cls):
3435
cls.safety = libpandasafety_py.libpandasafety
35-
cls.safety.safety_set_mode(3, 0)
36+
cls.safety.safety_set_mode(Panda.SAFETY_GM, 0)
3637
cls.safety.init_tests_gm()
3738

3839
def _send_msg(self, bus, addr, length):

tests/safety/test_honda.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import unittest
33
import numpy as np
44
import libpandasafety_py
5+
from panda import Panda
56

67
MAX_BRAKE = 255
78

@@ -11,7 +12,7 @@ class TestHondaSafety(unittest.TestCase):
1112
@classmethod
1213
def setUp(cls):
1314
cls.safety = libpandasafety_py.libpandasafety
14-
cls.safety.safety_set_mode(1, 0)
15+
cls.safety.safety_set_mode(Panda.SAFETY_HONDA, 0)
1516
cls.safety.init_tests_honda()
1617

1718
def _send_msg(self, bus, addr, length):

tests/safety/test_honda_bosch.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
import unittest
33
import numpy as np
44
import libpandasafety_py
5+
from panda import Panda
56

67
MAX_BRAKE = 255
78

89
class TestHondaSafety(unittest.TestCase):
910
@classmethod
1011
def setUp(cls):
1112
cls.safety = libpandasafety_py.libpandasafety
12-
cls.safety.safety_set_mode(4, 0)
13+
cls.safety.safety_set_mode(Panda.SAFETY_HONDA_BOSCH, 0)
1314
cls.safety.init_tests_honda()
1415

1516
def _send_msg(self, bus, addr, length):

tests/safety/test_hyundai.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import unittest
33
import numpy as np
44
import libpandasafety_py
5+
from panda import Panda
56

67
MAX_RATE_UP = 3
78
MAX_RATE_DOWN = 7
@@ -29,7 +30,7 @@ class TestHyundaiSafety(unittest.TestCase):
2930
@classmethod
3031
def setUp(cls):
3132
cls.safety = libpandasafety_py.libpandasafety
32-
cls.safety.safety_set_mode(7, 0)
33+
cls.safety.safety_set_mode(Panda.SAFETY_HYUNDAI, 0)
3334
cls.safety.init_tests_hyundai()
3435

3536
def _send_msg(self, bus, addr, length):

tests/safety/test_subaru.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import unittest
33
import numpy as np
44
import libpandasafety_py
5+
from panda import Panda
56

67
MAX_RATE_UP = 50
78
MAX_RATE_DOWN = 70
@@ -29,7 +30,7 @@ class TestSubaruSafety(unittest.TestCase):
2930
@classmethod
3031
def setUp(cls):
3132
cls.safety = libpandasafety_py.libpandasafety
32-
cls.safety.safety_set_mode(10, 0)
33+
cls.safety.safety_set_mode(Panda.SAFETY_SUBARU, 0)
3334
cls.safety.init_tests_subaru()
3435

3536
def _send_msg(self, bus, addr, length):

tests/safety/test_toyota.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import unittest
33
import numpy as np
44
import libpandasafety_py
5+
from panda import Panda
56

67
MAX_RATE_UP = 10
78
MAX_RATE_DOWN = 25
@@ -33,7 +34,7 @@ class TestToyotaSafety(unittest.TestCase):
3334
@classmethod
3435
def setUp(cls):
3536
cls.safety = libpandasafety_py.libpandasafety
36-
cls.safety.safety_set_mode(2, 100)
37+
cls.safety.safety_set_mode(Panda.SAFETY_TOYOTA, 100)
3738
cls.safety.init_tests_toyota()
3839

3940
def _send_msg(self, bus, addr, length):

tests/safety/test_toyota_ipas.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import unittest
33
import numpy as np
44
import libpandasafety_py
5+
from panda import Panda
56

67
IPAS_OVERRIDE_THRESHOLD = 200
78

@@ -25,7 +26,7 @@ class TestToyotaSafety(unittest.TestCase):
2526
@classmethod
2627
def setUp(cls):
2728
cls.safety = libpandasafety_py.libpandasafety
28-
cls.safety.safety_set_mode(0x1335, 66)
29+
cls.safety.safety_set_mode(Panda.SAFETY_TOYOTA_IPAS, 66)
2930
cls.safety.init_tests_toyota()
3031

3132
def _torque_driver_msg(self, torque):

0 commit comments

Comments
 (0)