Subject: Re: kern/30554: The ParaParaParadise USB controller needs special handling in uhid(4)
To: None <gnats-bugs@netbsd.org, augustss@netbsd.org>
From: Dave Sainty <dave@dtsp.co.nz>
List: netbsd-bugs
Date: 07/02/2005 20:30:53
svs+pr@grep.ru writes:

> >Number:         30554
> >Category:       kern
> >Synopsis:       The ParaParaParadise USB controller needs special handling in uhid(4)
> >Confidential:   no
> >Severity:       non-critical
> >Priority:       low
> >Responsible:    kern-bug-people
> >State:          open
> >Class:          change-request
> >Submitter-Id:   net
> >Arrival-Date:   Sun Jun 19 01:50:00 +0000 2005
> >Originator:     Sergey Svishchev
> >Release:        3.99.3
> >Organization:
> >Environment:
> >Description:
> The ParaParaParadise controller is a perfectly normal USB HID device with just one quirk -- it needs to be 'woken up' before it will send input reports.  It was sold with Konami game for PlayStation2 and the game; there are at least two game simulators out there (pydance and stepmania) that could use this controller, too.  Before now, the wake-up method was not known -- see, e.g., http://icculus.org/pyddr/manual.php#install.mat.ppp; it was really easy to discover, though ("usbhidctl -r" shows a feature report with really intriguing name of "LEDs:On-Line" :-)
> >How-To-Repeat:
> 
> >Fix:
> --- sys/dev/usb/uhidev.c	27 Feb 2005 00:27:51 -0000	1.24
> +++ sys/dev/usb/uhidev.c	16 Jun 2005 17:45:34 -0000
> @@ -211,6 +211,19 @@
>  		USB_ATTACH_ERROR_RETURN;
>  	}
>  
> +	if (uaa->vendor == USB_VENDOR_HOSIDEN && 
> +	    uaa->product == USB_PRODUCT_HOSIDEN_PPP) {
> +		static uByte reportbuf[] = {1};
> +		/*
> +		 *  This device was sold by Konami with its ParaParaParadise 
> +		 *  game for PlayStation2.  It needs to be "turned on"
> +		 *  before it will send any reports.
> +		 */
> +
> +		usbd_set_report(uaa->iface, UHID_FEATURE_REPORT, 0,
> +		    &reportbuf, sizeof reportbuf);
> +	}
> +
>  	sc->sc_repdesc = desc;
>  	sc->sc_repdesc_size = size;

Is this really necessary?  Couldn't you just do this from userland
with something like:

usbhidctl -f /dev/uhidXXX -w LEDs:On-Line=1

???