mirror of https://github.com/commaai/panda.git
GM: clean up longitudinal safety test (#1573)
* clean up gm long safety test * move to long base * common brake
This commit is contained in:
parent
25f1444d73
commit
61590b681a
|
@ -17,6 +17,11 @@ class Buttons:
|
||||||
class GmLongitudinalBase(common.PandaSafetyTest):
|
class GmLongitudinalBase(common.PandaSafetyTest):
|
||||||
# pylint: disable=no-member,abstract-method
|
# pylint: disable=no-member,abstract-method
|
||||||
|
|
||||||
|
MAX_GAS = 0
|
||||||
|
MAX_REGEN = 0
|
||||||
|
INACTIVE_REGEN = 0
|
||||||
|
MAX_BRAKE = 400
|
||||||
|
|
||||||
PCM_CRUISE = False # openpilot can control the PCM state if longitudinal
|
PCM_CRUISE = False # openpilot can control the PCM state if longitudinal
|
||||||
|
|
||||||
def test_set_resume_buttons(self):
|
def test_set_resume_buttons(self):
|
||||||
|
@ -41,6 +46,24 @@ class GmLongitudinalBase(common.PandaSafetyTest):
|
||||||
self._rx(self._button_msg(Buttons.CANCEL))
|
self._rx(self._button_msg(Buttons.CANCEL))
|
||||||
self.assertFalse(self.safety.get_controls_allowed())
|
self.assertFalse(self.safety.get_controls_allowed())
|
||||||
|
|
||||||
|
def test_brake_safety_check(self):
|
||||||
|
for enabled in [0, 1]:
|
||||||
|
for b in range(0, 500):
|
||||||
|
self.safety.set_controls_allowed(enabled)
|
||||||
|
if abs(b) > self.MAX_BRAKE or (not enabled and b != 0):
|
||||||
|
self.assertFalse(self._tx(self._send_brake_msg(b)))
|
||||||
|
else:
|
||||||
|
self.assertTrue(self._tx(self._send_brake_msg(b)))
|
||||||
|
|
||||||
|
def test_gas_safety_check(self):
|
||||||
|
# Block if enabled and out of actuation range, disabled and not inactive regen, or if stock longitudinal
|
||||||
|
for enabled in [0, 1]:
|
||||||
|
for gas_regen in range(0, 2 ** 12 - 1):
|
||||||
|
self.safety.set_controls_allowed(enabled)
|
||||||
|
should_tx = ((enabled and self.MAX_REGEN <= gas_regen <= self.MAX_GAS) or
|
||||||
|
gas_regen == self.INACTIVE_REGEN)
|
||||||
|
self.assertEqual(should_tx, self._tx(self._send_gas_msg(gas_regen)), (enabled, gas_regen))
|
||||||
|
|
||||||
# override these tests from PandaSafetyTest, GM longitudinal uses button enable
|
# override these tests from PandaSafetyTest, GM longitudinal uses button enable
|
||||||
def test_disable_control_allowed_from_cruise(self):
|
def test_disable_control_allowed_from_cruise(self):
|
||||||
pass
|
pass
|
||||||
|
@ -70,11 +93,6 @@ class TestGmSafetyBase(common.PandaSafetyTest, common.DriverTorqueSteeringSafety
|
||||||
DRIVER_TORQUE_ALLOWANCE = 65
|
DRIVER_TORQUE_ALLOWANCE = 65
|
||||||
DRIVER_TORQUE_FACTOR = 4
|
DRIVER_TORQUE_FACTOR = 4
|
||||||
|
|
||||||
MAX_GAS = 0
|
|
||||||
MAX_REGEN = 0
|
|
||||||
INACTIVE_REGEN = 0
|
|
||||||
MAX_BRAKE = 0
|
|
||||||
|
|
||||||
PCM_CRUISE = True # openpilot is tied to the PCM state if not longitudinal
|
PCM_CRUISE = True # openpilot is tied to the PCM state if not longitudinal
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -138,24 +156,6 @@ class TestGmSafetyBase(common.PandaSafetyTest, common.DriverTorqueSteeringSafety
|
||||||
values = {"ACCButtons": buttons}
|
values = {"ACCButtons": buttons}
|
||||||
return self.packer.make_can_msg_panda("ASCMSteeringButton", self.BUTTONS_BUS, values)
|
return self.packer.make_can_msg_panda("ASCMSteeringButton", self.BUTTONS_BUS, values)
|
||||||
|
|
||||||
def test_brake_safety_check(self):
|
|
||||||
for enabled in [0, 1]:
|
|
||||||
for b in range(0, 500):
|
|
||||||
self.safety.set_controls_allowed(enabled)
|
|
||||||
if abs(b) > self.MAX_BRAKE or (not enabled and b != 0):
|
|
||||||
self.assertFalse(self._tx(self._send_brake_msg(b)))
|
|
||||||
else:
|
|
||||||
self.assertTrue(self._tx(self._send_brake_msg(b)))
|
|
||||||
|
|
||||||
def test_gas_safety_check(self):
|
|
||||||
# Block if enabled and out of actuation range, disabled and not inactive regen, or if stock longitudinal
|
|
||||||
for enabled in [0, 1]:
|
|
||||||
for gas_regen in range(0, 2 ** 12 - 1):
|
|
||||||
self.safety.set_controls_allowed(enabled)
|
|
||||||
should_tx = ((enabled and self.MAX_REGEN <= gas_regen <= self.MAX_GAS) or
|
|
||||||
gas_regen == self.INACTIVE_REGEN)
|
|
||||||
self.assertEqual(should_tx, self._tx(self._send_gas_msg(gas_regen)), (enabled, gas_regen))
|
|
||||||
|
|
||||||
|
|
||||||
class TestGmAscmSafety(GmLongitudinalBase, TestGmSafetyBase):
|
class TestGmAscmSafety(GmLongitudinalBase, TestGmSafetyBase):
|
||||||
TX_MSGS = [[384, 0], [1033, 0], [1034, 0], [715, 0], [880, 0], # pt bus
|
TX_MSGS = [[384, 0], [1033, 0], [1034, 0], [715, 0], [880, 0], # pt bus
|
||||||
|
@ -169,7 +169,6 @@ class TestGmAscmSafety(GmLongitudinalBase, TestGmSafetyBase):
|
||||||
MAX_GAS = 3072
|
MAX_GAS = 3072
|
||||||
MAX_REGEN = 1404
|
MAX_REGEN = 1404
|
||||||
INACTIVE_REGEN = 1404
|
INACTIVE_REGEN = 1404
|
||||||
MAX_BRAKE = 400
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.packer = CANPackerPanda("gm_global_a_powertrain_generated")
|
self.packer = CANPackerPanda("gm_global_a_powertrain_generated")
|
||||||
|
@ -222,13 +221,6 @@ class TestGmCameraSafety(TestGmCameraSafetyBase):
|
||||||
self._rx(self._pcm_status_msg(enabled))
|
self._rx(self._pcm_status_msg(enabled))
|
||||||
self.assertEqual(enabled, self._tx(self._button_msg(Buttons.CANCEL)))
|
self.assertEqual(enabled, self._tx(self._button_msg(Buttons.CANCEL)))
|
||||||
|
|
||||||
# GM Cam safety mode does not allow longitudinal messages
|
|
||||||
def test_brake_safety_check(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def test_gas_safety_check(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class TestGmCameraLongitudinalSafety(GmLongitudinalBase, TestGmCameraSafetyBase):
|
class TestGmCameraLongitudinalSafety(GmLongitudinalBase, TestGmCameraSafetyBase):
|
||||||
TX_MSGS = [[384, 0], [789, 0], [715, 0], [880, 0], # pt bus
|
TX_MSGS = [[384, 0], [789, 0], [715, 0], [880, 0], # pt bus
|
||||||
|
@ -239,7 +231,6 @@ class TestGmCameraLongitudinalSafety(GmLongitudinalBase, TestGmCameraSafetyBase)
|
||||||
MAX_GAS = 3400
|
MAX_GAS = 3400
|
||||||
MAX_REGEN = 1514
|
MAX_REGEN = 1514
|
||||||
INACTIVE_REGEN = 1554
|
INACTIVE_REGEN = 1554
|
||||||
MAX_BRAKE = 400
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.packer = CANPackerPanda("gm_global_a_powertrain_generated")
|
self.packer = CANPackerPanda("gm_global_a_powertrain_generated")
|
||||||
|
|
Loading…
Reference in New Issue