      super().__init__(CP)
      self.validCnt = {key: 0 for key in RADAR_MSGS}
      self.track_id = 0
  
      self.rcp = _create_radar_can_parser(CP.carFingerprint)
      self.trigger_msg = 0x53f
      self.updated_messages = set()
  
    def update(self, can_strings):
      if self.rcp is None:
        return super().update(None)
 
</s> remove     ret.points = list(self.pts.values())
    self.updated_messages.clear()
    return ret
 </s> add   def _update_delphi_mrr(self):
    for ii in range(1, DELPHI_MRR_RADAR_MSG_COUNT + 1):
      msg = self.rcp.vl[f"MRR_Detection_{ii:03d}"]

      # SCAN_INDEX rotates through 0..3 on each message
      # treat these as separate points
      scanIndex = msg[f"CAN_SCAN_INDEX_2LSB_{ii:02d}"]
      i = (ii - 1) * 4 + scanIndex

      if i not in self.pts:
        self.pts[i] = car.RadarData.RadarPoint.new_message()
        self.pts[i].trackId = self.track_id
        self.pts[i].aRel = float('nan')
        self.pts[i].yvRel = float('nan')
        self.track_id += 1

      valid = bool(msg[f"CAN_DET_VALID_LEVEL_{ii:02d}"])
      amplitude = msg[f"CAN_DET_AMPLITUDE_{ii:02d}"]            # dBsm [-64|63]

      if valid and 0 < amplitude <= 15:
        azimuth = msg[f"CAN_DET_AZIMUTH_{ii:02d}"]              # rad [-3.1416|3.13964]
        dist = msg[f"CAN_DET_RANGE_{ii:02d}"]                   # m [0|255.984]
        distRate = msg[f"CAN_DET_RANGE_RATE_{ii:02d}"]          # m/s [-128|127.984]

        # *** openpilot radar point ***
        self.pts[i].dRel = cos(azimuth) * dist                  # m from front of car
        self.pts[i].yRel = -sin(azimuth) * dist                 # in car frame's y axis, left is positive
        self.pts[i].vRel = distRate                             # m/s

        self.pts[i].measured = True

      else:
        del self.pts[i] </s> remove         self.validCnt[ii] = 0    # reset counter
 </s> add         self.valid_cnt[ii] = 0    # reset counter
      super().__init__(CP)
      self.validCnt = {key: 0 for key in RADAR_MSGS}
      self.track_id = 0
  


      self.updated_messages = set()
  
    def update(self, can_strings):
      if self.rcp is None:
        return super().update(None)
keep keep keep keep replace replace keep keep keep keep keep
 Ford: add CADS radar interface (#24296)

* Ford: use FORD_CADS radar dbc

* Ford: CADS radar interface impl

Co-authored-by: ReFil <31960031+ReFil@users.noreply.github.com>

* fixup radar interface for FORD_CADS dbc

* CADS treat different scan indexes as separate points

* Ford: support both Fusion and CADS radars

* Ford: rename radars to DELPHI_ESR and DELPHI_MRR

Co-authored-by: ReFil <31960031+ReFil@users.noreply.github.com> 
selfdrive/car/ford/radar_interface.py