From ff84a098dfede20d90a78f1dbee2d86086aa7bb4 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 27 Sep 2025 16:50:05 -0700 Subject: [PATCH] consolidate libsafety files (#2808) * consolidate libsafety files * cleanup * even less * E is silly --- .../safety/tests/libsafety/libsafety_py.py | 78 ++++--- opendbc/safety/tests/libsafety/safety.c | 194 +++++++++++++++++- .../safety/tests/libsafety/safety_helpers.h | 192 ----------------- .../safety/tests/libsafety/safety_helpers.py | 103 ---------- pyproject.toml | 1 + 5 files changed, 245 insertions(+), 323 deletions(-) delete mode 100644 opendbc/safety/tests/libsafety/safety_helpers.h delete mode 100644 opendbc/safety/tests/libsafety/safety_helpers.py diff --git a/opendbc/safety/tests/libsafety/libsafety_py.py b/opendbc/safety/tests/libsafety/libsafety_py.py index 4a5bc0f0..e93b782e 100644 --- a/opendbc/safety/tests/libsafety/libsafety_py.py +++ b/opendbc/safety/tests/libsafety/libsafety_py.py @@ -1,9 +1,7 @@ import os from cffi import FFI -from typing import Protocol from opendbc.safety import LEN_TO_DLC -from opendbc.safety.tests.libsafety.safety_helpers import SafetyHelpers, setup_safety_helpers libsafety_dir = os.path.dirname(os.path.abspath(__file__)) libsafety_fn = os.path.join(libsafety_dir, "libsafety.so") @@ -23,40 +21,68 @@ typedef struct { unsigned char data[64]; } CANPacket_t; """, packed=True) +class CANPacket: + pass ffi.cdef(""" bool safety_rx_hook(CANPacket_t *msg); bool safety_tx_hook(CANPacket_t *msg); int safety_fwd_hook(int bus_num, int addr); int set_safety_hooks(uint16_t mode, uint16_t param); + +void set_controls_allowed(bool c); +bool get_controls_allowed(void); +bool get_longitudinal_allowed(void); +void set_alternative_experience(int mode); +int get_alternative_experience(void); +void set_relay_malfunction(bool c); +bool get_relay_malfunction(void); +bool get_gas_pressed_prev(void); +void set_gas_pressed_prev(bool); +bool get_brake_pressed_prev(void); +bool get_regen_braking_prev(void); +bool get_steering_disengage_prev(void); +bool get_acc_main_on(void); +float get_vehicle_speed_min(void); +float get_vehicle_speed_max(void); +int get_current_safety_mode(void); +int get_current_safety_param(void); + +void set_torque_meas(int min, int max); +int get_torque_meas_min(void); +int get_torque_meas_max(void); +void set_torque_driver(int min, int max); +int get_torque_driver_min(void); +int get_torque_driver_max(void); +void set_desired_torque_last(int t); +void set_rt_torque_last(int t); +void set_desired_angle_last(int t); +int get_desired_angle_last(); +void set_angle_meas(int min, int max); +int get_angle_meas_min(void); +int get_angle_meas_max(void); + +bool get_cruise_engaged_prev(void); +void set_cruise_engaged_prev(bool engaged); +bool get_vehicle_moving(void); +void set_timer(uint32_t t); + +void safety_tick_current_safety_config(); +bool safety_config_valid(); + +void init_tests(void); + +void set_honda_fwd_brake(bool c); +bool get_honda_fwd_brake(void); +void set_honda_alt_brake_msg(bool c); +void set_honda_bosch_long(bool c); +int get_honda_hw(void); """) -setup_safety_helpers(ffi) - - -class CANPacket: - reserved: int - bus: int - data_len_code: int - rejected: int - returned: int - extended: int - addr: int - data: list[int] - - -class LibSafety(SafetyHelpers, Protocol): - def safety_rx_hook(self, msg: CANPacket) -> int: ... - def safety_tx_hook(self, msg: CANPacket) -> int: ... - def safety_fwd_hook(self, bus_num: int, addr: int) -> int: ... - def set_safety_hooks(self, mode: int, param: int) -> int: ... - - +class LibSafety: + pass libsafety: LibSafety = ffi.dlopen(libsafety_fn) - -# helpers - def make_CANPacket(addr: int, bus: int, dat): ret = ffi.new('CANPacket_t *') ret[0].extended = 1 if addr >= 0x800 else 0 diff --git a/opendbc/safety/tests/libsafety/safety.c b/opendbc/safety/tests/libsafety/safety.c index 9e436546..107342d9 100644 --- a/opendbc/safety/tests/libsafety/safety.c +++ b/opendbc/safety/tests/libsafety/safety.c @@ -4,5 +4,195 @@ #include "opendbc/safety/board/can.h" #include "opendbc/safety/safety.h" -// libsafety stuff -#include "opendbc/safety/tests/libsafety/safety_helpers.h" +#include + +void safety_tick_current_safety_config() { + safety_tick(¤t_safety_config); +} + +bool safety_config_valid() { + if (current_safety_config.rx_checks_len <= 0) { + printf("missing RX checks\n"); + return false; + } + + for (int i = 0; i < current_safety_config.rx_checks_len; i++) { + const RxCheck addr = current_safety_config.rx_checks[i]; + bool valid = addr.status.msg_seen && !addr.status.lagging && addr.status.valid_checksum && (addr.status.wrong_counters < MAX_WRONG_COUNTERS) && addr.status.valid_quality_flag; + if (!valid) { + // printf("i %d seen %d lagging %d valid checksum %d wrong counters %d valid quality flag %d\n", i, addr.status.msg_seen, addr.status.lagging, addr.status.valid_checksum, addr.status.wrong_counters, addr.status.valid_quality_flag); + return false; + } + } + return true; +} + +void set_controls_allowed(bool c){ + controls_allowed = c; +} + +void set_alternative_experience(int mode){ + alternative_experience = mode; +} + +void set_relay_malfunction(bool c){ + relay_malfunction = c; +} + +bool get_controls_allowed(void){ + return controls_allowed; +} + +int get_alternative_experience(void){ + return alternative_experience; +} + +bool get_relay_malfunction(void){ + return relay_malfunction; +} + +bool get_gas_pressed_prev(void){ + return gas_pressed_prev; +} + +void set_gas_pressed_prev(bool c){ + gas_pressed_prev = c; +} + +bool get_brake_pressed_prev(void){ + return brake_pressed_prev; +} + +bool get_regen_braking_prev(void){ + return regen_braking_prev; +} + +bool get_steering_disengage_prev(void){ + return steering_disengage_prev; +} + +bool get_cruise_engaged_prev(void){ + return cruise_engaged_prev; +} + +void set_cruise_engaged_prev(bool engaged){ + cruise_engaged_prev = engaged; +} + +bool get_vehicle_moving(void){ + return vehicle_moving; +} + +bool get_acc_main_on(void){ + return acc_main_on; +} + +float get_vehicle_speed_min(void){ + return vehicle_speed.min / VEHICLE_SPEED_FACTOR; +} + +float get_vehicle_speed_max(void){ + return vehicle_speed.max / VEHICLE_SPEED_FACTOR; +} + +int get_current_safety_mode(void){ + return current_safety_mode; +} + +int get_current_safety_param(void){ + return current_safety_param; +} + +void set_timer(uint32_t t){ + timer_cnt = t; +} + +void set_torque_meas(int min, int max){ + torque_meas.min = min; + torque_meas.max = max; +} + +int get_torque_meas_min(void){ + return torque_meas.min; +} + +int get_torque_meas_max(void){ + return torque_meas.max; +} + +void set_torque_driver(int min, int max){ + torque_driver.min = min; + torque_driver.max = max; +} + +int get_torque_driver_min(void){ + return torque_driver.min; +} + +int get_torque_driver_max(void){ + return torque_driver.max; +} + +void set_rt_torque_last(int t){ + rt_torque_last = t; +} + +void set_desired_torque_last(int t){ + desired_torque_last = t; +} + +void set_desired_angle_last(int t){ + desired_angle_last = t; +} + +int get_desired_angle_last(void){ + return desired_angle_last; +} + +void set_angle_meas(int min, int max){ + angle_meas.min = min; + angle_meas.max = max; +} + +int get_angle_meas_min(void){ + return angle_meas.min; +} + +int get_angle_meas_max(void){ + return angle_meas.max; +} + + +// ***** car specific helpers ***** + +void set_honda_alt_brake_msg(bool c){ + honda_alt_brake_msg = c; +} + +void set_honda_bosch_long(bool c){ + honda_bosch_long = c; +} + +int get_honda_hw(void) { + return honda_hw; +} + +void set_honda_fwd_brake(bool c){ + honda_fwd_brake = c; +} + +bool get_honda_fwd_brake(void){ + return honda_fwd_brake; +} + +void init_tests(void){ + safety_mode_cnt = 2U; // avoid ignoring relay_malfunction logic + alternative_experience = 0; + set_timer(0); + ts_steer_req_mismatch_last = 0; + valid_steer_req_count = 0; + invalid_steer_req_count = 0; + + // assumes autopark on safety mode init to avoid a fault. get rid of that for testing + tesla_autopark = false; +} diff --git a/opendbc/safety/tests/libsafety/safety_helpers.h b/opendbc/safety/tests/libsafety/safety_helpers.h deleted file mode 100644 index a37429eb..00000000 --- a/opendbc/safety/tests/libsafety/safety_helpers.h +++ /dev/null @@ -1,192 +0,0 @@ -#include - -void safety_tick_current_safety_config() { - safety_tick(¤t_safety_config); -} - -bool safety_config_valid() { - if (current_safety_config.rx_checks_len <= 0) { - printf("missing RX checks\n"); - return false; - } - - for (int i = 0; i < current_safety_config.rx_checks_len; i++) { - const RxCheck addr = current_safety_config.rx_checks[i]; - bool valid = addr.status.msg_seen && !addr.status.lagging && addr.status.valid_checksum && (addr.status.wrong_counters < MAX_WRONG_COUNTERS) && addr.status.valid_quality_flag; - if (!valid) { - // printf("i %d seen %d lagging %d valid checksum %d wrong counters %d valid quality flag %d\n", i, addr.status.msg_seen, addr.status.lagging, addr.status.valid_checksum, addr.status.wrong_counters, addr.status.valid_quality_flag); - return false; - } - } - return true; -} - -void set_controls_allowed(bool c){ - controls_allowed = c; -} - -void set_alternative_experience(int mode){ - alternative_experience = mode; -} - -void set_relay_malfunction(bool c){ - relay_malfunction = c; -} - -bool get_controls_allowed(void){ - return controls_allowed; -} - -int get_alternative_experience(void){ - return alternative_experience; -} - -bool get_relay_malfunction(void){ - return relay_malfunction; -} - -bool get_gas_pressed_prev(void){ - return gas_pressed_prev; -} - -void set_gas_pressed_prev(bool c){ - gas_pressed_prev = c; -} - -bool get_brake_pressed_prev(void){ - return brake_pressed_prev; -} - -bool get_regen_braking_prev(void){ - return regen_braking_prev; -} - -bool get_steering_disengage_prev(void){ - return steering_disengage_prev; -} - -bool get_cruise_engaged_prev(void){ - return cruise_engaged_prev; -} - -void set_cruise_engaged_prev(bool engaged){ - cruise_engaged_prev = engaged; -} - -bool get_vehicle_moving(void){ - return vehicle_moving; -} - -bool get_acc_main_on(void){ - return acc_main_on; -} - -float get_vehicle_speed_min(void){ - return vehicle_speed.min / VEHICLE_SPEED_FACTOR; -} - -float get_vehicle_speed_max(void){ - return vehicle_speed.max / VEHICLE_SPEED_FACTOR; -} - -int get_current_safety_mode(void){ - return current_safety_mode; -} - -int get_current_safety_param(void){ - return current_safety_param; -} - -void set_timer(uint32_t t){ - timer_cnt = t; -} - -void set_torque_meas(int min, int max){ - torque_meas.min = min; - torque_meas.max = max; -} - -int get_torque_meas_min(void){ - return torque_meas.min; -} - -int get_torque_meas_max(void){ - return torque_meas.max; -} - -void set_torque_driver(int min, int max){ - torque_driver.min = min; - torque_driver.max = max; -} - -int get_torque_driver_min(void){ - return torque_driver.min; -} - -int get_torque_driver_max(void){ - return torque_driver.max; -} - -void set_rt_torque_last(int t){ - rt_torque_last = t; -} - -void set_desired_torque_last(int t){ - desired_torque_last = t; -} - -void set_desired_angle_last(int t){ - desired_angle_last = t; -} - -int get_desired_angle_last(void){ - return desired_angle_last; -} - -void set_angle_meas(int min, int max){ - angle_meas.min = min; - angle_meas.max = max; -} - -int get_angle_meas_min(void){ - return angle_meas.min; -} - -int get_angle_meas_max(void){ - return angle_meas.max; -} - - -// ***** car specific helpers ***** - -void set_honda_alt_brake_msg(bool c){ - honda_alt_brake_msg = c; -} - -void set_honda_bosch_long(bool c){ - honda_bosch_long = c; -} - -int get_honda_hw(void) { - return honda_hw; -} - -void set_honda_fwd_brake(bool c){ - honda_fwd_brake = c; -} - -bool get_honda_fwd_brake(void){ - return honda_fwd_brake; -} - -void init_tests(void){ - safety_mode_cnt = 2U; // avoid ignoring relay_malfunction logic - alternative_experience = 0; - set_timer(0); - ts_steer_req_mismatch_last = 0; - valid_steer_req_count = 0; - invalid_steer_req_count = 0; - - // assumes autopark on safety mode init to avoid a fault. get rid of that for testing - tesla_autopark = false; -} diff --git a/opendbc/safety/tests/libsafety/safety_helpers.py b/opendbc/safety/tests/libsafety/safety_helpers.py deleted file mode 100644 index 8c9b55fd..00000000 --- a/opendbc/safety/tests/libsafety/safety_helpers.py +++ /dev/null @@ -1,103 +0,0 @@ -from typing import Protocol - - -def setup_safety_helpers(ffi): - ffi.cdef(""" - void set_controls_allowed(bool c); - bool get_controls_allowed(void); - bool get_longitudinal_allowed(void); - void set_alternative_experience(int mode); - int get_alternative_experience(void); - void set_relay_malfunction(bool c); - bool get_relay_malfunction(void); - bool get_gas_pressed_prev(void); - void set_gas_pressed_prev(bool); - bool get_brake_pressed_prev(void); - bool get_regen_braking_prev(void); - bool get_steering_disengage_prev(void); - bool get_acc_main_on(void); - float get_vehicle_speed_min(void); - float get_vehicle_speed_max(void); - int get_current_safety_mode(void); - int get_current_safety_param(void); - - void set_torque_meas(int min, int max); - int get_torque_meas_min(void); - int get_torque_meas_max(void); - void set_torque_driver(int min, int max); - int get_torque_driver_min(void); - int get_torque_driver_max(void); - void set_desired_torque_last(int t); - void set_rt_torque_last(int t); - void set_desired_angle_last(int t); - int get_desired_angle_last(); - void set_angle_meas(int min, int max); - int get_angle_meas_min(void); - int get_angle_meas_max(void); - - bool get_cruise_engaged_prev(void); - void set_cruise_engaged_prev(bool engaged); - bool get_vehicle_moving(void); - void set_timer(uint32_t t); - - void safety_tick_current_safety_config(); - bool safety_config_valid(); - - void init_tests(void); - - void set_honda_fwd_brake(bool c); - bool get_honda_fwd_brake(void); - void set_honda_alt_brake_msg(bool c); - void set_honda_bosch_long(bool c); - int get_honda_hw(void); - """) - - -class SafetyHelpers(Protocol): - def set_controls_allowed(self, c: bool) -> None: ... - def get_controls_allowed(self) -> bool: ... - def get_longitudinal_allowed(self) -> bool: ... - def set_alternative_experience(self, mode: int) -> None: ... - def get_alternative_experience(self) -> int: ... - def set_relay_malfunction(self, c: bool) -> None: ... - def get_relay_malfunction(self) -> bool: ... - def get_gas_pressed_prev(self) -> bool: ... - def set_gas_pressed_prev(self, c: bool) -> None: ... - def get_brake_pressed_prev(self) -> bool: ... - def get_regen_braking_prev(self) -> bool: ... - def get_steering_disengage_prev(self) -> bool: ... - def get_acc_main_on(self) -> bool: ... - def get_vehicle_speed_min(self) -> int: ... - def get_vehicle_speed_max(self) -> int: ... - def get_current_safety_mode(self) -> int: ... - def get_current_safety_param(self) -> int: ... - - def set_torque_meas(self, min: int, max: int) -> None: ... # noqa: A002 - def get_torque_meas_min(self) -> int: ... - def get_torque_meas_max(self) -> int: ... - def set_torque_driver(self, min: int, max: int) -> None: ... # noqa: A002 - def get_torque_driver_min(self) -> int: ... - def get_torque_driver_max(self) -> int: ... - def set_desired_torque_last(self, t: int) -> None: ... - def set_rt_torque_last(self, t: int) -> None: ... - def set_desired_angle_last(self, t: int) -> None: ... - def get_desired_angle_last(self) -> int: ... - def set_angle_meas(self, min: int, max: int) -> None: ... # noqa: A002 - def get_angle_meas_min(self) -> int: ... - def get_angle_meas_max(self) -> int: ... - - def get_cruise_engaged_prev(self) -> bool: ... - def set_cruise_engaged_prev(self, enabled: bool) -> None: ... - def get_vehicle_moving(self) -> bool: ... - def set_timer(self, t: int) -> None: ... - - def safety_tick_current_safety_config(self) -> None: ... - def safety_config_valid(self) -> bool: ... - - def init_tests(self) -> None: ... - - def set_honda_fwd_brake(self, c: bool) -> None: ... - def get_honda_fwd_brake(self) -> bool: ... - def set_honda_alt_brake_msg(self, c: bool) -> None: ... - def set_honda_bosch_long(self, c: bool) -> None: ... - def get_honda_hw(self) -> int: ... diff --git a/pyproject.toml b/pyproject.toml index 620bd452..393fcb69 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -98,6 +98,7 @@ select = [ "INP001", ] ignore = [ + "E302", "E305", # too restrictive "W292", "E741", "E402",