Initial for Condor Simulator

Dependents:   USBJoystick_2 USBJoystick_NEW

Fork of USBJoystick by Wim Huiskamp

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