Hey All

Introduce yourself to the forum before attempting to post elsewhere
User avatar
Matlo
Posts: 5768
Joined: Wed Jul 06, 2011 7:01 am
Location: France
Contact:

Re: Hey All

Post by Matlo »

My guess is that it's a standard usb hid controller. This kind of controller doesn't require any specific driver because it has the ability to tell the usb host what controls it provides (axes & buttons).

If you want to go further, you can boot linux (ubuntu 11.04 for ex.) and type some commands in a terminal.

This command will show all the usb devices:

Code: Select all

lsusb
You have to guess what's the usb device corresponding to your turntable.

Then type the following command:

Code: Select all

sudo lsusb -v -s [bus]:[devnum]
For ex if your turntable is device 2 on bus 4:

Code: Select all

sudo lsusb -v -s 4:2
GIMX creator
Joss
Posts: 13
Joined: Thu Aug 04, 2011 4:45 pm

Re: Hey All

Post by Joss »

Done as you requested:

Code: Select all

Bus 003 Device 004: ID 12ba:0140 Licensed by Sony Computer Entertainment America 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x12ba Licensed by Sony Computer Entertainment America
  idProduct          0x0140 
  bcdDevice            0.05
  iManufacturer           1 RedOctane DJ
  iProduct                2 Guitar Hero5 for PlayStation (R) 3
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           41
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower               50mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     137
          Report Descriptor: (length is 137)
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x05 ] 5
                            Gamepad
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x01 ] 1
            Item(Global): Physical Minimum, data= [ 0x00 ] 0
            Item(Global): Physical Maximum, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Global): Report Count, data= [ 0x0d ] 13
            Item(Global): Usage Page, data= [ 0x09 ] 9
                            Buttons
            Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                            Button 1 (Primary)
            Item(Local ): Usage Maximum, data= [ 0x0d ] 13
                            (null)
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x03 ] 3
            Item(Main  ): Input, data= [ 0x01 ] 1
                            Constant Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Global): Logical Maximum, data= [ 0x07 ] 7
            Item(Global): Physical Maximum, data= [ 0x3b 0x01 ] 315
            Item(Global): Report Size, data= [ 0x04 ] 4
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Global): Unit, data= [ 0x14 ] 20
                            System: English Rotation, Unit: Degrees
            Item(Local ): Usage, data= [ 0x39 ] 57
                            Hat Switch
            Item(Main  ): Input, data= [ 0x42 ] 66
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State Null_State Non_Volatile Bitfield
            Item(Global): Unit, data= [ 0x00 ] 0
                            System: None, Unit: (None)
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x01 ] 1
                            Constant Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Physical Maximum, data= [ 0xff 0x00 ] 255
            Item(Local ): Usage, data= [ 0x30 ] 48
                            Direction-X
            Item(Local ): Usage, data= [ 0x31 ] 49
                            Direction-Y
            Item(Local ): Usage, data= [ 0x32 ] 50
                            Direction-Z
            Item(Local ): Usage, data= [ 0x35 ] 53
                            Rotate-Z
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x04 ] 4
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
                            (null)
            Item(Local ): Usage, data= [ 0x20 ] 32
                            (null)
            Item(Local ): Usage, data= [ 0x21 ] 33
                            (null)
            Item(Local ): Usage, data= [ 0x22 ] 34
                            (null)
            Item(Local ): Usage, data= [ 0x23 ] 35
                            (null)
            Item(Local ): Usage, data= [ 0x24 ] 36
                            (null)
            Item(Local ): Usage, data= [ 0x25 ] 37
                            (null)
            Item(Local ): Usage, data= [ 0x26 ] 38
                            (null)
            Item(Local ): Usage, data= [ 0x27 ] 39
                            (null)
            Item(Local ): Usage, data= [ 0x28 ] 40
                            (null)
            Item(Local ): Usage, data= [ 0x29 ] 41
                            (null)
            Item(Local ): Usage, data= [ 0x2a ] 42
                            (null)
            Item(Local ): Usage, data= [ 0x2b ] 43
                            (null)
            Item(Global): Report Count, data= [ 0x0c ] 12
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x21 0x26 ] 9761
                            (null)
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Feature, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x21 0x26 ] 9761
                            (null)
            Item(Main  ): Output, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Logical Maximum, data= [ 0xff 0x03 ] 1023
            Item(Global): Physical Maximum, data= [ 0xff 0x03 ] 1023
            Item(Local ): Usage, data= [ 0x2c ] 44
                            (null)
            Item(Local ): Usage, data= [ 0x2d ] 45
                            (null)
            Item(Local ): Usage, data= [ 0x2e ] 46
                            (null)
            Item(Local ): Usage, data= [ 0x2f ] 47
                            (null)
            Item(Global): Report Size, data= [ 0x10 ] 16
            Item(Global): Report Count, data= [ 0x04 ] 4
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval              10
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval              10
Device Status:     0x0000
  (Bus Powered)
*UPDATED: Added descriptor*

Anything else?
Last edited by Joss on Mon Aug 08, 2011 8:20 pm, edited 1 time in total.
User avatar
Matlo
Posts: 5768
Joined: Wed Jul 06, 2011 7:01 am
Location: France
Contact:

Re: Hey All

Post by Matlo »

We need the report descriptors, but they are "UNAVAILABLE".

To get them you can do the steps described there: link.
GIMX creator
Joss
Posts: 13
Joined: Thu Aug 04, 2011 4:45 pm

Re: Hey All

Post by Joss »

Sure thing, I'll get them now.

*Update*

Added to my last post in the code section.
User avatar
Matlo
Posts: 5768
Joined: Wed Jul 06, 2011 7:01 am
Location: France
Contact:

Re: Hey All

Post by Matlo »

Code: Select all

sudo apt-get install joystick
sudo jstest /dev/input/jsX
X is the joystick number. Press tab to get auto-completion.

Then see if you get the button & axis status updates.

Let the jstest command run in its own terminal, and type in another terminal:

Code: Select all

lsusb
Write down the device and bus ids.

If bus id is 4:

Code: Select all

sudo cat /sys/kernel/debug/usb/usbmon/4u > dump.txt
Generate an event for each of the controls (buttons, axes).

Post the result of each of the commands, and attach the dump.txt file.
GIMX creator
Joss
Posts: 13
Joined: Thu Aug 04, 2011 4:45 pm

Re: Hey All

Post by Joss »

sudo jstest /dev/input/js0 gives me:

Code: Select all

   1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:off  2:on   3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:on   2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:on   2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:off  2:on   3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:on   1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 1Axes:  0:     0  1:     0  2:     0  3:     0  4:     0  5:     0 Buttons:  0:off  1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 12:off 
I can see this altering as I press the buttons. Again the whammy dial and cross fader do not alter anything but all the other buttons and turntable moving does.

See dump.txt.

Thanks

Joss

(hope it makes sense)
Joss
Posts: 13
Joined: Thu Aug 04, 2011 4:45 pm

Re: Hey All

Post by Joss »

Need anymore information Matlo?
User avatar
Matlo
Posts: 5768
Joined: Wed Jul 06, 2011 7:01 am
Location: France
Contact:

Re: Hey All

Post by Matlo »

What you provided is probably enough to emulate a turntable.

Sadly I have many other things to work on, and it's not a priority task for me :(
GIMX creator
Joss
Posts: 13
Joined: Thu Aug 04, 2011 4:45 pm

Re: Hey All

Post by Joss »

I completely understand, well if you need anything else you know where to find me.
User avatar
McKack
Posts: 359
Joined: Thu Jul 07, 2011 7:01 pm
Location: Norway
Contact:

Re: Hey All

Post by McKack »

Thanks for providing all that info Joss. Hopefully we'll see the ability to emulate other devices than the Sixaxis/Dualshock 3 in the future because of people like you ;)
My Config Repository | PSN: McKack - Steam: McKack - XBL: Ozukaki | Config Post Template
Post Reply