Initial for Condor Simulator

Dependents:   USBJoystick_2 USBJoystick_NEW

Fork of USBJoystick by Wim Huiskamp

Revision:
4:71835900760f
Parent:
2:265e03bf82af
Child:
5:fa0a30d0ef3d
--- a/USBJoystick.cpp	Sun Sep 16 09:56:23 2018 +0000
+++ b/USBJoystick.cpp	Sat Sep 29 09:27:44 2018 +0000
@@ -27,17 +27,17 @@
 #include "stdint.h"
 #include "USBJoystick.h"
 
-bool USBJoystick::update(int16_t t, int16_t r, int16_t d, int16_t w, int16_t x, int16_t y, uint32_t buttons, uint8_t hat)
+bool USBJoystick::update(uint16_t x, uint16_t y, uint16_t b, uint16_t f, uint16_t r, uint16_t t, uint8_t hat, uint32_t buttons)
 {
 
-    _t = t;
-    _r = r;
-    _d = d;
-    _w = w;
     _x = x;
     _y = y;
+    _b = b;
+    _f = f;
+    _r = r;
+    _t = t;
+    _hat = hat;
     _buttons = buttons;
-    _hat = hat;
 
     return update();
 }
@@ -48,99 +48,82 @@
     HID_REPORT report;
 
     // Fill the report according to the Joystick Descriptor
-    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
+    report.data[pos] = (_x >>  0) & 0xff;
+
+    report.data[++pos] = (_x >>  8) & 0xff;
+    report.data[++pos] = _y & 0xff;
+    report.data[++pos] = (_y >>  8) & 0xff;
+    report.data[++pos] = _b & 0xff;
+    report.data[++pos] = (_b >>  8) & 0xff;
+    report.data[++pos] = _f & 0xff;
+    report.data[++pos] = (_f >>  8) & 0xff;
+    report.data[++pos] = _r & 0xff;
+    report.data[++pos] = (_r >>  8) & 0xff;
+    report.data[++pos] = _t & 0xff;
+    report.data[++pos] = (_t >>  8) & 0xff;
 
 #if (HAT4 == 1)
 //Use 4 bit padding for hat4 or hat8
-    report.data[pos++] = (_hat & 0x0f) ;
+    report.data[++pos] = (_hat & 0x0f) ;
 #endif
 
 #if (HAT8 == 1)
 //Use 4 bit padding for hat4 or hat8
-    report.data[pos++] = (_hat & 0xff) ;
+    report.data[++pos] = (_hat & 0x0f) ;
 #endif
 
 #if (BUTTONS4 == 1)
 //Use 4 bit padding for buttons
-    report.data[pos++] = (_buttons & 0x0f) ;
-    report.length = pos++;
+    report.data[++pos] = (_buttons & 0x0f) ;
+    report.length = ++pos;
 #endif
 
 #if (BUTTONS8 == 1)
 //Use 8 bits for buttons
-    report.data[pos++] = (_buttons & 0xff) ;
-    report.length = pos++;
+    report.data[++pos] = (_buttons & 0xff) ;
+    report.length = ++pos;
 #endif
 
 #if (BUTTONS32 == 1)
 //No bit padding for 32 buttons
-    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++;
+    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);
 }
 
-bool USBJoystick::throttle(int16_t t)
-{
-    _t = t;
-    return update();
-}
-
-bool USBJoystick::rudder(int16_t r)
-{
-    _r = r;
-    return update();
-}
-
-bool USBJoystick::diveBreak(int16_t d)
-{
-    _d = d;
-    return update();
-}
-
-bool USBJoystick::flaps(int16_t w)
-{
-    _w = w;
-    return update();
-}
-
-bool USBJoystick::move(int16_t x, int16_t y)
+bool USBJoystick::move(uint16_t x, uint16_t y)
 {
     _x = x;
     _y = y;
     return update();
 }
 
-bool USBJoystick::buttons(uint32_t buttons)
+bool USBJoystick::diveBreak(uint16_t b)
+{
+    _b = b;
+    return update();
+}
+
+bool USBJoystick::flaps(uint16_t f)
 {
-    _buttons = buttons;
+    _f = f;
+    return update();
+}
+
+bool USBJoystick::rudder(uint16_t r)
+{
+    _r = r;
+    return update();
+}
+
+bool USBJoystick::throttle(uint16_t t)
+{
+    _t = t;
     return update();
 }
 
@@ -150,17 +133,24 @@
     return update();
 }
 
+bool USBJoystick::buttons(uint32_t buttons)
+{
+    _buttons = buttons;
+    return update();
+}
+
+
 
 void USBJoystick::_init()
 {
-    _t = -127;
-    _r = -127;
-    _d = -127;
-    _w = -127;
-    _x = 0;
-    _y = 0;
-    _buttons = 0x00000000;
-    _hat = 0x00;
+    _x = 0;                                     // X-Axis
+    _y = 0;                                     // Y-Axis
+    _b = 0;                                     // Breaks
+    _f = 0;                                     // Wing Flaps
+    _r = 0;                                     // Rudder
+    _t = 0;                                     // Throttle
+    _hat = 0x00;                                // POV Hat-Switches
+    _buttons = 0x00000000;                      // Buttons
 }
 
 
@@ -168,135 +158,107 @@
 {
     static uint8_t reportDescriptor[] = {
 
-        USAGE_PAGE(1), 0x01,           // Generic Desktop
-        LOGICAL_MINIMUM(1), 0x00,      // Logical_Minimum (0)
-        USAGE(1), 0x04,                // Usage (Joystick)
-        COLLECTION(1), 0x01,           // Application
-        USAGE_PAGE(1), 0x02,            // Simulation Controls
-        USAGE(1), 0xBB,                 // Throttle
-        USAGE(1), 0xBA,                 // Rudder
-        LOGICAL_MINIMUM(1), 0x81,       // -127
-        LOGICAL_MAXIMUM(1), 0x7f,       // 127
-        REPORT_SIZE(1), 0x08,
-        REPORT_COUNT(1), 0x02,
-        INPUT(1), 0x02,                 // Data, Variable, Absolute
-        USAGE(1), 0xB6,                 // Dive Breaks
-        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
-#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), 0x04,                         // Usage (Joystick)
+        COLLECTION(1), 0x01,                    // Application
+        
+//******* Joystick Axis and Sliders *******
+            USAGE_PAGE(1), 0x01,                // Generic Desktop
+            USAGE(1), 0x01,                     // Usage (Pointer) - (Joystick = 0x04)
+            COLLECTION(1), 0x00,                // Physical                                     Usage in main.cpp
+                USAGE(1), 0x30,                 // X                                            X
+                USAGE(1), 0x31,                 // Y                                            Y
+                USAGE(1), 0x32,                 // Z                                            Breaks
+                USAGE(1), 0x33,                 // Rx                                           Flaps
+//                USAGE(1), 0x34,               // Ry
+//                USAGE(1), 0x35,               // Rz (Rudder on Usage Page 0x02)
+//                USAGE(1), 0x36                // Slider (Throttle on Usage Page 0x02)
+                LOGICAL_MINIMUM(1), 0x00,       // 0
+                LOGICAL_MAXIMUM(2), 0xff, 0xff, // 65536
+                REPORT_SIZE(1), 0x10,
+                REPORT_COUNT(1), 0x04,
+                INPUT(1), 0x02,                 // Data, Variable, Absolute        
+            END_COLLECTION(0),
 
-        END_COLLECTION(0),
+            USAGE_PAGE(1), 0x02,                // Simulation Controls
+            USAGE(1), 0xBA,                     // Usage (Rudder)
+            USAGE(1), 0xBB,                     // Usage (Throttle)
+            LOGICAL_MINIMUM(1), 0x00,           // 0
+            LOGICAL_MAXIMUM(2), 0xff, 0xff,     // 65536
+            REPORT_SIZE(1), 0x10,
+            REPORT_COUNT(1), 0x02,
+            INPUT(1), 0x02,                     // Data, Variable, Absolute
 
+//******* Hat Switches *******
+            USAGE_PAGE(1), 0x01,                // Generic Desktop
+            USAGE(1), 0x39,                     // Usage (Hat switch)
 #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_EXPONENT(1), 0x00,         // Unit Exponent (0)
-        UNIT(1), 0x14,                  // Unit (Degrees)
-        REPORT_SIZE(1), 0x04,
-        REPORT_COUNT(1), 0x01,
-        INPUT(1), 0x42,                 // Data, Variable, Absolute, Null State
-// Padding 4 bits
-        REPORT_SIZE(1), 0x01,
-        REPORT_COUNT(1), 0x04,
-        INPUT(1), 0x01,                 // Constant
+            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_EXPONENT(1), 0x00,           // Unit Exponent (0)
+            UNIT(1), 0x14,                      // Unit (Degrees)
 #endif
 #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_EXPONENT(1), 0x00,         // Unit Exponent (0)
-        UNIT(1), 0x14,                  // Unit (Degrees)
-        REPORT_SIZE(1), 0x08,
-        REPORT_COUNT(1), 0x01,
-        INPUT(1), 0x42,                 // Data, Variable, Absolute, Null State
+            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_EXPONENT(1), 0x00,          // Unit Exponent (0)
+            UNIT(1), 0x14,                     // Unit (Degrees)
 #endif
-
+            REPORT_SIZE(1), 0x04,
+            REPORT_COUNT(1), 0x01,
+            INPUT(1), 0x42,                    // Data, Variable, Absolute, Null State
+// Padding 4 bits
+            REPORT_SIZE(1), 0x01,
+            REPORT_COUNT(1), 0x04,
+            INPUT(1), 0x01,                    // Constant
+            
+//******* Buttons *******
+            USAGE_PAGE(1), 0x09,               // Buttons
 #if (BUTTONS4 == 1)
 // 4 Buttons
-        USAGE_PAGE(1), 0x09,            // Buttons
-        USAGE_MINIMUM(1), 0x01,         // 1
-        USAGE_MAXIMUM(1), 0x04,         // 4
-        LOGICAL_MINIMUM(1), 0x00,       // 0
-        LOGICAL_MAXIMUM(1), 0x01,       // 1
-        REPORT_SIZE(1), 0x01,
-        REPORT_COUNT(1), 0x04,
-        UNIT_EXPONENT(1), 0x00,         // Unit_Exponent (0)
-        UNIT(1), 0x00,                  // Unit (None)
-        INPUT(1), 0x02,                 // Data, Variable, Absolute
-
+            USAGE_MINIMUM(1), 0x01,            // 1
+            USAGE_MAXIMUM(1), 0x04,            // 4
+            LOGICAL_MINIMUM(1), 0x00,          // 0
+            LOGICAL_MAXIMUM(1), 0x01,          // 1
+            REPORT_SIZE(1), 0x01,
+            REPORT_COUNT(1), 0x04,
+            //UNIT_EXPONENT(1), 0x00,       // Unit_Exponent (0)
+            UNIT(1), 0x00,                  // Unit (None)
+            INPUT(1), 0x02,                 // Data, Variable, Absolute
 // Padding 4 bits
-        REPORT_SIZE(1), 0x01,
-        REPORT_COUNT(1), 0x04,
-        INPUT(1), 0x01,                 // Constant
-
+            REPORT_SIZE(1), 0x01,
+            REPORT_COUNT(1), 0x04,
+            INPUT(1), 0x01,                 // Constant
 #endif
 #if (BUTTONS8 == 1)
 // 8 Buttons
-        USAGE_PAGE(1), 0x09,            // Buttons
-        USAGE_MINIMUM(1), 0x01,         // 1
-        USAGE_MAXIMUM(1), 0x08,         // 8
-        LOGICAL_MINIMUM(1), 0x00,       // 0
-        LOGICAL_MAXIMUM(1), 0x01,       // 1
-        REPORT_SIZE(1), 0x01,
-        REPORT_COUNT(1), 0x08,
-        UNIT_EXPONENT(1), 0x00,         // Unit_Exponent (0)
-        UNIT(1), 0x00,                  // Unit (None)
-        INPUT(1), 0x02,                 // Data, Variable, Absolute
+            USAGE_MINIMUM(1), 0x01,         // 1
+            USAGE_MAXIMUM(1), 0x08,         // 8
+            LOGICAL_MINIMUM(1), 0x00,       // 0
+            LOGICAL_MAXIMUM(1), 0x01,       // 1
+            REPORT_SIZE(1), 0x01,
+            REPORT_COUNT(1), 0x08,
+            //UNIT_EXPONENT(1), 0x00,       // Unit_Exponent (0)
+            UNIT(1), 0x00,                  // Unit (None)
+            INPUT(1), 0x02,                 // Data, Variable, Absolute
 #endif
 #if (BUTTONS32 == 1)
 // 32 Buttons
-        USAGE_PAGE(1), 0x09,            // Buttons
-        USAGE_MINIMUM(1), 0x01,         // 1
-        USAGE_MAXIMUM(1), 0x20,         // 32
-        LOGICAL_MINIMUM(1), 0x00,       // 0
-        LOGICAL_MAXIMUM(1), 0x01,       // 1
-        REPORT_SIZE(1), 0x01,
-        REPORT_COUNT(1), 0x20,
-        UNIT_EXPONENT(1), 0x00,         // Unit_Exponent (0)
-        UNIT(1), 0x00,                  // Unit (None)
-        INPUT(1), 0x02,                 // Data, Variable, Absolute
+            USAGE_MINIMUM(1), 0x01,         // 1
+            USAGE_MAXIMUM(1), 0x20,         // 32
+            LOGICAL_MINIMUM(1), 0x00,       // 0
+            LOGICAL_MAXIMUM(1), 0x01,       // 1
+            REPORT_SIZE(1), 0x01,
+            REPORT_COUNT(1), 0x20,
+            //UNIT_EXPONENT(1), 0x00,       // Unit_Exponent (0)
+            UNIT(1), 0x00,                  // Unit (None)
+            INPUT(1), 0x02,                 // Data, Variable, Absolute
 #endif
 
         END_COLLECTION(0)
@@ -305,3 +267,4 @@
     reportLength = sizeof(reportDescriptor);
     return reportDescriptor;
 }
+