        CarController = __import__(path + '.carcontroller', fromlist=['CarController']).CarController
      else:
        CarController = None
      for model_name in brand_names[brand_name]:
        ret[model_name] = (CarInterface, CarController)
    return ret
  
  
  def _get_interface_names():
    # read all the folders in selfdrive/car and return a dict where:
 
</s> remove def get_can_parser(CP):
  signals, checks = get_can_signals(CP)
  bus_pt = 1 if CP.isPandaBlack and CP.carFingerprint in HONDA_BOSCH else 0
  return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, bus_pt)


def get_cam_can_parser(CP):
  signals = []

  if CP.carFingerprint in HONDA_BOSCH:
    signals += [("ACCEL_COMMAND", "ACC_CONTROL", 0),
                ("AEB_STATUS", "ACC_CONTROL", 0)]
  else:
    signals += [("COMPUTER_BRAKE", "BRAKE_COMMAND", 0),
                ("AEB_REQ_1", "BRAKE_COMMAND", 0),
                ("FCW", "BRAKE_COMMAND", 0),
                ("CHIME", "BRAKE_COMMAND", 0),
                ("FCM_OFF", "ACC_HUD", 0),
                ("FCM_OFF_2", "ACC_HUD", 0),
                ("FCM_PROBLEM", "ACC_HUD", 0),
                ("ICONS", "ACC_HUD", 0)]


  # all hondas except CRV, RDX and 2019 Odyssey@China use 0xe4 for steering
  checks = [(0xe4, 100)]
  if CP.carFingerprint in [CAR.CRV, CAR.ACURA_RDX, CAR.ODYSSEY_CHN]:
    checks = [(0x194, 100)]

  bus_cam = 1 if CP.carFingerprint in HONDA_BOSCH  and not CP.isPandaBlack else 2
  return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, bus_cam)

 </s> add  </s> remove def get_can_parser(CP):

  signals = [
    # sig_name, sig_address, default
    ("PRNDL", "GEAR", 0),
    ("DOOR_OPEN_FL", "DOORS", 0),
    ("DOOR_OPEN_FR", "DOORS", 0),
    ("DOOR_OPEN_RL", "DOORS", 0),
    ("DOOR_OPEN_RR", "DOORS", 0),
    ("BRAKE_PRESSED_2", "BRAKE_2", 0),
    ("ACCEL_134", "ACCEL_GAS_134", 0),
    ("SPEED_LEFT", "SPEED_1", 0),
    ("SPEED_RIGHT", "SPEED_1", 0),
    ("WHEEL_SPEED_FL", "WHEEL_SPEEDS", 0),
    ("WHEEL_SPEED_RR", "WHEEL_SPEEDS", 0),
    ("WHEEL_SPEED_RL", "WHEEL_SPEEDS", 0),
    ("WHEEL_SPEED_FR", "WHEEL_SPEEDS", 0),
    ("STEER_ANGLE", "STEERING", 0),
    ("STEERING_RATE", "STEERING", 0),
    ("TURN_SIGNALS", "STEERING_LEVERS", 0),
    ("ACC_STATUS_2", "ACC_2", 0),
    ("HIGH_BEAM_FLASH", "STEERING_LEVERS", 0),
    ("ACC_SPEED_CONFIG_KPH", "DASHBOARD", 0),
    ("TORQUE_DRIVER", "EPS_STATUS", 0),
    ("TORQUE_MOTOR", "EPS_STATUS", 0),
    ("LKAS_STATE", "EPS_STATUS", 1),
    ("COUNTER", "EPS_STATUS", -1),
    ("TRACTION_OFF", "TRACTION_BUTTON", 0),
    ("SEATBELT_DRIVER_UNLATCHED", "SEATBELT_STATUS", 0),
  ]

  # It's considered invalid if it is not received for 10x the expected period (1/f).
  checks = [
    # sig_address, frequency
    ("BRAKE_2", 50),
    ("EPS_STATUS", 100),
    ("SPEED_1", 100),
    ("WHEEL_SPEEDS", 50),
    ("STEERING", 100),
    ("ACC_2", 50),
  ]

  return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, 0)

def get_camera_parser(CP):
  signals = [
    # sig_name, sig_address, default
    # TODO read in all the other values
    ("COUNTER", "LKAS_COMMAND", -1),
    ("CAR_MODEL", "LKAS_HUD", -1),
    ("LKAS_STATUS_OK", "LKAS_HEARTBIT", -1)
  ]
  checks = []

  return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, 2)

 </s> add  </s> remove   CarInterface, CarController = interfaces[candidate]
 </s> add   CarInterface, CarController, CarState = interfaces[candidate]
      ret[model_name] = (CarInterface, CarController, CarState)
        CarController = __import__(path + '.carcontroller', fromlist=['CarController']).CarController
      else:
        CarController = None
      for model_name in brand_names[brand_name]:
      ret[model_name] = (CarInterface, CarController, CarState)
    return ret
  
  
  def _get_interface_names():
    # read all the folders in selfdrive/car and return a dict where:
keep keep keep keep replace keep keep keep keep keep
 get_can_parser and get_cam_can_parser are now standard static methods (#1136) 
selfdrive/car/car_helpers.py