Squashed 'panda/' changes from f2292e4..5253ab0

5253ab0 bump panda
6277139 GM Volt: allowing 300 max steer
63b7926 Hyundai safety: temporarily disabled button spam check to avoid camera faults
53aef76 GM: passive on LKA-only cars (#135)
01b5235 bumped panda version
1c0ffd1 Hyundai safety: simplifications
56794d6 Hyundai Safety Auto-Detect which CAN bus Camera is on (#134)

git-subtree-dir: panda
git-subtree-split: 5253ab0ee8fd71f67f62ee1d08361459903c7172
pull/373/head
Vehicle Researcher 7 years ago
parent c4bba32347
commit 5c0935d253
  1. 2
      VERSION
  2. 11
      board/safety/safety_gm.h
  3. 27
      board/safety/safety_hyundai.h
  4. 2
      tests/safety/test_gm.py
  5. 24
      tests/safety/test_hyundai.py

@ -1 +1 @@
v1.1.3 v1.1.5

@ -8,7 +8,7 @@
// brake rising edge // brake rising edge
// brake > 0mph // brake > 0mph
const int GM_MAX_STEER = 255; const int GM_MAX_STEER = 300;
const int GM_MAX_RT_DELTA = 128; // max delta torque allowed for real time checks const int GM_MAX_RT_DELTA = 128; // max delta torque allowed for real time checks
const int32_t GM_RT_INTERVAL = 250000; // 250ms between real time checks const int32_t GM_RT_INTERVAL = 250000; // 250ms between real time checks
const int GM_MAX_RATE_UP = 7; const int GM_MAX_RATE_UP = 7;
@ -22,7 +22,7 @@ const int GM_MAX_BRAKE = 350;
int gm_brake_prev = 0; int gm_brake_prev = 0;
int gm_gas_prev = 0; int gm_gas_prev = 0;
int gm_speed = 0; int gm_speed = 0;
// silence everything if stock ECUs are still online // silence everything if stock car control ECUs are still online
int gm_ascm_detected = 0; int gm_ascm_detected = 0;
int gm_ignition_started = 0; int gm_ignition_started = 0;
int gm_rt_torque_last = 0; int gm_rt_torque_last = 0;
@ -63,8 +63,11 @@ static void gm_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
gm_speed = to_push->RDLR & 0xFFFF; gm_speed = to_push->RDLR & 0xFFFF;
} }
// check if stock ASCM ECU is still online // Check if ASCM or LKA camera are online
if (bus_number == 0 && addr == 715) { // on powertrain bus.
// 384 = ASCMLKASteeringCmd
// 715 = ASCMGasRegenCmd
if (bus_number == 0 && (addr == 384 || addr == 715)) {
gm_ascm_detected = 1; gm_ascm_detected = 1;
controls_allowed = 0; controls_allowed = 0;
} }

@ -7,6 +7,7 @@ const int HYUNDAI_DRIVER_TORQUE_ALLOWANCE = 50;
const int HYUNDAI_DRIVER_TORQUE_FACTOR = 2; const int HYUNDAI_DRIVER_TORQUE_FACTOR = 2;
int hyundai_camera_detected = 0; int hyundai_camera_detected = 0;
int hyundai_camera_bus = 0;
int hyundai_giraffe_switch_2 = 0; // is giraffe switch 2 high? int hyundai_giraffe_switch_2 = 0; // is giraffe switch 2 high?
int hyundai_rt_torque_last = 0; int hyundai_rt_torque_last = 0;
int hyundai_desired_torque_last = 0; int hyundai_desired_torque_last = 0;
@ -39,6 +40,11 @@ static void hyundai_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
controls_allowed = 0; controls_allowed = 0;
} }
// Find out which bus the camera is on
if (addr == 832) {
hyundai_camera_bus = bus;
}
// enter controls on rising edge of ACC, exit controls on ACC off // enter controls on rising edge of ACC, exit controls on ACC off
if ((to_push->RIR>>21) == 1057) { if ((to_push->RIR>>21) == 1057) {
// 2 bits: 13-14 // 2 bits: 13-14
@ -51,8 +57,8 @@ static void hyundai_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
hyundai_cruise_engaged_last = cruise_engaged; hyundai_cruise_engaged_last = cruise_engaged;
} }
// 832 is lkas cmd. If it is on bus 2, then giraffe switch 2 is high // 832 is lkas cmd. If it is on camera bus, then giraffe switch 2 is high
if ((to_push->RIR>>21) == 832 && (bus == 2)) { if ((to_push->RIR>>21) == 832 && (bus == hyundai_camera_bus) && (hyundai_camera_bus != 0)) {
hyundai_giraffe_switch_2 = 1; hyundai_giraffe_switch_2 = 1;
} }
} }
@ -123,21 +129,22 @@ static int hyundai_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// FORCE CANCEL: safety check only relevant when spamming the cancel button. // FORCE CANCEL: safety check only relevant when spamming the cancel button.
// ensuring that only the cancel button press is sent (VAL 4) when controls are off. // ensuring that only the cancel button press is sent (VAL 4) when controls are off.
// This avoids unintended engagements while still allowing resume spam // This avoids unintended engagements while still allowing resume spam
if (((to_send->RIR>>21) == 1265) && !controls_allowed && ((to_send->RDTR >> 4) & 0xFF) == 0) { // TODO: fix bug preventing the button msg to be fwd'd on bus 2
if ((to_send->RDLR & 0x7) != 4) return 0; //if (((to_send->RIR>>21) == 1265) && !controls_allowed && ((to_send->RDTR >> 4) & 0xFF) == 0) {
} // if ((to_send->RDLR & 0x7) != 4) return 0;
//}
// 1 allows the message through // 1 allows the message through
return true; return true;
} }
static int hyundai_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) { static int hyundai_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
// forward cam to ccan and viceversa, except lkas cmd // forward cam to ccan and viceversa, except lkas cmd
if ((bus_num == 0 || bus_num == 2) && hyundai_giraffe_switch_2) { if ((bus_num == 0 || bus_num == hyundai_camera_bus) && hyundai_giraffe_switch_2) {
int addr = to_fwd->RIR>>21;
bool is_lkas_msg = addr == 832 && bus_num == 2; if ((to_fwd->RIR>>21) == 832 && bus_num == hyundai_camera_bus) return -1;
return is_lkas_msg? -1 : (uint8_t)(~bus_num & 0x2); if (bus_num == 0) return hyundai_camera_bus;
if (bus_num == hyundai_camera_bus) return 0;
} }
return -1; return -1;
} }

@ -5,7 +5,7 @@ import libpandasafety_py
MAX_RATE_UP = 7 MAX_RATE_UP = 7
MAX_RATE_DOWN = 17 MAX_RATE_DOWN = 17
MAX_STEER = 255 MAX_STEER = 300
MAX_BRAKE = 350 MAX_BRAKE = 350
MAX_GAS = 3072 MAX_GAS = 3072
MAX_REGEN = 1404 MAX_REGEN = 1404

@ -168,18 +168,18 @@ class TestHyundaiSafety(unittest.TestCase):
self.assertTrue(self.safety.hyundai_tx_hook(self._torque_msg(sign * (MAX_RT_DELTA + 1)))) self.assertTrue(self.safety.hyundai_tx_hook(self._torque_msg(sign * (MAX_RT_DELTA + 1))))
def test_spam_cancel_safety_check(self): #def test_spam_cancel_safety_check(self):
RESUME_BTN = 1 # RESUME_BTN = 1
SET_BTN = 2 # SET_BTN = 2
CANCEL_BTN = 4 # CANCEL_BTN = 4
BUTTON_MSG = 1265 # BUTTON_MSG = 1265
self.safety.set_controls_allowed(0) # self.safety.set_controls_allowed(0)
self.assertTrue(self.safety.hyundai_tx_hook(self._button_msg(CANCEL_BTN))) # self.assertTrue(self.safety.hyundai_tx_hook(self._button_msg(CANCEL_BTN)))
self.assertFalse(self.safety.hyundai_tx_hook(self._button_msg(RESUME_BTN))) # self.assertFalse(self.safety.hyundai_tx_hook(self._button_msg(RESUME_BTN)))
self.assertFalse(self.safety.hyundai_tx_hook(self._button_msg(SET_BTN))) # self.assertFalse(self.safety.hyundai_tx_hook(self._button_msg(SET_BTN)))
# do not block resume if we are engaged already # # do not block resume if we are engaged already
self.safety.set_controls_allowed(1) # self.safety.set_controls_allowed(1)
self.assertTrue(self.safety.hyundai_tx_hook(self._button_msg(RESUME_BTN))) # self.assertTrue(self.safety.hyundai_tx_hook(self._button_msg(RESUME_BTN)))
if __name__ == "__main__": if __name__ == "__main__":

Loading…
Cancel
Save