Tesla: Panda safety update (#2075)

* - match "vehicle_moving" with opendbc
- allow to cancel

* remove comment

* update _vehicle_moving_msg

* remove redundant condition
This commit is contained in:
Lukas 2024-11-14 02:29:04 +01:00 committed by GitHub
parent 14e00caef6
commit 6974af51a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 4 deletions

View File

@ -35,14 +35,14 @@ static void tesla_rx_hook(const CANPacket_t *to_push) {
// Cruise state
if(addr == 0x286) {
vehicle_moving = ((GET_BYTE(to_push, 5) & 0x1CU) >> 2) != 3U;
int cruise_state = ((GET_BYTE(to_push, 1) << 1 ) >> 5);
bool cruise_engaged = (cruise_state == 2) || // ENABLED
(cruise_state == 3) || // STANDSTILL
(cruise_state == 4) || // OVERRIDE
(cruise_state == 6) || // PRE_FAULT
(cruise_state == 7); // PRE_CANCEL
vehicle_moving = cruise_state != 3; // STANDSTILL
pcm_cruise_check(cruise_engaged);
}
}
@ -102,6 +102,7 @@ static bool tesla_tx_hook(const CANPacket_t *to_send) {
if(addr == 0x2b9) {
// DAS_control: longitudinal control message
int acc_state = ((GET_BYTE(to_send, 1) & 0xF0U) >> 4);
if (tesla_longitudinal) {
// No AEB events may be sent by openpilot
int aeb_event = GET_BYTE(to_send, 2) & 0x03U;
@ -125,6 +126,8 @@ static bool tesla_tx_hook(const CANPacket_t *to_send) {
violation |= longitudinal_accel_checks(raw_accel_max, TESLA_LONG_LIMITS);
violation |= longitudinal_accel_checks(raw_accel_min, TESLA_LONG_LIMITS);
} else if(acc_state == 13) {
// Allow to cancel if not using openpilot longitudinal
} else {
violation = true;
}

View File

@ -14,7 +14,7 @@ class TestTeslaSafetyBase(common.PandaCarSafetyTest):
FWD_BLACKLISTED_ADDRS = {2: [MSG_DAS_steeringControl, MSG_APS_eacMonitor]}
TX_MSGS = [[MSG_DAS_steeringControl, 0], [MSG_APS_eacMonitor, 0], [MSG_DAS_Control, 0]]
STANDSTILL_THRESHOLD = 1
STANDSTILL_THRESHOLD = 0.1
GAS_PRESSED_THRESHOLD = 3
FWD_BUS_LOOKUP = {0: 2, 2: 0}
@ -34,7 +34,7 @@ class TestTeslaSafetyBase(common.PandaCarSafetyTest):
return self.packer.make_can_msg_panda("DI_speed", 0, values)
def _vehicle_moving_msg(self, speed: float):
values = {"DI_vehicleHoldState": 3 if speed <= self.STANDSTILL_THRESHOLD else 0}
values = {"DI_cruiseState": 3 if speed <= self.STANDSTILL_THRESHOLD else 2}
return self.packer.make_can_msg_panda("DI_state", 0, values)
def _user_gas_msg(self, gas):