-
Notifications
You must be signed in to change notification settings - Fork 39
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
150 additions
and
55 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,120 @@ | ||
# DualSense / PS5 Controller on Windows [API] | ||
Windows API for the PS5 DualSense controller. Written in C++ for C++ | ||
# DualSense on Windows [API] | ||
![](https://raw.githubusercontent.com/Ohjurot/DualSense-Windows/main/Doc/GitHub_readme/header.png) | ||
|
||
First Release coming soon! | ||
|
||
#### Road map to first preview release: | ||
|
||
- ~~Reading the input state from the controller using USB~~. DONE! | ||
- ~~Reading input via bluetooth~~. DONE! | ||
- ~~Writing Output state to the controller using USB~~. DONE! | ||
- ~~Controlling and reading the adaptive triggers.~~ DONE! | ||
- ~~Writing Output state via bluetooth.~~ DONE! | ||
- Addition input / output parameters. *Work in progress* | ||
- Calibrating the gyroscope *Work in progress* | ||
- Documenting the API *Work in progress* | ||
- Updating the github repo and publish release | ||
Windows API for the PS5 DualSense controller. Written in C++ for C++. This API will help you using the DualSense controller in your windows C++ Applications / Projects. | ||
|
||
First preview should be released before 28.11.2020 (The hard work is done - The USB and BT protocol is, at least partially, reverse engineered) | ||
> :exclamation: Warning: The current release state is still a preview release. The library may not work as intended! | ||
#### Features of the first preview | ||
## Features | ||
|
||
- Reading all buttons and analog values (triggers and sticks) which are on the controller | ||
- Reading all button input from the controller | ||
- Reading the analog sticks and analog triggers | ||
- Reading the two finger touch positions | ||
- Reading the accelerometer | ||
- Reading the gyroscope (Currently only raw / uncalibrated values) | ||
- Reading the connection state of the headphone jack | ||
- Setting the rumble motors speed | ||
- Setting various effects to the force feedback triggers | ||
- Retrieving force feedback triggers feedback | ||
- controlling the RGB-Leds, Microphone Led and User Leds | ||
- Reading the Accelerometer and Gyroscope | ||
- Using the haptic feedback for default rumbleing | ||
- Controlling the adaptive triggers (3 Types of effects) and reading back the users force while active | ||
- Controlling the RGB color of the lighbar | ||
- Setting the player indication LEDs and the microphone LED | ||
|
||
Fully working over USB and Bluetooth! | ||
The library is still in active development and will be extended with additional features soon. Consider checking out our [Road-map](https://github.com/Ohjurot/DualSense-Windows/blob/main/ROADMAP.md) for further information. | ||
|
||
#### Feature planed for the future | ||
## Using the API | ||
|
||
- Using the haptic feedback | ||
- Internal speaker and mic | ||
1. Download the `DualSenseWindows_VX.X.zip` file from the latest release found at the [Release Page](https://github.com/Ohjurot/DualSense-Windows/releases) | ||
2. Unzip the archive to your computer | ||
3. Read the `DualSenseWindows.pdf` PDF documentation to get the specific information for your current release | ||
|
||
#### Know issues | ||
If you don't want to mess your time documentation - this is the minimal example on how to use the library: | ||
|
||
```c++ | ||
#include <Windows.h> | ||
#include <ds5w.h> | ||
#include <iostream> | ||
|
||
int main(int argc, char** argv){ | ||
// Array of controller infos | ||
DS5W::DeviceEnumInfo infos[16]; | ||
|
||
// Number of controllers found | ||
unsigned int controllersCount = 0; | ||
|
||
// Call enumerate function and switch on return value | ||
switch(DS5W::enumDevices(infos, 16, &controllersCount)){ | ||
case DS5W_OK: | ||
// The buffer was not big enough. Ignore for now | ||
case DS5W_E_INSUFFICIENT_BUFFER: | ||
break; | ||
|
||
// Any other error will terminate the application | ||
default: | ||
// Insert your error handling | ||
return -1; | ||
} | ||
|
||
// Check number of controllers | ||
if(!controllersCount){ | ||
return -1; | ||
} | ||
|
||
// Context for controller | ||
DS5W::DeviceContext con; | ||
|
||
// Init controller and close application is failed | ||
if(DS5W_FAILED(DS5W::initDeviceContext(&infos[0], &con))){ | ||
return -1; | ||
} | ||
|
||
// Main loop | ||
while(true){ | ||
// Input state | ||
DS5W::DS5InputState inState; | ||
|
||
// Retrieve data | ||
if (DS5W_SUCCESS(DS5W::getDeviceInputState(&con, &inState))){ | ||
// Check for the Logo button | ||
if(inState.buttonsB & DS5W_ISTATE_BTN_B_PLAYSTATION_LOGO){ | ||
// Break from while loop | ||
break; | ||
} | ||
|
||
// Create struct and zero it | ||
DS5W::DS5OutputState outState; | ||
ZeroMemory(&outState, sizeof(DS5W::DS5OutputState)); | ||
|
||
// Set output data | ||
outState.leftRumble = inState.leftTrigger; | ||
outState.rightRumble = inState.rightTrigger; | ||
|
||
// Send output to the controller | ||
DS5W::setDeviceOutputState(&con, &outState); | ||
} | ||
} | ||
|
||
// Shutdown context | ||
DS5W::freeDeviceContext(&con); | ||
|
||
// Return zero | ||
return 0; | ||
} | ||
``` | ||
## Known issues | ||
- When the controller being shut down while connected via Bluetooth (Holding the PS button). The lib will encounter a dead lock within `getDeviceInputState(...)` call. The function will return as soon as the controller is getting reconnected. Not encountering over USB, over USB the expected `DS5W_E_DEVICE_REMOVED` error is returned. | ||
#### Sources | ||
## Special thanks to | ||
I have partially used the following sources to implement the functionality: | ||
- The GitHub community on this project and https://github.com/Ryochan7/DS4Windows/issues/1545 | ||
- https://www.reddit.com/r/gamedev/comments/jumvi5/dualsense_haptics_leds_and_more_hid_output_report/ | ||
- https://gist.github.com/dogtopus/894da226d73afb3bdd195df41b3a26aa | ||
- https://gist.github.com/Ryochan7/ef8fabae34c0d8b30e2ab057f3e6e039 | ||
- https://gist.github.com/Ryochan7/91a9759deb5dff3096fc5afd50ba19e2 | ||
- https://github.com/Ryochan7/DS4Windows/tree/dualsense-integration (Copyright (c) 2019 Travis Nickles - [MIT License](https://github.com/Ryochan7/DS4Windows/blob/jay/LICENSE.txt)) | ||
- https://www.reddit.com/r/gamedev/comments/jumvi5/dualsense_haptics_leds_and_more_hid_output_report/ | ||
[Important Informations about Trademarks](https://github.com/Ohjurot/DualSense-Windows/blob/main/TRADEMARKS.md) | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# Road-Map | ||
|
||
This is my list of feature I would like to see being supported by my API: | ||
|
||
- Getting addition input working (Battery, ...) | ||
- Using the haptic feedback | ||
- Playing audio through all channels (somewhat related to haptic feedback) | ||
- Listening to the user with the integrated microphone | ||
- Controlling all that audio related stuff (Volume / Mute / ...) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
"PlayStation", "PlayStation Family Mark", "PS5 logo", "PS5", "DualSense" and "DUALSHOCK" are registered trademarks or trademarks of Sony Interactive Entertainment Inc. "SONY" is a registered trademark of Sony Corporation. | ||
|
||
"Windows" is a registered trademark of Microsoft Corporation. | ||
|
||
The Author is not affiliated in any kind with Sony Interactive Entertainment Inc.! The Author is not affiliated in any kind with Microsoft Corporation! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters