Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Jun 2008 14:24:37 +0200
From:      Markus Brueffer <markus@freebsd.org>
To:        freebsd-usb@freebsd.org
Subject:   Re: final usb question
Message-ID:  <200806091424.38147.markus@freebsd.org>
In-Reply-To: <484C46D6.6050908@telenix.org>
References:  <484BEE1C.8040903@telenix.org> <200806082132.51357.hselasky@c2i.net> <484C46D6.6050908@telenix.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--nextPart1548941.RjrWY61epo
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Am Sonntag, 8. Juni 2008 22:53:42 schrieb Chuck Robey:
> Hans Petter Selasky wrote:
> > Hi Chuck,
> >
> > On Sunday 08 June 2008, Chuck Robey wrote:
> >> Hans, this is the big question, requires more thought, so if you don't
> >> have enough time on hand, give this a skip for a while.  I'm CC'ing th=
is
> >> to the FreeBSD-USB list, it's conceivable that I might get lucky there,
> >> too.
> >>
> >> This replaces my last usb question, because (even though I think the
> >> answer to that one confirms the utter insanity of the people who wrote
> >> the USB-HID spec), I have absolute confirmation of the fact that I
> >> cannot, in situations where the report descriptor has multiple sections
> >> ID'd by multiple report IDs, force the USB peripheral to send me the
> >> report ID that makes the best sense, and I must be satisfied with
> >> whatever the device sends me.  That's ridiculous, but I wrote down the
> >> reference, just so I could look back at it and confirm to myself that I
> >> wasn't dreaming any of this.
> >>
> >> As a better illustration of that, my tablet has report IDs 7, 8, and 9.
> >> ID# 7 is the only one that matches well, but the device manufacturer h=
as
> >> set it up to respond ONLY with report ID# 9.  If I _could_ change that,
> >> I surely would, and I spent a LOT of time investigating until I
> >> absolutely found hard confirmation of the fact that I can't.  If you g=
et
> >> lucky and have a mfr sending all of the report ID's, you then can toss
> >> out the ones you don't like, but if they only send one (as in my case),
> >> well, you're screwed.  What a stupid spec!
> >
> > You mean if you can set another USB configuration ?
>
> That's what I'm saying SHOULD be possible, but it isn't.  Why have report
> ID's if you can't use them?  That's why I say it's loony.    The general
> response I have had is, sometimes multiple reports are sent, but that's
> contradicted by most of the stuff I've read, so I disbelieve it... hid
> reports are limited to 8 bytes, so thinking that more than one report is =
to
> be sent sounds wrong.

They are not, see chapter 8.4 in the HID spec for constraints of reports.

> I was so incensed when I found the truth, I=20
> memorized the page I read it in, so if you feel like checking me, do you
> have a copy of that pdf book
> USB_Complete_3rdEdition.pdf ??  If you don't, you really should, I could
> send you a copy, it's freely available on the net.  Anyhow, the stuff on
> page 363 is what I finally tripped over.  It took me quite a while to find
> it, and it says flatly that the transmitted report (if more than 1 is
> defined in the report descriptor) can't be changed.
>
> Mine always reports ID#9, and since my ID#7 is far better, I wanted that
> one, but I guess I can live with it.
>
> >> My question now regards parsing of the input data using FreeBSD-suppli=
ed
> >> functions (which seems to me to mean things in libusbhid).  Even though
> >> I can get hid_get_item and then hid_locate() to work for me, it's only
> >> by ignoring incorrect return values.  Past that, the final point would
> >> be to use hid_get_data() to select and scale the data (which I gather
> >> through a read() of a scanned-for device such as uhid0) EXCEPT that I
> >> cannot get anything but a integer zero to return to me.
> >
> > Have you looked into "hid_get_data()" and stepped through it?
> >
> >> Darn hid_get_data() just doesn't work.  I'm probably missing some code
> >> assumption that didn't get illustrated in the man page.  The only
> >> example I can get for it (the kernel code) is in dev/usb/ums.c, using
> >> the code in sys/dev/usb/hid.c, BUT the proto for this kernel code just
> >> looks _really_ different than the proto for the libusbhid functions.=20
> >> Headers and declarations are set up to make it really evil to try to u=
se
> >> the kernel code in the user-mode code.  I'm possibly going to have to
> >> adapt the kernel code to see if it can be forced to run in usermode.
> >>
> >> Does the libusbhid stuff work?  Is there any sort of example, anywhere?
> >> Or, should I copy and adapt the kernel code?  I could do the 3rd item,
> >> but it also seems like a really bad way to go.
> >
> > I never used it. I probably will one day and it seems like there are so=
me
> > bugs that needs to be fixed according to you :-)
>
> I don't trust myself, I do make silly errors.
>
> My test program is so completely screwed up because I have experimented
> rather freely, I would really be embarrassed to show it to you, but I can
> get nothing returned excepting a zero from hid_locate (although it DOES
> seem to work anyhow) and nothing except zero from hid_get_data(), but sin=
ce
> that's where it's supposed to return data, it is more than a little
> upsetting.
>
> Beyond that (as I recently posted on the usb list) I have found what looks
> to me to be another oddity of libusbhid: there are some comments about the
> type of data (signed or unsigned) being uncertain, however, looking at the
> HID spec, top paragraph of page 38, the type of data is clearly delineate=
d.
>  The libusbhid seems to have a bias toward signed, but all the data in my
> device is unsigned.

This is one of the numerous bugs in libusbhid which will be fixed by the ne=
w=20
HID code I'm working on.

Markus

--nextPart1548941.RjrWY61epo
Content-Type: application/pgp-signature; name=signature.asc 
Content-Description: This is a digitally signed message part.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.8 (FreeBSD)

iEYEABECAAYFAkhNIQYACgkQ1I0Qcnj4qNQTvgCeJOpc7nspokSSSHxoz52Mk2DK
0J0AoOzhbJ61BkhbE7OSaHuJPlwV4A8l
=pRXd
-----END PGP SIGNATURE-----

--nextPart1548941.RjrWY61epo--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200806091424.38147.markus>