+ // Joystick support using glut -- William Riley -- riley@technologist.com
+
+ // Joystick fixed values for calibration and scaling
+ static int joy_x_min=1000, /* joy_x_ctr=0, */ joy_x_max=-1000;
+ static int joy_y_min=1000, /* joy_y_ctr=0, */ joy_y_max=-1000;
+ static int joy_z_min=1000, /* joy_z_ctr=0, */ joy_z_max=-1000;
+ static int joy_x_dead_min=100, joy_x_dead_max=-100;
+ static int joy_y_dead_min=100, joy_y_dead_max=-100;
+ static int joy_z_dead_min=100, joy_z_dead_max=-100;
+
+#else
+# error port me: no joystick support
+#endif
+
+
+
+#if defined( ENABLE_GLUT_JOYSTICK )
+
+// Function called by glutJoystickFunc(), adjusts read values and
+// passes them to the necessary aircraft control functions
+void joystick(unsigned int buttonMask, int js_x, int js_y, int js_z)
+{
+ double joy_x, joy_y, joy_z;
+ // adjust the values to fgfs's scale and allow a 'dead zone' to
+ // reduce jitter code adapted from joystick.c by Michele
+ // F. America - nomimarketing@mail.telepac.pt
+ if( js_x >= joy_x_dead_min && js_x <= joy_x_dead_max ) {
+ joy_x = 0.0;
+ } else {
+ joy_x = (double)js_x/(double)(joy_x_max-joy_x_min);
+ }
+ if( js_y >= joy_y_dead_min && js_y <= joy_y_dead_max ) {
+ joy_y = 0.0;
+ } else {
+ joy_y = (double)js_y/(double)(joy_y_max-joy_y_min);
+ }
+ if( js_z >= joy_z_dead_min && js_z <= joy_z_dead_max ) {
+ joy_z = 0.0;
+ } else {
+ joy_z = (double)js_z/(double)(joy_z_max-joy_z_min);
+ }
+ // Scale the values up for full range of motion
+ joy_x *= 2.0;
+ joy_y *= 2.0;
+ joy_z = (((joy_z*2.0)+1.0)/2);
+ // Pass the values to the control routines
+ controls.set_elevator( joy_y );
+ controls.set_aileron( -joy_x );
+ controls.set_throttle( fgCONTROLS::FG_ALL_ENGINES, joy_z );
+}
+
+#endif // ENABLE_GLUT_JOYSTICK