mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-10-28 00:53:45 +08:00
Limit Steering Counter Repair to Bolt Pedal Profiles
This commit is contained in:
@@ -267,6 +267,7 @@ class CarController(CarControllerBase):
|
||||
self.long_pitch_input = None
|
||||
self.bolt_removed_cancel_credit_used = 0
|
||||
self.bolt_pedal_removed = is_bolt_pedal_removed_profile(CP) or is_bolt_pedal_removed_profile(CP, stock_only=True)
|
||||
self.bolt_steering_ack_counter = is_bolt_pedal_profile(CP) or is_bolt_pedal_profile(CP, stock_only=True)
|
||||
self.bolt_present_no_acc_stock = is_bolt_present_no_acc_pedal_profile(CP, stock_only=True)
|
||||
self.truck_tuning = TruckTuning() if truck_tuning_supported(CP) else None
|
||||
self.truck_tuning_input = None
|
||||
@@ -604,9 +605,11 @@ class CarController(CarControllerBase):
|
||||
if CS.loopback_lka_steering_cmd_ts_nanos == 0 or out_of_sync:
|
||||
steer_step = self.params.STEER_STEP
|
||||
|
||||
if CS.loopback_lka_steering_cmd_updated:
|
||||
# Batched or duplicate acknowledgements must not advance a local count.
|
||||
self.lka_steering_cmd_counter = (CS.loopback_lka_steering_cmd_counter + 1) % 4
|
||||
if self.bolt_steering_ack_counter:
|
||||
if CS.loopback_lka_steering_cmd_updated:
|
||||
self.lka_steering_cmd_counter = (CS.loopback_lka_steering_cmd_counter + 1) % 4
|
||||
else:
|
||||
self.lka_steering_cmd_counter += 1 if CS.loopback_lka_steering_cmd_updated else 0
|
||||
|
||||
# Avoid GM EPS faults when transmitting messages too close together: skip this transmit if we
|
||||
# received the ASCMLKASteeringCmd loopback confirmation too recently
|
||||
|
||||
@@ -94,6 +94,33 @@ class TestBoltVoltConfigurations(unittest.TestCase):
|
||||
self.assertEqual((data[0] >> 4) & 3, expected)
|
||||
self.assertFalse(data[0] & 8)
|
||||
|
||||
def test_nonpedal_gm_preserves_legacy_loopback_counter_progression(self):
|
||||
for identity in (CAR.CHEVROLET_VOLT, CAR.CHEVROLET_VOLT_CAMERA, CAR.CHEVROLET_VOLT_2019,
|
||||
CAR.CHEVROLET_BOLT_EUV):
|
||||
for alpha in (False, True):
|
||||
with self.subTest(identity=identity, alpha=alpha):
|
||||
cp = ordinary_params(identity, alpha=alpha, radar=True)
|
||||
cs = CarState(cp)
|
||||
parsers = cs.get_can_parsers(cp)
|
||||
packer = CANPacker(DBC[identity][Bus.pt])
|
||||
controller = CarController(DBC[identity], cp)
|
||||
self.assertFalse(controller.bolt_steering_ack_counter)
|
||||
control = structs.CarControl()
|
||||
expected = 0
|
||||
for step, received in enumerate(([3], [0, 1], [0, 0], [1], [], [2, 3], [0])):
|
||||
now = 1_000_000_000 + step * 100_000_000
|
||||
packets = [packer.make_can_msg("ASCMLKASteeringCmd", 128, {"RollingCounter": value}) for value in received]
|
||||
for parser in parsers.values():
|
||||
parser.update([(now - 20_000_000, packets)])
|
||||
cs.out = cs.update(parsers).as_reader()
|
||||
expected += bool(received)
|
||||
controller.frame = 20 + step * 10
|
||||
_, commands = controller.update(control.as_reader(), cs, now)
|
||||
steering = [message for message in commands if message[0] == 0x180 and message[2] == 0]
|
||||
self.assertEqual(len(steering), 1)
|
||||
self.assertEqual((steering[0][1][0] >> 4) & 3, expected % 4)
|
||||
self.assertFalse(steering[0][1][0] & 8)
|
||||
|
||||
def test_all_bolt_pedal_generations_withdraw_on_missing_stale_or_future_gear(self):
|
||||
for candidate in PEDAL_BOLT_CAR:
|
||||
for alpha in (False, True):
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"protected_inventory_sha256": "470c96defd2caf79d968f376298c74b5d1074d38bbac81a0c1dca0048efe7d7b", "schema_version": 1}
|
||||
{"protected_inventory_sha256": "a9f832c3ebc38987657921c543c1cad657a126d8a667f556f52a639c38ed8d2f", "schema_version": 1}
|
||||
|
||||
Reference in New Issue
Block a user