diff options
-rw-r--r-- | main.c | 488 | ||||
-rw-r--r-- | usbdrv/usbconfig.h | 2 |
2 files changed, 459 insertions, 31 deletions
@@ -51,36 +51,464 @@ static char buffer[300]; // contains the exploded gamecube bits, i.e. each bit sent/received occupies one byte here. -PROGMEM const char usbHidReportDescriptor[56] = { - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x05, // USAGE (Game Pad) - 0xA1, 0x01, // COLLECTION (Application) - 0xA1, 0x00, // COLLECTION (Physical) - 0x05, 0x09, // USAGE_PAGE (Button) - 0x19, 0x01, // USAGE_MINIMUM (Button 1) - 0x29, 0x0C, // USAGE_MAXIMUM (Button 12) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x01, // LOGICAL_MAXIMUM (1) - 0x95, 0x0C, // REPORT_COUNT (12) - 0x75, 0x01, // REPORT_SIZE (1) - 0x81, 0x02, // INPUT (Data,Var,Abs) - 0x95, 0x01, // REPORT_COUNT (1) - 0x75, 0x04, // REPORT_SIZE (4) - 0x81, 0x03, // INPUT (Const,Var,Abs) - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x30, // USAGE (X) - 0x09, 0x31, // USAGE (Y) - 0x09, 0x32, // USAGE (Z) - 0x09, 0x33, // USAGE (Rx) - 0x09, 0x34, // USAGE (Ry) - 0x09, 0x35, // USAGE (Rz) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0xFF, // LOGICAL_MAXIMUM (255) - 0x75, 0x08, // REPORT_SIZE (8) - 0x95, 0x06, // REPORT_COUNT (6) - 0x81, 0x02, // INPUT (Data,Var,Abs) - 0xC0, // END_COLLECTION - 0xC0 // END_COLLECTION +PROGMEM const char usbHidReportDescriptor[862] = { + +0x05, 0x01, //USAGE_PAGE (Generic Desktop) +0x15, 0x00, //LOGICAL_MINIMUM (0) +0x09, 0x04, //USAGE (Joystick) +0xA1, 0x01, //COLLECTION (Application) +// Start Joystick input definition +0x85, 0x01, // REPORT_ID (1) +0x05, 0x02, // USAGE_PAGE (Simulation Controls) +0x09, 0xBB, // USAGE (Throttle) +0x15, 0x81, // LOGICAL_MINIMUM (-127) +0x25, 0x7F, // LOGICAL_MAXIMUM (127) +0x75, 0x08, // REPORT_SIZE (8) +0x95, 0x01, // REPORT_COUNT (1) +0x81, 0x02, // INPUT (Data,Var,Abs) +0x05, 0x01, // USAGE_PAGE (Generic Desktop) +// Define the axes +0x09, 0x01, // USAGE (Pointer) +0xA1, 0x00, // COLLECTION (Physical) +0x09, 0x30, // USAGE (X) +0x09, 0x31, // USAGE (Y) +0x95, 0x02, // REPORT_COUNT (2) +0x81, 0x02, // INPUT (Data,Var,Abs) +0xC0, // END_COLLECTION +// Define the hat switch +0x09, 0x39, // USAGE (Hat switch) +0x15, 0x00, // LOGICAL_MINIMUM (0) +0x25, 0x03, // LOGICAL_MAXIMUM (3) +0x35, 0x00, // PHYSICAL_MINIMUM (0) +0x46, 0x0E, 0x01, // PHYSICAL_MAXIMUM (270) +0x66, 0x14, 0x00, // UNIT (Eng Rot:Angular Pos) +0x75, 0x04, // REPORT_SIZE (4) +0x95, 0x01, // REPORT_COUNT (1) +0x81, 0x02, // INPUT (Data,Var,Abs) +0x45, 0x00, // PHYSICAL_MAXIMUM (0) +0x66, 0x00, 0x00, // UNIT (None) +// Define the buttons +0x05, 0x09, // USAGE_PAGE (Button) +0x19, 0x01, // USAGE_MINIMUM (Button 1) +0x29, 0x04, // USAGE_MAXIMUM (Button 4) +0x25, 0x01, // LOGICAL_MAXIMUM (1) +0x95, 0x04, // REPORT_COUNT (4) +0x75, 0x01, // REPORT_SIZE (1) +0x35, 0x00, // PHYSICAL_MINIMUM (0) +0x81, 0x02, // INPUT (Data,Var,Abs) +// End Joystick Input definition + + + + +// Start Force Feedback command definitions +0x05, 0x0F, // USAGE_PAGE (Physical Interface) +// Effect Report Definition +0x09, 0x21, // USAGE (Set Effect Report) +0xA1, 0x02, // COLLECTION (Logical) +0x09, 0x22, // USAGE (Effect Block Index) +0x25, 0x7F, // LOGICAL_MAXIMUM (127) +0x75, 0x07, // REPORT_SIZE (7) +0x95, 0x01, // REPORT_COUNT (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x24, // USAGE (ROM Flag) +0x25, 0x01, // LOGICAL_MAXIMUM (1) +0x75, 0x01, // REPORT_SIZE (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +// Define the available effect types. Effect Type is a named array that will +// accept any of the ET usages listed. +0x09, 0x25, // USAGE (Effect Type) +0xA1, 0x02, // COLLECTION (Logical) +0x09, 0x26, // USAGE (ET Constant Force) +0x09, 0x27, // USAGE (ET Ramp) +0x09, 0x30, // USAGE (ET Square) +0x09, 0x31, // USAGE (ET Sine) +0x09, 0x32, // USAGE (ET Triangle) +0x09, 0x33, // USAGE (ET Sawtooth Up) +0x09, 0x34, // USAGE (ET Sawtooth Down) +0x09, 0x40, // USAGE (ET Spring) +0x09, 0x41, // USAGE (ET Damper) +0x09, 0x42, // USAGE (ET Inertia) +0x15, 0x01, // LOGICAL_MINIMUM (1) +0x25, 0x0A, // LOGICAL_MAXIMUM (10) +0x75, 0x08, // REPORT_SIZE (8) +0x91, 0x00, // OUTPUT (Data,Ary,Abs) +0xC0, // END_COLLECTION +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) +0x45, 0x00, // PHYSICAL_MAXIMUM (0) +0x55, 0x00, // UNIT_EXPONENT (0) +0x65, 0x00, // UNIT (None) +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 (Data,Var,Abs) +0x09, 0x55, // USAGE (Axes Enable) (Tie these axes to the stick) +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 (Data,Var,Abs) +0xC0, // END_COLLECTION +0xC0, // END_COLLECTION + +0x95, 0x06, // REPORT_COUNT (6) (6-bit pad) +0x91, 0x03, // OUTPUT (Cnst,Var,Abs) +0x05, 0x0F, // USAGE_PAGE (Physical Interface) +0x09, 0x57, // USAGE (Direction) +0xA1, 0x02, // COLLECTION (Logical) +0x05, 0x01, // USAGE_PAGE (Generic Desktop) +0x09, 0x01, // USAGE (Pointer)// Tie these axes to the stick +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 (Data,Var,Abs) +0x65, 0x00, // UNIT (None) +0x45, 0x00, // PHYSICAL_MAXIMUM (0) +0xC0, // END_COLLECTION +0xC0, // END_COLLECTION +0x05, 0x0F, // USAGE_PAGE (Physical Interface) +0x09, 0x58, // USAGE (Type Specific Block Offset) +0xA1, 0x02, // COLLECTION (Logical) +0x0B, 0x01, 0x00, 0x0A, 0x00, // USAGE (Ordinals:Instance 1) +0x0B, 0x02, 0x00, 0x0A, 0x00, // USAGE (Ordinals:Instance 2) +0x26, 0xFD, 0x7F, // LOGICAL_MAXIMUM (32765)// 32K RAM or ROM max. +0x75, 0x10, // REPORT_SIZE (16) +0x95, 0x02, // REPORT_COUNT (2) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0xC0, // END_COLLECTION +0xC0, // END_COLLECTION +// Envelope Report Definition +0x09, 0x5A, // USAGE (Set Envelope Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x02, // REPORT_ID (2) +0x09, 0x23, // USAGE (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 (Data,Var,Abs) +0x09, 0x24, // USAGE (ROM Flag) +0x25, 0x01, // LOGICAL_MAXIMUM (1) +0x75, 0x01, // REPORT_SIZE (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x5B, // USAGE (Attack Level) +0x09, 0x5D, // USAGE (Fade Level) +0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) +0x75, 0x08, // REPORT_SIZE (8) +0x95, 0x02, // REPORT_COUNT (2) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x5C, // USAGE (Attack Time) +0x09, 0x5E, // USAGE (Fade Time) +0x26, 0x10, 0x27, // LOGICAL_MAXIMUM (10000) +0x46, 0x10, 0x27, // PHYSICAL_MAXIMUM (10000) +0x66, 0x03, 0x10, // UNIT (Eng Lin:Time) +0x55, 0x0D, // UNIT_EXPONENT (-3) +0x75, 0x10, // REPORT_SIZE (16) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x45, 0x00, // PHYSICAL_MAXIMUM (0) +0x65, 0x00, // UNIT (None) +0x55, 0x00, // UNIT_EXPONENT (0) +0xC0, // END_COLLECTION +// Condition Report Definition +0x09, 0x5F, // USAGE (Set Condition Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x03, // REPORT_ID (3) +0x09, 0x23, // USAGE (Parameter Block Offset) +0x26, 0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) +0x75, 0x0F, // REPORT_SIZE (15) +0x95, 0x01, // REPORT_COUNT (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x24, // USAGE (ROM Flag) +0x25, 0x01, // LOGICAL_MAXIMUM (1) +0x75, 0x01, // REPORT_SIZE (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +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 (Data,Var,Abs) +0xC0, // END_COLLECTION +// Periodic Report Definition +0x09, 0x6E, // USAGE (Set Periodic Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x04, // REPORT_ID (4) +0x09, 0x23, // USAGE (Parameter Block Offset) +0x26, 0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) +0x75, 0x0F, // REPORT_SIZE (15) +0x95, 0x01, // REPORT_COUNT (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x24, // USAGE (ROM Flag) +0x25, 0x01, // LOGICAL_MAXIMUM (1) +0x75, 0x01, // REPORT_SIZE (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x70, // USAGE (Magnitude) +0x09, 0x6F, // 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 (Data,Var,Abs) +0x09, 0x72, // USAGE (Period) +0x26, 0x10, 0x27, // LOGICAL_MAXIMUM (10000) +0x46, 0x10, 0x27, // PHYSICAL_MAXIMUM (10000) +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 (Data,Var,Abs) +0x45, 0x00, // PHYSICAL_MAXIMUM (0) +0x65, 0x00, // UNIT (None) +0x55, 0x00, // UNIT_EXPONENT (0) +0xC0, // END_COLLECTION +// Constant Force Report Definition +0x09, 0x73, // USAGE (Set Constant Force Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x05, // REPORT_ID (5) +0x09, 0x23, // USAGE (Parameter Block Offset) +0x26, 0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) +0x75, 0x0F, // REPORT_SIZE (15) +0x95, 0x01, // REPORT_COUNT (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x24, // USAGE (ROM Flag) +0x25, 0x01, // LOGICAL_MAXIMUM (1) +0x75, 0x01, // REPORT_SIZE (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x70, // USAGE (Magnitude) +0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) +0x75, 0x08, // REPORT_SIZE (8) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0xC0, // END_COLLECTION +// Ramp Force Report Definition +0x09, 0x74, // USAGE (Set Ramp Force Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x06, // REPORT_ID (6) +0x09, 0x23, // USAGE (Parameter Block Offset) +0x26, 0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) +0x75, 0x0F, // REPORT_SIZE (15) +0x95, 0x01, // REPORT_COUNT (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x24, // USAGE (ROM Flag) +0x25, 0x01, // LOGICAL_MAXIMUM (1) +0x75, 0x01, // REPORT_SIZE (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x75, // USAGE (Ramp Start) +0x09, 0x76, // USAGE (Ramp End) +0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) +0x75, 0x08, // REPORT_SIZE (8) +0x95, 0x02, // REPORT_COUNT (2) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0xC0, // END_COLLECTION +// Custom Force Data Report Definition +// Downloads are always into RAM space so the ROM usage is not declared. +0x09, 0x68, // USAGE (Custom Force Data Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x07, // REPORT_ID (7) +0x09, 0x23, // USAGE (Parameter Block Offset) +0x26, 0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) +0x75, 0x0F, // REPORT_SIZE (15) +0x95, 0x01, // REPORT_COUNT (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x0B, 0x3B, 0x00, 0x01, 0x00,// USAGE (Generic Desktop:Byte Count) +0x26, 0x00, 0x01, // LOGICAL_MAXIMUM (256) +0x75, 0x09, // REPORT_SIZE (9) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x69, // USAGE (Custom Force Data) +0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) +0x75, 0x08, // REPORT_SIZE (8) +0x96, 0x00, 0x01, // REPORT_COUNT (256) +0x92, 0x02, 0x01, // OUTPUT (Data,Var,Abs,Buf) +0xC0, // END_COLLECTION +// Download Force Sample Definition +0x09, 0x66, // USAGE (Download Force Sample) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x08, // REPORT_ID (8) +0x05, 0x01, // USAGE_PAGE (Generic Desktop) +0x09, 0x01, // USAGE (Pointer) +0xA1, 0x02, // COLLECTION (Logical) +0x09, 0x30, // USAGE (X) +0x09, 0x31, // USAGE (Y) +0x15, 0x81, // LOGICAL_MINIMUM (-127) +0x25, 0x7F, // LOGICAL_MAXIMUM (127) +0x75, 0x08, // REPORT_SIZE (8) +0x95, 0x02, // REPORT_COUNT (2) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0xC0, // END_COLLECTION +0xC0, // END_COLLECTION +0x05, 0x0F, // USAGE_PAGE (Physical Interface) +// Define the Custom Force parameter block +// Custom Effects are always RAM based +// so ROM flags are not declared. +0x09, 0x6B, // USAGE (Set Custom Force Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x09, // REPORT_ID (9) + // Parameter block offset in pool + // Custom Force data offset in pool +0x09, 0x23, // USAGE (Parameter Block Offset) +0x09, 0x6C, // USAGE (Custom Force Data Offset) +0x09, 0x6D, // USAGE (Sample Count) +0x15, 0x00, // LOGICAL_MINIMUM (0) +0x26, 0xFD, 0x7F, // LOGICAL_MAXIMUM (32765)// 32K of RAM or ROM max. +0x95, 0x03, // REPORT_COUNT (3) +0x75, 0x10, // REPORT_SIZE (16) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0xC0, // END_COLLECTION +// Effect Operation Report Definition +0x09, 0x77, // USAGE (Effect Operation Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x0A, // REPORT_ID (10) +0x09, 0x22, // USAGE (Effect Block Index) +0x25, 0x7F, // LOGICAL_MAXIMUM (127) +0x75, 0x07, // REPORT_SIZE (7) +0x95, 0x01, // REPORT_COUNT (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x24, // USAGE (ROM Flag) +0x25, 0x01, // LOGICAL_MAXIMUM (1) +0x75, 0x01, // REPORT_SIZE (1) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0x09, 0x78, // USAGE (Effect Operation) +0xA1, 0x02, // COLLECTION (Logical) +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 (8) +0x91, 0x00, // OUTPUT (Data,Ary,Abs) +0xC0, // END_COLLECTION +0x09, 0x7C, // USAGE (Loop Count) +0x15, 0x00, // LOGICAL_MINIMUM (0) +0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) +0x91, 0x02, // OUTPUT (Data,Var,Abs) +0xC0, // END_COLLECTION +// PID Pool Report Definition +0x09, 0x7F, // USAGE (PID Pool Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x01, // REPORT_ID (1) +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 (Logical) +0x09, 0x21, // USAGE (Set Effect Report) +0x09, 0x5A, // USAGE (Set Envelope Report) +0x09, 0x5F, // USAGE (Set Condition Report) +0x09, 0x6E, // USAGE (Set Periodic Report) +0x09, 0x73, // USAGE (Set Constant Force Report) +0x09, 0x74, // USAGE (Set Ramp Force Report) +0x09, 0x6B, // USAGE (Set Custom Force Report) +0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) +0x75, 0x08, // REPORT_SIZE (8) +0x95, 0x07, // REPORT_COUNT (7) +0xB1, 0x02, // FEATURE (Data,Var,Abs) +0xC0, // END_COLLECTION +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 +// PID State Report Definition +0x09, 0x92, // USAGE (PID State Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x02, // REPORT_ID (2) +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 +// PID Device Control Report Definition +0x09, 0x95, // USAGE (PID Device Control Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x0B, // REPORT_ID (11) +0x09, 0x96, // USAGE (PID Device Control) +0xA1, 0x02, // COLLECTION (LOGICAL) +0x09, 0x97, // USAGE (0xDC, Enable Actuators) +0x09, 0x98, // USAGE (0xDC, Disable Actuators) +0x09, 0x99, // USAGE (0xDC, Stop All Effects) +0x09, 0x9A, // USAGE (0xDC, Reset) +0x09, 0x9B, // USAGE (0xDC, Pause) +0x09, 0x9C, // USAGE (0xDC, Continue) +0x15, 0x01, // LOGICAL_MINIMUM (1) +0x25, 0x06, // LOGICAL_MAXIMUM (6) +0x75, 0x01, // REPORT_SIZE (1) +0x95, 0x08, // REPORT_COUNT (4) +0x91, 0x02, // OUTPUT(Data,Ary,Abs) +0xC0, // END_COLLECTION +0xC0, // END_COLLECTION +// PID Pool Move Report Definition +0x09, 0x85, // USAGE (PID Pool Move Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x0C, // REPORT_ID (12) +0x09, 0x86, // USAGE (Move Source) +0x09, 0x87, // USAGE (Move Destination) +0x09, 0x88, // USAGE (Move Length) +0x26, 0xFF, 0x7F, // LOGICAL_MAXIMUM (32767) +0x75, 0x10, // REPORT_SIZE (16) +0x95, 0x03, // REPORT_COUNT (3) +0x92, 0x02, 0x01, // OUTPUT (Data,Var,Abs,Buf) +0xC0, // END_COLLECTION +// Device Gain Report Definition +0x09, 0x7D, // USAGE (Device Gain Report) +0xA1, 0x02, // COLLECTION (Logical) +0x85, 0x02, // REPORT_ID (2) +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 +0xC0 //END_COLLECTION + + }; typedef struct { diff --git a/usbdrv/usbconfig.h b/usbdrv/usbconfig.h index a0e19f1..0bb8b04 100644 --- a/usbdrv/usbconfig.h +++ b/usbdrv/usbconfig.h @@ -279,7 +279,7 @@ section at the end of this file). * HID class is 3, no subclass and protocol required (but may be useful!) * CDC class is 2, use subclass 2 and protocol 1 for ACM */ -#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 56 +#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 862 /* Define this to the length of the HID report descriptor, if you implement * an HID device. Otherwise don't define it or define it to 0. * If you use this define, you must add a PROGMEM character array named |