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;








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/jsX


  • The 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.










share|improve this question
























  • 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

















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/jsX


  • The 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.










share|improve this question
























  • 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













0












0








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/jsX


  • The 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.










share|improve this question
















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/jsX


  • The 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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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

















  • 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










1 Answer
1






active

oldest

votes


















0














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")





share|improve this answer

























    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
    );



    );













    draft saved

    draft discarded


















    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









    0














    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")





    share|improve this answer





























      0














      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")





      share|improve this answer



























        0












        0








        0







        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")





        share|improve this answer















        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")






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Mar 22 at 6:24

























        answered Mar 22 at 5:59









        Eero VilpponenEero Vilpponen

        12




        12



























            draft saved

            draft discarded
















































            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.




            draft saved


            draft discarded














            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





















































            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

            Popular posts from this blog

            Word for a person who has no opinion about whether god existsWord for having a definite opinion while simultaneously withholding judgment?What's the opposite of “newcomer? Is ”veteran" OK?What do you call an “atheist” who might believe in an afterlife?What's a word for someone who wants to voice opinions but not have them challenged?Word for someone who dismisses contrary opinions as irrational?Somone who thinks they are overly special/out of the ordinaryIs there a word, phrase or idiom for “a person who is incapable of thinking about the future”?The belief that a god is human-likeA word for a non-famous person/thing you have heard a lot aboutAdjective for a person who enjoys taking care of their appearance

            2017 IndyCar Series Contents Series news Teams and drivers Schedule Season summary Footnotes References External links Navigation menu"INDYCAR: Initial 2018 bodywork concepts unveiled"the original"IndyCar confirms switch to Performance Friction brakes in 2017""AJ Foyt Racing will switch to Chevy"the original"Carlos Munoz, Conor Daly will drive for AJ Foyt Racing""Zach Veach's Indy 500 Debut Confirmed with Foyt""No mass exodus from Honda after Ganassi switch""Ex-F1 driver Sato joins Andretti Autosport for 2017 IndyCar season""IndyCar's Ryan Hunter-Reay, sponsor DHL paired through 2020""hhgregg and Andretti Autosport announce partnership for key races in 2016""INDYCAR: Rossi re-signs with Andretti"the original"McLaren Formula 1 - Fernando Alonso to race at Indy 500 with McLaren, Honda and Andretti Autosport""Shank will finally take part in Indy 500 with Harvey, Andretti | MotorSportsTalk""Andretti adds Jack Harvey to Indy 500 field""Ganassi switches to Honda power for 2017""INDYCAR: Chilton returns to Ganassi"the original"IndyCar silly season: Who's going where in 2017?""INDYCAR: Kanaan, NTT Data return to Ganassi"the original"Kimball to remain at Ganassi for 2017""Coyne confirms Bourdais for 2017 IndyCar season""Davison to sub for Bourdais in Indy 500"the original"Gutierrez confirmed for Detroit IndyCar debut""Gutierrez returns with Coyne for rest of 2017 season""Vautier to drive for Coyne at Texas"the original"INDYCAR: Coyne confirms Jones for 2017"the original"Pippa Mann returns to Coyne for Indy 500""Karam, Dreyer & Reinbold teaming up again for Indianapolis 500""Pigot to return to Ed Carpenter Racing""Hildebrand confirmed as full-time Ed Carpenter driver""Veach to replace injured Hildebrand at Barber"the originalNew Team Harding Racing Enters Chaves for 101st Indianapolis 500"Juncos Racing Announces Entry in 101st Running of the Indianapolis 500 :: Juncos Racing""Juncos confirms Pigot for Indy 500""Saavedra confirmed in Juncos' second 500 entry"the original"Lazier confirms Indy 500 run after son's USF2000 debut"the original"Claman DeMelo to race for RLLR at Sonoma"the original"Rahal signs Servia and ace engineer for 2017""IndyCar: Aleshin returns with Schmidt"the original"Aleshin replaced by Saavedra for Toronto""Jack Harvey will pilot SPM No. 7 car at Watkins Glen, Sonoma""Jay Howard confirmed in Tony Stewart's supported SPM Indy entry""INDYCAR: Newgarden to wave the flag at Penske"the original"Pagenaud opts for No. 1 in 2017"the original"Penske confirms Newgarden for 2017""Montoya to stay with Team Penske in 2017""Target leaving IndyCar after 27 seasons with Chip Ganassi""Cavin: IndyCar could see complete driver/team shakeup in 2017""End of the road for KV Racing?""KV Racing confirms closure, equipment sold to Juncos""Juncos confirms IndyCar Series entry"the original"Juncos readies IndyCar program, aims for '17 500"the original"Harding Racing to add Texas, Pocono to schedule"the original"Sato signs with Andretti Autosport for 2017""INDYCAR: Aleshin in Doubt at SPM"the original"Long Beach notebook: JR Hildebrand breaks hand""Hildebrand cleared to return at Phoenix"the original"Bourdais to undergo surgery on multiple fractures""Aleshin loses Schmidt Peterson IndyCar ride""Saavedra in at SPM for Pocono, Gateway"the original"Bourdais to make return at Gateway"the original"The IndyCar Grand Prix no longer is sponsored by Angie's List""2017 IndyCar Series rulebook""2017 Verizon IndyCar Series Official Rulebook"Official websiteeeeee

            What was this official D&D 3.5e Lovecraft-flavored rulebook?What was this set of RPG tools called?As a first-time DM should I let my players play complex character classes and roles?Nymph's Kiss and the RelationshipWhat was the name of this Cleric Prestige Class that shapes metal with its bare hands?Are the 3.5e Dragonlance books third party or official works?What's up with the domain Vile Darkness?What was this 80s book about RPGs?What was the name of this Werewolf band?What book had Rituals to “upgrade” animal companions to keep them viable at higher levels?What was this RPG that had rules for player-owned businesses?