]> git.mxchange.org Git - flightgear.git/commitdiff
Completely rewritten to use Steve Baker's joystick interface class.
authorcurt <curt>
Sun, 25 Oct 1998 10:56:25 +0000 (10:56 +0000)
committercurt <curt>
Sun, 25 Oct 1998 10:56:25 +0000 (10:56 +0000)
Joystick/joystick.cxx
Joystick/joystick.hxx

index 7e2cc2f73dea902a59e2982326d97cb2c0a175f2..0cba4f6e5e41223c8834af3768097f005881e27f 100644 (file)
-/**************************************************************************
- * joystick.h -- joystick support
- *
- * Written by Michele America, started September 1997.
- *
- * Copyright (C) 1997  Michele F. America  - nomimarketing@mail.telepac.pt
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * 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.
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-#ifdef HAVE_JOYSTICK
-
-#include <linux/joystick.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#endif
-
+// joystick.cxx -- joystick support
+//
+// Written by Curtis Olson, started October 1998.
+//
+// Copyright (C) 1998  Curtis L. Olson - curt@me.umn.edu
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// 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.
+//
+// $Id$
+// (Log is kept at end of this file)
+
+
+#include <Aircraft/aircraft.hxx>
 #include <Debug/fg_debug.h>
+#include <Joystick/js.hxx>
 
-static joy_x_min=0, joy_x_ctr=0, joy_x_max=0;
-static joy_y_min=0, joy_y_ctr=0, joy_y_max=0;
-static joy_x_dead_min=1000, joy_x_dead_max=-1000;
-static joy_y_dead_min=1000, joy_y_dead_max=-1000;
+#include "joystick.hxx"
 
 
-static int joystick_fd;
+// joystick classes
+static jsJoystick *js0;
+static jsJoystick *js1;
 
-int fgJoystickInit( int joy_num ) {
+// these will hold the values of the axes
+static float *js_ax0, *js_ax1;
 
-    fgPrintf( FG_INPUT, FG_INFO, "Initializing joystick\n");
-
-#ifdef HAVE_JOYSTICK
-       int status;
-       char *fname;
-       struct JS_DATA_TYPE js;
-       int button;
 
-       /* argument should be 0 or 1 */
-       if( joy_num != 1 && joy_num != 0 ) {
-               perror( "js" );
-               return( 1 );
-       }
+// Initialize the joystick(s)
+int fgJoystickInit( void ) {
 
-       /* pick appropriate device file */
-       if (joy_num == 0)
-               fname = "/dev/js0";
-       if (joy_num == 1)
-               fname = "/dev/js1";
+    fgPrintf( FG_INPUT, FG_INFO, "Initializing joystick\n");
 
-       /* open device file */
-       joystick_fd = open(fname, O_RDONLY);
-       if (joystick_fd < 0) {
-               perror ("js");
-               return( 1 );
-       }
-       
-       fgPrintf( FG_INPUT,FG_ALERT,
-                 "\nMove joystick around dead spot and press any joystick button.\n" );
-       status = read(joystick_fd, &js, JS_RETURN);
-       if (status != JS_RETURN) {
-               perror("js");
-               return( 1 );
-       }
-       button = js.buttons & 1 || js.buttons & 2;
-       while(button == 0 ) {
-               status = read(joystick_fd, &js, JS_RETURN);
-               if (status != JS_RETURN) {
-                       perror("js");
-                       return( 1 );
-               }
-               button = js.buttons & 1 || js.buttons & 2;
-               if( js.x > joy_x_dead_max )
-                       joy_x_dead_max = js.x;
-               if( js.x < joy_x_dead_min )
-                       joy_x_dead_min = js.x;
-               if( js.y > joy_y_dead_max )
-                       joy_y_dead_max = js.y;
-               if( js.y < joy_y_dead_min )
-                       joy_y_dead_min = js.y;
-               
-               /* printf( "Xmin %d Xmax %d Ymin %d Ymax %d", 
-                          joy_x_dead_min, joy_x_dead_max,
-                          joy_y_dead_min, joy_y_dead_max ); */
-       }
-       status = read(joystick_fd, &js, JS_RETURN);
-       if (status != JS_RETURN) {
-               perror("js");
-               return( 1 );
-       }
-       
-       fgPrintf( FG_INPUT, FG_DEBUG, 
-                 "\nJoystick calibration: X_dead_min = %d, X_dead_max = %d\n", 
-                 joy_x_dead_min, joy_x_dead_max );
-       fgPrintf( FG_INPUT, FG_DEBUG,
-                 "                      Y_dead_min = %d, Y_dead_max = %d\n", 
-                 joy_y_dead_min, joy_y_dead_max );
-       
-       sleep( 1 );
-       
-       fgPrintf( FG_INPUT, FG_DEBUG,
-                 "\nCenter joystick and press any joystick button.\n" );
-       status = read(joystick_fd, &js, JS_RETURN);
-       if (status != JS_RETURN) {
-               perror("js");
-               return( 1 );
-       }
-       button = js.buttons & 1 || js.buttons & 2;
-       while(button == 0 ) {
-               status = read(joystick_fd, &js, JS_RETURN);
-               if (status != JS_RETURN) {
-                       perror("js");
-                       return( 1 );
-               }
-               button = js.buttons & 1 || js.buttons & 2;
-       }
-       status = read(joystick_fd, &js, JS_RETURN);
-       if (status != JS_RETURN) {
-               perror("js");
-               return( 1 );
-       }
-       joy_x_ctr = js.x;
-       joy_y_ctr = js.y;
-       
-       fgPrintf( FG_INPUT, FG_DEBUG,
-                 "Joystick calibration: X_ctr = %d, Y_ctr = %d\n", 
-                 joy_x_ctr, joy_y_ctr );
-       
-       sleep( 1 );
-       
-       fgPrintf( FG_INPUT, FG_DEBUG,
-                 "\nMove joystick to upper left and press any joystick button.\n" );
-       status = read(joystick_fd, &js, JS_RETURN);
-       if (status != JS_RETURN) {
-               perror("js");
-               return( 1 );
-       }
-       button = js.buttons & 1 || js.buttons & 2;
-       while(button == 0 ) {
-               status = read(joystick_fd, &js, JS_RETURN);
-               if (status != JS_RETURN) {
-                       perror("js");
-                       return( 1 );
-               }
-               button = js.buttons & 1 || js.buttons & 2;
-       }
-       status = read(joystick_fd, &js, JS_RETURN);
-       if (status != JS_RETURN) {
-               perror("js");
-               return( 1 );
-       }
-       joy_x_min = js.x;
-       joy_y_min = js.y;
-               fgPrintf( FG_INPUT, FG_DEBUG,
-                 "Joystick calibration: X_min = %d, Y_min = %d\n", 
-                 joy_x_min, joy_y_min );
-       
-       sleep( 1 );
-       
-       fgPrintf( FG_INPUT, FG_DEBUG,
-                 "\nMove joystick to lower right and press any joystick button.\n" );
-       status = read(joystick_fd, &js, JS_RETURN);
-       if (status != JS_RETURN) {
-               perror("js");
-               return( 1 );
-       }
-       button = js.buttons & 1 || js.buttons & 2;
-       while(button == 0 ) {
-               status = read(joystick_fd, &js, JS_RETURN);
-               if (status != JS_RETURN) {
-                       perror("js");
-                       return( 1 );
-               }
-               button = js.buttons & 1 || js.buttons & 2;
-       }
-       status = read(joystick_fd, &js, JS_RETURN);
-       if (status != JS_RETURN) {
-               perror("js");
-               return( 1 );
-       }
-       joy_x_max = js.x;
-       joy_y_max = js.y;
-       
-       fgPrintf( FG_INPUT, FG_DEBUG,
-                 "Joystick calibration: X_max = %d, Y_max = %d\n", 
-                 joy_x_max, joy_y_max );
-       
-       // joy_x_ctr = (joy_x_max-joy_x_min)/2;
-       // joy_y_ctr = (joy_y_max-joy_y_min)/2;
-       // printf("Joystick calibration: X_ctr = %d, Y_ctr = %d\n", joy_x_ctr, joy_y_ctr );
-       
-       return( joystick_fd );
-#else
-       return( 1 );
-#endif
+    js0 = new jsJoystick ( 0 );
+    js1 = new jsJoystick ( 1 );
+
+    if ( js0->notWorking () ) {
+       // not working
+    } else {
+       // allocate storage for axes values
+       js_ax0 = new float [ js0->getNumAxes() ];
+
+       // configure
+       js0->setDeadBand( 0, 0.1 );
+       js0->setDeadBand( 1, 0.1 );
+
+       fgPrintf ( FG_INPUT, FG_INFO, 
+                  "  Joystick 0 detected with %d axes\n",
+                  js0->getNumAxes() );
+    }
+
+    if ( js1->notWorking () ) {
+       // not working
+    } else {
+       // allocate storage for axes values
+       js_ax1 = new float [ js1->getNumAxes() ];
+
+       // configure
+       js1->setDeadBand( 0, 0.1 );
+       js1->setDeadBand( 1, 0.1 );
+
+       fgPrintf ( FG_INPUT, FG_INFO,
+                  "  Joystick 1 detected with %d axes\n",
+                  js1->getNumAxes() );
+    }
+
+    if ( js0->notWorking() && js1->notWorking() ) {
+       fgPrintf ( FG_INPUT, FG_INFO, "  No joysticks detected\n" );
+       return 0;
+    }
+
+    return 1;
 }
 
-/* void fgJoystickCalibrate( int joy_fd )
-{
 
-} */
+// update the control parameters based on joystick intput
+int fgJoystickRead( void ) {
+    fgCONTROLS *c;
+    int b;
 
-int fgJoystickRead( double *joy_x, double *joy_y, int *joy_b1, int *joy_b2 )
-{
-#ifdef HAVE_JOYSTICK
-       struct JS_DATA_TYPE js;
-       int status;
-       
-       status = read(joystick_fd, &js, JS_RETURN);
-       if (status != JS_RETURN) {
-               perror("js");
-               return( 1 );
-       }
+    c = current_aircraft.controls;
 
-       /* printf("\n button 0: %s  button 1: %s  X position: %4d  Y position: %4d\n",
-                (js.buttons & 1) ? "on " : "off",
-                (js.buttons & 2) ? "on " : "off",
-                js.x,
-                js.y ); */
-                
-       if( js.x >= joy_x_dead_min && js.x <= joy_x_dead_max )
-               *joy_x = 0.5;
-       else
-               *joy_x = (double)js.x/(double)(joy_x_max-joy_x_min);
-       *joy_x = *joy_x*2-1;
-       
-       if( js.y >= joy_y_dead_min && js.y <= joy_y_dead_max )
-               *joy_y = 0.5;
-       else
-               *joy_y = (double)js.y/(double)(joy_y_max-joy_y_min);
-       *joy_y = *joy_y*2-1;
-       
-       *joy_b1 = js.buttons & 1;
-       *joy_b2 = js.buttons & 2;
+    if ( ! js0->notWorking() ) {
+       js0->read( &b, js_ax0 ) ;
+       fgAileronSet( js_ax0[0] );
+       fgElevSet( -js_ax0[1] );
+    }
 
-#endif
-       return( 0 );
+    if ( ! js1->notWorking() ) {
+       js1->read( &b, js_ax1 ) ;
+       fgRudderSet( js_ax1[0] );
+       fgThrottleSet(FG_Throttle_All, -js_ax1[1] * 1.05 );
+    }
+
+    return 1;
 }
 
 
-/* $Log$
-/* Revision 1.1  1998/10/24 22:28:16  curt
-/* Renamed joystick.[ch] to joystick.[ch]xx
-/* Added js.hxx which is Steve's joystick interface class.
-/*
- * Revision 1.7  1998/04/25 22:06:29  curt
- * Edited cvs log messages in source files ... bad bad bad!
- *
- * Revision 1.6  1998/04/18 04:14:05  curt
- * Moved fg_debug.c to it's own library.
- *
- * Revision 1.5  1998/02/12 21:59:44  curt
- * Incorporated code changes contributed by Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.4  1998/02/03 23:20:20  curt
- * Lots of little tweaks to fix various consistency problems discovered by
- * Solaris' CC.  Fixed a bug in fg_debug.c with how the fgPrintf() wrapper
- * passed arguments along to the real printf().  Also incorporated HUD changes
- * by Michele America.
- *
- * Revision 1.3  1998/01/27 00:47:54  curt
- * Incorporated Paul Bleisch's <pbleisch@acm.org> new debug message
- * system and commandline/config file processing code.
- *
- * Revision 1.2  1997/12/30 20:47:40  curt
- * Integrated new event manager with subsystem initializations.
- *
- * Revision 1.1  1997/08/29 18:06:54  curt
- * Initial revision.
- *
- */
+// $Log$
+// Revision 1.2  1998/10/25 10:56:25  curt
+// Completely rewritten to use Steve Baker's joystick interface class.
+//
+// Revision 1.1  1998/10/24 22:28:16  curt
+// Renamed joystick.[ch] to joystick.[ch]xx
+// Added js.hxx which is Steve's joystick interface class.
+//
+// Revision 1.7  1998/04/25 22:06:29  curt
+// Edited cvs log messages in source files ... bad bad bad!
+//
+// Revision 1.6  1998/04/18 04:14:05  curt
+// Moved fg_debug.c to it's own library.
+//
+// Revision 1.5  1998/02/12 21:59:44  curt
+// Incorporated code changes contributed by Charlie Hotchkiss
+// <chotchkiss@namg.us.anritsu.com>
+//
+// Revision 1.4  1998/02/03 23:20:20  curt
+// Lots of little tweaks to fix various consistency problems discovered by
+// Solaris' CC.  Fixed a bug in fg_debug.c with how the fgPrintf() wrapper
+// passed arguments along to the real printf().  Also incorporated HUD changes
+// by Michele America.
+//
+// Revision 1.3  1998/01/27 00:47:54  curt
+// Incorporated Paul Bleisch's <pbleisch@acm.org> new debug message
+// system and commandline/config file processing code.
+//
+// Revision 1.2  1997/12/30 20:47:40  curt
+// Integrated new event manager with subsystem initializations.
+//
+// Revision 1.1  1997/08/29 18:06:54  curt
+// Initial revision.
+//
+
index d264283560e37dabdccc703c0346dd284c6dbe75..6a47e0d0935df9a884e3e2ddecdffa3bb09ad21a 100644 (file)
@@ -1,62 +1,61 @@
-/**************************************************************************
- * joystick.h -- joystick support
- *
- * Written by Michele America, started September 1997.
- *
- * Copyright (C) 1997  Michele F. America  - nomimarketing@mail.telepac.pt
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * 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.
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-#ifndef _JOYSTICK_H
-#define _JOYSTICK_H
-
-
-#ifdef __cplusplus                                                          
-extern "C" {                            
-#endif                                   
-
-
-int fgJoystickInit( int joy_num );
-int fgJoystickRead( double *joy_x, double *joy_y, int *joy_b1, int *joy_b2 );
-
-
-#ifdef __cplusplus
-}
+// joystick.cxx -- joystick support
+//
+// Written by Curtis Olson, started October 1998.
+//
+// Copyright (C) 1998  Curtis L. Olson - curt@me.umn.edu
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// 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.
+//
+// $Id$
+// (Log is kept at end of this file)
+
+
+#ifndef _JOYSTICK_HXX
+#define _JOYSTICK_HXX
+
+
+#ifndef __cplusplus
+# error This library requires C++
 #endif
 
 
-#endif /* _JOYSTICK_H */
-
-
-/* $Log$
-/* Revision 1.1  1998/10/24 22:28:18  curt
-/* Renamed joystick.[ch] to joystick.[ch]xx
-/* Added js.hxx which is Steve's joystick interface class.
-/*
- * Revision 1.3  1998/04/22 13:26:21  curt
- * C++ - ifing the code a bit.
- *
- * Revision 1.2  1998/01/22 02:59:36  curt
- * Changed #ifdef FILE_H to #ifdef _FILE_H
- *
- * Revision 1.1  1997/08/29 18:06:55  curt
- * Initial revision.
- *
- */
+// Initialize the joystick(s)
+int fgJoystickInit( void );
+
+// update the control parameters based on joystick intput
+int fgJoystickRead( void );
+
+
+#endif // _JOYSTICK_HXX
+
+
+// $Log$
+// Revision 1.2  1998/10/25 10:56:27  curt
+// Completely rewritten to use Steve Baker's joystick interface class.
+//
+// Revision 1.1  1998/10/24 22:28:18  curt
+// Renamed joystick.[ch] to joystick.[ch]xx
+// Added js.hxx which is Steve's joystick interface class.
+//
+// Revision 1.3  1998/04/22 13:26:21  curt
+// C++ - ifing the code a bit.
+//
+// Revision 1.2  1998/01/22 02:59:36  curt
+// Changed #ifdef FILE_H to #ifdef _FILE_H
+//
+// Revision 1.1  1997/08/29 18:06:55  curt
+// Initial revision.
+//
+