<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
	<link rel="self" type="application/atom+xml" href="https://forums.obdev.at/app.php/feed/topic/2919" />

	<title>Objective Development Forums</title>
	
	<link href="https://forums.obdev.at/index.php" />
	<updated>2009-06-25T18:48:51+02:00</updated>

	<author><name><![CDATA[Objective Development Forums]]></name></author>
	<id>https://forums.obdev.at/app.php/feed/topic/2919</id>

		<entry>
		<author><name><![CDATA[ulao]]></name></author>
		<updated>2009-06-25T18:48:51+02:00</updated>

		<published>2009-06-25T18:48:51+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=2919&amp;p=9905#p9905</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=2919&amp;p=9905#p9905"/>
		<title type="html"><![CDATA[help with desc?]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=2919&amp;p=9905#p9905"><![CDATA[
I have this descriptor for a HID joystick.<br /><div class="codebox"><p>Code: </p><pre><code>const char gcn64_usbHidReportDescriptor&#91;&#93; PROGMEM = {<br />    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)<br />    0x09, 0x05,                    // USAGE (Gamepad)<br />    0xa1, 0x01,                    // COLLECTION (Application)<br />   <br />    0x09, 0x01,                    //   USAGE (Pointer)    <br />   0xa1, 0x00,                    //   COLLECTION (Physical)<br />   0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)<br />    0x09, 0x30,                    //     USAGE (X)<br />    0x09, 0x31,                    //     USAGE (Y)<br />   <br />   0x09, 0x33,                  //     USAGE (Rx)<br />   0x09, 0x34,                  //     USAGE (Ry)<br /><br />   0x09, 0x35,                  //     USAGE (Rz)   <br />   0x09, 0x36,                  //     USAGE (Slider)   <br /><br />    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)<br />    0x26, 0xFF, 0x00,              //     LOGICAL_MAXIMUM (255)<br />    0x75, 0x08,                    //     REPORT_SIZE (8)<br />    0x95, 0x06,                    //     REPORT_COUNT (6)<br />    0x81, 0x02,                    //     INPUT (Data,Var,Abs)<br />   0xc0,                          //   END_COLLECTION (Physical)<br /><br />    0x05, 0x09,                    //   USAGE_PAGE (Button)<br />    0x19, 0x01,                    //   USAGE_MINIMUM (Button 1)<br />    0x29, 0x10,                    //   USAGE_MAXIMUM (Button 14)<br />    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)<br />    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)<br />    0x75, 0x01,                    //   REPORT_SIZE (1)<br />    0x95, 0x10,                    //   REPORT_COUNT (16)<br />    0x81, 0x02,                    //   INPUT (Data,Var,Abs)<br /><br />    0xc0<br /><br /><br />};<br /></code></pre></div><br /><br />I want to add this ( below) to it.. Problem is &quot;this&quot; is some sort of a ForceFeedBack example and its a lot of code for such a simple thing. And for the life of my I dont know what I need to add, I hope not all of it. I tried a few logical approaches but my usb deceive is not happy with them. Can anyone understand this. All I want is a constant force, I think that vibration. <br /><br /><div class="codebox"><p>Code: </p><pre><code>0x05,  0x0F,   /* USAGE_PAGE (Physical Interface)      */<br />0x09,  0x21,   /* USAGE (Set Effect Report)         */<br />0xA1,  0x02,   /* COLLECTION (Logical)            */  <br />   0x09,  0x22,   /* USAGE (Effect Block Index)      */<br />   0x25,  0x7F,   /* LOGICAL_MAXIMUM (127)      */     <br />   0x75,  0x07,   /* REPORT_SIZE (7)         */<br />   0x95,  0x01,   /* REPORT_COUNT (1)                 */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)         */<br /><br />   0x09,  0x24,   /* USAGE (ROM Flag)         */<br />   0x25,  0x01,   /* LOGICAL_MAXIMUM (1)      */   <br />   0x75,  0x01,   /* REPORT_SIZE (1)         */<br />0x91,  0x02,   /* OUTPUT (Data,Var,Abs)         */<br /><br /><br />   0x09,  0x25,   /* USAGE (Effect Type)         */<br />   0xA1,  0x02,   /* COLLECTION (Logical)         */ <br />      0x09,  0x26,   /* USAGE (ST Constant Force)   */ <br />      0x15,  0x01,   /* LOGICAL_MINIMUM (1   )   */<br />       0x25,  0x01,   /* LOGICAL_MAXIMUM (1)   */     <br />      0x75,  0x08,   /* REPORT_SIZE (8)      */<br />   0x91,  0x00,   /* OUTPUT (Data,Var,Abs)   0x02   ?????*/<br />0xC0,                 /* END_COLLECTION              */<br /><br /><br />   0x09,  0x50,   /* USAGE (Duration)            */<br />   0x09,  0x54,   /* USAGE (Trigger Repeat Interval)      */<br />   0x15,  0x00,   /* LOGICAL_MINIMUM (0   )      */<br />   0x26,  0x10, 0x27,   /* LOGICAL_MAXIMUM (10000)   */<br />   0x46,  0x10, 0x27,   /* PHYSICAL_MAXIMUM (10000)*/<br />   0x75,  0x10,   /* REPORT_SIZE (16)         */<br />   0x66,  0x03, 0x10,   /*UNIT (Eng Lin:Time)      */<br />   0x55,  0x0D,   /* UNIT_EXPONENT (-3)         */<br />   0x95,  0x02,   /* REPORT_COUNT (2)                 */<br />0x91,  0x02,   /* OUTPUT (Data,Var,Abs)         */<br /><br /><br />0x55,  0x0A,   /* UNIT_EXPONENT (-6)         */<br />   0x09,  0x51,   /* USAGE (Sample Period)         */<br />   0x95,  0x01,   /* REPORT_COUNT (1)                 */<br />0x91,  0x02,   /* OUTPUT (Data,Var,Abs)         */<br />   0x45,  0x00,   /* PHYSICAL_MAXIMUM (0)      */<br />   0x55,  0x00,   /* UNIT_EXPONENT (0)         */<br />   0x65,  0x00,   /* UNIT (None)            */<br /><br />   0x09,  0x52,   /* USAGE (Gain)            */<br />   0x09,  0x53,   /* USAGE (Trigger Button)         */<br />   0x25,  0x7F,   /* LOGICAL_MAXIMUM (127)      */     <br />   0x75,  0x08,   /* REPORT_SIZE (8)         */<br />   0x95,  0x02,   /* REPORT_COUNT (2)                 */<br />0x91,  0x02,   /* OUTPUT (Data,Var,Abs)         */<br />   <br />0x09,  0x55,   /* USAGE (Axes Enable)         */<br />   0xA1,  0x02,   /* COLLECTION (Logical)         */ <br />      0x05,  0x01,   /* USAGE_PAGE (Generic Desktop)*/<br />   0x09,  0x01,   /* USAGE (Pointer)         */<br />      0xA1,  0x00,   /* COLLECTION (Physical)      */<br />      0x09,  0x30,   /* USAGE (X)      */<br />      0x09,  0x31,   /* USAGE (Y)      */<br />         0x25,  0x01,   /* LOGICAL_MAXIMUM (1)*/     <br />         0x75,  0x01,   /* REPORT_SIZE (1)   */<br />         0x95,  0x02,   /* REPORT_COUNT (2)   */<br />      0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br />   0xC0,                 /* END_COLLECTION   */<br />0xC0,                 /* END_COLLECTION      */<br /><br />   0x95,  0x06,   /* REPORT_COUNT (6) 6-bit padding?        */<br />0x91,  0x03,   /* OUTPUT (Cnst,Var,Abs)         */<br /><br />0x05,  0x0F,   /* USAGE_PAGE (Physical Interface)   */<br />   0x09,  0x57,   /* USAGE (Direction)         */<br />   0xA1,  0x02,   /* COLLECTION (Logical)         */<br />      0x05,  0x01,   /* USAGE_PAGE (Generic Desktop)*/<br />   0x09,  0x01,   /* USAGE (Pointer)         */<br />      0xA1,  0x00,   /* COLLECTION (Physical)      */<br />      0x09,  0x30,   /* USAGE (X)      */<br />      0x09,  0x31,   /* USAGE (Y)      */<br />0x15,  0x00,   /* LOGICAL_MINIMUM (0   )*/<br />         0x26,  0xFF, 0x00,   /* LOGICAL_MAXIMUM (255)*/     <br />         0x46,  0x68, 0x01,   /* PHYSICAL_MAXIMUM (360)*/<br />0x66,  0x14, 0x00,   /*UNIT (Eng Rot:Angular Pos)*/<br />         0x75,  0x08,   /* REPORT_SIZE (8)   */<br />         0x95,  0x02,   /* REPORT_COUNT (2)   */<br />      0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br />         0x65,  0x00,   /* UNIT (None)      */<br />         0x45,  0x00,   /* PHYSICAL_MAXIMUM (0)*/<br />   0xC0,                 /* END_COLLECTION   */<br />0xC0,                 /* END_COLLECTION      */<br /><br />0x05,  0x0F,   /* USAGE_PAGE (Physical Interface)   */<br />   0x09,  0x58,   /* USAGE (Type Specific Block Offset)   */<br />   0xA1,  0x02,   /* COLLECTION (Logical)         */<br />      0x0B,  0x01, 0x00, 0x0A, 0x00,/* USAGE (Ordinals: Instance 1)   */<br />      0x0B,  0x02, 0x00, 0x0A, 0x00,/* USAGE (Ordinals: Instance 1)   */<br />      0x26,  0xFD, 0x7F,   /* LOGICAL_MAXIMUM (32765)*/     <br />      0x75,  0x10,   /* REPORT_SIZE (16)   */<br />      0x95,  0x02,   /* REPORT_COUNT (2)   */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br />   0xC0,                 /* END_COLLECTION   */<br />0xC0,                 /* END_COLLECTION      */<br /><br /><br />   0x09,  0x5A,   /* USAGE (Set Envelop Report)   */<br />   0xA1,  0x02,   /* COLLECTION (Logical)      */<br />      0x85,  0x02,   /* REPORT_ID (2)      */<br />      0x09,  0x23,   /* USAGE (Parameter Block Offset)   */<br />      0x26,  0xFD, 0x7F,   /* LOGICAL_MAXIMUM (32765)*/     <br />      0x75,  0x0F,   /* REPORT_SIZE (15)   */<br />      0x95,  0x01,   /* REPORT_COUNT (1)   */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x24,   /* USAGE (ROM Flag)   */<br />      0x25,  0x01,   /* LOGICAL_MAXIMUM (1)*/     <br />      0x75,  0x01,   /* REPORT_SIZE (1)   */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x5B,   /* USAGE (Attack Level)   */<br />0x09,  0x5D,   /* USAGE (Fade Level)   */<br />      0x26,  0xFF, 0x00,   /* LOGICAL_MAXIMUM (255)*/     <br />      0x75,  0x08,   /* REPORT_SIZE (8)   */<br />      0x95,  0x02,   /* REPORT_COUNT (2)   */<br />      0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x5C,   /* USAGE (Attack Time)   */<br />0x09,  0x5E,   /* USAGE (Fade Time)   */<br />      0x26,  0x10, 0x27,   /* LOGICAL_MAXIMUM (10000)*/     <br />      0x46,  0x10, 0x27,   /* PHYSICAL_MAXIMUM (10000)*/<br />0x66,  0x03, 0x10,   /*UNIT (Eng Lin:Time)*/<br />      0x55,  0x0D,   /* UNIT_EXPONENT (-3)   */<br />      0x75,  0x10,   /* REPORT_SIZE (16)   */<br />      0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br />      0x45,  0x00 ,   /* PHYSICAL_MAXIMUM (0)*/<br />      0x65,  0x00,   /* UNIT (None)      */<br />      0x55,  0x00,   /* UNIT_EXPONENT (0)   */<br />0xC0,                 /* END_COLLECTION   */<br />   <br />   0x09,  0x5F,   /* USAGE (Set Condition Report)   */<br />   0xA1,  0x02,   /* COLLECTION (Logical)      */<br />      0x85,  0x03,   /* REPORT_ID (3)      */<br />      0x09,  0x23,   /* USAGE (Parameter Block Offset)   */<br />      0x26,  0xFD, 0x7F,   /* LOGICAL_MAXIMUM (32765)*/     <br />      0x75,  0x0F,   /* REPORT_SIZE (15)   */<br />      0x95,  0x01,   /* REPORT_COUNT (1)   */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x24,   /* USAGE (ROM Flag)   */<br />      0x25,  0x01,   /* LOGICAL_MAXIMUM (1)*/     <br />      0x75,  0x01,   /* REPORT_SIZE (1)   */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x60,   /* USAGE (CP Offset)   */<br />0x09,  0x61,   /* USAGE (Positive Coefficient)*/<br />0x09,  0x62,   /* USAGE (Negative Coefficient)*/<br />0x09,  0x63,   /* USAGE (Positive Saturation)*/<br />0x09,  0x64,   /* USAGE (Negative Saturation)*/<br />0x09,  0x65,   /* USAGE (Dead Band)   */<br />      0x26,  0xFF, 0x00,   /* LOGICAL_MAXIMUM (255)*/     <br />      0x75,  0x08,   /* REPORT_SIZE (8)   */<br />      0x95,  0x06,   /* REPORT_COUNT (6)   */<br />      0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br />0xC0,                 /* END_COLLECTION   */<br /><br /><br />   0x09,  0x6E,   /* USAGE (Set Periodic Report)   */<br />   0xA1,  0x02,   /* COLLECTION (Logical)      */<br />      0x85,  0x04,   /* REPORT_ID (4)      */<br />      0x09,  0x23,   /* USAGE (Parameter Block Offset)   */<br />      0x26,  0xFD, 0x7F,   /* LOGICAL_MAXIMUM (32765)*/     <br />      0x75,  0x0F,   /* REPORT_SIZE (15)   */<br />      0x95,  0x01,   /* REPORT_COUNT (1)   */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x24,   /* USAGE (ROM Flag)   */<br />      0x25,  0x01,   /* LOGICAL_MAXIMUM (1)*/     <br />      0x75,  0x01,   /* REPORT_SIZE (1)   */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x70,   /* USAGE (Magnitude)   */<br />0x09,  0x6F,   /* USAGE (Offset)      */<br />0x09,  0x71,   /* USAGE (Phase)      */<br />      0x26,  0xFF, 0x00,   /* LOGICAL_MAXIMUM (255)*/     <br />      0x75,  0x08,   /* REPORT_SIZE (8)   */<br />      0x95,  0x03,   /* REPORT_COUNT (3)   */<br />      0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x72,   /* USAGE (Period)      */<br />      0x26,  0x10, 0x27,   /* LOGICAL_MAXIMUM (10000)*/     <br />      0x46,  0x10, 0x27,   /* PHYSICAL_MAXIMUM (10000)*/<br />0x66,  0x03, 0x10,   /*UNIT (Eng Lin:Time)*/<br />      0x55,  0x0D,   /* UNIT_EXPONENT (-3)   */<br />      0x75,  0x10,   /* REPORT_SIZE (16)   */<br />      0x95,  0x01,   /* REPORT_COUNT (1)   */<br />      0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br />      0x45,  0x00 ,   /* PHYSICAL_MAXIMUM (0)*/<br />      0x65,  0x00,   /* UNIT (None)      */<br />      0x55,  0x00,   /* UNIT_EXPONENT (0)   */<br />0xC0,                 /* END_COLLECTION   */<br /><br /><br />   0x09,  0x73,   /* USAGE (Set Constant Force Report)   */<br />   0xA1,  0x02,   /* COLLECTION (Logical)      */<br />      0x85,  0x05,   /* REPORT_ID (5)      */<br />      0x09,  0x23,   /* USAGE (Parameter Block Offset)   */<br />      0x26,  0xFD, 0x7F,   /* LOGICAL_MAXIMUM (32765)*/     <br />      0x75,  0x0F,   /* REPORT_SIZE (15)   */<br />      0x95,  0x01,   /* REPORT_COUNT (1)   */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x24,   /* USAGE (ROM Flag)   */<br />      0x25,  0x01,   /* LOGICAL_MAXIMUM (1)*/     <br />      0x75,  0x01,   /* REPORT_SIZE (1)   */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br /><br />0x09,  0x70,   /* USAGE (Magnitude)   */<br />      0x26,  0xFF, 0x00,   /* LOGICAL_MAXIMUM (255)*/     <br />      0x75,  0x08,   /* REPORT_SIZE (8)   */<br />      0x91,  0x02,   /* OUTPUT (Data,Var,Abs)   */<br />0xC0,                 /* END_COLLECTION   */<br />0xC0,                 /* END_COLLECTION   */<br /><br /></code></pre></div><br /><br />for example I tried this<br /><div class="codebox"><p>Code: </p><pre><code>const char gcn64_usbHidReportDescriptor&#91;&#93; PROGMEM = {<br />    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)<br />    0x09, 0x05,                    // USAGE (Gamepad)<br />    0xa1, 0x01,                    // COLLECTION (Application)<br />   <br />    0x09, 0x01,                    //   USAGE (Pointer)    <br />   0xa1, 0x00,                    //   COLLECTION (Physical)<br />   0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)<br />    0x09, 0x30,                    //     USAGE (X)<br />    0x09, 0x31,                    //     USAGE (Y)<br />   <br />   0x09, 0x33,                  //     USAGE (Rx)<br />   0x09, 0x34,                  //     USAGE (Ry)<br /><br />   0x09, 0x35,                  //     USAGE (Rz)   <br />   0x09, 0x36,                  //     USAGE (Slider)   <br /><br />    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)<br />    0x26, 0xFF, 0x00,              //     LOGICAL_MAXIMUM (255)<br />    0x75, 0x08,                    //     REPORT_SIZE (8)<br />    0x95, 0x06,                    //     REPORT_COUNT (6)<br />    0x81, 0x02,                    //     INPUT (Data,Var,Abs)<br />   0xc0,                          //   END_COLLECTION (Physical)<br /><br />    0x05, 0x09,                    //   USAGE_PAGE (Button)<br />    0x19, 0x01,                    //   USAGE_MINIMUM (Button 1)<br />    0x29, 0x10,                    //   USAGE_MAXIMUM (Button 14)<br />    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)<br />    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)<br />    0x75, 0x01,                    //   REPORT_SIZE (1)<br />    0x95, 0x10,                    //   REPORT_COUNT (16)<br />    0x81, 0x02,                    //   INPUT (Data,Var,Abs)<br /><br />    0xc0,<br />   0x05,  0x0F,   /* USAGE_PAGE (Physical Interface)      */<br />   0x09,  0x21,   /* USAGE (Set Effect Report)         */<br />   0xA1,  0x02,   /* COLLECTION (Logical)            */  <br />   0x09,  0x22,   /* USAGE (Effect Block Index)      */<br />   0x25,  0x7F,   /* LOGICAL_MAXIMUM (127)      */     <br />   0x75,  0x07,   /* REPORT_SIZE (7)         */<br />   0x95,  0x01,   /* REPORT_COUNT (1)                 */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)         */<br /><br />   0x09,  0x24,   /* USAGE (ROM Flag)         */<br />   0x25,  0x01,   /* LOGICAL_MAXIMUM (1)      */   <br />   0x75,  0x01,   /* REPORT_SIZE (1)         */<br />   0x91,  0x02,   /* OUTPUT (Data,Var,Abs)         */<br /><br /><br />   0x09,  0x25,   /* USAGE (Effect Type)         */<br />   0xA1,  0x02,   /* COLLECTION (Logical)         */ <br />   0x09,  0x26,   /* USAGE (ST Constant Force)   */ <br />   0x15,  0x01,   /* LOGICAL_MINIMUM (1   )   */<br />   0x25,  0x01,   /* LOGICAL_MAXIMUM (1)   */     <br />   0x75,  0x08,   /* REPORT_SIZE (8)      */<br />   0x91,  0x00,   /* OUTPUT (Data,Var,Abs)   0x02   ?????*/<br />   0xC0                 /* END_COLLECTION              */<br /><br /><br /><br />};<br /></code></pre></div>did I miss something<br /><br />Hmm, I was just thinking do I need to change my REPORT_SIZE ?  currently  #define GCN64_REPORT_SIZE8<br /><br />Anyone know if Grendel's  3dpro.htm code is  available? I cant seem to find any way to contact him but the forums here. I tlooks like he added FFB in his project.<br /><br /> Grendel, any chance I can see a FFB example?<p>Statistics: Posted by <a href="https://forums.obdev.at/memberlist.php?mode=viewprofile&amp;u=1281">ulao</a> — Thu Jun 25, 2009 6:48 pm</p><hr />
]]></content>
	</entry>
	</feed>
