diff --git a/src/Network/Makefile.am b/src/Network/Makefile.am index 6e923d261..63a1dc0b4 100644 --- a/src/Network/Makefile.am +++ b/src/Network/Makefile.am @@ -10,6 +10,7 @@ libNetwork_a_SOURCES = \ garmin.cxx garmin.hxx \ nmea.cxx nmea.hxx \ pve.cxx pve.hxx \ - rul.cxx rul.hxx + rul.cxx rul.hxx \ + joyclient.cxx joyclient.hxx INCLUDES += -I$(top_builddir) -I$(top_builddir)/src diff --git a/src/Network/fg_socket.cxx b/src/Network/fg_socket.cxx index 2252f0314..031538751 100644 --- a/src/Network/fg_socket.cxx +++ b/src/Network/fg_socket.cxx @@ -106,6 +106,8 @@ int FGSocket::make_client_socket () { struct sockaddr_in name; struct hostent *hp; + FG_LOG( FG_IO, FG_INFO, "Make client socket()" ); + // Create the socket. sock = socket (PF_INET, SOCK_STREAM, 0); if (sock < 0) { diff --git a/src/Network/joyclient.cxx b/src/Network/joyclient.cxx new file mode 100644 index 000000000..f399ce589 --- /dev/null +++ b/src/Network/joyclient.cxx @@ -0,0 +1,103 @@ +// joyclient.cxx -- Agwagon joystick client class +// +// Written by Curtis Olson, started April 2000. +// +// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org +// +// 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$ + + +#include + +#include + +#include "iochannel.hxx" +#include "joyclient.hxx" + + +FGJoyClient::FGJoyClient() { +} + +FGJoyClient::~FGJoyClient() { +} + + +// open hailing frequencies +bool FGJoyClient::open() { + if ( is_enabled() ) { + FG_LOG( FG_IO, FG_ALERT, "This shouldn't happen, but the channel " + << "is already in use, ignoring" ); + return false; + } + + FGIOChannel *io = get_io_channel(); + + if ( ! io->open( get_direction() ) ) { + FG_LOG( FG_IO, FG_ALERT, "Error opening channel communication layer." ); + return false; + } + + set_enabled( true ); + + return true; +} + + +// process work for this port +bool FGJoyClient::process() { + FGIOChannel *io = get_io_channel(); + int length = sizeof(int[2]); + + if ( get_direction() == out ) { + FG_LOG( FG_IO, FG_ALERT, "joyclient protocol is read only" ); + return false; + } else if ( get_direction() == in ) { + FG_LOG( FG_IO, FG_DEBUG, "Searching for data." ); + while ( io->read( (char *)(& buf), length ) == length ) { + FG_LOG( FG_IO, FG_DEBUG, "Success reading data." ); + int *msg; + msg = (int *)buf; + FG_LOG( FG_IO, FG_INFO, "X = " << msg[0] << " Y = " << msg[1] ); + double aileron = ((double)msg[0] / 2048.0) - 1.0; + double elevator = ((double)msg[1] / 2048.0) - 1.0; + if ( fabs(aileron) < 0.05 ) { + aileron = 0.0; + } + if ( fabs(elevator) < 0.05 ) { + elevator = 0.0; + } + controls.set_aileron( aileron ); + controls.set_elevator( -elevator ); + } + } + + return true; +} + + +// close the channel +bool FGJoyClient::close() { + FGIOChannel *io = get_io_channel(); + + set_enabled( false ); + + if ( ! io->close() ) { + return false; + } + + return true; +} diff --git a/src/Network/joyclient.hxx b/src/Network/joyclient.hxx new file mode 100644 index 000000000..22c6f9e3e --- /dev/null +++ b/src/Network/joyclient.hxx @@ -0,0 +1,60 @@ +// joyclient.hxx -- Agwagon joystick client protocal class +// +// Written by Curtis Olson, started April 2000. +// +// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org +// +// 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$ + + +#ifndef _FG_JOYCLIENT_HXX +#define _FG_JOYCLIENT_HXX + + +#include + +#include STL_STRING + +#include + +#include "protocol.hxx" + +FG_USING_STD(string); + + +class FGJoyClient : public FGProtocol { + + char buf[256]; + int length; + +public: + + FGJoyClient(); + ~FGJoyClient(); + + // open hailing frequencies + bool open(); + + // process work for this port + bool process(); + + // close the channel + bool close(); +}; + + +#endif // _FG_JOYCLIENT_HXX