Playstation usb adapter missing buttonsBackTrack USB Wireless adapter drivers issueUSB to Serial in Chrubuntu - /dev/ttyUSB0 missingModules for USB wireless adapter missing?How to use a PS gamepad with OpenWRT?USB WiFi adapter using ath9k_htc not working on LinuxUSB devices missing from /proc/acpi/wakeupUSB 3.0 to HDMI adapterUSB C → DisplayPort Adapter supportPL2303/PL2303X USB-Serial driverBusybox USB Ethernet adapter
Crop image to path created in TikZ?
If a centaur druid Wild Shapes into a Giant Elk, do their Charge features stack?
What do the Banks children have against barley water?
aging parents with no investments
How to move the player while also allowing forces to affect it
COUNT(*) or MAX(id) - which is faster?
Does the average primeness of natural numbers tend to zero?
What are the advantages and disadvantages of running one shots compared to campaigns?
Patience, young "Padovan"
Shall I use personal or official e-mail account when registering to external websites for work purpose?
Does a dangling wire really electrocute me if I'm standing in water?
What is it called when oen voice type sings a 'solo?'
How to answer pointed "are you quitting" questioning when I don't want them to suspect
How to make payment on the internet without leaving a money trail?
Could Giant Ground Sloths have been a good pack animal for the ancient Mayans?
Are cabin dividers used to "hide" the flex of the airplane?
Can the Produce Flame cantrip be used to grapple, or as an unarmed strike, in the right circumstances?
Why doesn't a const reference extend the life of a temporary object passed via a function?
Is ipsum/ipsa/ipse a third person pronoun, or can it serve other functions?
What is the command to reset a PC without deleting any files
Why do we use polarized capacitors?
What do you call words made from common English words?
How can I fix this gap between bookcases I made?
Domain expired, GoDaddy holds it and is asking more money
Playstation usb adapter missing buttons
BackTrack USB Wireless adapter drivers issueUSB to Serial in Chrubuntu - /dev/ttyUSB0 missingModules for USB wireless adapter missing?How to use a PS gamepad with OpenWRT?USB WiFi adapter using ath9k_htc not working on LinuxUSB devices missing from /proc/acpi/wakeupUSB 3.0 to HDMI adapterUSB C → DisplayPort Adapter supportPL2303/PL2303X USB-Serial driverBusybox USB Ethernet adapter
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I'm trying to use a PS2 Guitar Hero II controller on PC/Linux. After trying out multiple Playstation-to-usb adapters, I've finally found one that does not cause any input lag.
However I've encountered a problem with detecting all buttons under linux, as discussed in the linux-input mailing list thread.
Windows
- All buttons are detected, but the D-pad (strum up/down) is incorrectly mapped to the same axis as the "Whammy bar". This is not game-breaking, but inconvenient.
Linux
Linux detects the controller as
ID 054c:0268 Sony Corp. Batoh Device / PlayStation 3 Controller, having 13 buttons and 6 axes.Some buttons cause no events in
/dev/input/jsXThe non-working buttons do cause HID-events, detected in
/dev/hidrawX.
Now, I understand that this is a bug, and I should just wait for a fix to the driver. While the fix is processing, I'd like to find a workaround.
Could I easily write some udev rule that could map raw HID-events to input events?
Also, I've captured the USB handshake process using wireshark under windows.
drivers usb hid
add a comment |
I'm trying to use a PS2 Guitar Hero II controller on PC/Linux. After trying out multiple Playstation-to-usb adapters, I've finally found one that does not cause any input lag.
However I've encountered a problem with detecting all buttons under linux, as discussed in the linux-input mailing list thread.
Windows
- All buttons are detected, but the D-pad (strum up/down) is incorrectly mapped to the same axis as the "Whammy bar". This is not game-breaking, but inconvenient.
Linux
Linux detects the controller as
ID 054c:0268 Sony Corp. Batoh Device / PlayStation 3 Controller, having 13 buttons and 6 axes.Some buttons cause no events in
/dev/input/jsXThe non-working buttons do cause HID-events, detected in
/dev/hidrawX.
Now, I understand that this is a bug, and I should just wait for a fix to the driver. While the fix is processing, I'd like to find a workaround.
Could I easily write some udev rule that could map raw HID-events to input events?
Also, I've captured the USB handshake process using wireshark under windows.
drivers usb hid
What about using QJoyPad 4, a fork of QJoyPad to remap the buttons of your controller while a fix isn't available to the drivers? - github.com/panzi/qjoypad
– nwildner
Mar 20 at 16:59
Looks like QJoyPad uses joystick devices (e.g./dev/input/js0), which don't show anything when the missing buttons are pressed. I'm going to need something that can parse the raw HID-data.
– Eero Vilpponen
Mar 21 at 17:12
add a comment |
I'm trying to use a PS2 Guitar Hero II controller on PC/Linux. After trying out multiple Playstation-to-usb adapters, I've finally found one that does not cause any input lag.
However I've encountered a problem with detecting all buttons under linux, as discussed in the linux-input mailing list thread.
Windows
- All buttons are detected, but the D-pad (strum up/down) is incorrectly mapped to the same axis as the "Whammy bar". This is not game-breaking, but inconvenient.
Linux
Linux detects the controller as
ID 054c:0268 Sony Corp. Batoh Device / PlayStation 3 Controller, having 13 buttons and 6 axes.Some buttons cause no events in
/dev/input/jsXThe non-working buttons do cause HID-events, detected in
/dev/hidrawX.
Now, I understand that this is a bug, and I should just wait for a fix to the driver. While the fix is processing, I'd like to find a workaround.
Could I easily write some udev rule that could map raw HID-events to input events?
Also, I've captured the USB handshake process using wireshark under windows.
drivers usb hid
I'm trying to use a PS2 Guitar Hero II controller on PC/Linux. After trying out multiple Playstation-to-usb adapters, I've finally found one that does not cause any input lag.
However I've encountered a problem with detecting all buttons under linux, as discussed in the linux-input mailing list thread.
Windows
- All buttons are detected, but the D-pad (strum up/down) is incorrectly mapped to the same axis as the "Whammy bar". This is not game-breaking, but inconvenient.
Linux
Linux detects the controller as
ID 054c:0268 Sony Corp. Batoh Device / PlayStation 3 Controller, having 13 buttons and 6 axes.Some buttons cause no events in
/dev/input/jsXThe non-working buttons do cause HID-events, detected in
/dev/hidrawX.
Now, I understand that this is a bug, and I should just wait for a fix to the driver. While the fix is processing, I'd like to find a workaround.
Could I easily write some udev rule that could map raw HID-events to input events?
Also, I've captured the USB handshake process using wireshark under windows.
drivers usb hid
drivers usb hid
edited Apr 4 at 9:36
Rui F Ribeiro
42k1483142
42k1483142
asked Mar 20 at 16:53
Eero VilpponenEero Vilpponen
12
12
What about using QJoyPad 4, a fork of QJoyPad to remap the buttons of your controller while a fix isn't available to the drivers? - github.com/panzi/qjoypad
– nwildner
Mar 20 at 16:59
Looks like QJoyPad uses joystick devices (e.g./dev/input/js0), which don't show anything when the missing buttons are pressed. I'm going to need something that can parse the raw HID-data.
– Eero Vilpponen
Mar 21 at 17:12
add a comment |
What about using QJoyPad 4, a fork of QJoyPad to remap the buttons of your controller while a fix isn't available to the drivers? - github.com/panzi/qjoypad
– nwildner
Mar 20 at 16:59
Looks like QJoyPad uses joystick devices (e.g./dev/input/js0), which don't show anything when the missing buttons are pressed. I'm going to need something that can parse the raw HID-data.
– Eero Vilpponen
Mar 21 at 17:12
What about using QJoyPad 4, a fork of QJoyPad to remap the buttons of your controller while a fix isn't available to the drivers? - github.com/panzi/qjoypad
– nwildner
Mar 20 at 16:59
What about using QJoyPad 4, a fork of QJoyPad to remap the buttons of your controller while a fix isn't available to the drivers? - github.com/panzi/qjoypad
– nwildner
Mar 20 at 16:59
Looks like QJoyPad uses joystick devices (e.g.
/dev/input/js0), which don't show anything when the missing buttons are pressed. I'm going to need something that can parse the raw HID-data.– Eero Vilpponen
Mar 21 at 17:12
Looks like QJoyPad uses joystick devices (e.g.
/dev/input/js0), which don't show anything when the missing buttons are pressed. I'm going to need something that can parse the raw HID-data.– Eero Vilpponen
Mar 21 at 17:12
add a comment |
1 Answer
1
active
oldest
votes
I got it working by using hidapi for python. In the end it was very easy, I was just missing the tool.
Here is the full script should anyone need guidance:
from __future__ import print_function
import hid
import time
import uinput
MAPPING =
'green': uinput.BTN_0,
'red': uinput.BTN_1,
'yellow': uinput.BTN_2,
'blue': uinput.BTN_3,
'orange': uinput.BTN_4,
'tilt': uinput.BTN_SELECT, # SELECT
'start': uinput.BTN_START, # START
'select': uinput.BTN_SELECT, # SELECT
'whammy': uinput.ABS_X, # WHAMMY
'strumdown': uinput.BTN_DPAD_DOWN,
'strumup': uinput.BTN_DPAD_UP,
DEVICE = uinput.Device(MAPPING.values())
# enumerate USB devices
for d in hid.enumerate():
keys = list(d.keys())
keys.sort()
for key in keys:
print("%s : %s" % (key, d[key]))
print()
# try opening a device, then perform write and read
def diff(new_arr, old_arr):
for i in range(len(new_arr)):
if new_arr[i] != old_arr[i]:
yield (i, new_arr[i])
try:
print("Opening the device")
h = hid.device()
h.open(0x054c, 0x0268) # VendorID/ProductID
print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())
# enable non-blocking mode
h.set_nonblocking(1)
# write some data to the device
print("Write the data")
h.write([0, 63, 35, 35] + [0] * 61)
# wait
time.sleep(0.05)
# read back the answer
print("Read the data")
previous = None
INPUT =
'green': False,
'red': False,
'yellow': False,
'blue': False,
'orange': False,
'tilt': False,
'start': False,
'select': False,
'whammy': False,
'strumdown': False,
'strumup': False,
def set_input(key, val, tmp):
prev = INPUT[key]
if tmp >= val:
tmp -= val
INPUT[key] = True
else:
INPUT[key] = False
if prev != INPUT[key]:
# SEND EVENT
DEVICE.emit(MAPPING[key], INPUT[key])
pass
return tmp
counter = 0
while True:
try:
time.sleep(0.001)
d = h.read(64)
counter += 1
if d:
if previous and d != previous:
for ret in diff(d, previous):
if ret[0] == 7:
DEVICE.emit(MAPPING['whammy'], ret[1])
if ret[0] == 2:
tmp = ret[1] - 128
tmp = set_input('strumdown', 64, tmp)
tmp = set_input('strumup', 16, tmp)
tmp = set_input('start', 8, tmp)
tmp = set_input('select', 1, tmp)
if ret[0] == 3:
tmp = ret[1]
tmp = set_input('orange', 128, tmp)
tmp = set_input('blue', 64, tmp)
tmp = set_input('red', 32, tmp)
tmp = set_input('yellow', 16, tmp)
tmp = set_input('green', 2, tmp)
tmp = set_input('tilt', 1, tmp)
previous = d
else:
continue
except KeyboardInterrupt:
break
print(counter, end="r")
# print(INPUT)
print("Closing the device")
h.close()
except IOError as ex:
print(ex)
print("You probably don't have the hard coded device. Update the hid.device line")
print("in this script with one from the enumeration list output above and try again.")
print("Done")
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f507488%2fplaystation-usb-adapter-missing-buttons%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I got it working by using hidapi for python. In the end it was very easy, I was just missing the tool.
Here is the full script should anyone need guidance:
from __future__ import print_function
import hid
import time
import uinput
MAPPING =
'green': uinput.BTN_0,
'red': uinput.BTN_1,
'yellow': uinput.BTN_2,
'blue': uinput.BTN_3,
'orange': uinput.BTN_4,
'tilt': uinput.BTN_SELECT, # SELECT
'start': uinput.BTN_START, # START
'select': uinput.BTN_SELECT, # SELECT
'whammy': uinput.ABS_X, # WHAMMY
'strumdown': uinput.BTN_DPAD_DOWN,
'strumup': uinput.BTN_DPAD_UP,
DEVICE = uinput.Device(MAPPING.values())
# enumerate USB devices
for d in hid.enumerate():
keys = list(d.keys())
keys.sort()
for key in keys:
print("%s : %s" % (key, d[key]))
print()
# try opening a device, then perform write and read
def diff(new_arr, old_arr):
for i in range(len(new_arr)):
if new_arr[i] != old_arr[i]:
yield (i, new_arr[i])
try:
print("Opening the device")
h = hid.device()
h.open(0x054c, 0x0268) # VendorID/ProductID
print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())
# enable non-blocking mode
h.set_nonblocking(1)
# write some data to the device
print("Write the data")
h.write([0, 63, 35, 35] + [0] * 61)
# wait
time.sleep(0.05)
# read back the answer
print("Read the data")
previous = None
INPUT =
'green': False,
'red': False,
'yellow': False,
'blue': False,
'orange': False,
'tilt': False,
'start': False,
'select': False,
'whammy': False,
'strumdown': False,
'strumup': False,
def set_input(key, val, tmp):
prev = INPUT[key]
if tmp >= val:
tmp -= val
INPUT[key] = True
else:
INPUT[key] = False
if prev != INPUT[key]:
# SEND EVENT
DEVICE.emit(MAPPING[key], INPUT[key])
pass
return tmp
counter = 0
while True:
try:
time.sleep(0.001)
d = h.read(64)
counter += 1
if d:
if previous and d != previous:
for ret in diff(d, previous):
if ret[0] == 7:
DEVICE.emit(MAPPING['whammy'], ret[1])
if ret[0] == 2:
tmp = ret[1] - 128
tmp = set_input('strumdown', 64, tmp)
tmp = set_input('strumup', 16, tmp)
tmp = set_input('start', 8, tmp)
tmp = set_input('select', 1, tmp)
if ret[0] == 3:
tmp = ret[1]
tmp = set_input('orange', 128, tmp)
tmp = set_input('blue', 64, tmp)
tmp = set_input('red', 32, tmp)
tmp = set_input('yellow', 16, tmp)
tmp = set_input('green', 2, tmp)
tmp = set_input('tilt', 1, tmp)
previous = d
else:
continue
except KeyboardInterrupt:
break
print(counter, end="r")
# print(INPUT)
print("Closing the device")
h.close()
except IOError as ex:
print(ex)
print("You probably don't have the hard coded device. Update the hid.device line")
print("in this script with one from the enumeration list output above and try again.")
print("Done")
add a comment |
I got it working by using hidapi for python. In the end it was very easy, I was just missing the tool.
Here is the full script should anyone need guidance:
from __future__ import print_function
import hid
import time
import uinput
MAPPING =
'green': uinput.BTN_0,
'red': uinput.BTN_1,
'yellow': uinput.BTN_2,
'blue': uinput.BTN_3,
'orange': uinput.BTN_4,
'tilt': uinput.BTN_SELECT, # SELECT
'start': uinput.BTN_START, # START
'select': uinput.BTN_SELECT, # SELECT
'whammy': uinput.ABS_X, # WHAMMY
'strumdown': uinput.BTN_DPAD_DOWN,
'strumup': uinput.BTN_DPAD_UP,
DEVICE = uinput.Device(MAPPING.values())
# enumerate USB devices
for d in hid.enumerate():
keys = list(d.keys())
keys.sort()
for key in keys:
print("%s : %s" % (key, d[key]))
print()
# try opening a device, then perform write and read
def diff(new_arr, old_arr):
for i in range(len(new_arr)):
if new_arr[i] != old_arr[i]:
yield (i, new_arr[i])
try:
print("Opening the device")
h = hid.device()
h.open(0x054c, 0x0268) # VendorID/ProductID
print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())
# enable non-blocking mode
h.set_nonblocking(1)
# write some data to the device
print("Write the data")
h.write([0, 63, 35, 35] + [0] * 61)
# wait
time.sleep(0.05)
# read back the answer
print("Read the data")
previous = None
INPUT =
'green': False,
'red': False,
'yellow': False,
'blue': False,
'orange': False,
'tilt': False,
'start': False,
'select': False,
'whammy': False,
'strumdown': False,
'strumup': False,
def set_input(key, val, tmp):
prev = INPUT[key]
if tmp >= val:
tmp -= val
INPUT[key] = True
else:
INPUT[key] = False
if prev != INPUT[key]:
# SEND EVENT
DEVICE.emit(MAPPING[key], INPUT[key])
pass
return tmp
counter = 0
while True:
try:
time.sleep(0.001)
d = h.read(64)
counter += 1
if d:
if previous and d != previous:
for ret in diff(d, previous):
if ret[0] == 7:
DEVICE.emit(MAPPING['whammy'], ret[1])
if ret[0] == 2:
tmp = ret[1] - 128
tmp = set_input('strumdown', 64, tmp)
tmp = set_input('strumup', 16, tmp)
tmp = set_input('start', 8, tmp)
tmp = set_input('select', 1, tmp)
if ret[0] == 3:
tmp = ret[1]
tmp = set_input('orange', 128, tmp)
tmp = set_input('blue', 64, tmp)
tmp = set_input('red', 32, tmp)
tmp = set_input('yellow', 16, tmp)
tmp = set_input('green', 2, tmp)
tmp = set_input('tilt', 1, tmp)
previous = d
else:
continue
except KeyboardInterrupt:
break
print(counter, end="r")
# print(INPUT)
print("Closing the device")
h.close()
except IOError as ex:
print(ex)
print("You probably don't have the hard coded device. Update the hid.device line")
print("in this script with one from the enumeration list output above and try again.")
print("Done")
add a comment |
I got it working by using hidapi for python. In the end it was very easy, I was just missing the tool.
Here is the full script should anyone need guidance:
from __future__ import print_function
import hid
import time
import uinput
MAPPING =
'green': uinput.BTN_0,
'red': uinput.BTN_1,
'yellow': uinput.BTN_2,
'blue': uinput.BTN_3,
'orange': uinput.BTN_4,
'tilt': uinput.BTN_SELECT, # SELECT
'start': uinput.BTN_START, # START
'select': uinput.BTN_SELECT, # SELECT
'whammy': uinput.ABS_X, # WHAMMY
'strumdown': uinput.BTN_DPAD_DOWN,
'strumup': uinput.BTN_DPAD_UP,
DEVICE = uinput.Device(MAPPING.values())
# enumerate USB devices
for d in hid.enumerate():
keys = list(d.keys())
keys.sort()
for key in keys:
print("%s : %s" % (key, d[key]))
print()
# try opening a device, then perform write and read
def diff(new_arr, old_arr):
for i in range(len(new_arr)):
if new_arr[i] != old_arr[i]:
yield (i, new_arr[i])
try:
print("Opening the device")
h = hid.device()
h.open(0x054c, 0x0268) # VendorID/ProductID
print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())
# enable non-blocking mode
h.set_nonblocking(1)
# write some data to the device
print("Write the data")
h.write([0, 63, 35, 35] + [0] * 61)
# wait
time.sleep(0.05)
# read back the answer
print("Read the data")
previous = None
INPUT =
'green': False,
'red': False,
'yellow': False,
'blue': False,
'orange': False,
'tilt': False,
'start': False,
'select': False,
'whammy': False,
'strumdown': False,
'strumup': False,
def set_input(key, val, tmp):
prev = INPUT[key]
if tmp >= val:
tmp -= val
INPUT[key] = True
else:
INPUT[key] = False
if prev != INPUT[key]:
# SEND EVENT
DEVICE.emit(MAPPING[key], INPUT[key])
pass
return tmp
counter = 0
while True:
try:
time.sleep(0.001)
d = h.read(64)
counter += 1
if d:
if previous and d != previous:
for ret in diff(d, previous):
if ret[0] == 7:
DEVICE.emit(MAPPING['whammy'], ret[1])
if ret[0] == 2:
tmp = ret[1] - 128
tmp = set_input('strumdown', 64, tmp)
tmp = set_input('strumup', 16, tmp)
tmp = set_input('start', 8, tmp)
tmp = set_input('select', 1, tmp)
if ret[0] == 3:
tmp = ret[1]
tmp = set_input('orange', 128, tmp)
tmp = set_input('blue', 64, tmp)
tmp = set_input('red', 32, tmp)
tmp = set_input('yellow', 16, tmp)
tmp = set_input('green', 2, tmp)
tmp = set_input('tilt', 1, tmp)
previous = d
else:
continue
except KeyboardInterrupt:
break
print(counter, end="r")
# print(INPUT)
print("Closing the device")
h.close()
except IOError as ex:
print(ex)
print("You probably don't have the hard coded device. Update the hid.device line")
print("in this script with one from the enumeration list output above and try again.")
print("Done")
I got it working by using hidapi for python. In the end it was very easy, I was just missing the tool.
Here is the full script should anyone need guidance:
from __future__ import print_function
import hid
import time
import uinput
MAPPING =
'green': uinput.BTN_0,
'red': uinput.BTN_1,
'yellow': uinput.BTN_2,
'blue': uinput.BTN_3,
'orange': uinput.BTN_4,
'tilt': uinput.BTN_SELECT, # SELECT
'start': uinput.BTN_START, # START
'select': uinput.BTN_SELECT, # SELECT
'whammy': uinput.ABS_X, # WHAMMY
'strumdown': uinput.BTN_DPAD_DOWN,
'strumup': uinput.BTN_DPAD_UP,
DEVICE = uinput.Device(MAPPING.values())
# enumerate USB devices
for d in hid.enumerate():
keys = list(d.keys())
keys.sort()
for key in keys:
print("%s : %s" % (key, d[key]))
print()
# try opening a device, then perform write and read
def diff(new_arr, old_arr):
for i in range(len(new_arr)):
if new_arr[i] != old_arr[i]:
yield (i, new_arr[i])
try:
print("Opening the device")
h = hid.device()
h.open(0x054c, 0x0268) # VendorID/ProductID
print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())
# enable non-blocking mode
h.set_nonblocking(1)
# write some data to the device
print("Write the data")
h.write([0, 63, 35, 35] + [0] * 61)
# wait
time.sleep(0.05)
# read back the answer
print("Read the data")
previous = None
INPUT =
'green': False,
'red': False,
'yellow': False,
'blue': False,
'orange': False,
'tilt': False,
'start': False,
'select': False,
'whammy': False,
'strumdown': False,
'strumup': False,
def set_input(key, val, tmp):
prev = INPUT[key]
if tmp >= val:
tmp -= val
INPUT[key] = True
else:
INPUT[key] = False
if prev != INPUT[key]:
# SEND EVENT
DEVICE.emit(MAPPING[key], INPUT[key])
pass
return tmp
counter = 0
while True:
try:
time.sleep(0.001)
d = h.read(64)
counter += 1
if d:
if previous and d != previous:
for ret in diff(d, previous):
if ret[0] == 7:
DEVICE.emit(MAPPING['whammy'], ret[1])
if ret[0] == 2:
tmp = ret[1] - 128
tmp = set_input('strumdown', 64, tmp)
tmp = set_input('strumup', 16, tmp)
tmp = set_input('start', 8, tmp)
tmp = set_input('select', 1, tmp)
if ret[0] == 3:
tmp = ret[1]
tmp = set_input('orange', 128, tmp)
tmp = set_input('blue', 64, tmp)
tmp = set_input('red', 32, tmp)
tmp = set_input('yellow', 16, tmp)
tmp = set_input('green', 2, tmp)
tmp = set_input('tilt', 1, tmp)
previous = d
else:
continue
except KeyboardInterrupt:
break
print(counter, end="r")
# print(INPUT)
print("Closing the device")
h.close()
except IOError as ex:
print(ex)
print("You probably don't have the hard coded device. Update the hid.device line")
print("in this script with one from the enumeration list output above and try again.")
print("Done")
edited Mar 22 at 6:24
answered Mar 22 at 5:59
Eero VilpponenEero Vilpponen
12
12
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f507488%2fplaystation-usb-adapter-missing-buttons%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
-drivers, hid, usb
What about using QJoyPad 4, a fork of QJoyPad to remap the buttons of your controller while a fix isn't available to the drivers? - github.com/panzi/qjoypad
– nwildner
Mar 20 at 16:59
Looks like QJoyPad uses joystick devices (e.g.
/dev/input/js0), which don't show anything when the missing buttons are pressed. I'm going to need something that can parse the raw HID-data.– Eero Vilpponen
Mar 21 at 17:12