From owner-freebsd-usb@FreeBSD.ORG Sun Oct 8 21:24:55 2006 Return-Path: X-Original-To: usb@freebsd.org Delivered-To: freebsd-usb@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C6A6616A412 for ; Sun, 8 Oct 2006 21:24:55 +0000 (UTC) (envelope-from r.c.ladan@gmail.com) Received: from nf-out-0910.google.com (nf-out-0910.google.com [64.233.182.186]) by mx1.FreeBSD.org (Postfix) with ESMTP id AADFD43D4C for ; Sun, 8 Oct 2006 21:24:54 +0000 (GMT) (envelope-from r.c.ladan@gmail.com) Received: by nf-out-0910.google.com with SMTP id n15so1769362nfc for ; Sun, 08 Oct 2006 14:24:53 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:user-agent:mime-version:to:subject:x-enigmail-version:content-type; b=oXW1PWwjtFVJo2YgMZ6d/cCdMUqBNlnwv80UPf2h1BYmTAQyFOgtPefSTQaYm4BHcFcSYim1Z2jJQoh4Mq3HiOL42tltbtjQx92L4zAXCMQEEmU3u9n7MRdoLUjz/qIav4Hms1ur3abbBLv5bEe+hJoEiwMCdYV9c9vUKNn0W9Q= Received: by 10.49.55.13 with SMTP id h13mr9086525nfk; Sun, 08 Oct 2006 14:24:52 -0700 (PDT) Received: from ?192.168.123.146? ( [195.241.221.201]) by mx.google.com with ESMTP id k9sm5757507nfc.2006.10.08.14.24.51; Sun, 08 Oct 2006 14:24:51 -0700 (PDT) Message-ID: <45296CA2.3020203@gmail.com> Date: Sun, 08 Oct 2006 23:24:50 +0200 From: Rene Ladan User-Agent: Thunderbird 1.5.0.7 (X11/20060914) MIME-Version: 1.0 To: usb@freebsd.org, Ed Schouten X-Enigmail-Version: 0.94.0.0 Content-Type: multipart/mixed; boundary="------------020607090507090404080703" Cc: Subject: usb descriptor bogus? X-BeenThere: freebsd-usb@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: FreeBSD support for USB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Oct 2006 21:24:55 -0000 This is a multi-part message in MIME format. --------------020607090507090404080703 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hi, I came up with an output descriptor for the Xbox 360 controller, but the output from usbhidctl(1) is not completely as expected. The attached file rdesc.txt contains the actual results, with lines starting with # containing the expected results. The output was generated using usbhidctl(1) and libusbhid from OpenBSD with -rv as argument. I also attached the descriptor itself (in .h and .hid format), the .hid file was validated using Descriptor Tool 2.4. This is a small windows program obtainable from http://www.usb.org/developers/hidpage/dt2_4.zip Any ideas what is wrong with the descriptor (or maybe libusbhid) ? Regards, Rene -- GPG fingerprint = E738 5471 D185 7013 0EE0 4FC8 3C1D 6F83 12E1 84F6 (subkeys.pgp.net) "It won't fit on the line." -- me, 2001 --------------020607090507090404080703 Content-Type: application/octet-stream; name="xbox360gp.hid" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="xbox360gp.hid" IgABAP7KhwAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUBAAAAAAAAAAAJBQABAAAAAAAA oQEAAAAAAAAAAHUIAAAAAgAAAACVAQAAAAIAAAAAJRQAAAABAAAAABUAAAAAAQAAAACBAQAA AAMAAAAAdQgAAAADAAAAAJUBAAAAAwAAAAAFAQAAAAMAAAAACTsAAQADAAAAAIEBAAAAAwAA AAAFAQAAAAEAAAAABQEAAAABAAAAAAkBAAEAAwAAAAChAAAAAAMAAAAAdQEAAAAFAAAAABUA AAAABQAAAAAlAQAAAAUAAAAANQAAAAAFAAAAAEUBAAAABQAAAACVBAAAAAUAAAAABQEAAAAF AAAAAAmMAAEABQAAAAAJjQABAAUAAAAACYsAAQAFAAAAAAmKAAEABQAAAACBAgAAAAUAAAAA wAAAAAAEAAAAAHUBAAAAAwAAAAAVAAAAAAMAAAAAJQEAAAADAAAAADUAAAAAAwAAAABFAQAA AAMAAAAAlQcAAAADAAAAAAUJAAAAAwAAAAAJCAAJAAMAAAAACQcACQADAAAAAAkJAAkAAwAA AAAJCgAJAAMAAAAACQUACQADAAAAAAkGAAkAAwAAAAAJCwAJAAMAAAAAgQIAAAADAAAAAHUB AAAAAwAAAACVAQAAAAMAAAAAgQEAAAADAAAAAHUBAAAAAwAAAAAVAAAAAAMAAAAAJQEAAAAD AAAAADUAAAAAAwAAAABFAQAAAAMAAAAAlQQAAAADAAAAAAUJAAAAAwAAAAAZAQAJAAMAAAAA KQQACQADAAAAAIECAAAAAwAAAAB1CAAAAAMAAAAAFQAAAAADAAAAACb/AAAAAwAAAAA1AAAA AAMAAAAARv8AAAADAAAAAJUCAAAAAwAAAAAFAQAAAAMAAAAACTIAAQADAAAAAAk1AAEAAwAA AACBAgAAAAMAAAAAdRAAAAADAAAAABYAgAAAAwAAAAAm/38AAAMAAAAANgCAAAADAAAAAEb/ fwAAAwAAAACVBAAAAAMAAAAABQEAAAADAAAAAAkwAAEAAwAAAAAJMQABAAMAAAAACTMAAQAD AAAAAAk0AAEAAwAAAACBAgAAAAMAAAAAdTAAAAADAAAAAJUBAAAAAwAAAACBAQAAAAMAAAAA wAAAAAACAAAAAAUBAAAAAAAAAAAJBQABAAAAAAAAoQEAAAAAAAAAAHUIAAAAAgAAAACVAQAA AAIAAAAAkQEAAAACAAAAAHUIAAAAAgAAAACVAQAAAAIAAAAABQEAAAACAAAAAAk7AAEAAgAA AAAVAAAAAAIAAAAAJQgAAAACAAAAAJEBAAAAAgAAAAB1CAAAAAIAAAAAlQEAAAACAAAAAJEB AAAAAgAAAAB1CAAAAAIAAAAAFQAAAAACAAAAACb/AAAAAgAAAAA1AAAAAAIAAAAARv8AAAAC AAAAAJUCAAAAAgAAAAAGAP8AAAIAAAAACQEAAP8CAAAAAAkCAAD/AgAAAACRAgAAAAIAAAAA dRgAAAACAAAAAJUBAAAAAgAAAACRAQAAAAIAAAAAwAAAAAABAAAAAAUBAAAAAAAAAAAJBQAB AAAAAAAAoQEAAAAAAAAAAHUIAAAAAgAAAACVAQAAAAIAAAAAkQEAAAACAAAAAHUIAAAAAgAA AACVAQAAAAIAAAAABQEAAAACAAAAAAk7AAEAAgAAAACRAQAAAAIAAAAAdQgAAAACAAAAABUA AAAAAgAAAAAm/wAAAAIAAAAANQAAAAACAAAAAEb/AAAAAgAAAACVAQAAAAIAAAAABQgAAAAC AAAAAAlLAAgAAgAAAACRAgAAAAIAAAAAwAAAAAABAAAAAA== --------------020607090507090404080703 Content-Type: text/plain; name="uxb360gp_rdesc.h" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="uxb360gp_rdesc.h" /*- * Copyright (c) 2005 Ed Schouten , Rene Ladan * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD: src/sys/dev/usb/uxb360gp_rdesc.h,v 1.2 2005/12/31 04:38:50 mux Exp $ */ /* FIXME? output descriptors for led/rumblers, see xbox 1 gamepad descriptor for example */ static const uByte uhid_xb360gp_report_descr[] = { 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x05, /* USAGE (Gamepad) */ 0xa1, 0x01, /* COLLECTION (Application) */ /* Input section */ /* Unused */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x95, 0x01, /* REPORT COUNT (1) */ /* next 2 lines found by DT 2.4 */ 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 0x25, 0x14, /* LOGIXAL MAXIMUM (20) */ 0x81, 0x01, /* INPUT (Constant) */ /* Byte count */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x3b, /* USAGE (Byte Count) */ 0x81, 0x01, /* INPUT (Constant) */ /* D-Pad */ 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x01, /* USAGE (Pointer) */ 0xa1, 0x00, /* COLLECTION (Physical) */ 0x75, 0x01, /* REPORT SIZE (1) */ 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 0x25, 0x01, /* LOGICAL MAXIMUM (1) */ 0x35, 0x00, /* PHYSICAL MINIMUM (0) */ 0x45, 0x01, /* PHYSICAL MAXIMUM (1) */ 0x95, 0x04, /* REPORT COUNT (4) */ 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x90, /* USAGE (D-Pad Up) */ 0x09, 0x91, /* USAGE (D-Pad Down) */ 0x09, 0x93, /* USAGE (D-Pad Left) */ 0x09, 0x92, /* USAGE (D-Pad Right) */ 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 0xc0, /* END COLLECTION */ /* Buttons 5-11 */ 0x75, 0x01, /* REPORT SIZE (1) */ 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 0x25, 0x01, /* LOGICAL MAXIMUM (1) */ 0x35, 0x00, /* PHYSICAL MINIMUM (0) */ 0x45, 0x01, /* PHYSICAL MAXIMUM (1) */ 0x95, 0x07, /* REPORT COUNT (7) */ 0x05, 0x09, /* USAGE PAGE (Button) */ 0x09, 0x08, /* USAGE (Button 8) */ 0x09, 0x07, /* USAGE (Button 7) */ 0x09, 0x09, /* USAGE (Button 9) */ 0x09, 0x0a, /* USAGE (Button 10) */ 0x09, 0x05, /* USAGE (Button 5) */ 0x09, 0x06, /* USAGE (Button 6) */ 0x09, 0x0b, /* USAGE (Button 11) */ 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ /* Unused */ 0x75, 0x01, /* REPORT SIZE (1) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x81, 0x01, /* INPUT (Constant) */ /* Buttons 1-4 */ 0x75, 0x01, /* REPORT SIZE (1) */ 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 0x25, 0x01, /* LOGICAL MAXIMUM (1) */ 0x35, 0x00, /* PHYSICAL MINIMUM (0) */ 0x45, 0x01, /* PHYSICAL MAXIMUM (1) */ 0x95, 0x04, /* REPORT COUNT (4) */ 0x05, 0x09, /* USAGE PAGE (Button) */ 0x19, 0x01, /* USAGE MINIMUM (Button 1) */ 0x29, 0x04, /* USAGE MAXIMUM (Button 4) */ 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ /* Triggers */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 0x25, 0xff, /* LOGICAL MAXIMUM (255) */ 0x35, 0x00, /* PHYSICAL MINIMUM (0) */ 0x45, 0xff, /* PHYSICAL MAXIMUM (255) */ 0x95, 0x02, /* REPORT COUNT (2) */ 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x32, /* USAGE (Z) */ 0x09, 0x35, /* USAGE (Rz) */ 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ /* Sticks */ 0x75, 0x10, /* REPORT SIZE (16) */ 0x16, 0x00, 0x80, /* LOGICAL MINIMUM (-32768) */ 0x26, 0xff, 0x7f, /* LOGICAL MAXIMUM (32767) */ 0x36, 0x00, 0x80, /* PHYSICAL MINIMUM (-32768) */ 0x46, 0xff, 0x7f, /* PHYSICAL MAXIMUM (32767) */ 0x95, 0x04, /* REPORT COUNT (4) */ 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x30, /* USAGE (X) */ 0x09, 0x31, /* USAGE (Y) */ 0x09, 0x33, /* USAGE (Rx) */ 0x09, 0x34, /* USAGE (Ry) */ 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ /* Unused */ 0x75, 0x30, /* REPORT SIZE (48) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x81, 0x01, /* INPUT (Constant) */ /* End Input section */ 0xc0, /* END COLLECTION */ /* Output section (rumblers) */ 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x05, /* USAGE (Gamepad) */ 0xa1, 0x01, /* COLLECTION (Application) */ /* Unused */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x91, 0x01, /* OUTPUT (Constant) */ /* Byte count */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x3b, /* USAGE (Byte Count) */ /* next 2 lines found by DT 2.4 */ 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 0x25, 0x08, /* LOGICAL MAXIMUM (8) */ 0x91, 0x01, /* OUTPUT (Constant) */ /* Unused */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x91, 0x01, /* OUTPUT (Constant) */ /* Big, little rumbler */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 0x25, 0xff, /* LOGICAL MAXIMUM (255) */ 0x35, 0x00, /* PHYSICAL MIMINUM (0) */ 0x45, 0xff, /* PHYSICAL MAXIMUM (255) */ 0x95, 0x02, /* REPORT COUNT (2) */ 0x06, 0x00, 0xff, /* USAGE PAGE (Microsoft) */ 0x09, 0x01, /* USAGE (big rumbler) */ 0x09, 0x02, /* USAGE (little rumbler) */ 0x91, 0x02, /* OUTPUT (Data, Variable, Absolute) */ /* Unused */ 0x75, 0x18, /* REPORT SIZE (24) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x91, 0x01, /* OUTPUT (Constant) */ /* End Output section (rumblers) */ 0xc0, /* END COLLECTION */ /* Output section (LEDs) */ 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x05, /* USAGE (Gamepad) */ 0xa1, 0x01, /* COLLECTION (Application) */ /* Unused */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x91, 0x01, /* OUTPUT (Constant) */ /* Byte count */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 0x09, 0x3b, /* USAGE (Byte Count) */ 0x91, 0x01, /* OUTPUT (Constant) */ /* LEDs */ 0x75, 0x08, /* REPORT SIZE (8) */ 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 0x25, 0xff, /* LOGICAL MAXIMUM (255) */ 0x35, 0x00, /* PHYSICAL MIMINUM (0) */ 0x45, 0xff, /* PHYSICAL MAXIMUM (255) */ 0x95, 0x01, /* REPORT COUNT (1) */ 0x05, 0x08, /* USAGE PAGE (LED) */ 0x09, 0x4b, /* USAGE (Generic Indicator) */ /* maybe 0x42 (flash on time)? that is */ /* a dynamic value instead of an on/off */ /* control */ 0x91, 0x02, /* OUTPUT (Data, Variable, Absolute) */ /* End Output section (LEDs) */ /* End of Descriptor */ 0xc0, /* END COLLECTION */ }; --------------020607090507090404080703 Content-Type: text/plain; name="openbsd-usbhid-openbsd-lib-rdesc.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="openbsd-usbhid-openbsd-lib-rdesc.txt" Report descriptor: Input size=8 count=1 Const page=0x0000 usage=0x0000, logical range 0..20 Input size=8 count=1 Const page=Generic_Desktop usage=Byte_Count, logical range 0..20 Collection page=Generic_Desktop usage=Game_Pad Collection page=Generic_Desktop usage=Pointer Input size=1 count=1 page=Generic_Desktop usage=D-pad_Up, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Generic_Desktop usage=D-pad_Down, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Generic_Desktop usage=D-pad_Left, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Generic_Desktop usage=D-pad_Right, logical range 0..1, physical range 0..1 End collection Input size=1 count=1 page=Button usage=Button_8, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_7, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_9, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_10, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_5, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_6, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_11, logical range 0..1, physical range 0..1 Input size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_1, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_2, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_3, logical range 0..1, physical range 0..1 Input size=1 count=1 page=Button usage=Button_4, logical range 0..1, physical range 0..1 Input size=8 count=1 page=Generic_Desktop usage=Z, logical range 0..255, physical range 0..255 Input size=8 count=1 page=Generic_Desktop usage=Rz, logical range 0..255, physical range 0..255 # (rene) sign error in physical range? Input size=16 count=1 page=Generic_Desktop usage=X, logical range -32768..32767, physical range 32768..32767 Input size=16 count=1 page=Generic_Desktop usage=Y, logical range -32768..32767, physical range 32768..32767 Input size=16 count=1 page=Generic_Desktop usage=Rx, logical range -32768..32767, physical range 32768..32767 Input size=16 count=1 page=Generic_Desktop usage=Ry, logical range -32768..32767, physical range 32768..32767 Input size=48 count=1 Const page=0x0000 usage=0x0000, logical range -32768..32767, physical range 32768..32767 End collection Output size=8 count=1 Const page=0x0000 usage=0x0000, logical range -32768..32767, physical range 32768..32767 Output size=8 count=1 Const page=Generic_Desktop usage=Byte_Count, logical range 0..8, physical range 32768..32767 Output size=8 count=1 Const page=0x0000 usage=0x0000, logical range 0..8, physical range 32768..32767 Collection page=Generic_Desktop usage=Game_Pad # (rene) expected page=Microsoft usage=Xbox_Controller_Rumbler_2 Output size=8 count=1 page=Generic_Desktop usage=Byte_Count, logical range 0..255, physical range 0..255 # (rene) expected usage=Xbox_Controller_Rumbler_2 Output size=8 count=1 page=Microsoft usage=Xbox_Controller_Rumbler_1, logical range 0..255, physical range 0..255 Output size=24 count=1 Const page=0x0000 usage=0x0000, logical range 0..255, physical range 0..255 End collection Output size=8 count=1 Const page=0x0000 usage=0x0000, logical range 0..255, physical range 0..255 # (rene) expected page=LEDs usage=Generic_Indicator Output size=8 count=1 Const page=Generic_Desktop usage=Byte_Count, logical range 0..255, physical range 0..255 Collection page=Generic_Desktop usage=Game_Pad Output size=8 count=1 page=Generic_Desktop usage=Byte_Count, logical range 0..255, physical range 0..255 End collection Total input size 20 bytes Total output size 11 bytes Total feature size 0 bytes --------------020607090507090404080703--