Integration of Steve's plib conglomeration.
This commit is contained in:
parent
602ac3e67b
commit
277b7f12d2
6 changed files with 13 additions and 242 deletions
|
@ -6,4 +6,7 @@ noinst_LIBRARIES = libGUI.a
|
||||||
|
|
||||||
libGUI_a_SOURCES = gui.cxx gui.h
|
libGUI_a_SOURCES = gui.cxx gui.h
|
||||||
|
|
||||||
INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib -I$(top_builddir)/Simulator
|
INCLUDES += -I$(top_builddir) \
|
||||||
|
-I$(top_builddir)/Lib \
|
||||||
|
-I$(top_builddir)/Lib/plib/include \
|
||||||
|
-I$(top_builddir)/Simulator
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#ifndef _GUI_H_
|
#ifndef _GUI_H_
|
||||||
#define _GUI_H_
|
#define _GUI_H_
|
||||||
|
|
||||||
#include "PUI/pu.h"
|
#include <pu.h>
|
||||||
|
|
||||||
extern puMenuBar *mainMenuBar;
|
extern puMenuBar *mainMenuBar;
|
||||||
extern puButton *hideMenuButton;
|
extern puButton *hideMenuButton;
|
||||||
|
|
|
@ -10,4 +10,7 @@ noinst_LIBRARIES = libJoystick.a
|
||||||
|
|
||||||
libJoystick_a_SOURCES = joystick.cxx joystick.hxx js.hxx
|
libJoystick_a_SOURCES = joystick.cxx joystick.hxx js.hxx
|
||||||
|
|
||||||
INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib -I$(top_builddir)/Simulator
|
INCLUDES += -I$(top_builddir) \
|
||||||
|
-I$(top_builddir)/Lib \
|
||||||
|
-I$(top_builddir)/Lib/plib/include \
|
||||||
|
-I$(top_builddir)/Simulator
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#include <Debug/logstream.hxx>
|
#include <Debug/logstream.hxx>
|
||||||
|
|
||||||
#if defined( ENABLE_LINUX_JOYSTICK )
|
#if defined( ENABLE_LINUX_JOYSTICK )
|
||||||
# include <Joystick/js.hxx>
|
# include <js.h>
|
||||||
#elif defined( ENABLE_GLUT_JOYSTICK )
|
#elif defined( ENABLE_GLUT_JOYSTICK )
|
||||||
# include <GL/glut.h>
|
# include <GL/glut.h>
|
||||||
# include <XGL/xgl.h>
|
# include <XGL/xgl.h>
|
||||||
|
@ -197,6 +197,9 @@ int fgJoystickRead( void ) {
|
||||||
|
|
||||||
|
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.8 1999/04/03 04:20:33 curt
|
||||||
|
// Integration of Steve's plib conglomeration.
|
||||||
|
//
|
||||||
// Revision 1.7 1999/01/19 17:52:30 curt
|
// Revision 1.7 1999/01/19 17:52:30 curt
|
||||||
// Some joystick tweaks by Norman Vine.
|
// Some joystick tweaks by Norman Vine.
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
|
|
||||||
#include "js.hxx"
|
|
||||||
|
|
||||||
jsJoystick js0 ( 0 ) ;
|
|
||||||
jsJoystick js1 ( 1 ) ;
|
|
||||||
|
|
||||||
int main ()
|
|
||||||
{
|
|
||||||
printf ( "Joystick test program.\n" ) ;
|
|
||||||
printf ( "~~~~~~~~~~~~~~~~~~~~~~\n" ) ;
|
|
||||||
|
|
||||||
if ( js0 . notWorking () ) printf ( "Joystick 0 not detected\n" ) ;
|
|
||||||
if ( js1 . notWorking () ) printf ( "Joystick 1 not detected\n" ) ;
|
|
||||||
if ( js0 . notWorking () && js1 . notWorking () ) exit ( 1 ) ;
|
|
||||||
|
|
||||||
js0 . setDeadBand ( 0, 0.1 ) ;
|
|
||||||
js0 . setDeadBand ( 1, 0.1 ) ;
|
|
||||||
js1 . setDeadBand ( 0, 0.1 ) ;
|
|
||||||
js1 . setDeadBand ( 1, 0.1 ) ;
|
|
||||||
|
|
||||||
float *ax0 = new float [ js0.getNumAxes () ] ;
|
|
||||||
float *ax1 = new float [ js1.getNumAxes () ] ;
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
int b ;
|
|
||||||
|
|
||||||
if ( ! js0 . notWorking () )
|
|
||||||
{
|
|
||||||
js0 . read ( &b, ax0 ) ;
|
|
||||||
|
|
||||||
printf ( "JS0: b0:%s b1:%s X:%1.3f Y:%1.3f ",
|
|
||||||
( b & 1 ) ? "on " : "off", ( b & 2 ) ? "on " : "off", ax0[0], ax0[1] ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! js1 . notWorking () )
|
|
||||||
{
|
|
||||||
js1 . read ( &b, ax1 ) ;
|
|
||||||
|
|
||||||
printf ( "JS1: b0:%s b1:%s X:%1.3f Y:%1.3f ",
|
|
||||||
( b & 1 ) ? "on " : "off", ( b & 2 ) ? "on " : "off", ax1[0], ax1[1] ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf ( "\r" ) ;
|
|
||||||
fflush ( stdout ) ;
|
|
||||||
|
|
||||||
/* give other processes a chance */
|
|
||||||
|
|
||||||
usleep ( 1 ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit ( 0 ) ;
|
|
||||||
}
|
|
||||||
|
|
184
Joystick/js.hxx
184
Joystick/js.hxx
|
@ -1,184 +0,0 @@
|
||||||
#ifndef __INCLUDED_JS_H__
|
|
||||||
#define __INCLUDED_JS_H__ 1
|
|
||||||
|
|
||||||
#ifdef __linux__
|
|
||||||
# include <stdio.h>
|
|
||||||
# include <unistd.h>
|
|
||||||
# include <fcntl.h>
|
|
||||||
# include <linux/joystick.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define JS_TRUE 1
|
|
||||||
#define JS_FALSE 0
|
|
||||||
|
|
||||||
/*
|
|
||||||
This is all set up for the older Linux and BSD drivers
|
|
||||||
which restrict you to two axes.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _JS_MAX_AXES 2
|
|
||||||
|
|
||||||
class jsJoystick
|
|
||||||
{
|
|
||||||
JS_DATA_TYPE js ;
|
|
||||||
char fname [ 128 ] ;
|
|
||||||
int error ;
|
|
||||||
int fd ;
|
|
||||||
|
|
||||||
int num_axes ;
|
|
||||||
|
|
||||||
float dead_band [ _JS_MAX_AXES ] ;
|
|
||||||
float center [ _JS_MAX_AXES ] ;
|
|
||||||
float max [ _JS_MAX_AXES ] ;
|
|
||||||
float min [ _JS_MAX_AXES ] ;
|
|
||||||
|
|
||||||
void open ()
|
|
||||||
{
|
|
||||||
num_axes = _JS_MAX_AXES ;
|
|
||||||
|
|
||||||
fd = ::open ( fname, O_RDONLY ) ;
|
|
||||||
|
|
||||||
error = ( fd < 0 ) ;
|
|
||||||
|
|
||||||
if ( error )
|
|
||||||
return ;
|
|
||||||
|
|
||||||
int counter = 0 ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
The Linux driver seems to return 512 for all axes
|
|
||||||
when no stick is present - but there is a chance
|
|
||||||
that could happen by accident - so it's gotta happen
|
|
||||||
on both axes for at least 100 attempts.
|
|
||||||
*/
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
rawRead ( NULL, center ) ;
|
|
||||||
counter++ ;
|
|
||||||
} while ( counter < 100 && center[0] == 512.0f && center[1] == 512.0f ) ;
|
|
||||||
|
|
||||||
if ( counter >= 100 )
|
|
||||||
error = JS_TRUE ;
|
|
||||||
|
|
||||||
for ( int i = 0 ; i < _JS_MAX_AXES ; i++ )
|
|
||||||
{
|
|
||||||
max [ i ] = center [ i ] * 2.0f ;
|
|
||||||
min [ i ] = 0.0f ;
|
|
||||||
dead_band [ i ] = 0.0f ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void close ()
|
|
||||||
{
|
|
||||||
if ( ! error )
|
|
||||||
::close ( fd ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
float fudge_axis ( float value, int axis )
|
|
||||||
{
|
|
||||||
if ( value < center[axis] )
|
|
||||||
{
|
|
||||||
float xx = ( value - center[ axis ] ) /
|
|
||||||
( center [ axis ] - min [ axis ] ) ;
|
|
||||||
|
|
||||||
xx = ( xx > -dead_band [ axis ] ) ? 0.0f :
|
|
||||||
( ( xx + dead_band [ axis ] ) / ( 1.0f - dead_band [ axis ] ) ) ;
|
|
||||||
|
|
||||||
return ( xx < -1.0f ) ? -1.0f : xx ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
float xx = ( value - center [ axis ] ) /
|
|
||||||
( max [ axis ] - center [ axis ] ) ;
|
|
||||||
|
|
||||||
xx = ( xx < dead_band [ axis ] ) ? 0.0f :
|
|
||||||
( ( xx - dead_band [ axis ] ) / ( 1.0f - dead_band [ axis ] ) ) ;
|
|
||||||
|
|
||||||
return ( xx > 1.0f ) ? 1.0f : xx ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
jsJoystick ( int id = 0 )
|
|
||||||
{
|
|
||||||
sprintf ( fname, "/dev/js%d", id ) ;
|
|
||||||
open () ;
|
|
||||||
}
|
|
||||||
|
|
||||||
~jsJoystick ()
|
|
||||||
{
|
|
||||||
close () ;
|
|
||||||
}
|
|
||||||
|
|
||||||
int getNumAxes () { return num_axes ; }
|
|
||||||
int notWorking () { return error ; }
|
|
||||||
void setError () { error = JS_TRUE ; }
|
|
||||||
|
|
||||||
float getDeadBand ( int axis ) { return dead_band [ axis ] ; }
|
|
||||||
void setDeadBand ( int axis, float db ) { dead_band [ axis ] = db ; }
|
|
||||||
|
|
||||||
void setMinRange ( float *axes ) { memcpy ( min , axes, num_axes * sizeof(float) ) ; }
|
|
||||||
void setMaxRange ( float *axes ) { memcpy ( max , axes, num_axes * sizeof(float) ) ; }
|
|
||||||
void setCenter ( float *axes ) { memcpy ( center, axes, num_axes * sizeof(float) ) ; }
|
|
||||||
|
|
||||||
void getMinRange ( float *axes ) { memcpy ( axes, min , num_axes * sizeof(float) ) ; }
|
|
||||||
void getMaxRange ( float *axes ) { memcpy ( axes, max , num_axes * sizeof(float) ) ; }
|
|
||||||
void getCenter ( float *axes ) { memcpy ( axes, center, num_axes * sizeof(float) ) ; }
|
|
||||||
|
|
||||||
void read ( int *buttons, float *axes )
|
|
||||||
{
|
|
||||||
if ( error )
|
|
||||||
{
|
|
||||||
if ( buttons )
|
|
||||||
*buttons = 0 ;
|
|
||||||
|
|
||||||
if ( axes )
|
|
||||||
for ( int i = 0 ; i < _JS_MAX_AXES ; i++ )
|
|
||||||
axes[i] = 0.0f ;
|
|
||||||
}
|
|
||||||
|
|
||||||
float raw_axes [ _JS_MAX_AXES ] ;
|
|
||||||
|
|
||||||
rawRead ( buttons, raw_axes ) ;
|
|
||||||
|
|
||||||
if ( axes )
|
|
||||||
for ( int i = 0 ; i < _JS_MAX_AXES ; i++ )
|
|
||||||
axes[i] = ( i < num_axes ) ? fudge_axis ( raw_axes[i], i ) : 0.0f ;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rawRead ( int *buttons, float *axes )
|
|
||||||
{
|
|
||||||
if ( error )
|
|
||||||
{
|
|
||||||
if ( buttons ) *buttons = 0 ;
|
|
||||||
if ( axes )
|
|
||||||
for ( int i = 0 ; i < _JS_MAX_AXES ; i++ )
|
|
||||||
axes[i] = 1500.0f ;
|
|
||||||
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
int status = ::read ( fd, &js, JS_RETURN ) ;
|
|
||||||
|
|
||||||
if ( status != JS_RETURN )
|
|
||||||
{
|
|
||||||
perror ( fname ) ;
|
|
||||||
setError () ;
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( buttons )
|
|
||||||
*buttons = js.buttons ;
|
|
||||||
|
|
||||||
if ( axes )
|
|
||||||
{
|
|
||||||
axes[0] = (float) js.x ;
|
|
||||||
axes[1] = (float) js.y ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue