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

            Creating 100m^2 grid automatically using QGIS?Creating grid constrained within polygon in QGIS?Createing polygon layer from point data using QGIS?Creating vector grid using QGIS?Creating grid polygons from coordinates using R or PythonCreating grid from spatio temporal point data?Creating fields in attributes table using other layers using QGISCreate .shp vector grid in QGISQGIS Creating 4km point grid within polygonsCreate a vector grid over a raster layerVector Grid Creates just one grid

            What is this called? Old film camera viewer?What makes a good film camera?What to do with an old film camera?What should one look for when buying a used film camera?What is the value and age of this pre-1967 Ricoh 35 mm camera?DSLR recommendation, question about old Canon 35mm film Camera & lensesCan anyone identify the silver rangefinder-style camera in this advertisement?What kind of a Polaroid 600-camera is this?Will an old film camera still work even when not used in a very long time?What is this camera / Can I develop the film?How to fit an action camera into antique (bellows) housing?What to check when buying used and old film bodies?

            Why is this plane circling around the Lucknow airport every day?Why do aircraft on Flight Radar 24 jump around randomly sometimes?What airport has this walkway over a taxiway?How does Chicago O'Hare's tower sequence aircraft at peak capacity?Which airport is featured in this Delta commercial?After a crash, for how long is the airport closed?Can a passenger plane stand still in the air, or hover at a fixed location above a ground?What are those trucks towing around, and why?What is this airport outside of Cairo, Egypt?Which US airport has the lowest circling MDH?What is this airport video?