mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-10-28 00:53:45 +08:00
Qualify Chrysler native guards without changing safety limits
This commit is contained in:
@@ -2,43 +2,9 @@
|
||||
|
||||
#include "opendbc/safety/declarations.h"
|
||||
#include "opendbc/safety/modes/chrysler_common.h"
|
||||
#include "opendbc/safety/modes/chrysler_platform.h"
|
||||
#include "opendbc/safety/modes/chrysler_aol.h"
|
||||
|
||||
// Chrysler Pacifica/Jeep addresses
|
||||
#define CHRYSLER_EPS_2 0x220 // EPS driver input torque
|
||||
#define CHRYSLER_ESP_1 0x140 // Brake pedal and vehicle speed
|
||||
#define CHRYSLER_ESP_8 0x11C // Brake pedal and vehicle speed
|
||||
#define CHRYSLER_ECM_5 0x22F // Throttle position sensor
|
||||
#define CHRYSLER_DAS_3 0x1F4 // ACC engagement states from DASM
|
||||
#define CHRYSLER_DAS_6 0x2A6 // LKAS HUD and auto headlight control from DASM
|
||||
#define CHRYSLER_LKAS_COMMAND 0x292 // LKAS controls from DASM
|
||||
#define CHRYSLER_CRUISE_BUTTONS 0x23B // Cruise control buttons
|
||||
|
||||
// RAM DT addresses
|
||||
#define CHRYSLER_RAM_DT_EPS_2 0x31
|
||||
#define CHRYSLER_RAM_DT_ESP_1 0x83
|
||||
#define CHRYSLER_RAM_DT_ESP_8 0x79
|
||||
#define CHRYSLER_RAM_DT_ECM_5 0x9D
|
||||
#define CHRYSLER_RAM_DT_DAS_3 0x99
|
||||
#define CHRYSLER_RAM_DT_DAS_6 0xFA
|
||||
#define CHRYSLER_RAM_DT_LKAS_COMMAND 0xA6
|
||||
#define CHRYSLER_RAM_DT_CRUISE_BUTTONS 0xB1
|
||||
|
||||
// RAM HD addresses
|
||||
#define CHRYSLER_RAM_HD_EPS_2 0x220
|
||||
#define CHRYSLER_RAM_HD_ESP_1 0x140
|
||||
#define CHRYSLER_RAM_HD_ESP_8 0x11C
|
||||
#define CHRYSLER_RAM_HD_ECM_5 0x22F
|
||||
#define CHRYSLER_RAM_HD_DAS_3 0x1F4
|
||||
#define CHRYSLER_RAM_HD_DAS_6 0x275
|
||||
#define CHRYSLER_RAM_HD_LKAS_COMMAND 0x276
|
||||
#define CHRYSLER_RAM_HD_CRUISE_BUTTONS 0x23A
|
||||
|
||||
typedef enum {
|
||||
CHRYSLER_RAM_DT,
|
||||
CHRYSLER_RAM_HD,
|
||||
CHRYSLER_PACIFICA, // plus Jeep
|
||||
} ChryslerPlatform;
|
||||
static ChryslerPlatform chrysler_platform;
|
||||
static bool chrysler_jeep_hold;
|
||||
static bool chrysler_hold_armed;
|
||||
static bool chrysler_hold_cancelled;
|
||||
@@ -56,8 +22,8 @@ static bool chrysler_hold_ready(void) {
|
||||
for (int i = 0; i < current_safety_config.rx_checks_len; i++) {
|
||||
const RxStatus *status = ¤t_safety_config.rx_checks[i].status;
|
||||
healthy &= status->msg_seen && status->valid_checksum && status->valid_quality_flag &&
|
||||
status->wrong_counters < MAX_WRONG_COUNTERS && !status->lagging &&
|
||||
safety_get_ts_elapsed(now, status->last_timestamp) <= 1000000U;
|
||||
(status->wrong_counters < MAX_WRONG_COUNTERS) && !status->lagging &&
|
||||
(safety_get_ts_elapsed(now, status->last_timestamp) <= 1000000U);
|
||||
}
|
||||
return chrysler_jeep_hold && healthy && chrysler_hold_gear_seen && chrysler_hold_drive &&
|
||||
safety_get_ts_elapsed(now, chrysler_hold_gear_timestamp) <= 100000U &&
|
||||
@@ -65,15 +31,10 @@ static bool chrysler_hold_ready(void) {
|
||||
((chrysler_hold_stock[5] & 0xC0U) == 0U);
|
||||
}
|
||||
|
||||
#define CHRYSLER_ADDR(name) ((uint32_t)((chrysler_platform == CHRYSLER_RAM_DT) ? CHRYSLER_RAM_DT_##name : \
|
||||
((chrysler_platform == CHRYSLER_RAM_HD) ? CHRYSLER_RAM_HD_##name : CHRYSLER_##name)))
|
||||
|
||||
static uint8_t chrysler_get_counter(const CANPacket_t *msg) {
|
||||
return (uint8_t)(msg->data[6] >> 4);
|
||||
}
|
||||
|
||||
#include "opendbc/safety/modes/chrysler_aol.h"
|
||||
|
||||
static void chrysler_rx_hook(const CANPacket_t *msg) {
|
||||
chrysler_aol_rx(msg);
|
||||
// Measured EPS torque
|
||||
@@ -129,7 +90,7 @@ static void chrysler_hold_cancel_rx(const CANPacket_t *msg) {
|
||||
// its known size and advancing counter without inventing a CRC contract.
|
||||
const uint8_t counter = (uint8_t)(msg->data[3] >> 4);
|
||||
const bool valid = (GET_LEN(msg) == 5U) &&
|
||||
(!chrysler_hold_gear_initialized || counter == ((chrysler_hold_gear_counter + 1U) & 0xFU));
|
||||
(!chrysler_hold_gear_initialized || (counter == ((chrysler_hold_gear_counter + 1U) & 0xFU)));
|
||||
chrysler_hold_gear_initialized = true;
|
||||
chrysler_hold_gear_counter = counter;
|
||||
chrysler_hold_gear_seen = valid;
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
// Platform declarations shared by the stock and optional AOL owners.
|
||||
|
||||
// Chrysler Pacifica/Jeep addresses
|
||||
#define CHRYSLER_EPS_2 0x220U // EPS driver input torque
|
||||
#define CHRYSLER_ESP_1 0x140U // Brake pedal and vehicle speed
|
||||
#define CHRYSLER_ESP_8 0x11CU // Brake pedal and vehicle speed
|
||||
#define CHRYSLER_ECM_5 0x22FU // Throttle position sensor
|
||||
#define CHRYSLER_DAS_3 0x1F4U // ACC engagement states from DASM
|
||||
#define CHRYSLER_DAS_6 0x2A6U // LKAS HUD and auto headlight control from DASM
|
||||
#define CHRYSLER_LKAS_COMMAND 0x292U // LKAS controls from DASM
|
||||
#define CHRYSLER_CRUISE_BUTTONS 0x23BU // Cruise control buttons
|
||||
|
||||
// RAM DT addresses
|
||||
#define CHRYSLER_RAM_DT_EPS_2 0x31U
|
||||
#define CHRYSLER_RAM_DT_ESP_1 0x83U
|
||||
#define CHRYSLER_RAM_DT_ESP_8 0x79U
|
||||
#define CHRYSLER_RAM_DT_ECM_5 0x9DU
|
||||
#define CHRYSLER_RAM_DT_DAS_3 0x99U
|
||||
#define CHRYSLER_RAM_DT_DAS_6 0xFAU
|
||||
#define CHRYSLER_RAM_DT_LKAS_COMMAND 0xA6U
|
||||
#define CHRYSLER_RAM_DT_CRUISE_BUTTONS 0xB1U
|
||||
|
||||
// RAM HD addresses
|
||||
#define CHRYSLER_RAM_HD_EPS_2 0x220U
|
||||
#define CHRYSLER_RAM_HD_ESP_1 0x140U
|
||||
#define CHRYSLER_RAM_HD_ESP_8 0x11CU
|
||||
#define CHRYSLER_RAM_HD_ECM_5 0x22FU
|
||||
#define CHRYSLER_RAM_HD_DAS_3 0x1F4U
|
||||
#define CHRYSLER_RAM_HD_DAS_6 0x275U
|
||||
#define CHRYSLER_RAM_HD_LKAS_COMMAND 0x276U
|
||||
#define CHRYSLER_RAM_HD_CRUISE_BUTTONS 0x23AU
|
||||
|
||||
typedef enum {
|
||||
CHRYSLER_RAM_DT,
|
||||
CHRYSLER_RAM_HD,
|
||||
CHRYSLER_PACIFICA, // plus Jeep
|
||||
} ChryslerPlatform;
|
||||
static ChryslerPlatform chrysler_platform;
|
||||
|
||||
#define CHRYSLER_ADDR(name) ((uint32_t)((chrysler_platform == CHRYSLER_RAM_DT) ? CHRYSLER_RAM_DT_##name : \
|
||||
((chrysler_platform == CHRYSLER_RAM_HD) ? CHRYSLER_RAM_HD_##name : CHRYSLER_##name)))
|
||||
@@ -223,3 +223,32 @@ class TestChryslerAolSafety(unittest.TestCase):
|
||||
self.feed(26, active=False, brake=True)
|
||||
self.assertEqual(self.native.aol_get_permission_mask(), 1)
|
||||
self.assertFalse(self.native.get_controls_allowed())
|
||||
|
||||
def test_malformed_physical_buttons_require_fresh_engagement(self):
|
||||
for candidate in CHRYSLER_AOL_CARS:
|
||||
for fault in ('checksum', 'short', 'long'):
|
||||
with self.subTest(candidate=candidate, fault=fault):
|
||||
self.arm(candidate)
|
||||
address, data, bus = self.packer.make_can_msg('CRUISE_BUTTONS', 0, {})
|
||||
if fault == 'checksum':
|
||||
invalid = bytearray(data)
|
||||
invalid[-1] ^= 1
|
||||
data = bytes(invalid)
|
||||
elif fault == 'short':
|
||||
data = data[:2]
|
||||
else:
|
||||
data += b'\x00'
|
||||
self.native.safety_rx_hook(self.packet((address, data, bus)))
|
||||
self.assertEqual(self.native.aol_get_permission_mask(), 0)
|
||||
self.assertFalse(self.native.safety_tx_hook(self.packet(create_lkas_command(self.packer, self.cp, 3, True))))
|
||||
# Fresh healthy source traffic alone cannot undo the physical inhibit.
|
||||
self.feed(23)
|
||||
self.native.aol_set_host_request(1)
|
||||
self.assertEqual(self.native.aol_get_permission_mask(), 0)
|
||||
self.assertFalse(self.native.get_controls_allowed())
|
||||
self.feed(24, active=True)
|
||||
self.native.aol_set_host_request(1)
|
||||
self.assertEqual(self.native.aol_get_permission_mask(), 1)
|
||||
self.feed(25, active=False, brake=True)
|
||||
self.assertEqual(self.native.aol_get_permission_mask(), 1)
|
||||
self.assertFalse(self.native.get_controls_allowed())
|
||||
|
||||
Reference in New Issue
Block a user