Bug 787457

Summary: Suspend forgets second joystick
Product: [Fedora] Fedora Reporter: Wolfram Wagner <wolfram>
Component: joystickAssignee: Than Ngo <than>
Status: CLOSED WONTFIX QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 16CC: than
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2013-02-13 23:25:56 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Wolfram Wagner 2012-02-05 09:30:51 UTC
Description of problem:
I am running a fully patched 3.2.2-1.fc16.x86_64 system.
I have two joysticks, a traditional and a flight sim quadrant. One usb 1.0 and one usb 2.0
If I shutdown/restart the system completely, both joysticks are recognized and appear in /dev/input/ as js0 and js1. 

If I suspend the computer and wake it up, only the first joystick appears as js0, the second requires a re-plugin to appear.

Another maybe-hint: At first I had both plugged in beside each other. In that case the sequence of the joysticks changed frequently (js0 <=> js1 ). Now I have one joystick (the quadrant/usb 2.0) plugged in behind the machine. Now the quadrant disappears...
  
Please tell me which information you need to drill down to that issue!

lsusb -v 
Joystick1:
Bus 006 Device 002: ID 0583:688f Padix Co., Ltd (Rockfire) QF-688uv Windstorm Pro Joystick
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.00
  bDeviceClass            3 Human Interface Device
  bDeviceSubClass         0 No Subclass
  bDeviceProtocol         0 None
  bMaxPacketSize0         8
  idVendor           0x0583 Padix Co., Ltd (Rockfire)
  idProduct          0x688f QF-688uv Windstorm Pro Joystick
  bcdDevice            1.20
  iManufacturer           1 Padix Co. Ltd.
  iProduct                2 USB, Vibration 3D Joystick
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              350mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.00
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     105
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0006  1x 6 bytes
        bInterval              10
Device Status:     0x0000
  (Bus Powered)


Joystick 2
Bus 004 Device 042: ID 06a3:0c2d Saitek PLC 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x06a3 Saitek PLC
  idProduct          0x0c2d 
  bcdDevice            2.00
  iManufacturer           1 Saitek
  iProduct                2 Saitek Pro Flight Quadrant
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.00
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      51
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0005  1x 5 bytes
        bInterval              10
Device Status:     0x0000
  (Bus Powered)

dmesg shows nothing about the quadrant after wakeup.

re-plugin brings:
 usb 4-3: USB disconnect, device number 41
[] usb 4-3: new full-speed USB device number 42 using ohci_hcd
[] usb 4-3: New USB device found, idVendor=06a3, idProduct=0c2d
[] usb 4-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ usb 4-3: Product: Saitek Pro Flight Quadrant
[] usb 4-3: Manufacturer: Saitek
[] input: Saitek Saitek Pro Flight Quadrant as /devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.0/input/input65
[] generic-usb 0003:06A3:0C2D.0037: input,hidraw6: USB HID v1.00 Joystick [Saitek Saitek Pro Flight Quadrant] on usb-0000:00:12.1-3/input0

I help if I can...

Comment 1 Wolfram Wagner 2012-02-07 08:12:32 UTC
I have continued my analysis and found that today, coldstart exchanges the sequence of the devices so the Saitek Quadrant is mapped as js0 and the joystick as js1...

Today I could not reproduce the disappearing joystick. I wonder if I should be happy or if it is only a sporadic issue.

My core problem is that my analoge joystick requires manual calibration and I have a script in place that saves and restore these settings at system start.
This script relies on the js device numbers and fails if one is missing or if the joysticks are exchanged.
Flightgear is using the names of the devices to map them to features. So there is no problem.

I guess I will have to add my own udev rules to create a specific name for the analog joystick, right?
I wonder if a normal end user can be asked to do this... There should be a better solution to this issue.

Comment 2 Wolfram Wagner 2012-02-07 15:35:23 UTC
For other users running into this problem:
I have created a udev rule file:

/etc/udev/rules.d/11-joystick-symlinks.rules
KERNEL=="js[0-9]*", ATTRS{idVendor}=="0583", ATTRS{idProduct}=="688f", SYMLINK+="input/js_js"
KERNEL=="js[0-9]*", ATTRS{idVendor}=="06a3", ATTRS{idProduct}=="0c2d", SYMLINK+="input/js_quadrant0"

This file creates an additional symlink with a unique name.

You will have do correct the idVendor and idProduct code to match your devices. Use lsusb to retrieve them...

The callibration is done in a init script, basically by the command:
 /usr/bin/jscal -p /dev/input/js_js > /etc/joystick.cal
to save the calibration into a file. And the command:
 source /etc/joystick.cal
to load it again.

In the file appears your current calibration like this:
jscal -s 6,1,0,98,98,5711218,10526559,1,0,91,91,6242495,8947575,1,0,68,68,8521500,9099229,1,0,70,70,8134160,8800894,1,0,0,0,536854528,536854528,1,0,0,0,536854528,536854528 /dev/input/js_js

You see, the new symlink is being used. So my troubles are gone, although, the system should do this for me.

Also, I wonder, if my system will forget the joysticks again. If my problem is gone, I come back and tell you.
Mixing them up is no trouble for me anymore.

Comment 3 Wolfram Wagner 2012-02-10 19:09:04 UTC
In between I found out, that the system "forgets" only the axis like levers of my quadrant. 
I had flightgear running while I suspended my computer. After waking of, flightgear did continue as usual, but the link to the three engine control levers were gone.
Even in js_demo there was no change of values anymore. Only the buttons did work still.
Now I wonder, if this might to do with the running application. Maybe the kernel does not perform the automatic calibration in case the device is in use? Or something like that...

Pausing flightgear for hours causes no problem. And I did several suspends without running flightgear successfully. I will try, if this happends everytime.

Comment 4 Wolfram Wagner 2012-04-11 13:37:34 UTC
The problem still persists.
js_demo before suspend: works.
Suspend, wake up
js_demo:
  Btns Ax:0 Ax:1 Ax:2 
  0000 -1.0 -1.0 -1.0 

The buttons are still recognized, but not the levers.

Plugout and plugin the quadrant helps to heal it for the moment.

Comment 5 Fedora End Of Life 2013-01-16 19:43:46 UTC
This message is a reminder that Fedora 16 is nearing its end of life.
Approximately 4 (four) weeks from now Fedora will stop maintaining
and issuing updates for Fedora 16. It is Fedora's policy to close all
bug reports from releases that are no longer maintained. At that time
this bug will be closed as WONTFIX if it remains open with a Fedora 
'version' of '16'.

Package Maintainer: If you wish for this bug to remain open because you
plan to fix it in a currently maintained version, simply change the 'version' 
to a later Fedora version prior to Fedora 16's end of life.

Bug Reporter: Thank you for reporting this issue and we are sorry that 
we may not be able to fix it before Fedora 16 is end of life. If you 
would still like to see this bug fixed and are able to reproduce it 
against a later version of Fedora, you are encouraged to click on 
"Clone This Bug" and open it against that version of Fedora.

Although we aim to fix as many bugs as possible during every release's 
lifetime, sometimes those efforts are overtaken by events. Often a 
more recent Fedora release includes newer upstream software that fixes 
bugs or makes them obsolete.

The process we are following is described here: 
http://fedoraproject.org/wiki/BugZappers/HouseKeeping

Comment 6 Fedora End Of Life 2013-02-13 23:26:01 UTC
Fedora 16 changed to end-of-life (EOL) status on 2013-02-12. Fedora 16 is 
no longer maintained, which means that it will not receive any further 
security or bug fix updates. As a result we are closing this bug.

If you can reproduce this bug against a currently maintained version of 
Fedora please feel free to reopen this bug against that version.

Thank you for reporting this bug and we are sorry it could not be fixed.