mirror of https://github.com/xqemu/xqemu.git
Created Input Options (markdown)
parent
87cd4b74f0
commit
80e6da3abb
|
@ -0,0 +1,92 @@
|
|||
# Input Options
|
||||
|
||||
The Xbox uses so called Xbox Input Devices (XID).
|
||||
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
|
||||
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
|
||||
The XID Gamepad USB-Device is internally connected to that hub.
|
||||
|
||||
To connect a device you must specify the driver for the emulated USB device and the port the device should connect to.
|
||||
You also need to specify "-usb" on the command line to add usb functionality.
|
||||
|
||||
The ports which can be used in XQEMU are:
|
||||
|
||||
| Xbox Port | XQEMU USB-Port |
|
||||
| :-------: | :--------------------- |
|
||||
| Player 1 | `bus=usb-bus.0,port=3` |
|
||||
| Player 2 | `bus=usb-bus.0,port=4` |
|
||||
| Player 3 | `bus=usb-bus.0,port=1` |
|
||||
| Player 4 | `bus=usb-bus.0,port=2` |
|
||||
|
||||
The XID is usually connected to Port 2 of the XID-hub.
|
||||
So if you have a hub for Player 1 at `bus=usb-bus.0,port=3`, your gamepad-device would connect to `bus=usb-bus.0,port=3.2`.
|
||||
|
||||
## Emulated XID
|
||||
|
||||
There is XID emulation in XQEMU which emulates a very basic Duke Xbox Controller [VID: 0x045e, PID: 0x0202].
|
||||
The input can't be configured at the moment but the following buttons are mapped:
|
||||
|
||||
| Xbox Button | PC Keyboard |
|
||||
| ----------: | :-------------- |
|
||||
| A | Z |
|
||||
| B | X |
|
||||
| X | A |
|
||||
| Y | S |
|
||||
| Start | Backspace |
|
||||
| Back | Return |
|
||||
| DPad-Up | Arrow-Up-Key |
|
||||
| DPad-Down | Arrow-Down-Key |
|
||||
| DPad-Left | Arrow-Left-Key |
|
||||
| DPad-Right | Arrow-Right-Key |
|
||||
|
||||
No other buttons or analog controls are currently mapped!
|
||||
There is no force feedback indicator either.
|
||||
|
||||
To recreate the internal XID hub we use the existing QEMU "usb-hub" device.
|
||||
The actual XID emulation is provided by the "xbox-gamepad" device.
|
||||
|
||||
**Example:**
|
||||
```-usb -device usb-hub,bus=usb-bus.0,port=3 -device usb-xbox-gamepad,bus=usb-bus.0,port=3.2```
|
||||
|
||||
## USB Forwarding
|
||||
|
||||
QEMU has the option to forward USB Devices from the host to the guest.
|
||||
The input might be delayed but it will support all features you'd expect.
|
||||
In theory even memory units or the communicator should work!
|
||||
You have 2 options to forward the xbox gamepad.
|
||||
|
||||
You can either forward the hub or just the gamepad.
|
||||
|
||||
To be able to forward any of the host devices you must take the following steps:
|
||||
|
||||
1. Have an [adapter cable (this one has not been tested yet!)](http://www.amazon.com/XBOX-USB-Controller-Converter-Gamepad-Adapter/dp/B00CD0KFU0) or [build one yourself*](http://www.ocmodshop.com/how-to-use-an-xbox-controller-as-a-usb-pc-gamepad/3/)
|
||||
2. Have libusb installed
|
||||
3. Find the VID:PID (Vendor and Product ID) of the XID-Hub and/or the internal Gamepad device
|
||||
4. Make sure that libusb has the necessary permissions
|
||||
|
||||
<sup>\* Please do not destroy original Controllers. Instead buy a cheap break-away or extension cable. By cutting it in half you can create 2 USB Adapters: 1. USB to Xbox + 2. Xbox to USB. You can still use your adapters as an extension cable for most XIDs (not working with Lightguns).</sup>
|
||||
|
||||
On Linux you can use "lsusb" for step 2. Step 3 involves adding a udev rule on most linux distributions.
|
||||
The udev rule (/etc/udev/rules.d/999-xbox-gamepad.rules) for a Controller-S could look like this:
|
||||
```
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0288", GROUP="users", MODE="660" # Hub
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0289", GROUP="users", MODE="660" # Gamepad
|
||||
```
|
||||
|
||||
### Hub-Forwarding
|
||||
|
||||
To forward the entire hub of the controller we simply have to forward the hub to the emulated xbox.
|
||||
|
||||
**Example:**
|
||||
```-usb -device usb-host,bus=usb-bus.0,port=3,vendorid=0x45e,productid=0x288```
|
||||
|
||||
### Gamepad-Forwarding
|
||||
|
||||
For Gamepad forwarding we create a virtual hub using QEMU and connect the XID gamepad device to port 2 of the emulated hub.
|
||||
|
||||
**Example:**
|
||||
```-usb -device usb-hub,bus=usb-bus.0,port=3 -device usb-host,vendorid=0x45e,productid=0x289,bus=usb-bus.0,port=3.2```
|
||||
|
||||
# Contribute
|
||||
|
||||
If you are a developer you can also check out the [XID emulation source code](../blob/xbox/hw/xbox/xid.c).
|
||||
You could write a new driver to turn connected Xbox 360 Gamepads into original Xbox XIDs for example.
|
Loading…
Reference in New Issue