mirror of
https://github.com/infiniteCable2/opendbc.git
synced 2026-02-18 13:03:52 +08:00
41 lines
1.9 KiB
C
41 lines
1.9 KiB
C
#include "opendbc/safety/declarations.h"
|
|
|
|
bool get_longitudinal_allowed(void) {
|
|
return controls_allowed && !gas_pressed_prev;
|
|
}
|
|
|
|
// Safety checks for longitudinal actuation
|
|
bool longitudinal_accel_checks(int desired_accel, const LongitudinalLimits limits) {
|
|
bool accel_valid = get_longitudinal_allowed() && !safety_max_limit_check(desired_accel, limits.max_accel, limits.min_accel);
|
|
bool accel_valid_override = controls_allowed && desired_accel == limits.override_accel && limits.allow_override;
|
|
bool accel_inactive = desired_accel == limits.inactive_accel;
|
|
return !(accel_valid || accel_inactive || accel_valid_override);
|
|
}
|
|
|
|
bool longitudinal_speed_checks(int desired_speed, const LongitudinalLimits limits) {
|
|
return !get_longitudinal_allowed() && (desired_speed != limits.inactive_speed);
|
|
}
|
|
|
|
bool longitudinal_transmission_rpm_checks(int desired_transmission_rpm, const LongitudinalLimits limits) {
|
|
bool transmission_rpm_valid = get_longitudinal_allowed() && !safety_max_limit_check(desired_transmission_rpm, limits.max_transmission_rpm, limits.min_transmission_rpm);
|
|
bool transmission_rpm_inactive = desired_transmission_rpm == limits.inactive_transmission_rpm;
|
|
return !(transmission_rpm_valid || transmission_rpm_inactive);
|
|
}
|
|
|
|
bool longitudinal_gas_checks(int desired_gas, const LongitudinalLimits limits) {
|
|
bool gas_valid = get_longitudinal_allowed() && !safety_max_limit_check(desired_gas, limits.max_gas, limits.min_gas);
|
|
bool gas_inactive = desired_gas == limits.inactive_gas;
|
|
return !(gas_valid || gas_inactive);
|
|
}
|
|
|
|
bool longitudinal_brake_checks(int desired_brake, const LongitudinalLimits limits) {
|
|
bool violation = false;
|
|
violation |= !get_longitudinal_allowed() && (desired_brake != 0);
|
|
violation |= desired_brake > limits.max_brake;
|
|
return violation;
|
|
}
|
|
|
|
bool longitudinal_interceptor_checks(const CANPacket_t *msg) {
|
|
return !get_longitudinal_allowed() && (msg->data[0] || msg->data[1]);
|
|
}
|