# gamepad-viewer
Displays live status about gaming devices connected to your computer.
## Demo
[gamepad.e7d.io](https://gamepad.e7d.io/)
## Shortcuts
- `+`: Zoom in
- `-`: Zoom out
- `0`: Reset zoom to 100%
- `5`: Adjust zoom automatically to window
- `B`: Change background style
- `C`: Change active gamepad color
- `D`: Toggle debug mode for active gamepad
- `H`: Toggle help menu
- `T`: Toggle triggers mode (opacity / meter)
- `Delete` or `Esc`: Clear active gamepad
## Supported gamepads
- Sony DualSense*
- Sony DualShock 4*
- Microsoft Xbox Series Controller*
- Microsoft Xbox One Controller*
- Microsoft Xbox 360 Controller
- Nintendo Switch Pro Controller*
- Xinput compatible gamepads
## Parameters
All the parameters are set in the URL.
| **Parameter** | **Description** | **Value** | **Default** |
|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|
| gamepad | The controller ID of a specific gamepad to use. Please find the controller ID by using the help displayed using the `h` keyboard button. | i.e.: `Microsoft Controller (STANDARD GAMEPAD Vendor: 045e Product: 0b00)` | |
| type | The type of controller (the "skin") to display to the screen.
When possible, the type of controller is auto detected to display the corresponding skin. | - `debug`
- `dualsense`
- `ds4`
- `xbox-one`
- `telemetry` (beta mode for wheels that requires specific configuration) | |
| background | The background color. | - `transparent`
- `checkered`
- `grey`
- `black`
- `white`
- `lime`
- `magenta` | `transparent` |
| color | The displayed gamepad color. | Depending of the selected display `type`. | |
| triggers | The triggers display mode, when applicable. | - `opacity`
- `meter` | `opacity` |
| zoom | The zoom level of the display controller. | Any integer value from `0.1` to `4`, corresponding to a zoom value for 10% to 400%.
When no value is set, the zoom is auto adjusted to fit the window size. | |
## Telemetry configuration
The `telemetry` display mode is a beta mode, designed for wheels, that requires specific configuration.
### Axes and buttons mapping
The `telemetry` mode requires for you to determine which axes or buttons will be used used for each telemetry data: clutch, brake, throttle and direction.
To help you do so, you need to access the Gamepad Viewer with the `debug` skin. To do so, you can go to https://gamepad.e7d.io/?type=debug, and press any button for detection.
For each of the axes or buttons you want to use, activate them one by one, and proceed as following:
- observe the changing value in the `Axes` and `Buttons` sections to determine the correct entry
- note down its type (axis or button) and its index.
- for the clutch, brake and throttle, note down the minimum (when released) and maximum (when pressed) values
- for the direction, note down the minimum (left) and maximum (right) values
For example with a **Thrustmaster T818**, you should get the following values:
- clutch: axis 6, min 1, max -1
- brake: axis 1, min 1, max -1
- throttle: axis 5, min 1, max -1
- direction: axis 0, min -1, max 1
Another example with a **Xbox one controller** with the A button used as clutch, the triggers as brake and throttle, and the left stick as direction. You should get the following values:
- clutch: button 0, min 0, max 1
- brake: button 6, min 0, max 1
- throttle: button 7, min 0, max 1
- direction: axis 0, min -1, max 1
### Telemetry parameters
All the parameters are set in the URL.
| **Parameter** | **Description** | **Value** | **Default** |
|---|---|---|---|
| clutchType | The clutch type, either an axis or a button. | `axis` or `button` | `axis` |
| clutchIndex | The index of the clutch axis or button. | A positive integer. | |
| clutchMin | The minimum value when the clutch is fully released. | `-1`, `0` or `1` | `-1` |
| clutchMax | The maximum value when the clutch is fully pressed. | `-1`, `0` or `1` | `1` |
| brakeType | The brake type, either an axis or a button. | `axis` or `button` | `axis` |
| brakeIndex | The index of the brake axis or button. | A positive integer. | |
| brakeMin | The minimum value when the brake is fully released. | `-1`, `0` or `1` | `-1` |
| brakeMax | The maximum value when the brake is fully pressed. | `-1`, `0` or `1` | `1` |
| throttleType | The throttle type, either an axis or a button. | `axis` or `button` | `axis` |
| throttleIndex | The index of the throttle axis or button. | A positive integer. | |
| throttleMin | The minimum value when the throttle is fully released. | `-1`, `0` or `1` | `-1` |
| throttleMax | The maximum value when the throttle is fully pressed. | `-1`, `0` or `1` | `1` |
| directionType | The direction type, either an axis or a button. | `axis` or `button` | `axis` |
| directionIndex | The index of the direction axis or button. | A positive integer. | |
| directionMin | The value when the direction is fully on the left. | `-1`, `0` or `1` | `-1` |
| directionMax | The value when the direction is fully on the right. | `-1`, `0` or `1` | `1` |
| directionDegrees | The angle in degrees to represent the direction changes.
Common wheel values are `360`, `900` and `1080`. | A positive integer. | `360` |
| fps | The number of render calculations per second.
The default `60` is smoother but can be challenging for the CPU.
Can be reduced to `30` for performance. | A positive integer. | `60` |
| history | The duration in milliseconds of data to display in the history graph. | A positive integer. | `5000` |
### Examples
Some working examples:
- Thrustmaster T818, with 900 degrees direction: http://gamepad.e7d.io/?gamepad=044f-b696&type=telemetry&clutchIndex=6&clutchMin=1&clutchMax=-1&brakeIndex=1&brakeMin=1&brakeMax=-1&throttleIndex=5&throttleMin=1&throttleMax=-1&directionIndex=0&directionDegrees=900
- DualShock 4 or Xbox Controller, with 180 degrees direction representation: http://gamepad.e7d.io/?gamepad=045e-0b00&type=telemetry&brakeType=button&brakeIndex=6&brakeMin=0&brakeMax=1&throttleType=button&throttleIndex=7&throttleMin=0&throttleMax=1&directionIndex=0&directionDegrees=180
- DualShock 4 or Xbox Controller, with clutch as A or Cross button, and 180 degrees direction representation: http://gamepad.e7d.io/?gamepad=045e-0b00&type=telemetry&clutchType=button&clutchIndex=0&clutchMin=0&clutchMax=1&brakeType=button&brakeIndex=6&brakeMin=0&brakeMax=1&throttleType=button&throttleIndex=7&throttleMin=0&throttleMax=1&directionIndex=0&directionDegrees=180
## How to use with OBS Studio
Please read below:
- Open [gamepad.e7d.io](https://gamepad.e7d.io/) in your browser
- Activate the controller you want to display in OBS by long pressing one of its buttons
- Configure it as desired: change skin, controller color, gamepad color, zoom...
- Copy the resulting web page URL (i.e.: https://gamepad.e7d.io/?type=ds4&color=white&triggers=meter)
- Go back to OBS Studio
- Add a Browser source: Right click in "Sources" > "Add" > "Browser"
- Name it as you want (i.e.: "Gamepad")
- Paste the previously copied URL on the URL field
- Press OK
- Adjust position and size of the source as you will
*: These gamepads work both wired and wireless via Bluetooth
## Credits
DualShock 4 and Xbox One skins from [gamepadviewer.com](https://gamepadviewer.com/)
DualSense skin from [justEhCupcake](https://github.com/justEhCupcake/justEhCupcake.github.io/tree/main/PS5_Display_Pics)