diff --git a/selfdrive/car/card.py b/selfdrive/car/card.py index f74aaaca69..7a82306912 100755 --- a/selfdrive/car/card.py +++ b/selfdrive/car/card.py @@ -96,10 +96,10 @@ class Car: def set_initial_state(self): if REPLAY: - controls_state = self.params.get("ReplayCarState") - if controls_state is not None: - with log.ControlsState.from_bytes(controls_state) as controls_state: - self.v_cruise_helper.v_cruise_kph = controls_state.vCruise + car_state = self.params.get("ReplayCarState") + if car_state is not None: + with log.CarState.from_bytes(car_state) as car_state: + self.v_cruise_helper.v_cruise_kph = car_state.vCruise def state_update(self) -> car.CarState: """carState update loop, driven by can""" diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 7e54db16f2..ca5fbc1dd1 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -167,12 +167,6 @@ class Controls: def set_initial_state(self): if REPLAY: - # TODO: move this to card - # controls_state = self.params.get("ReplayControlsState") - # if controls_state is not None: - # with log.ControlsState.from_bytes(controls_state) as controls_state: - # self.card.v_cruise_helper.v_cruise_kph = controls_state.vCruise - if any(ps.controlsAllowed for ps in self.sm['pandaStates']): self.state = State.enabled diff --git a/selfdrive/test/process_replay/migration.py b/selfdrive/test/process_replay/migration.py index 152f281948..19d983483d 100644 --- a/selfdrive/test/process_replay/migration.py +++ b/selfdrive/test/process_replay/migration.py @@ -14,6 +14,7 @@ def migrate_all(lr, old_logtime=False, manager_states=False, panda_states=False, msgs = migrate_carParams(msgs, old_logtime) msgs = migrate_gpsLocation(msgs) msgs = migrate_deviceState(msgs) + msgs = migrate_carState(msgs) if manager_states: msgs = migrate_managerState(msgs) if panda_states: @@ -69,6 +70,24 @@ def migrate_deviceState(lr): return all_msgs +def migrate_carState(lr): + all_msgs = [] + vCruise = None + vCruiseCluster = None + for msg in lr: + if msg.which() == 'controlsState': + vCruise = msg.controlsState.vCruise + vCruiseCluster = msg.controlsState.vCruiseCluster + elif msg.which() == 'carState': + cs = msg.as_builder() + cs.carState.vCruise = vCruise + cs.carState.vCruiseCluster = vCruiseCluster + all_msgs.append(cs.as_reader()) + else: + all_msgs.append(msg) + return all_msgs + + def migrate_pandaStates(lr): all_msgs = [] # TODO: safety param migration should be handled automatically diff --git a/selfdrive/test/process_replay/process_replay.py b/selfdrive/test/process_replay/process_replay.py index 71869020b0..06df2d3433 100755 --- a/selfdrive/test/process_replay/process_replay.py +++ b/selfdrive/test/process_replay/process_replay.py @@ -440,18 +440,18 @@ class FrequencyBasedRcvCallback: def controlsd_config_callback(params, cfg, lr): - controlsState = None + carState = None initialized = False for msg in lr: - if msg.which() == "controlsState": - controlsState = msg.controlsState + if msg.which() == "carState": + carState = msg.carState if initialized: break elif msg.which() == "onroadEvents": initialized = car.CarEvent.EventName.controlsInitializing not in [e.name for e in msg.onroadEvents] - assert controlsState is not None and initialized, "controlsState never initialized" - params.put("ReplayControlsState", controlsState.as_builder().to_bytes()) + assert carState is not None and initialized, "carState never initialized" + params.put("ReplayCarState", carState.as_builder().to_bytes()) def locationd_config_pubsub_callback(params, cfg, lr): @@ -472,7 +472,7 @@ CONFIGS = [ ], subs=["controlsState", "carControl", "onroadEvents"], ignore=["logMonoTime", "controlsState.startMonoTime", "controlsState.cumLagMs"], - config_callback=controlsd_config_callback, + # config_callback=controlsd_config_callback, init_callback=get_car_params_callback, should_recv_callback=controlsd_rcv_callback, tolerance=NUMPY_TOLERANCE,