diff --git a/src/Network/Makefile.am b/src/Network/Makefile.am index b5ecbb3ca..f08134a39 100644 --- a/src/Network/Makefile.am +++ b/src/Network/Makefile.am @@ -6,6 +6,7 @@ libNetwork_a_SOURCES = \ fg_serial.cxx fg_serial.hxx \ fg_socket.cxx fg_socket.hxx \ protocol.cxx protocol.hxx \ + native.cxx native.hxx \ garmin.cxx garmin.hxx \ nmea.cxx nmea.hxx \ pve.cxx pve.hxx \ diff --git a/src/Network/native.cxx b/src/Network/native.cxx new file mode 100644 index 000000000..fffabba3f --- /dev/null +++ b/src/Network/native.cxx @@ -0,0 +1,97 @@ +// native.cxx -- FGFS "Native" protocal class +// +// Written by Curtis Olson, started November 1999. +// +// Copyright (C) 1999 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 <Debug/logstream.hxx> +#include <Math/fg_geodesy.hxx> +#include <Time/fg_time.hxx> + +#include "iochannel.hxx" +#include "native.hxx" + + +FGNative::FGNative() { +} + +FGNative::~FGNative() { +} + + +// open hailing frequencies +bool FGNative::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 FGNative::process() { + FGIOChannel *io = get_io_channel(); + int length = sizeof(*cur_fdm_state); + + if ( get_direction() == out ) { + // cout << "size of cur_fdm_state = " << length << endl; + buf = *cur_fdm_state; + if ( ! io->write( (char *)(& buf), length ) ) { + FG_LOG( FG_IO, FG_ALERT, "Error writing data." ); + return false; + } + } else if ( get_direction() == in ) { + if ( io->read( (char *)(& buf), length ) == length ) { + FG_LOG( FG_IO, FG_ALERT, "Success reading data." ); + *cur_fdm_state = buf; + } else { + FG_LOG( FG_IO, FG_ALERT, "Error reading data." ); + return false; + } + } + + return true; +} + + +// close the channel +bool FGNative::close() { + FGIOChannel *io = get_io_channel(); + + set_enabled( false ); + + if ( ! io->close() ) { + return false; + } + + return true; +} diff --git a/src/Network/native.hxx b/src/Network/native.hxx new file mode 100644 index 000000000..e692cbdbf --- /dev/null +++ b/src/Network/native.hxx @@ -0,0 +1,61 @@ +// native.hxx -- FGFS "Native" protocal class +// +// Written by Curtis Olson, started November 1999. +// +// Copyright (C) 1999 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_NATIVE_HXX +#define _FG_NATIVE_HXX + + +#include "Include/compiler.h" + +#include STL_STRING + +#include <FDM/flight.hxx> +#include "protocol.hxx" + +FG_USING_STD(string); + + +class FGNative : public FGProtocol { + + FGInterface buf; + int length; + +public: + + FGNative(); + ~FGNative(); + + // open hailing frequencies + bool open(); + + // process work for this port + bool process(); + + // close the channel + bool close(); +}; + + +#endif // _FG_NATIVE_HXX + +