Category PS4 CFW and Hacks       Thread starter PSXHAX       Start date Jan 28, 2020 at 3:38 PM       2,862       6            
Since we covered the PS4 Gentoo Linux Installation Guide, developer ArturSpirin shared pyPS4Controller on Github which is a light module designed to provide hooks for PlayStation 4 Controllers in homebrew development projects using Python with Raspberry Pi devices or on other Linux machines. 🐧

Download: pyPS4Controller v1.0.8 / pyPS4Controller-master.zip / GIT

From the README.md: pyPS4Controller

pyPS4Controller is a light module designed to provide hooks for PS4 Controller using Python on Linux.

Installation
Code:
sudo pip install pyPS4Controller
Usage
  1. First, you have to make sure you can connect your PS4 controller with ds4drv. You can do it 1 of 2 ways.
    • Manually by following this instructions
    • Automatically by running py3ps4c init (if you are using python3) or py2ps4c init (if you are using python2) in your terminal.
  2. (Optional) connect your controller directly to the computer's Bluetooth module. Once successful, disconnect the controller. If you don't do this, in the next step you may see this error: Unable to connect to detected device: Failed to set operational mode: [Errno 107] Transport endpoint is not connected
  3. Now start sudo ds4drv and press SHARE + PS4 button on your controller. If pairing fails, you want to try in again, it should eventually connect.
  4. Copy the code bellow to a file, say test.py
  5. Run it python test.py
  6. Use your controller.
  7. Adjust logic in the code and integrate it with your RC needs!
From pyPS4Controller.controller import Controller:
Code:
class MyController(Controller): # create a custom class for your controller and subclass Controller
"""
If we want to bind an action to the X button on the controller, we need to override its respective methods.

Some of the buttons have a binary On/Off state. For example the X, Circle, Square, and Triangle buttons.
When overriding their respective methods there are no args in the function signature.

Some controls like the L2, L3, R2 and R3 have a variable On state.
When overriding their respective method, there is a value argument in the function signature
which indicates the degree of the input.

You can put any custom code inside the functions bellow. I have put print statements in there just so you
can copy/paste the code, connect controller, play with the inputs and see the result.

All of the functions that you can override are listed in this script.
"""

def on_x_press(self):
print("on_x_press")

def on_x_release(self):
print("on_x_release")

def on_triangle_press(self):
print("on_triangle_press")

def on_triangle_release(self):
print("on_triangle_release")

def on_circle_press(self):
print("on_circle_press")

def on_circle_release(self):
print("on_circle_release")

def on_square_press(self):
print("on_square_press")

def on_square_release(self):
print("on_square_release")

def on_L1_press(self):
print("on_L1_press")

def on_L1_release(self):
print("on_L1_release")

def on_L2_press(self, value):
print("on_L2_press: ", value)

def on_L2_release(self):
print("on_L2_release")

def on_R1_press(self):
print("on_R1_press")

def on_R1_release(self):
print("on_R1_release")

def on_R2_press(self, value):
print("on_R2_press: ", value)

def on_R2_release(self):
print("on_R2_release")

def on_up_arrow_press(self):
print("on_up_arrow_press")

def on_up_down_arrow_release(self):
print("on_up_down_arrow_release")

def on_down_arrow_press(self):
print("on_down_arrow_press")

def on_left_arrow_press(self):
print("on_left_arrow_press")

def on_left_right_arrow_release(self):
print("on_left_right_arrow_release")

def on_right_arrow_press(self):
print("on_right_arrow_press")

def on_L3_up(self, value):
print("on_L3_up: ", value)

def on_L3_down(self, value):
print("on_L3_down: ", value)

def on_L3_left(self, value):
print("on_L3_left: ", value)

def on_L3_right(self, value):
print("on_L3_right: ", value)

def on_L3_release(self):
print("on_L3_release")

def on_R3_up(self, value):
print("on_R3_up: ", value)

def on_R3_down(self, value):
print("on_R3_down: ", value)

def on_R3_left(self, value):
print("on_R3_left: ", value)

def on_R3_right(self, value):
print("on_R3_right: ", value)

def on_R3_release(self):
print("on_R3_release")

def on_options_press(self):
print("on_options_press")

def on_options_release(self):
print("on_options_release")

# now make sure the controller is paired over the Bluetooth and turn on the listener
MyController(interface="/dev/input/js0").listen()
Known limitations at this time
  • L3/R3 button clicks are not detected
  • Mouse pad events and clicks are not detected
  • Share button clicks are not detected
  • PS button clicks are not detected
PyPS4Controller Module PS4 Controller Hooks via Python on Linux by ArturSpirin.jpg
 
:idea: Reminder: Those without a Verified Badge yet on Discord to access the private areas we recommend Joining Us! Why? The waiting process takes a week for new Members, and there's a lot we're unable to share on public forums including the latest PS4 PKG Games. 🏴‍☠️

Comments

bablest

Senior Member
Contributor
Why use this over the existing alternatives? I forgot the names of both drivers, but I've used 1 for Kodi on Raspbian and another for retroarch on Arch... what is the point of this?
 

PSXHAX

Staff Member
Moderator
Contributor
Verified
A lot of times devs make things for themselves, and then share with the community afterwards even if alternatives already exist.

Someone may think why bother giving people choice or options, but another may think if this is what the dev wants to spend their time working on that is their decision.

My motto is if it's free it's for me and I'll take three! :D
 

Chumdiddy1

Senior Member
Contributor
Verified
Android would be terrific but I think it came to Switch so soon because that scene is massive and a Switch is basically a glorified tablet. Almost every major component is off the shelf and therefore has drivers for it, etc. It's basically an Nvidia Shield and that's been hacked to death so... Switch!

Getting proper Android to work over a PS4 would be a tall task, based on Linux or Bumfartix or whatever. Sure, an x86 Android OS exists but PS4 is still more proprietary than Switch, despite being pretty off the shelf in comparison to past Playstations.

This is all a guess though. I could be wrong.
 
Recent Articles
Sony Introduces PlayStation Indies for PS5 and PS4 with Montage Video
Proceeding the Indie PS5 game Soulborn Alpha Trailer, Sony introduced their PlayStation Indies initiative featuring nine captivating new independent games including Worms Rumble (PS5 / PS4), Haven...
Cyberpunk 2077 4K Footage and New NBA 2K21 Zion PS5 Trailer Video
Since the last batch of PS5 Trailers some 4K gameplay footage of the upcoming RPG Cyberpunk 2077 by CD Projekt Red surfaced with a 2021 tentative release scheduled alongside a new NBA 2K21 PS5...
CTurt on FreeDVDBoot for PS3 / PS4 and Blu-ray BD-J Attacks
Long ago we saw the Original PS4 Jailbreak for 1.76 FW via BadIRET Exploitation (Github Articles), and following his recent FreeDVDBoot PS2 DVD Player Exploit PlayStation 4 developer @CTurt shared...
PS4 Package (PKG) Manager Homebrew Application by Pakee
PlayStation 4 homebrew developer @pakee of Pakee.xyz recently Contacted Us with news of his PS4 Package (PKG) Manager Homebrew Application public release stating: "I made software to manage...
Top