From 8c70ec70260280552f7264441d6063736e2cf03b Mon Sep 17 00:00:00 2001
From: curt <curt>
Date: Tue, 23 Nov 1999 05:47:16 +0000
Subject: [PATCH] Initial revision of FGFS "Native" I/O protocal.

---
 src/Network/Makefile.am |  1 +
 src/Network/native.cxx  | 97 +++++++++++++++++++++++++++++++++++++++++
 src/Network/native.hxx  | 61 ++++++++++++++++++++++++++
 3 files changed, 159 insertions(+)
 create mode 100644 src/Network/native.cxx
 create mode 100644 src/Network/native.hxx

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
+
+