mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-10-01 03:43:46 +08:00
pre-ap
This commit is contained in:
@@ -63,14 +63,14 @@ def test_preap_aol_stalk_cancel_and_reengagement(stock_main):
|
||||
assert safety.safety_tx_hook(libsafety_py.make_CANPacket(addr, bus, dat)), (frame, hex(addr), dat.hex())
|
||||
if addr == 0x488 and dat[2] >> 6 == 1:
|
||||
active_commands += 1
|
||||
assert active_commands == (290 if stock_main else 140)
|
||||
assert active_commands == (240 if stock_main else 140)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('failure', ['stale', 'wrong_mode', 'wrong_param', 'rx_invalid', 'park', 'door', 'override', 'cancel'])
|
||||
def test_preap_authorization_fails_closed(failure):
|
||||
cp = CarInterface.get_non_essential_params(CAR.TESLA_MODEL_S_PREAP)
|
||||
out = SimpleNamespace(gearShifter=structs.CarState.GearShifter.drive, doorOpen=False, steeringDisengage=False)
|
||||
cs = SimpleNamespace(out=out, engagement=SimpleNamespace(lateralEnabled=True), di_cruise_state='OFF')
|
||||
cs = SimpleNamespace(out=out, engagement=SimpleNamespace(lateralEnabled=True, lateralRearmRequired=False), di_cruise_state='OFF')
|
||||
panda = SimpleNamespace(safetyModel=cp.safetyConfigs[0].safetyModel, safetyParam=0,
|
||||
safetyRxChecksInvalid=False, alternativeExperience=32, controlsAllowed=True)
|
||||
assert preap_lateral_authorized(cp, cs, [panda], True)
|
||||
@@ -106,5 +106,13 @@ def test_preap_physical_lateral_session_requires_new_pull_after_reset(reset):
|
||||
engagement.check_can_engage(reset == 'door', gear, False)
|
||||
engagement.check_can_engage(False, structs.CarState.GearShifter.drive, False)
|
||||
assert not engagement.lateralEnabled
|
||||
cp = CarInterface.get_non_essential_params(CAR.TESLA_MODEL_S_PREAP)
|
||||
cs = SimpleNamespace(engagement=engagement, di_cruise_state='STANDBY',
|
||||
out=SimpleNamespace(gearShifter=structs.CarState.GearShifter.drive, doorOpen=False, steeringDisengage=False))
|
||||
panda = SimpleNamespace(safetyModel=cp.safetyConfigs[0].safetyModel, safetyParam=0,
|
||||
safetyRxChecksInvalid=False, alternativeExperience=32, controlsAllowed=True)
|
||||
for _ in range(50):
|
||||
assert not preap_lateral_authorized(cp, cs, [panda], True)
|
||||
engagement.process_buttons(2, 0, 12000, 10., 'KPH', False, False, True, False)
|
||||
assert engagement.lateralEnabled
|
||||
assert preap_lateral_authorized(cp, cs, [panda], True)
|
||||
|
||||
@@ -23,6 +23,7 @@ class StarPilotEvents:
|
||||
self.events = Events(starpilot=True)
|
||||
|
||||
self.always_on_lateral_allowed_previously = False
|
||||
self.aol_alert_active_previously = False
|
||||
self.previous_traffic_mode = False
|
||||
self.previous_switchback_mode = False
|
||||
self.random_event_playing = False
|
||||
@@ -58,11 +59,7 @@ class StarPilotEvents:
|
||||
else:
|
||||
self.max_acceleration = 0
|
||||
|
||||
if sm["starpilotCarState"].alwaysOnLateralAllowed != self.always_on_lateral_allowed_previously:
|
||||
if sm["starpilotCarState"].alwaysOnLateralAllowed:
|
||||
self.events.add(StarPilotEventName.lkasEnable)
|
||||
else:
|
||||
self.events.add(StarPilotEventName.lkasDisable)
|
||||
self.update_aol_alerts(sm["carParams"], sm["starpilotCarState"])
|
||||
|
||||
if self.starpilot_planner.starpilot_vcruise.forcing_stop:
|
||||
self.events.add(StarPilotEventName.forcingStop)
|
||||
@@ -220,3 +217,10 @@ class StarPilotEvents:
|
||||
|
||||
self.always_on_lateral_allowed_previously = sm["starpilotCarState"].alwaysOnLateralAllowed
|
||||
self.played_events.update(STARPILOT_EVENT_NAME[event] for event in self.events.names)
|
||||
|
||||
def update_aol_alerts(self, car_params, car_state):
|
||||
active = (car_state.alwaysOnLateralEnabled if car_params.carFingerprint == "TESLA_MODEL_S_PREAP"
|
||||
else car_state.alwaysOnLateralAllowed)
|
||||
if active != self.aol_alert_active_previously:
|
||||
self.events.add(StarPilotEventName.lkasEnable if active else StarPilotEventName.lkasDisable)
|
||||
self.aol_alert_active_previously = active
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
from openpilot.starpilot.controls.lib.starpilot_events import StarPilotEvents, StarPilotEventName
|
||||
|
||||
|
||||
def test_preap_chimes_when_authorized_not_when_merely_selected():
|
||||
events = StarPilotEvents(None, None, None)
|
||||
cp = SimpleNamespace(carFingerprint='TESLA_MODEL_S_PREAP')
|
||||
cs = SimpleNamespace(alwaysOnLateralAllowed=True, alwaysOnLateralEnabled=False)
|
||||
for active, expected in ((False, []), (True, [StarPilotEventName.lkasEnable]),
|
||||
(True, []), (False, [StarPilotEventName.lkasDisable]), (False, [])):
|
||||
events.events.clear()
|
||||
cs.alwaysOnLateralEnabled = active
|
||||
events.update_aol_alerts(cp, cs)
|
||||
assert events.events.names == expected
|
||||
|
||||
|
||||
def test_ap1_preserves_selection_chime():
|
||||
events = StarPilotEvents(None, None, None)
|
||||
events.update_aol_alerts(SimpleNamespace(carFingerprint='TESLA_MODEL_S_HW1'),
|
||||
SimpleNamespace(alwaysOnLateralAllowed=True, alwaysOnLateralEnabled=False))
|
||||
assert events.events.names == [StarPilotEventName.lkasEnable]
|
||||
Reference in New Issue
Block a user