did you do this..
This is my full descriptor.
Code: Select all
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // usage pointer
0xA1, 0x00, // COLLECTION (phys)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x06, // REPORT_COUNT (6)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255)
0x35, 0x00, // Physical Minimum (0)
0x46, 0xFF, 0x00, // Physical Minimum (255)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x32, // USAGE (Z)
0x09, 0x33, // USAGE (Rx)
0x09, 0x34, // USAGE (Ry)
0x09, 0x35, // USAGE (Rz)
0x81, 0x02, // INPUT
0xC0, // COLLECTION (phys)
//could use relitive but I didnt see a change.(0x81, 0x06,)
0x09, 0x01, // usage pointer
0xA1, 0x00, // COLLECTION (phys)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // REPORT_COUNT (2)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255)
0x09, 0x36, // slider
0x09, 0x37, // dial
0x81, 0x02, // INPUT
//0x09, 0x38, // wheel
//0x09, 0x39, // hat
0xC0, // COLLECTION (phys)
0x65, 0x00, //Unit (None)
0x05, 0x09, // USAGE_PAGE (Button)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x18, // REPORT_COUNT (24)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x18, // USAGE_MAXIMUM (Button 24)
0x81, 0x02, // INPUT
/// force feed back...
0x05, 0x0F, // USAGE_PAGE (Physical Interface)
0x09, 0x21, // USAGE (Set Effect Report)
0xA1, 0x02, // COLLECTION (effect)
0x09,0x22, // USAGE (Effect Block Index)
0x25,0x7F, // Logical Maximum 127
0x75,0x07, // Report Size 7 (( should be a 7 ))?
0x95,0x01, // Report Count 1
0x91,0x02, // OUTPUT (Data,Var,Abs)
0x09,0x24,// USAGE (ROM Flag)
0x25,0x01,// LOGICAL_MAXIMUM
0x75,0x01,// Report Size 1
0x91,0x02, // OUTPUT (Data,Var,Abs)
0x09, 0x25, /* USAGE (Effect Type) */
0xA1, 0x02, /* COLLECTION (Logical2) */
0x09,0x26, // Usage ET Constant Force
0x15,0x01, // Logical Minimum 1
0x25,0x01, // Logical Maximum 1
0x75,0x08, // Report Size 8
0x91,0x00, // Output
0xC0, // END_COLLECTION (Logical2)
//other needed info
0x09,0x50, // Usage Duration
0x09,0x54, // Usage Trigger Repeat Interval
0x15,0x00, // Logical Minimum 0
0x26,0x10,0x27, // Logical Maximum 10000
0x46,0x10,0x27, // physical Maximum 10000
0x75,0x10, // REPORT_SIZE (16)
0x66,0x03,0x10, // UNIT (Eng Lin:Time)
0x55,0x0D, // Unit Exponent -3
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Data,Var,Abs)
0x55,0x0A, // UNIT_EXPONENT (-6)
0x09,0x51, // Usage Sample Period
0x95,0x01, // Report Count 1
0x91,0x02, // OUTPUT (Data,Var,Abs) 91 02
0x45,0x00, // Physical Maximum 0
0x55,0x00, // Unit Exponent 0
0x65,0x00, // Unit 0
0x09,0x52, // Usage Gain
0x09,0x53, // Usage Trigger Button
0x25,0x7F, // Logical Maximum 127
0x75,0x08, // Report Size 8
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0x09,0x55, // Usage Axes Enable
0xA1,0x02, // Collection (Logical)
0x05,0x01, // Usage Page Generic Desktop
0x09,0x01, // USAGE (Pointer)
0xA1,0x00, // Collection (Physical)
0x09,0x30, // Usage X
0x09,0x31, // Usage Y
0x25,0x01, // Logical Maximum 1
0x75,0x01, // Report Size 1
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0xC0 , // End Collection (Physical)
0xC0 , // End Collection(Logical)
0x95,0x06, // 6-bit pad 95 06
0x91,0x03, // OUTPUT (Cnst,Var,Abs)
0x05, 0x0F, // USAGE_PAGE (Physical Interface)
0x09,0x57, // USAGE (Direction))
0xA1,0x02, // Collection logical 3
0x05,0x01, //USAGE_PAGE (Generic Desktop)
0x09,0x01, // USAGE (Pointer)
0xA1,0x00, // Collection (Physical)
0x09,0x30, // Usage X
0x09,0x31, // Usage Y
0x15,0x00, // Logical Minimum 0
0x26,0xff,0x00,// Logical Maximum 255
0x46,0x68,0x01,// PHYSICAL_MAXIMUM (360)
0x66,0x14,0x00,// UNIT (Eng Rot:Angular Pos)
0x75,0x08, // Report Size 8
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0x65,0x00, // Unit 0
0x45,0x00, // PHYSICAL_MAXIMUM (0)
0xC0 , // End Collection (Physical)
0xC0 , // End Collection (logical 3)
0x05, 0x0F, // USAGE_PAGE (Physical Interface)
0x09, 0x58, // USAGE (Type Specific Block Offset)
0xA1,0x02, // Collection 1
0x0B, 0x01, 0x00, 0x0A, 0x00,//USAGE (Ordinals:Instance 1)
0x0B, 0x02, 0x00, 0x0A, 0x00,//USAGE (Ordinals:Instance 2)
0x26,0xFD, 0x7F, //Logical Maximum LOGICAL_MAXIMUM (32765) ; 32K RAM or ROM max.
0x75,0x10, // Report Size 8
0x95,0x02, // Report Count 2
0x91,0x02, // OUTPUT (Data,Var,Abs)
0xC0 , // End Collection 1
0xc0, // END_COLLECTION effect
//and a few more settings out side of effect
0x09,0x5A, // Usage Set Envelope Report
0xA1,0x02, // Collection Datalink
0x09,0x23, // Usage Effect Block
0x26,0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) ; 32K RAM or ROM max
0x75,0x0F, // Report Size 15
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x24, // USAGE (ROM Flag)
0x25,0x01, // LOGICAL_MAXIMUM 1
0x75,0x01, // Report Size 1
0x91,0x02, // Output
0x09,0x5B, // Usage Attack Level
0x09,0x5D, // Usage Fade Level
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x75,0x08, // Report size 8
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0x09,0x5C, // Usage Attack Time
0x09,0x5E, // Usage Fade Time
0x26,0x10,0x27, // Logical Maximum 7FFFh (32767d)
0x46,0x10,0x27, // Physical Maximum 7FFFh (32767d)
0x66,0x03,0x10, // Unit 1003h (4099d)
0x55,0x0D, // Unit Exponent FDh (253d)
0x75,0x10, // Report Size 10h (16d)
0x91,0x02, // Output (Variable)
0x45,0x00, // Physical Maximum 0
0x65,0x00, // Unit 0
0x55,0x00, // Unit Exponent 0
0xC0 , // End Collection
0x09,0x5F, // USAGE (Set Condition Report)
0xA1,0x02, // Collection Datalink
0x09,0x23, // Usage Effect Block
0x26,0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) ; 32K RAM or ROM max
0x75,0x0F, // Report Size 15
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x24, // USAGE (ROM Flag)
0x25,0x01, // LOGICAL_MAXIMUM 1
0x75,0x01, // Report Size 1
0x91,0x02, // Output
0x09,0x60, // USAGE (CP Offset)
0x09,0x61, // USAGE (Positive Coefficient)
0x09,0x62, // USAGE (Negative Coefficient)
0x09,0x63, // USAGE (Positive Saturation)
0x09,0x64, // USAGE (Negative Saturation)
0x09,0x65, // USAGE (Dead Band)
0x26,0xFF, 0x00, // LOGICAL_MAXIMUM (255)
0x75,0x08, // Report Size 8
0x95,0x06, // Report Count 6
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x09,0x5F, // USAGE (Set Periodic Report)
0xA1,0x02, // Collection Datalink
0x09,0x23, // (Parameter Block Offset)
0x26,0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) ; 32K RAM or ROM max
0x75,0x0F, // Report Size 15
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x24, // USAGE (ROM Flag)
0x25,0x01, // LOGICAL_MAXIMUM 1
0x75,0x01, // Report Size 1
0x91,0x02, // Output
0x09,0x70, // USAGE (Magnitude)
0x09,0x6F, // USAGE USAGE (Offset)
0x09,0x71, // USAGE (Phase)
0x26,0xFF, 0x00, // LOGICAL_MAXIMUM (255)
0x75,0x08, // Report Size 8
0x95,0x03, // Report Count 3
0x91,0x02, // Output (Variable)
0x09,0x72, // USAGE (Phase)
0x26,0x10, 0x27, // LOGICAL_MAXIMUM
0x46,0x10, 0x27, // PHYSICAL_MAXIMUM
0x66,0x03, 0x10, // UNIT (Eng Lin:Time)
0x55,0x0D, // UNIT_EXPONENT (-3)
0x75,0x10, // Report Size 16
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x45,0x00, // PHYSICAL_MAXIMUM
0x65,0x00, // UNIT (None)
0x55,0x00, // UNIT_EXPONENT (0)
0xC0 , // End Collection
0x09,0x73, // Usage Set Constant Force Rep...
0xA1,0x02, // Collection Datalink
0x09,0x23, // Usage Effect Block Index
0x26,0xFD, 0x7F, // Logical Maximum 32765)
0x75,0x0F, // Report Size 15
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x24, // Usage Rom flag
0x25,0x01, // LOGICAL_MAXIMUM (1)
0x75,0x01, // Report Size
0x91,0x02, // Output (Variable)
0x09,0x70, // Usage magnitude
0x26,0xFF, 0x00, // LOGICAL_MAXIMUM (255)
0x75,0x08, // Report Size
0x91,0x02, // Output (Variable)
0xC0 , // End Collection (Datalink)
0x09,0x77, // USAGE (Effect Operation Report)
0xA1,0x02, // Collection Datalink
0x09,0x22, // Usage Effect Block Index
0x25,0x7f, // Logical Maximum 127)
0x75,0x07, // Report Size 7
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x24, // Usage Rom flag
0x25,0x01, // LOGICAL_MAXIMUM (1)
0x75,0x01, // Report Size 1
0x91,0x02, // Output (Variable)
0x09,0x78, // USAGE (Effect Operation)
0xA1,0x02, // Collection Datalink
0x09,0x79, // USAGE (Op Effect Start)
0x09,0x7A, // USAGE (Op Effect Start SOLO)
0x09,0x7B, // USAGE (Op Effect STOP)
0x15,0x01, // LOGICAL_MINIMUM 1
0x25,0x03, // LOGICAL_MAXIMUM 3
0x75,0x08, // Report Size
0x91,0x00, // OUTPUT (Data,Ary,Abs) 91 00
0xC0 , // End Collection (Datalink)
0x09,0x7C, // USAGE (Loop Count)
0x15,0x00, // LOGICAL_MINIMUM 1
0x26,0xFF, 0x00, // LOGICAL_MAXIMUM 3
0x91,0x02, // OUTPUT (Data,Var,Abs)
0xC0 , // End Collection (Datalink)
0x09,0x7F, // USAGE (PID Pool Report)
0xA1,0x02, // Collection Datalink
0x09,0x80, // USAGE (RAM Pool Size)
0x09,0x81, // USAGE (RoM Pool Size)
0x09,0x82, // USAGE (ROM Effect Block Count)
0x26,0xFD, 0x7F, // LOGICAL_MAXIMUM (32765)
0x95,0x03, // REPORT_COUNT (3)
0x75,0x10, // REPORT_SIZE (16)
0xB1,0x02, // FEATURE (Data,Var,Abs)
0x09, 0xA8, //USAGE (Parameter Block Size)
0xA1,0x02, // Collection Datalink
0x09,0x73, // USAGE (Set Constant Force Report)
0x26,0xFF, 0x00, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8)
0x95,0x01, // REPORT_COUNT (1)
0xB1,0x02, // FEATURE (Data,Var,Abs)
0xC0 , // End Collection (Datalink)
0x25, 0x01,//LOGICAL_MAXIMUM (1)
0x75, 0x07,//REPORT_SIZE (7)
0x95, 0x01,//REPORT_COUNT (1)
0xB1, 0x03,//FEATURE (Cnst,Var,Abs) ; 7-bit pad
0x09, 0x67,//USAGE (Isoch Custom Force Enable)
0x75, 0x01,//REPORT_SIZE (1)
0xB1, 0x02,//FEATURE (Data,Var,Abs)
0xC0 , // End Collection (Datalink)
0x09,0x92, // USAGE (PID State Report)
0xA1,0x02, // Collection Datalink
0x09, 0x22, // USAGE (Effect Block Index)
0x25, 0x7F, // Logical Maximum (127)
0x75, 0x07, // Report Size 7
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x24,//USAGE (ROM Flag)
0x25, 0x01,//LOGICAL_MAXIMUM (1)
0x75, 0x01,//REPORT_SIZE (1)
0x95, 0x01,//REPORT_COUNT (1)
0x81, 0x02,// INPUT (Data,Var,Abs)
0x09, 0x94, // USAGE (Effect Playing)
0x09, 0xA0, // USAGE (Actuators Enabled)
0x09, 0xA4, // USAGE (Safety Switch)
0x09, 0xA6, // USAGE (Actuator Power)
0x75, 0x01,//REPORT_SIZE (1)
0x95, 0x04,//REPORT_COUNT (4)
0x81, 0x02,// INPUT (Data,Var,Abs)
0x81, 0x03,// INPUT (Cnst,Var,Abs) ; 4-bit pad
0xC0 , // End Collection (Datalink)
0x09,0x95, // USAGE (PID Device Control Report)
0xA1,0x02, // Collection Datalink
0x09,0x96, // USAGE (PID Device Control)
0xA1,0x02, // Collection Datalink
0x09,0x97, // USAGE (DC Enable Actuators)
0x09,0x98, // USAGE (DC Disable Actuators)
0x09,0x99, // USAGE (DC Stop All Effects)
0x09,0x9A, // USAGE (DC Reset)
0x09,0x9B, // USAGE (DC Pause)
0x09,0x9C, // USAGE (DC Continue)
0x15,0x01, // Logical Maximum 1)
0x25,0x06, // Logical Maximum 6)
0x95,0x08, // Report Count 8 ( wrong in usb pdf )
0x75,0x01, // Report Size 1 ( wrong in usb pdf )
0x91,0x02, // OUTPUT (Data,Var,Abs)
0xC0 , // End Collection (Datalink)
0xC0 , // End Collection (Datalink)
0x09,0x85, // USAGE (PID Pool Move Report)
0xA1,0x02, // Collection Datalink
0x09,0x86, // USAGE (Move Source)
0x09,0x87, // USAGE (Move Destination)
0x09,0x88, // USAGE (Move Length)
0x26,0xFF, 0x7F, // Logical Maximum 2767)
0x75,0x10, // Report Size 16
0x95,0x03, // Report Count 3
0x92,0x02,0x01, // OUTPUT (Data,Var,Abs,Buf)
0xC0 , // End Collection (Datalink)
0x09,0x7D, // Device Gain Report)
0xA1,0x02, // Collection Datalink
0x09,0x7E, // USAGE (Device Gain)
0x26,0xFF, 0x00, // Logical Maximum 255)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0xB1,0x02, // FEATURE (Data,Var,Abs)
0xC0 , // End Collection (Datalink)
0xC0 , // End