Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion opendbc/safety/modes/subaru.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ static void subaru_rx_hook(const CANPacket_t *msg) {

int angle_meas_new = (GET_BYTES(msg, 4, 2) & 0xFFFFU);
// convert Steering_Torque -> Steering_Angle to centidegrees, to match the ES_LKAS_ANGLE angle request units
angle_meas_new = ROUND(to_signed(angle_meas_new, 16) * -2.17);
angle_meas_new = ROUND(-2.17 * to_signed(angle_meas_new, 16));
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is not needed, but is there to demonstrate that the tests added cover the mutant tests for this line

Feel free to accept this suggestion to undo the change:

Suggested change
angle_meas_new = ROUND(-2.17 * to_signed(angle_meas_new, 16));
angle_meas_new = ROUND(to_signed(angle_meas_new, 16) * -2.17);

update_sample(&angle_meas, angle_meas_new);
}

Expand Down
12 changes: 6 additions & 6 deletions opendbc/safety/tests/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -656,10 +656,14 @@ def test_vehicle_speed_measurements(self):
# TODO: lower tolerance on these tests
self._common_measurement_test(self._speed_msg, 0, 80, 1, self.safety.get_vehicle_speed_min, self.safety.get_vehicle_speed_max)

class AngleScalingSafetyTest(SafetyTestBase):
STEER_ANGLE_MAX: float = 300

class AngleSteeringSafetyTest(VehicleSpeedSafetyTest):
def test_steering_angle_measurements(self):
self._common_measurement_test(self._angle_meas_msg, -self.STEER_ANGLE_MAX, self.STEER_ANGLE_MAX, self.DEG_TO_CAN,
self.safety.get_angle_meas_min, self.safety.get_angle_meas_max)

STEER_ANGLE_MAX: float = 300
class AngleSteeringSafetyTest(VehicleSpeedSafetyTest, AngleScalingSafetyTest):
STEER_ANGLE_TEST_MAX: float | None = None
DEG_TO_CAN: float
ANGLE_RATE_BP: list[float]
Expand Down Expand Up @@ -698,10 +702,6 @@ def _reset_speed_measurement(self, speed):
for _ in range(MAX_SAMPLE_VALS):
self._rx(self._speed_msg(speed))

def test_steering_angle_measurements(self):
self._common_measurement_test(self._angle_meas_msg, -self.STEER_ANGLE_MAX, self.STEER_ANGLE_MAX, self.DEG_TO_CAN,
self.safety.get_angle_meas_min, self.safety.get_angle_meas_max)

def test_angle_cmd_when_enabled(self):
# when controls are allowed, angle cmd rate limit is enforced
speeds = [0., 1., 5., 10., 15., 50.]
Expand Down
3 changes: 1 addition & 2 deletions opendbc/safety/tests/test_subaru.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def fwd_blacklisted_addr(lkas_msg=SubaruMsg.ES_LKAS):
return {SUBARU_CAM_BUS: [lkas_msg, SubaruMsg.ES_DashStatus, SubaruMsg.ES_LKAS_State, SubaruMsg.ES_Infotainment]}


class TestSubaruSafetyBase(common.CarSafetyTest):
class TestSubaruSafetyBase(common.CarSafetyTest, common.AngleScalingSafetyTest):
FLAGS = 0
RELAY_MALFUNCTION_ADDRS = {SUBARU_MAIN_BUS: (SubaruMsg.ES_LKAS, SubaruMsg.ES_DashStatus, SubaruMsg.ES_LKAS_State,
SubaruMsg.ES_Infotainment)}
Expand Down Expand Up @@ -111,7 +111,6 @@ def _pcm_status_msg(self, enable):
values = {"Cruise_Activated": enable}
return self.packer.make_can_msg_safety("CruiseControl", self.ALT_MAIN_BUS, values)


class TestSubaruStockLongitudinalSafetyBase(TestSubaruSafetyBase):
def _cancel_msg(self, cancel, cruise_throttle=0):
values = {"Cruise_Cancel": cancel, "Cruise_Throttle": cruise_throttle}
Expand Down