Exemplo n.º 1
0
Playstation3USBController::Playstation3USBController(libusb_device* dev, bool try_detach) :
  USBController(dev),
  endpoint_in(1),
  endpoint_out(2)
{
  usb_claim_interface(0, try_detach);
  usb_submit_read(endpoint_in, 64);
}
Exemplo n.º 2
0
SaitekP2500Controller::SaitekP2500Controller(libusb_device* dev, bool try_detach) :
  USBController(dev),
  left_rumble(-1),
  right_rumble(-1)
{
  usb_claim_interface(0, try_detach);
  usb_submit_read(1, sizeof(SaitekP2500Msg));
}
Exemplo n.º 3
0
HamaCruxController::HamaCruxController(libusb_device* dev, bool try_detach) :
  USBController(dev),
  m_interface(0),
  m_endpoint(1),
  m_names(m_message_descriptor)
{  
  usb_claim_interface(m_interface, try_detach);
  usb_submit_read(m_endpoint, 8);
}
Exemplo n.º 4
0
Xbox360Controller::Xbox360Controller(libusb_device* dev,
                                     bool chatpad, bool chatpad_no_init, bool chatpad_debug, 
                                     bool headset, 
                                     bool headset_debug, 
                                     const std::string& headset_dump,
                                     const std::string& headset_play,
                                     bool try_detach) :
  USBController(dev),
  dev_type(),
  endpoint_in(1),
  endpoint_out(2),
  m_chatpad(),
  m_headset(),
  m_rumble_left(0),
  m_rumble_right(0)
{
  // find endpoints
  endpoint_in  = usb_find_ep(LIBUSB_ENDPOINT_IN,  LIBUSB_CLASS_VENDOR_SPEC, 93, 1);
  endpoint_out = usb_find_ep(LIBUSB_ENDPOINT_OUT, LIBUSB_CLASS_VENDOR_SPEC, 93, 1);

  log_debug("EP(IN):  " << endpoint_in);
  log_debug("EP(OUT): " << endpoint_out);

  usb_claim_interface(0, try_detach);
  usb_submit_read(endpoint_in, 32);

  // create chatpad
  if (chatpad)
  {
    libusb_device_descriptor desc;

    int ret = libusb_get_device_descriptor(dev, &desc);
    if (ret != LIBUSB_SUCCESS)
    {
      raise_exception(std::runtime_error, "libusb_get_config_descriptor() failed: " << usb_strerror(ret));    
    }
    else
    {
      m_chatpad.reset(new Chatpad(m_handle, desc.bcdDevice, chatpad_no_init, chatpad_debug));
    }
  }

  // create headset
  if (headset)
  {
    m_headset.reset(new Headset(m_handle, headset_debug));
    if (!headset_play.empty())
    {
      m_headset->play_file(headset_play);
    }

    if (!headset_dump.empty())
    {
      m_headset->record_file(headset_dump);
    }
  }
}
LogitechF310Controller::LogitechF310Controller(libusb_device* dev, bool try_detach) :
  USBController(dev),
  left_rumble(-1),
  right_rumble(-1),
  xbox(m_message_descriptor)
{
  usb_claim_interface(0, try_detach);
  usb_submit_read(1, 32);
}
Exemplo n.º 6
0
Xbox360WirelessController::Xbox360WirelessController(libusb_device* dev, int controller_id, 
                                                     bool try_detach) :
  USBController(dev),
  m_endpoint(),
  m_interface(),
  m_battery_status(),
  m_serial()
{
  // FIXME: A little bit of a hack
  m_is_active = false;

  assert(controller_id >= 0 && controller_id < 4);
  
  // FIXME: Is hardcoding those ok?
  m_endpoint  = controller_id*2 + 1;
  m_interface = controller_id*2;

  usb_claim_interface(m_interface, try_detach);
  usb_submit_read(m_endpoint, 32);
}
Exemplo n.º 7
0
GenericUSBController::GenericUSBController(libusb_device* dev, 
                                           int interface, int endpoint,
                                           bool try_detach) :
  USBController(dev),
  m_interface(interface),
  m_endpoint(endpoint)
{
  struct libusb_config_descriptor* config;
  if (libusb_get_active_config_descriptor(dev, &config) != LIBUSB_SUCCESS)
  {
    raise_exception(std::runtime_error, "failed to get config descriptor");
  }
  else
  {
    if (config->bNumInterfaces == 0)
    {
      raise_exception(std::runtime_error, "no interfaces available");
    }
    
    if (config->interface[0].num_altsetting == 0)
    {
      raise_exception(std::runtime_error, "no interface descriptors available");
    }

    if (config->interface[0].altsetting[0].bNumEndpoints <= m_endpoint)
    {
      raise_exception(std::runtime_error, "endpoint not available");
    }

    uint16_t wMaxPacketSize = config->interface[0].altsetting[0].endpoint[m_endpoint].wMaxPacketSize;

    log_debug("wMaxPacketSize: " << wMaxPacketSize);
    usb_claim_interface(m_interface, try_detach);
    usb_submit_read(m_endpoint, wMaxPacketSize);
  }
}
Exemplo n.º 8
0
/*
  Chatpad Interface:
  ==================
  bInterfaceNumber        2
  bInterfaceClass       255 Vendor Specific Class
  bInterfaceSubClass     93 
  bInterfaceProtocol      2 
*/
Chatpad::Chatpad(libusb_device_handle* handle, uint16_t bcdDevice,
                 bool no_init, bool debug) :
  m_init_state(kStateInit1),
  m_handle(handle),
  m_bcdDevice(bcdDevice),
  m_no_init(no_init),
  m_debug(debug),
  m_quit_thread(false),
  m_uinput(),
  m_keymap(),
  m_state(),
  m_led_state(0),
  m_read_transfer(0)
{
  if (m_bcdDevice != 0x0110 && m_bcdDevice != 0x0114)
  {
    throw std::runtime_error("unknown bcdDevice version number, please report this issue "
                             "to <*****@*****.**> and include the output of 'lsusb -v'");
  }

  std::fill(m_keymap.begin(), m_keymap.end(), 0);
  std::fill(m_state.begin(), m_state.end(), 0);

  m_keymap[CHATPAD_KEY_1] = KEY_1;
  m_keymap[CHATPAD_KEY_2] = KEY_2; 
  m_keymap[CHATPAD_KEY_3] = KEY_3; 
  m_keymap[CHATPAD_KEY_4] = KEY_4; 
  m_keymap[CHATPAD_KEY_5] = KEY_5; 
  m_keymap[CHATPAD_KEY_6] = KEY_6; 
  m_keymap[CHATPAD_KEY_7] = KEY_7; 
  m_keymap[CHATPAD_KEY_8] = KEY_8; 
  m_keymap[CHATPAD_KEY_9] = KEY_9; 
  m_keymap[CHATPAD_KEY_0] = KEY_0; 
  m_keymap[CHATPAD_KEY_Q] = KEY_Q; 
  m_keymap[CHATPAD_KEY_W] = KEY_W; 
  m_keymap[CHATPAD_KEY_E] = KEY_E; 
  m_keymap[CHATPAD_KEY_R] = KEY_R; 
  m_keymap[CHATPAD_KEY_T] = KEY_T; 
  m_keymap[CHATPAD_KEY_Y] = KEY_Y; 
  m_keymap[CHATPAD_KEY_U] = KEY_U; 
  m_keymap[CHATPAD_KEY_I] = KEY_I; 
  m_keymap[CHATPAD_KEY_O] = KEY_O; 
  m_keymap[CHATPAD_KEY_P] = KEY_P; 
  m_keymap[CHATPAD_KEY_A] = KEY_A; 
  m_keymap[CHATPAD_KEY_S] = KEY_S; 
  m_keymap[CHATPAD_KEY_D] = KEY_D; 
  m_keymap[CHATPAD_KEY_F] = KEY_F; 
  m_keymap[CHATPAD_KEY_G] = KEY_G; 
  m_keymap[CHATPAD_KEY_H] = KEY_H; 
  m_keymap[CHATPAD_KEY_J] = KEY_J; 
  m_keymap[CHATPAD_KEY_K] = KEY_K; 
  m_keymap[CHATPAD_KEY_L] = KEY_L; 
  m_keymap[CHATPAD_KEY_COMMA] = KEY_COMMA; 
  m_keymap[CHATPAD_KEY_Z] = KEY_Z; 
  m_keymap[CHATPAD_KEY_X] = KEY_X; 
  m_keymap[CHATPAD_KEY_C] = KEY_C; 
  m_keymap[CHATPAD_KEY_V] = KEY_V; 
  m_keymap[CHATPAD_KEY_B] = KEY_B; 
  m_keymap[CHATPAD_KEY_N] = KEY_N; 
  m_keymap[CHATPAD_KEY_M] = KEY_M; 
  m_keymap[CHATPAD_KEY_PERIOD] = KEY_DOT;
  m_keymap[CHATPAD_KEY_ENTER] = KEY_ENTER;     
  m_keymap[CHATPAD_KEY_BACKSPACE] = KEY_BACKSPACE; 
  m_keymap[CHATPAD_KEY_LEFT] = KEY_LEFT; 
  m_keymap[CHATPAD_KEY_SPACEBAR] = KEY_SPACE;  
  m_keymap[CHATPAD_KEY_RIGHT] = KEY_RIGHT;

  m_keymap[CHATPAD_MOD_SHIFT]  = KEY_LEFTSHIFT;
  m_keymap[CHATPAD_MOD_GREEN]  = KEY_LEFTALT;
  m_keymap[CHATPAD_MOD_ORANGE] = KEY_LEFTCTRL;
  m_keymap[CHATPAD_MOD_PEOPLE] = KEY_LEFTMETA;
  
  init_uinput();
  
  if (no_init)
  {
    m_init_state = kStateKeepAlive_1e;
  }

  send_command();

  if (m_bcdDevice == 0x0110)
  {
    usb_submit_read(6, 32);
  }
  else if (m_bcdDevice == 0x0114)
  {
    usb_submit_read(4, 32);
  }
}