Ejemplo n.º 1
0
void
XboxdrvDaemon::on_connect(ControllerSlotPtr slot)
{
  ControllerPtr controller = slot->get_controller();
  assert(controller);

  if (!m_opts.on_connect.empty())
  {
    log_info("launching connect script: " << m_opts.on_connect);

    std::vector<std::string> args;
    args.push_back(m_opts.on_connect);
    args.push_back(controller->get_usbpath());
    args.push_back(controller->get_usbid());
    args.push_back(controller->get_name());
    spawn_exe(args);
  }
}
Ejemplo n.º 2
0
void
XboxdrvMain::run()
{
  m_controller = create_controller();
  m_controller->set_disconnect_cb(boost::bind(&XboxdrvMain::on_controller_disconnect, this));
  init_controller(m_controller);
     
  if (m_opts.instant_exit)
  {
    usleep(1000);
  }
  else
  {   
    ControllerSlotConfigPtr config_set;       
    if (m_opts.no_uinput)
    {
      if (!m_opts.quiet)
      {
        std::cout << "Starting without uinput" << std::endl;
      }
    }
    else
    {
      log_debug("creating UInput");
      m_uinput.reset(new UInput(m_opts.extra_events));
      m_uinput->set_device_names(m_opts.uinput_device_names);
      m_uinput->set_device_usbids(m_opts.uinput_device_usbids);

      log_debug("creating ControllerSlotConfig");
      config_set = ControllerSlotConfig::create(*m_uinput, 
                                                0, m_opts.extra_devices,
                                                m_opts.get_controller_slot());
      
      // After all the ControllerConfig registered their events, finish up
      // the device creation
      log_debug("finish UInput creation");
      m_uinput->finish();
    }

    if (!m_opts.quiet)
    {
      std::cout << "\nYour Xbox/Xbox360 controller should now be available as:" << std::endl
                << "  /dev/input/js" << m_jsdev_number << std::endl
                << "  /dev/input/event" << m_evdev_number << std::endl;

      if (m_opts.silent)
      {
        std::cout << "\nPress Ctrl-c to quit" << std::endl;
      }
      else
      {
        std::cout << "\nPress Ctrl-c to quit, use '--silent' to suppress the event output" << std::endl;
      }
    }

    {
      ControllerThread thread(m_controller, config_set, m_opts);
      log_debug("launching thread");
      
      pid_t pid = 0;
      if (!m_opts.exec.empty())
      {
        pid = spawn_exe(m_opts.exec);
        g_child_watch_add(pid, &XboxdrvMain::on_child_watch_wrap, this);
      }

      log_debug("launching main loop");
      g_main_loop_run(m_gmain);

      m_controller.reset();
    }

    if (!m_opts.quiet)
    {
      std::cout << "Shutdown complete" << std::endl;
    }
  }
}
Ejemplo n.º 3
0
pid_t spawn_exe(const std::string& arg0)
{
  std::vector<std::string> args;
  args.push_back(arg0);
  return spawn_exe(args);
}