USB device stack

Fork of USBDevice by mbed official

Revision:
65:e64cf9f9c595
Parent:
64:e01add7a9b25
diff -r e01add7a9b25 -r e64cf9f9c595 USBJoystick.cpp
--- a/USBJoystick.cpp	Wed Sep 07 23:26:23 2016 +0000
+++ b/USBJoystick.cpp	Fri Sep 16 01:03:45 2016 +0000
@@ -20,24 +20,24 @@
 #include "stdint.h"
 #include "USBJoystick.h"
 
-bool USBJoystick::update(int16_t t, int16_t r, int16_t x, int16_t y, uint16_t button, uint8_t hat) {
+bool USBJoystick::update(int16_t x, int16_t y, int16_t z, int16_t rx, uint16_t ry, uint16_t rz, uint8_t button) {
              HID_REPORT report;
-   _t = t;
-   _r = r;   
-   _x = x;
+   _x = x;  
    _y = y;
+   _z = z;
+   _rx = rx;
+   _ry = ry;
+   _rz = rz;
    _button = button;     
-   _hat = hat;
 
    // Fill the report according to the Joystick Descriptor
-   report.data[0] = _t & 0xff;            
-   report.data[1] = _r & 0xff;               
-   report.data[2] = _x & 0xff;            
-   report.data[3] = _y & 0xff;            
-   report.data[4] = ((_button & 0x0f) << 4) | (_hat & 0x0f) ;
-   report.data[5] = (_button >> 4);
-   //report.data[6] = 0;
-   report.data[6] = ( _button >> 0x0C) & 0x01;                                      
+   report.data[0] = _x & 0xff;            
+   report.data[1] = _y & 0xff;               
+   report.data[2] = _z & 0xff;            
+   report.data[3] = _rx & 0xff;  
+   report.data[4] = _ry & 0xff;     
+   report.data[5] = _rz & 0xff;       
+   report.data[6] = _button & 0xff;                                 
    report.length = 7; 
            
    return send(&report);
@@ -47,25 +47,25 @@
    HID_REPORT report;
 
    // Fill the report according to the Joystick Descriptor
-   report.data[0] = _t & 0xff;            
-   report.data[1] = _r & 0xff;               
-   report.data[2] = _x & 0xff;            
-   report.data[3] = _y & 0xff;            
-   report.data[4] = ((_button & 0x0f) << 4) | (_hat & 0x0f) ;                                      
-   report.data[5] = ( _button >> 4);
-   report.data[6] = ( _button >> 0x0C) & 0x01;                                      
+   report.data[0] = _x & 0xff;            
+   report.data[1] = _y & 0xff;               
+   report.data[2] = _z & 0xff;            
+   report.data[3] = _rx & 0xff;  
+   report.data[4] = _ry & 0xff;     
+   report.data[5] = _rz & 0xff;       
+   report.data[6] = _button & 0xff;                                 
    report.length = 7; 
    
    return send(&report);
 }
 
 bool USBJoystick::throttle(int16_t t) {
-     _t = t;
+
      return update();
 }
 
 bool USBJoystick::rudder(int16_t r) {
-     _r = r;
+
      return update();
 }
 
@@ -80,20 +80,18 @@
      return update();
 }
 
-bool USBJoystick::hat(uint8_t hat) {
-     _hat = hat;
-     return update();
-}
-
 
 void USBJoystick::_init() {
 
-   _t = -127;
-   _r = -127;    
    _x = 0;                       
-   _y = 0;     
+   _y = 0;    
+   _z = 0; 
+   _rx = 0;                       
+   _ry = 0;    
+   _rz = 0;   
+
    _button = 0x00;
-   _hat = 0x00;              
+         
 }
 
 
@@ -104,71 +102,45 @@
              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               
+            // Data, Variable, Absolute               
                USAGE_PAGE(1), 0x01,            // Generic Desktop
                USAGE(1), 0x01,                 // Usage (Pointer)
                COLLECTION(1), 0x00,            // Physical
+////  3 Translations and 3 Rotations
                  USAGE(1), 0x30,                 // X
                  USAGE(1), 0x31,                 // Y
-                 USAGE(1), 0x32,                 //R
-                 USAGE(1), 0x35,                 //Rz?
-//  8 bit values
+                 USAGE(1), 0x32,                 // Z
+                 USAGE(1), 0x33,                 //Rx
+                 USAGE(1), 0x34,                 //Ry
+                 USAGE(1), 0x35,                 //Rz
+                 
+////  8 bit values
                  LOGICAL_MINIMUM(1), 0x81,       // -127
                  LOGICAL_MAXIMUM(1), 0x7f,       // 127
                  REPORT_SIZE(1), 0x08,
-                 REPORT_COUNT(1), 0x04,
+                 REPORT_COUNT(1), 0x06,
                  INPUT(1), 0x02,                 // Data, Variable, Absolute                  
 // 16 bit values
 //                 LOGICAL_MINIMUM(1), 0x00,       // 0
 //                 LOGICAL_MAXIMUM(2), 0xff, 0x7f, // 32767
 //                 REPORT_SIZE(1), 0x10,
-//                 REPORT_COUNT(1), 0x02,
+//                 REPORT_COUNT(1), 0x06,
 //                 INPUT(1), 0x02,                 // Data, Variable, Absolute                
 
                END_COLLECTION(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)                            
-//               REPORT_SIZE(1), 0x04,
-//               REPORT_COUNT(1), 0x01,
-//               INPUT(1), 0x02,                 // Data, Variable, Absolute               
-// 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,
-               REPORT_COUNT(1), 0x01,
-               INPUT(1), 0x02,                 // Data, Variable, Absolute               
-//
+            
+// 8 Buttons
                USAGE_PAGE(1), 0x09,            // Buttons
                USAGE_MINIMUM(1), 0x01,         // 1
-               USAGE_MAXIMUM(1), 0x0D,         // 13
+               USAGE_MAXIMUM(1), 0x08,         // 8
                LOGICAL_MINIMUM(1), 0x00,       // 0
                LOGICAL_MAXIMUM(1), 0x01,       // 1
                REPORT_SIZE(1), 0x01,
-               REPORT_COUNT(1), 0x0D,
+               REPORT_COUNT(1), 0x08,
                UNIT_EXPONENT(1), 0x00,         // Unit_Exponent (0)
                UNIT(1), 0x00,                  // Unit (None)                                           
                INPUT(1), 0x02,                 // Data, Variable, Absolute
                
-               // Padding 7 bits
-               REPORT_SIZE(1), 0x01,
-               REPORT_COUNT(1), 0x07,
-               INPUT(1), 0x01,  
              END_COLLECTION(0)
 
         };