Initial for Condor Simulator
Dependents: USBJoystick_2 USBJoystick_NEW
Fork of USBJoystick by
Diff: USBJoystick.cpp
- Revision:
- 2:265e03bf82af
- Parent:
- 1:92574cf6e9af
- Child:
- 4:71835900760f
--- a/USBJoystick.cpp Sun Jul 22 10:34:23 2018 +0000 +++ b/USBJoystick.cpp Sat Sep 15 07:46:30 2018 +0000 @@ -44,45 +44,64 @@ bool USBJoystick::update() { + uint8_t pos = 0; HID_REPORT report; // Fill the report according to the Joystick Descriptor - report.data[0] = _t & 0xff; - report.data[1] = _r & 0xff; - report.data[2] = _d & 0xff; - report.data[3] = _w & 0xff; - report.data[4] = _x & 0xff; - report.data[5] = _y & 0xff; + report.data[pos] = (_t >> 0) & 0xff; +#if (SWORD == 1) + report.data[pos++] = (_t >> 8) & 0xff; +#endif + report.data[pos++] = _r & 0xff; +#if (SWORD == 1) + report.data[pos++] = (_r >> 8) & 0xff; +#endif + report.data[pos++] = _d & 0xff; +#if (SWORD == 1) + report.data[pos++] = (_d >> 8) & 0xff; +#endif + report.data[pos++] = _w & 0xff; +#if (SWORD == 1) + report.data[pos++] = (_w >> 8) & 0xff; +#endif + report.data[pos++] = _x & 0xff; +#if (SWORD == 1) + report.data[pos++] = (_x >> 8) & 0xff; +#endif + report.data[pos++] = _y & 0xff; +#if (SWORD == 1) + report.data[pos++] = (_y >> 8) & 0xff; +#endif #if (HAT4 == 1) //Use 4 bit padding for hat4 or hat8 - report.data[6] = (_hat & 0x0f) ; + report.data[pos++] = (_hat & 0x0f) ; #endif #if (HAT8 == 1) //Use 4 bit padding for hat4 or hat8 - report.data[6] = (_hat & 0xff) ; + report.data[pos++] = (_hat & 0xff) ; #endif #if (BUTTONS4 == 1) //Use 4 bit padding for buttons - report.data[7] = (_buttons & 0x0f) ; - report.length = 8; + report.data[pos++] = (_buttons & 0x0f) ; + report.length = pos++; #endif #if (BUTTONS8 == 1) //Use 8 bits for buttons - report.data[7] = (_buttons & 0xff) ; - report.length = 8; + report.data[pos++] = (_buttons & 0xff) ; + report.length = pos++; #endif #if (BUTTONS32 == 1) //No bit padding for 32 buttons - report.data[7] = (_buttons >> 0) & 0xff; - report.data[8] = (_buttons >> 8) & 0xff; - report.data[9] = (_buttons >> 16) & 0xff; - report.data[10] = (_buttons >> 24) & 0xff; - report.length = 11; + report.data[pos++] = (_buttons >> 0) & 0xff; + report.data[pos++] = (_buttons >> 8) & 0xff; + report.data[pos++] = (_buttons >> 16) & 0xff; + report.data[pos++] = (_buttons >> 24) & 0xff; + report.length = pos++; #endif return send(&report); @@ -162,63 +181,78 @@ REPORT_COUNT(1), 0x02, INPUT(1), 0x02, // Data, Variable, Absolute USAGE(1), 0xB6, // Dive Breaks - USAGE(1), 0xC3, // Wing Flaps + USAGE(1), 0xC3, // Wing Flaps +// 8 bit values +#if (SBYTE == 1) LOGICAL_MINIMUM(1), 0x81, // -127 LOGICAL_MAXIMUM(1), 0x7f, // 127 REPORT_SIZE(1), 0x08, REPORT_COUNT(1), 0x02, + INPUT(1), 0x02, // Data, Variable, Absolute +#endif +// 16 bit values +#if (SWORD ==1) + LOGICAL_MINIMUM(2), 0x80, 0x01 // -32767 + LOGICAL_MAXIMUM(2), 0x7f, 0xff, // 32767 + REPORT_SIZE(1), 0x10, + REPORT_COUNT(1), 0x04, INPUT(1), 0x02, // Data, Variable, Absolute +#endif USAGE_PAGE(1), 0x01, // Generic Desktop USAGE(1), 0x01, // Usage (Pointer) COLLECTION(1), 0x00, // Physical USAGE(1), 0x30, // X USAGE(1), 0x31, // Y // 8 bit values +#if (SBYTE == 1) LOGICAL_MINIMUM(1), 0x81, // -127 LOGICAL_MAXIMUM(1), 0x7f, // 127 REPORT_SIZE(1), 0x08, REPORT_COUNT(1), 0x02, INPUT(1), 0x02, // Data, Variable, Absolute +#endif // 16 bit values -// LOGICAL_MINIMUM(1), 0x00, // 0 -// LOGICAL_MAXIMUM(2), 0xff, 0x7f, // 32767 -// REPORT_SIZE(1), 0x10, -// REPORT_COUNT(1), 0x02, -// INPUT(1), 0x02, // Data, Variable, Absolute +#if (SWORD ==1) + LOGICAL_MINIMUM(2), 0x80, 0x01 // -32767 + LOGICAL_MAXIMUM(2), 0x7f, 0xff, // 32767 + REPORT_SIZE(1), 0x10, + REPORT_COUNT(1), 0x04, + INPUT(1), 0x02, // Data, Variable, Absolute +#endif END_COLLECTION(0), -#if (HAT4 == 1) +#if (HAT4 == 1 && HAT4_8 == 0) // 4 Position Hat Switch USAGE(1), 0x39, // Usage (Hat switch) LOGICAL_MINIMUM(1), 0x00, // 0 LOGICAL_MAXIMUM(1), 0x03, // 3 PHYSICAL_MINIMUM(1), 0x00, // Physical_Minimum (0) PHYSICAL_MAXIMUM(2), 0x0E, 0x01, // Physical_Maximum (270) - UNIT(1), 0x14, // Unit (Eng Rot:Angular Pos) + UNIT_EXPONENT(1), 0x00, // Unit Exponent (0) + UNIT(1), 0x14, // Unit (Degrees) REPORT_SIZE(1), 0x04, REPORT_COUNT(1), 0x01, - INPUT(1), 0x02, // Data, Variable, Absolute + INPUT(1), 0x42, // Data, Variable, Absolute, Null State +// Padding 4 bits + REPORT_SIZE(1), 0x01, + REPORT_COUNT(1), 0x04, + INPUT(1), 0x01, // Constant #endif -#if (HAT8 == 1) +#if (HAT8 == 1) || (HAT4 == 1 && HAT4_8 == 1) // 8 Position Hat Switch USAGE(1), 0x39, // Usage (Hat switch) LOGICAL_MINIMUM(1), 0x00, // 0 LOGICAL_MAXIMUM(1), 0x07, // 7 PHYSICAL_MINIMUM(1), 0x00, // Physical_Minimum (0) PHYSICAL_MAXIMUM(2), 0x3B, 0x01, // Physical_Maximum (315) - UNIT(1), 0x14, // Unit (Eng Rot:Angular Pos) - REPORT_SIZE(1), 0x04, + UNIT_EXPONENT(1), 0x00, // Unit Exponent (0) + UNIT(1), 0x14, // Unit (Degrees) + REPORT_SIZE(1), 0x08, REPORT_COUNT(1), 0x01, - INPUT(1), 0x02, // Data, Variable, Absolute + INPUT(1), 0x42, // Data, Variable, Absolute, Null State #endif -// Padding 4 bits - REPORT_SIZE(1), 0x01, - REPORT_COUNT(1), 0x04, - INPUT(1), 0x01, // Constant - - #if (BUTTONS4 == 1) // 4 Buttons USAGE_PAGE(1), 0x09, // Buttons @@ -251,7 +285,6 @@ UNIT(1), 0x00, // Unit (None) INPUT(1), 0x02, // Data, Variable, Absolute #endif - #if (BUTTONS32 == 1) // 32 Buttons USAGE_PAGE(1), 0x09, // Buttons