def METHOD_NAME():
  global params
  global pm
  params.remove("Offroad_ConnectivityNeeded")
  #params.remove("CalibrationParams")
  #params.put("CalibrationParams", '{"calib_radians": [0,0,0], "valid_blocks": 20}')
  os.system('rm /tmp/op_git_updated')
  os.system('touch /tmp/op_simulation')
  start_loggerd = False
  if len(sys.argv) > 1:
    start_loggerd = (sys.argv[1] == '1')
  print ('start_loggerd=', start_loggerd)
  if start_loggerd:
    os.system('cd /data/openpilot/; ./selfdrive/loggerd/loggerd &')
  os.system('echo 1 > /tmp/force_calibration')
  # make volume 0
  os.system('service call audio 3 i32 3 i32 0 i32 1')
  q = Queue()
  t = threading.Thread(target=keyboard_poll_thread, args=[q])
  t.start()
  pm = messaging.PubMaster(['can', 'pandaStates', 'peripheralState'])
  # can loop
  sendcan = messaging.sub_sock('sendcan')
  rk = Ratekeeper(100, print_delay_threshold=None)
  steer_angle = 0.0
  speed = 50.0 / 3.6
  cruise_button = 0
  btn_list = []
  btn_hold_times = 2
  frames = 0
  while 1:
    # check keyboard input
    if not q.empty():
      message = q.get()
      print (message)
      if (message == 'quit'):
        shutdown()
        return
      m = message.split('_')
      if m[0] == "cruise":
        if m[1] == "down":
          cruise_button = CruiseButtons.DECEL_SET
          if len(btn_list) == 0:
            for x in range(btn_hold_times):
              btn_list.append(cruise_button)
        if m[1] == "up":
          cruise_button = CruiseButtons.RES_ACCEL
          if len(btn_list) == 0:
            for x in range(btn_hold_times):
              btn_list.append(cruise_button)
        if m[1] == "cancel":
          cruise_button = CruiseButtons.CANCEL
          if len(btn_list) == 0:
            for x in range(btn_hold_times):
              btn_list.append(cruise_button)
    btn = 0
    if len(btn_list) > 0:
      btn = btn_list[0]
      btn_list.pop(0)
    # print ('cruise_button=', cruise_button)
    can_function(pm, speed * 3.6, steer_angle, rk.frame, cruise_button=btn, is_engaged=1)
    if rk.frame%5 == 0:
      throttle, brake, steer = sendcan_function(sendcan)
      steer_angle += steer/10000.0 # torque
      #print(speed * 3.6, steer, throttle, brake)
    if frames % 20 == 0:
      dat = messaging.new_message('pandaStates', 1)
      dat.valid = True
      dat.pandaStates[0] = {
        'ignitionLine': True,
        'pandaType': "uno",
        'controlsAllowed': True,
        'safetyModel': "hondaNidec",
      }
      pm.send('pandaStates', dat)
      dat = messaging.new_message('peripheralState')
      dat.valid = True
      # dat.peripheralState = {
      #   'pandaType': "uno",
      #   'voltage': 1.0,
      #   'current': 1.0,
      #   'fanSpeedRpm': 100,
      #   'usbPowerMode': "client",
      # }
      pm.send('peripheralState', dat)
    frames += 1
    rk.keep_time()
  shutdown()