Greetings all SRK members.
So I recently started a project of making a library that allows using a Teensy 3.x/LC as a PS4-compatible controller for my controller build project. I also thought that you guys might be interested in it since it finally allows arcade stick builders to use standard “maker hardware” to make a PS4 arcade stick. So here is the “announcement” post.
Why, though? Aren’t Brook boards enough for arcade sticks?
The controller I made is NOT a conventional fightstick. It’s for the PS4 rhythm game Project DIVA Future Tone. The arcade version of the same game has a slider mechanics. The player must swipes the capacitive touch slider on the controller at the right time to complete the “slide notes”. Some slider notes (called “chain slide”) requires the player to swipe the touch slider long enough in order to get a “max slide” bonus. Unfortunately after porting to the PS4 there is no direct one-to-one alternative to correctly replicate the slider mechanics on the arcade. Instead we got configurable macro keys, analog stick control, touchpad control and gyro (motion) control for sliders. All of them have their own advantages and drawbacks and none of them alone replicates the actual arcade slider well. Then I came up with a bizarre idea: by exploiting the fact that the controller rumbles only when in a chain slide, one can use it as a cue to switch between touchpad for chain slide notes and analog sticks for regular slide notes. Sadly off-the-shelf PCBs normally don’t have rumble features and padhacking a gamepad with both native touchpad and rumble could be very expensive. So I ended up code my own solution for it.
But isn’t PS4 controllers have “impossible to hack” security?
Well yes and no. It is “impossible to hack” because it uses a PKI (Public Key Infrastructure) system to prevent cloning and mass production of unlicensed controllers (But remember: this system is only secure when the private key is secure. That’s why Brook can still make unlicensed accessories for PS4. No inquiries for the way of extracting anything though, I don’t know and I’m pretty sure this is against the forum rules). However the authentication itself is not end-to-end encrypted and authenticated, leaving the possibility of using another controller (licensed or official) as a “authenticator” and forward the request to that controller to pass the authentication. That’s also how GIMX and other devices like CronusMax works with the PS4 without the “8 minute timeout”.
What features does it have?
Currently it provides a set of API for interacting with all buttons, triggers, analog sticks and the touchpad, as well as receiving rumble and LED reports from PS4. An UnoJoy-compatible API is also provided for easy transition of existing custom PS3 sketches to PS4.
Will it support <insert console name> controllers?
The API is designed with some extensibility in mind, however since I don’t own every type of consoles in the world, I can’t really support all of them in my library either. Contributions are welcome though.
What platforms are supported?
Currently it only supports Teensy 3.x and LC. Support for official AVR and SAM Arduino are planned as well.
For authentication, currently it uses USB Host Shield to add a USB port to the PCB. Support for some other USB host controllers are also planned. Support for the scavenged “security chips” from licensed controllers is also possible but not my current priority.
Is it finished?
Not yet. I’m still slowly working on it. The current version should be treated as a preview as things might change. More updates coming…
Where is the library?
Here.
Your code quality is crap
Then feel free to send any PRs or improvement suggestions.