remove cadillac (#496)
parent
62e4d3c369
commit
8cc3a35700
|
@ -361,11 +361,6 @@ void ignition_can_hook(CAN_FIFOMailBox_TypeDef *to_push) {
|
||||||
// GTW_status
|
// GTW_status
|
||||||
ignition_can = (GET_BYTE(to_push, 0) & 0x1) != 0;
|
ignition_can = (GET_BYTE(to_push, 0) & 0x1) != 0;
|
||||||
}
|
}
|
||||||
// Cadillac exception
|
|
||||||
if ((addr == 0x160) && (len == 5)) {
|
|
||||||
// this message isn't all zeros when ignition is on
|
|
||||||
ignition_can = GET_BYTES_04(to_push) != 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include "safety/safety_gm_ascm.h"
|
#include "safety/safety_gm_ascm.h"
|
||||||
#include "safety/safety_gm.h"
|
#include "safety/safety_gm.h"
|
||||||
#include "safety/safety_ford.h"
|
#include "safety/safety_ford.h"
|
||||||
#include "safety/safety_cadillac.h"
|
|
||||||
#include "safety/safety_hyundai.h"
|
#include "safety/safety_hyundai.h"
|
||||||
#include "safety/safety_chrysler.h"
|
#include "safety/safety_chrysler.h"
|
||||||
#include "safety/safety_subaru.h"
|
#include "safety/safety_subaru.h"
|
||||||
|
@ -25,7 +24,6 @@
|
||||||
#define SAFETY_GM 4U
|
#define SAFETY_GM 4U
|
||||||
#define SAFETY_HONDA_BOSCH_GIRAFFE 5U
|
#define SAFETY_HONDA_BOSCH_GIRAFFE 5U
|
||||||
#define SAFETY_FORD 6U
|
#define SAFETY_FORD 6U
|
||||||
#define SAFETY_CADILLAC 7U
|
|
||||||
#define SAFETY_HYUNDAI 8U
|
#define SAFETY_HYUNDAI 8U
|
||||||
#define SAFETY_CHRYSLER 9U
|
#define SAFETY_CHRYSLER 9U
|
||||||
#define SAFETY_TESLA 10U
|
#define SAFETY_TESLA 10U
|
||||||
|
@ -216,7 +214,6 @@ const safety_hook_config safety_hook_registry[] = {
|
||||||
{SAFETY_VOLKSWAGEN_PQ, &volkswagen_pq_hooks},
|
{SAFETY_VOLKSWAGEN_PQ, &volkswagen_pq_hooks},
|
||||||
{SAFETY_NOOUTPUT, &nooutput_hooks},
|
{SAFETY_NOOUTPUT, &nooutput_hooks},
|
||||||
#ifdef ALLOW_DEBUG
|
#ifdef ALLOW_DEBUG
|
||||||
{SAFETY_CADILLAC, &cadillac_hooks},
|
|
||||||
{SAFETY_TESLA, &tesla_hooks},
|
{SAFETY_TESLA, &tesla_hooks},
|
||||||
{SAFETY_NISSAN, &nissan_hooks},
|
{SAFETY_NISSAN, &nissan_hooks},
|
||||||
{SAFETY_ALLOUTPUT, &alloutput_hooks},
|
{SAFETY_ALLOUTPUT, &alloutput_hooks},
|
||||||
|
|
|
@ -1,125 +0,0 @@
|
||||||
#define CADILLAC_TORQUE_MSG_N 4 // 4 torque messages: 0x151, 0x152, 0x153, 0x154
|
|
||||||
|
|
||||||
const AddrBus CADILLAC_TX_MSGS[] = {{0x151, 2}, {0x152, 0}, {0x153, 2}, {0x154, 0}};
|
|
||||||
const int CADILLAC_MAX_STEER = 150; // 1s
|
|
||||||
// real time torque limit to prevent controls spamming
|
|
||||||
// the real time limit is 1500/sec
|
|
||||||
const int CADILLAC_MAX_RT_DELTA = 75; // max delta torque allowed for real time checks
|
|
||||||
const uint32_t CADILLAC_RT_INTERVAL = 250000; // 250ms between real time checks
|
|
||||||
const int CADILLAC_MAX_RATE_UP = 2;
|
|
||||||
const int CADILLAC_MAX_RATE_DOWN = 5;
|
|
||||||
const int CADILLAC_DRIVER_TORQUE_ALLOWANCE = 50;
|
|
||||||
const int CADILLAC_DRIVER_TORQUE_FACTOR = 4;
|
|
||||||
|
|
||||||
int cadillac_cruise_engaged_last = 0;
|
|
||||||
int cadillac_rt_torque_last = 0;
|
|
||||||
const int cadillac_torque_msgs_n = 4;
|
|
||||||
int cadillac_desired_torque_last[CADILLAC_TORQUE_MSG_N] = {0};
|
|
||||||
uint32_t cadillac_ts_last = 0;
|
|
||||||
bool cadillac_supercruise_on = 0;
|
|
||||||
struct sample_t cadillac_torque_driver; // last few driver torques measured
|
|
||||||
|
|
||||||
int cadillac_get_torque_idx(int addr, int array_size) {
|
|
||||||
return MIN(MAX(addr - 0x151, 0), array_size); // 0x151 is id 0, 0x152 is id 1 and so on...
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cadillac_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
|
|
||||||
int bus = GET_BUS(to_push);
|
|
||||||
int addr = GET_ADDR(to_push);
|
|
||||||
|
|
||||||
if (addr == 356) {
|
|
||||||
int torque_driver_new = ((GET_BYTE(to_push, 0) & 0x7U) << 8) | (GET_BYTE(to_push, 1));
|
|
||||||
|
|
||||||
torque_driver_new = to_signed(torque_driver_new, 11);
|
|
||||||
// update array of samples
|
|
||||||
update_sample(&cadillac_torque_driver, torque_driver_new);
|
|
||||||
}
|
|
||||||
|
|
||||||
// enter controls on rising edge of ACC, exit controls on ACC off
|
|
||||||
if ((addr == 0x370) && (bus == 0)) {
|
|
||||||
int cruise_engaged = GET_BYTE(to_push, 2) & 0x80; // bit 23
|
|
||||||
if (cruise_engaged && !cadillac_cruise_engaged_last) {
|
|
||||||
controls_allowed = 1;
|
|
||||||
}
|
|
||||||
if (!cruise_engaged) {
|
|
||||||
controls_allowed = 0;
|
|
||||||
}
|
|
||||||
cadillac_cruise_engaged_last = cruise_engaged;
|
|
||||||
}
|
|
||||||
|
|
||||||
// know supercruise mode and block openpilot msgs if on
|
|
||||||
if ((addr == 0x152) || (addr == 0x154)) {
|
|
||||||
cadillac_supercruise_on = (GET_BYTE(to_push, 4) & 0x10) != 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cadillac_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
|
|
||||||
int tx = 1;
|
|
||||||
int addr = GET_ADDR(to_send);
|
|
||||||
int bus = GET_BUS(to_send);
|
|
||||||
|
|
||||||
if (!msg_allowed(addr, bus, CADILLAC_TX_MSGS, sizeof(CADILLAC_TX_MSGS) / sizeof(CADILLAC_TX_MSGS[0]))) {
|
|
||||||
tx = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// steer cmd checks
|
|
||||||
if ((addr == 0x151) || (addr == 0x152) || (addr == 0x153) || (addr == 0x154)) {
|
|
||||||
int desired_torque = ((GET_BYTE(to_send, 0) & 0x3f) << 8) | GET_BYTE(to_send, 1);
|
|
||||||
int violation = 0;
|
|
||||||
uint32_t ts = TIM2->CNT;
|
|
||||||
int idx = cadillac_get_torque_idx(addr, CADILLAC_TORQUE_MSG_N);
|
|
||||||
desired_torque = to_signed(desired_torque, 14);
|
|
||||||
|
|
||||||
if (controls_allowed) {
|
|
||||||
|
|
||||||
// *** global torque limit check ***
|
|
||||||
violation |= max_limit_check(desired_torque, CADILLAC_MAX_STEER, -CADILLAC_MAX_STEER);
|
|
||||||
|
|
||||||
// *** torque rate limit check ***
|
|
||||||
int desired_torque_last = cadillac_desired_torque_last[idx];
|
|
||||||
violation |= driver_limit_check(desired_torque, desired_torque_last, &cadillac_torque_driver,
|
|
||||||
CADILLAC_MAX_STEER, CADILLAC_MAX_RATE_UP, CADILLAC_MAX_RATE_DOWN,
|
|
||||||
CADILLAC_DRIVER_TORQUE_ALLOWANCE, CADILLAC_DRIVER_TORQUE_FACTOR);
|
|
||||||
|
|
||||||
// used next time
|
|
||||||
cadillac_desired_torque_last[idx] = desired_torque;
|
|
||||||
|
|
||||||
// *** torque real time rate limit check ***
|
|
||||||
violation |= rt_rate_limit_check(desired_torque, cadillac_rt_torque_last, CADILLAC_MAX_RT_DELTA);
|
|
||||||
|
|
||||||
// every RT_INTERVAL set the new limits
|
|
||||||
uint32_t ts_elapsed = get_ts_elapsed(ts, cadillac_ts_last);
|
|
||||||
if (ts_elapsed > CADILLAC_RT_INTERVAL) {
|
|
||||||
cadillac_rt_torque_last = desired_torque;
|
|
||||||
cadillac_ts_last = ts;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// no torque if controls is not allowed
|
|
||||||
if (!controls_allowed && (desired_torque != 0)) {
|
|
||||||
violation = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reset to 0 if either controls is not allowed or there's a violation
|
|
||||||
if (violation || !controls_allowed) {
|
|
||||||
cadillac_desired_torque_last[idx] = 0;
|
|
||||||
cadillac_rt_torque_last = 0;
|
|
||||||
cadillac_ts_last = ts;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (violation || cadillac_supercruise_on) {
|
|
||||||
tx = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return tx;
|
|
||||||
}
|
|
||||||
|
|
||||||
const safety_hooks cadillac_hooks = {
|
|
||||||
.init = nooutput_init,
|
|
||||||
.rx = cadillac_rx_hook,
|
|
||||||
.tx = cadillac_tx_hook,
|
|
||||||
.tx_lin = nooutput_tx_lin_hook,
|
|
||||||
.fwd = default_fwd_hook,
|
|
||||||
};
|
|
|
@ -117,7 +117,6 @@ class Panda(object):
|
||||||
SAFETY_GM = 4
|
SAFETY_GM = 4
|
||||||
SAFETY_HONDA_BOSCH_GIRAFFE = 5
|
SAFETY_HONDA_BOSCH_GIRAFFE = 5
|
||||||
SAFETY_FORD = 6
|
SAFETY_FORD = 6
|
||||||
SAFETY_CADILLAC = 7
|
|
||||||
SAFETY_HYUNDAI = 8
|
SAFETY_HYUNDAI = 8
|
||||||
SAFETY_CHRYSLER = 9
|
SAFETY_CHRYSLER = 9
|
||||||
SAFETY_TESLA = 10
|
SAFETY_TESLA = 10
|
||||||
|
|
|
@ -62,11 +62,6 @@ void set_honda_fwd_brake(bool);
|
||||||
void set_honda_alt_brake_msg(bool);
|
void set_honda_alt_brake_msg(bool);
|
||||||
int get_honda_hw(void);
|
int get_honda_hw(void);
|
||||||
|
|
||||||
void init_tests_cadillac(void);
|
|
||||||
void set_cadillac_desired_torque_last(int t);
|
|
||||||
void set_cadillac_rt_torque_last(int t);
|
|
||||||
void set_cadillac_torque_driver(int min, int max);
|
|
||||||
|
|
||||||
void init_tests_gm(void);
|
void init_tests_gm(void);
|
||||||
void set_gm_desired_torque_last(int t);
|
void set_gm_desired_torque_last(int t);
|
||||||
void set_gm_rt_torque_last(int t);
|
void set_gm_rt_torque_last(int t);
|
||||||
|
|
|
@ -24,7 +24,6 @@ typedef struct
|
||||||
} TIM_TypeDef;
|
} TIM_TypeDef;
|
||||||
|
|
||||||
struct sample_t toyota_torque_meas;
|
struct sample_t toyota_torque_meas;
|
||||||
struct sample_t cadillac_torque_driver;
|
|
||||||
struct sample_t gm_torque_driver;
|
struct sample_t gm_torque_driver;
|
||||||
struct sample_t hyundai_torque_driver;
|
struct sample_t hyundai_torque_driver;
|
||||||
struct sample_t chrysler_torque_meas;
|
struct sample_t chrysler_torque_meas;
|
||||||
|
@ -147,11 +146,6 @@ void set_toyota_torque_meas(int min, int max){
|
||||||
toyota_torque_meas.max = max;
|
toyota_torque_meas.max = max;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_cadillac_torque_driver(int min, int max){
|
|
||||||
cadillac_torque_driver.min = min;
|
|
||||||
cadillac_torque_driver.max = max;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_gm_torque_driver(int min, int max){
|
void set_gm_torque_driver(int min, int max){
|
||||||
gm_torque_driver.min = min;
|
gm_torque_driver.min = min;
|
||||||
gm_torque_driver.max = max;
|
gm_torque_driver.max = max;
|
||||||
|
@ -200,10 +194,6 @@ void set_toyota_rt_torque_last(int t){
|
||||||
toyota_rt_torque_last = t;
|
toyota_rt_torque_last = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_cadillac_rt_torque_last(int t){
|
|
||||||
cadillac_rt_torque_last = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_gm_rt_torque_last(int t){
|
void set_gm_rt_torque_last(int t){
|
||||||
gm_rt_torque_last = t;
|
gm_rt_torque_last = t;
|
||||||
}
|
}
|
||||||
|
@ -228,10 +218,6 @@ void set_toyota_desired_torque_last(int t){
|
||||||
toyota_desired_torque_last = t;
|
toyota_desired_torque_last = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_cadillac_desired_torque_last(int t){
|
|
||||||
for (int i = 0; i < 4; i++) cadillac_desired_torque_last[i] = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_gm_desired_torque_last(int t){
|
void set_gm_desired_torque_last(int t){
|
||||||
gm_desired_torque_last = t;
|
gm_desired_torque_last = t;
|
||||||
}
|
}
|
||||||
|
@ -295,16 +281,6 @@ void init_tests_toyota(void){
|
||||||
set_timer(0);
|
set_timer(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_tests_cadillac(void){
|
|
||||||
init_tests();
|
|
||||||
cadillac_torque_driver.min = 0;
|
|
||||||
cadillac_torque_driver.max = 0;
|
|
||||||
for (int i = 0; i < 4; i++) cadillac_desired_torque_last[i] = 0;
|
|
||||||
cadillac_rt_torque_last = 0;
|
|
||||||
cadillac_ts_last = 0;
|
|
||||||
set_timer(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void init_tests_gm(void){
|
void init_tests_gm(void){
|
||||||
init_tests();
|
init_tests();
|
||||||
gm_torque_driver.min = 0;
|
gm_torque_driver.min = 0;
|
||||||
|
|
|
@ -1,184 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
import unittest
|
|
||||||
import numpy as np
|
|
||||||
from panda import Panda
|
|
||||||
from panda.tests.safety import libpandasafety_py
|
|
||||||
from panda.tests.safety.common import make_msg, StdTest
|
|
||||||
|
|
||||||
|
|
||||||
MAX_RATE_UP = 2
|
|
||||||
MAX_RATE_DOWN = 5
|
|
||||||
MAX_TORQUE = 150
|
|
||||||
|
|
||||||
MAX_RT_DELTA = 75
|
|
||||||
RT_INTERVAL = 250000
|
|
||||||
|
|
||||||
DRIVER_TORQUE_ALLOWANCE = 50;
|
|
||||||
DRIVER_TORQUE_FACTOR = 4;
|
|
||||||
|
|
||||||
IPAS_OVERRIDE_THRESHOLD = 200
|
|
||||||
|
|
||||||
TX_MSGS = [[0x151, 2], [0x152, 0], [0x153, 2], [0x154, 0]]
|
|
||||||
|
|
||||||
def twos_comp(val, bits):
|
|
||||||
if val >= 0:
|
|
||||||
return val
|
|
||||||
else:
|
|
||||||
return (2**bits) + val
|
|
||||||
|
|
||||||
def sign(a):
|
|
||||||
if a > 0:
|
|
||||||
return 1
|
|
||||||
else:
|
|
||||||
return -1
|
|
||||||
|
|
||||||
class TestCadillacSafety(unittest.TestCase):
|
|
||||||
@classmethod
|
|
||||||
def setUp(cls):
|
|
||||||
cls.safety = libpandasafety_py.libpandasafety
|
|
||||||
cls.safety.set_safety_hooks(Panda.SAFETY_CADILLAC, 0)
|
|
||||||
cls.safety.init_tests_cadillac()
|
|
||||||
|
|
||||||
def _set_prev_torque(self, t):
|
|
||||||
self.safety.set_cadillac_desired_torque_last(t)
|
|
||||||
self.safety.set_cadillac_rt_torque_last(t)
|
|
||||||
|
|
||||||
def _torque_driver_msg(self, torque):
|
|
||||||
t = twos_comp(torque, 11)
|
|
||||||
to_send = make_msg(0, 0x164)
|
|
||||||
to_send[0].RDLR = ((t >> 8) & 0x7) | ((t & 0xFF) << 8)
|
|
||||||
return to_send
|
|
||||||
|
|
||||||
def _torque_msg(self, torque):
|
|
||||||
to_send = make_msg(2, 0x151)
|
|
||||||
t = twos_comp(torque, 14)
|
|
||||||
to_send[0].RDLR = ((t >> 8) & 0x3F) | ((t & 0xFF) << 8)
|
|
||||||
return to_send
|
|
||||||
|
|
||||||
def test_spam_can_buses(self):
|
|
||||||
StdTest.test_spam_can_buses(self, TX_MSGS)
|
|
||||||
|
|
||||||
def test_default_controls_not_allowed(self):
|
|
||||||
self.assertFalse(self.safety.get_controls_allowed())
|
|
||||||
|
|
||||||
def test_manually_enable_controls_allowed(self):
|
|
||||||
StdTest.test_manually_enable_controls_allowed(self)
|
|
||||||
|
|
||||||
def test_enable_control_allowed_from_cruise(self):
|
|
||||||
to_push = make_msg(0, 0x370)
|
|
||||||
to_push[0].RDLR = 0x800000
|
|
||||||
self.safety.safety_rx_hook(to_push)
|
|
||||||
self.assertTrue(self.safety.get_controls_allowed())
|
|
||||||
|
|
||||||
def test_disable_control_allowed_from_cruise(self):
|
|
||||||
to_push = make_msg(0, 0x370)
|
|
||||||
self.safety.set_controls_allowed(1)
|
|
||||||
self.safety.safety_rx_hook(to_push)
|
|
||||||
self.assertFalse(self.safety.get_controls_allowed())
|
|
||||||
|
|
||||||
def test_torque_absolute_limits(self):
|
|
||||||
for controls_allowed in [True, False]:
|
|
||||||
for torque in np.arange(-MAX_TORQUE - 1000, MAX_TORQUE + 1000, MAX_RATE_UP):
|
|
||||||
self.safety.set_controls_allowed(controls_allowed)
|
|
||||||
self.safety.set_cadillac_rt_torque_last(torque)
|
|
||||||
self.safety.set_cadillac_torque_driver(0, 0)
|
|
||||||
self.safety.set_cadillac_desired_torque_last(torque - MAX_RATE_UP)
|
|
||||||
|
|
||||||
if controls_allowed:
|
|
||||||
send = (-MAX_TORQUE <= torque <= MAX_TORQUE)
|
|
||||||
else:
|
|
||||||
send = torque == 0
|
|
||||||
|
|
||||||
self.assertEqual(send, self.safety.safety_tx_hook(self._torque_msg(torque)))
|
|
||||||
|
|
||||||
def test_non_realtime_limit_up(self):
|
|
||||||
self.safety.set_cadillac_torque_driver(0, 0)
|
|
||||||
self.safety.set_controls_allowed(True)
|
|
||||||
|
|
||||||
self._set_prev_torque(0)
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg(MAX_RATE_UP)))
|
|
||||||
self._set_prev_torque(0)
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg(-MAX_RATE_UP)))
|
|
||||||
|
|
||||||
self._set_prev_torque(0)
|
|
||||||
self.assertFalse(self.safety.safety_tx_hook(self._torque_msg(MAX_RATE_UP + 1)))
|
|
||||||
self.safety.set_controls_allowed(True)
|
|
||||||
self._set_prev_torque(0)
|
|
||||||
self.assertFalse(self.safety.safety_tx_hook(self._torque_msg(-MAX_RATE_UP - 1)))
|
|
||||||
|
|
||||||
def test_non_realtime_limit_down(self):
|
|
||||||
self.safety.set_cadillac_torque_driver(0, 0)
|
|
||||||
self.safety.set_controls_allowed(True)
|
|
||||||
|
|
||||||
def test_exceed_torque_sensor(self):
|
|
||||||
self.safety.set_controls_allowed(True)
|
|
||||||
|
|
||||||
for sign in [-1, 1]:
|
|
||||||
for t in np.arange(0, DRIVER_TORQUE_ALLOWANCE + 1, 1):
|
|
||||||
t *= -sign
|
|
||||||
self.safety.set_cadillac_torque_driver(t, t)
|
|
||||||
self._set_prev_torque(MAX_TORQUE * sign)
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg(MAX_TORQUE * sign)))
|
|
||||||
|
|
||||||
self.safety.set_cadillac_torque_driver(DRIVER_TORQUE_ALLOWANCE + 1, DRIVER_TORQUE_ALLOWANCE + 1)
|
|
||||||
self.assertFalse(self.safety.safety_tx_hook(self._torque_msg(-MAX_TORQUE)))
|
|
||||||
|
|
||||||
# spot check some individual cases
|
|
||||||
for sign in [-1, 1]:
|
|
||||||
driver_torque = (DRIVER_TORQUE_ALLOWANCE + 10) * sign
|
|
||||||
torque_desired = (MAX_TORQUE - 10 * DRIVER_TORQUE_FACTOR) * sign
|
|
||||||
delta = 1 * sign
|
|
||||||
self._set_prev_torque(torque_desired)
|
|
||||||
self.safety.set_cadillac_torque_driver(-driver_torque, -driver_torque)
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg(torque_desired)))
|
|
||||||
self._set_prev_torque(torque_desired + delta)
|
|
||||||
self.safety.set_cadillac_torque_driver(-driver_torque, -driver_torque)
|
|
||||||
self.assertFalse(self.safety.safety_tx_hook(self._torque_msg(torque_desired + delta)))
|
|
||||||
|
|
||||||
self._set_prev_torque(MAX_TORQUE * sign)
|
|
||||||
self.safety.set_cadillac_torque_driver(-MAX_TORQUE * sign, -MAX_TORQUE * sign)
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg((MAX_TORQUE - MAX_RATE_DOWN) * sign)))
|
|
||||||
self._set_prev_torque(MAX_TORQUE * sign)
|
|
||||||
self.safety.set_cadillac_torque_driver(-MAX_TORQUE * sign, -MAX_TORQUE * sign)
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg(0)))
|
|
||||||
self._set_prev_torque(MAX_TORQUE * sign)
|
|
||||||
self.safety.set_cadillac_torque_driver(-MAX_TORQUE * sign, -MAX_TORQUE * sign)
|
|
||||||
self.assertFalse(self.safety.safety_tx_hook(self._torque_msg((MAX_TORQUE - MAX_RATE_DOWN + 1) * sign)))
|
|
||||||
|
|
||||||
|
|
||||||
def test_realtime_limits(self):
|
|
||||||
self.safety.set_controls_allowed(True)
|
|
||||||
|
|
||||||
for sign in [-1, 1]:
|
|
||||||
self.safety.init_tests_cadillac()
|
|
||||||
self._set_prev_torque(0)
|
|
||||||
self.safety.set_cadillac_torque_driver(0, 0)
|
|
||||||
for t in np.arange(0, MAX_RT_DELTA, 1):
|
|
||||||
t *= sign
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg(t)))
|
|
||||||
self.assertFalse(self.safety.safety_tx_hook(self._torque_msg(sign * (MAX_RT_DELTA + 1))))
|
|
||||||
|
|
||||||
self._set_prev_torque(0)
|
|
||||||
for t in np.arange(0, MAX_RT_DELTA, 1):
|
|
||||||
t *= sign
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg(t)))
|
|
||||||
|
|
||||||
# Increase timer to update rt_torque_last
|
|
||||||
self.safety.set_timer(RT_INTERVAL + 1)
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg(sign * (MAX_RT_DELTA - 1))))
|
|
||||||
self.assertTrue(self.safety.safety_tx_hook(self._torque_msg(sign * (MAX_RT_DELTA + 1))))
|
|
||||||
|
|
||||||
|
|
||||||
def test_fwd_hook(self):
|
|
||||||
# nothing allowed
|
|
||||||
buss = list(range(0x0, 0x3))
|
|
||||||
msgs = list(range(0x1, 0x800))
|
|
||||||
|
|
||||||
for b in buss:
|
|
||||||
for m in msgs:
|
|
||||||
# assume len 8
|
|
||||||
self.assertEqual(-1, self.safety.safety_fwd_hook(b, make_msg(b, m, 8)))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
unittest.main()
|
|
Loading…
Reference in New Issue