]> git.mxchange.org Git - flightgear.git/commitdiff
Initial revision.
authorcurt <curt>
Wed, 19 Apr 2000 21:20:44 +0000 (21:20 +0000)
committercurt <curt>
Wed, 19 Apr 2000 21:20:44 +0000 (21:20 +0000)
src/Network/Makefile.am
src/Network/fg_socket.cxx
src/Network/joyclient.cxx [new file with mode: 0644]
src/Network/joyclient.hxx [new file with mode: 0644]

index 6e923d261ff6c8cab5d7e739bdaad39e63bfa686..63a1dc0b4c7394306b05b32c3ffed44aa93f9337 100644 (file)
@@ -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
index 2252f031469be0d390a362d037ccb1c53b71055b..031538751e9c4dfe6d8f31905b002317611704a5 100644 (file)
@@ -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 (file)
index 0000000..f399ce5
--- /dev/null
@@ -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 <simgear/debug/logstream.hxx>
+
+#include <Aircraft/aircraft.hxx>
+
+#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 (file)
index 0000000..22c6f9e
--- /dev/null
@@ -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 <simgear/compiler.h>
+
+#include STL_STRING
+
+#include <FDM/flight.hxx>
+
+#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