]> git.mxchange.org Git - flightgear.git/blobdiff - src/Input/jsinput.cxx
Merge branch 'next' into durk-atc
[flightgear.git] / src / Input / jsinput.cxx
index c7ea809e83d22664ae736b1f1d43ff8747693001..b57f828d2bb99d1a41c1062684b42631f79ba645 100644 (file)
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
-#include <jsinput.h>
+#include <simgear/compiler.h>
+
+#include <iostream>
+
+using std::cout;
+using std::cin;
+using std::endl;
+
+#include "jsinput.h"
 
 jsInput::jsInput(jsSuper *j) {
-  jss=j;
-  pretty_display=true;
-  joystick=axis=button=-1;
-  axis_threshold=0.2;
+    jss=j;
+    pretty_display=true;
+    joystick=axis=button=-1;
+    axis_threshold=0.2;
 }
 
 jsInput::~jsInput(void) {}
 
-int jsInput::getInput(void){
-      
-      bool gotit=false;
-      
-      float delta;
-      int i, current_button = 0, button_bits = 0;
+int jsInput::getInput({
+
+    bool gotit=false;
+
+    float delta;
+    int i, current_button = 0, button_bits = 0;
 
-      joystick=axis=button=-1;
-      
-      if(pretty_display) {
-          printf ( "+----------------------------------------------\n" ) ;
-          printf ( "| Btns " ) ;
+    joystick=axis=button=-1;
+    axis_positive=false;
 
-          for ( i = 0 ; i < jss->getJoystick()->getNumAxes() ; i++ )
-            printf ( "Ax:%1d ", i ) ;
+    if(pretty_display) {
+        printf ( "+----------------------------------------------\n" ) ;
+        printf ( "| Btns " ) ;
 
-          for ( ; i < 8 ; i++ )
+        for ( i = 0 ; i < jss->getJoystick()->getNumAxes() ; i++ )
+            printf ( "Ax:%3d ", i ) ;
+
+        for ( ; i < 8 ; i++ )
             printf ( "     " ) ;
 
-          printf ( "|\n" ) ;
+        printf ( "|\n" ) ;
+
+        printf ( "+----------------------------------------------\n" ) ;
+    }
 
-          printf ( "+----------------------------------------------\n" ) ;
-      }
-      
 
-      jss->firstJoystick();
-      do {
+    jss->firstJoystick();
+    do {
         jss->getJoystick()->read ( &button_iv[jss->getCurrentJoystickId()],
-                                       axes_iv[jss->getCurrentJoystickId()] ) ;
-      } while( jss->nextJoystick() );  
-      
-      
-      
-      while(!gotit) {
+                axes_iv[jss->getCurrentJoystickId()] ) ;
+    } while( jss->nextJoystick() );
+
+
+
+    while(!gotit) {
         jss->firstJoystick();
         do {
 
-          jss->getJoystick()->read ( &current_button, axes ) ;
-
-          if(pretty_display) printf ( "| %04x ", current_button ) ;
-
-               for ( i = 0 ; i < jss->getJoystick()->getNumAxes(); i++ ) {
-
-            delta = axes[i] - axes_iv[jss->getCurrentJoystickId()][i]; 
-            if(pretty_display) printf ( "%+.1f ", delta ) ; 
-            if(!gotit) {
-              if( fabs(delta) > axis_threshold ) {
-                gotit=true;
-                joystick=jss->getCurrentJoystickId();
-                axis=i;
-              } else if( current_button != 0 ) {
-                gotit=true;
-                joystick=jss->getCurrentJoystickId();  
-                button_bits=current_button;
-              } 
-            }            
-          }
-               
-          if(pretty_display) {
-            for ( ; i < 8 ; i++ )
-                   printf ( "  .  " ) ;
-          }
-
-
-        } while( jss->nextJoystick() && !gotit); 
+            jss->getJoystick()->read ( &current_button, axes ) ;
+
+            if(pretty_display) printf ( "| %04x ", current_button ) ;
+
+            for ( i = 0 ; i < jss->getJoystick()->getNumAxes(); i++ ) {
+
+                delta = axes[i] - axes_iv[jss->getCurrentJoystickId()][i];
+                if(pretty_display) printf ( "%+.3f ", delta ) ;
+                if(!gotit) {
+                    if( fabs(delta) > axis_threshold ) {
+                        gotit=true;
+                        joystick=jss->getCurrentJoystickId();
+                        axis=i;
+                        axis_positive=(delta>0);
+                    } else if( current_button != 0 ) {
+                        gotit=true;
+                        joystick=jss->getCurrentJoystickId();
+                        button_bits=current_button;
+                    }
+                }
+            }
+
+            if(pretty_display) {
+                for ( ; i < 8 ; i++ )
+                    printf ( "  .  " ) ;
+            }
+
+
+        } while( jss->nextJoystick() && !gotit);
         if(pretty_display) {
-          printf ( "|\r" ) ;
-          fflush ( stdout ) ;
+            printf ( "|\r" ) ;
+            fflush ( stdout ) ;
         }
 
         ulMilliSecondSleep(1);
-      }
-#if 0
-      if(button_bits != 0) {
-        for(int i=1;i<=31;i++) {
-          if( ( button_bits & (1 << i) ) > 0 ) {
-             button=i;
-             break;
-          } 
-        }    
-      } 
-#else
-      button = button_bits;
-#endif
-
-      return 0;
+    }
+    if(button_bits != 0) {
+        for(int i=0;i<=31;i++) {
+            if( ( button_bits & (1 << i) ) > 0 ) {
+                button=i;
+                break;
+            }
+        }
+    }
+
+    return 0;
+}
+
+void jsInput::findDeadBand() {
+
+    float delta;
+    int i;
+    float dead_band[MAX_JOYSTICKS][_JS_MAX_AXES];
+
+    jss->firstJoystick();
+    do {
+        jss->getJoystick()->read ( NULL,
+                axes_iv[jss->getCurrentJoystickId()] ) ;
+        for ( i = 0; i <  jss->getJoystick()->getNumAxes(); i++ ) {
+            dead_band[jss->getCurrentJoystickId()][i] = 0;
+        }
+    } while( jss->nextJoystick() );
+
+    ulClock clock;
+    cout << 10;
+    cout.flush();
+
+    for (int j = 9; j >= 0; j--) {
+        double start_time = clock.getAbsTime();
+        do {
+            jss->firstJoystick();
+            do {
+
+                jss->getJoystick()->read ( NULL, axes ) ;
+
+                for ( i = 0 ; i < jss->getJoystick()->getNumAxes(); i++ ) {
+
+                    delta = axes[i] - axes_iv[jss->getCurrentJoystickId()][i];
+                    if (fabs(delta) > dead_band[jss->getCurrentJoystickId()][i])
+                        dead_band[jss->getCurrentJoystickId()][i] = delta;
+                }
+
+            } while( jss->nextJoystick());
+
+            ulMilliSecondSleep(1);
+            clock.update();
+        } while (clock.getAbsTime() - start_time < 1.0);
+
+        cout << " - " << j;
+        cout.flush();
+    }
+    cout << endl << endl;
+
+    jss->firstJoystick();
+    do {
+        for ( i = 0; i <  jss->getJoystick()->getNumAxes(); i++ ) {
+            jss->getJoystick()->setDeadBand(i, dead_band[jss->getCurrentJoystickId()][i]);
+            printf("Joystick %i, axis %i: %f\n", jss->getCurrentJoystickId(), i, dead_band[jss->getCurrentJoystickId()][i]);
+        }
+    } while( jss->nextJoystick() );
 }
-