]> git.mxchange.org Git - flightgear.git/commitdiff
Renamed mini_fdm to native_gui which makes a lot more sense to me.
authorcurt <curt>
Wed, 15 Jan 2003 02:09:10 +0000 (02:09 +0000)
committercurt <curt>
Wed, 15 Jan 2003 02:09:10 +0000 (02:09 +0000)
src/Main/fg_io.cxx
src/Main/options.cxx
src/Network/Makefile.am
src/Network/mini_fdm.cxx [deleted file]
src/Network/mini_fdm.hxx [deleted file]
src/Network/native_gui.cxx [new file with mode: 0644]
src/Network/native_gui.hxx [new file with mode: 0644]
src/Network/net_gui.hxx [new file with mode: 0644]

index b987fe6a71a424c34ee0c91b24d91857bff07caa..397ec166dacd59667d97afab2e0c8effb953aebb 100644 (file)
 #  include <Network/jpg-httpd.hxx>
 #endif
 #include <Network/joyclient.hxx>
-#include <Network/mini_fdm.hxx>
 #include <Network/native.hxx>
 #include <Network/native_ctrls.hxx>
 #include <Network/native_fdm.hxx>
+#include <Network/native_gui.hxx>
 #include <Network/opengc.hxx>
 #include <Network/nmea.hxx>
 #include <Network/props.hxx>
@@ -137,9 +137,9 @@ FGIO::parse_port_config( const string& config )
        } else if ( protocol == "native_fdm" ) {
            FGNativeFDM *native_fdm = new FGNativeFDM;
            io = native_fdm;
-       } else if ( protocol == "mini_fdm" ) {
-           FGMiniFDM *mini_fdm = new FGMiniFDM;
-           io = mini_fdm;
+       } else if ( protocol == "native_gui" ) {
+           FGNativeGUI *net_gui = new FGNativeGUI;
+           io = net_gui;
        } else if ( protocol == "nmea" ) {
            FGNMEA *nmea = new FGNMEA;
            io = nmea;
index dc55328d36979f538d99add1700a349c3a4d3873..93e1a068e5c277fae0ee81f2db47bd26b6360a77 100644 (file)
@@ -915,8 +915,8 @@ parse_option (const string& arg)
        add_channel( "native_ctrls", arg.substr(15) );
     } else if ( arg.find( "--native-fdm=" ) == 0 ) {
        add_channel( "native_fdm", arg.substr(13) );
-    } else if ( arg.find( "--mini-fdm=" ) == 0 ) {
-       add_channel( "mini_fdm", arg.substr(11) );
+    } else if ( arg.find( "--native-gui=" ) == 0 ) {
+       add_channel( "native_gui", arg.substr(13) );
     } else if ( arg.find( "--opengc=" ) == 0 ) {
        // char stop;
        // cout << "Adding channel for OpenGC Display" << endl; cin >> stop;
index 5d307cd55a66e07d6e6d857691d2b65dfac2d58a..ffe499c791de7677e29b21f8f18b7e8906987ab0 100644 (file)
@@ -14,10 +14,10 @@ libNetwork_a_SOURCES = \
         httpd.cxx httpd.hxx \
         $(JPEG_SERVER) \
        joyclient.cxx joyclient.hxx \
-       mini_fdm.cxx mini_fdm.hxx \
        native.cxx native.hxx \
        native_ctrls.cxx native_ctrls.hxx \
        native_fdm.cxx native_fdm.hxx \
+       native_gui.cxx native_gui.hxx \
        net_ctrls.hxx net_fdm.hxx net_fdm_mini.hxx \
         nmea.cxx nmea.hxx \
         opengc.cxx opengc.hxx opengc_data.hxx \
diff --git a/src/Network/mini_fdm.cxx b/src/Network/mini_fdm.cxx
deleted file mode 100644 (file)
index 80bb4c4..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-// native_fdm.cxx -- FGFS "Native" flight dynamics protocal class
-//
-// Written by Curtis Olson, started September 2001.
-//
-// Copyright (C) 2001  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$
-
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <simgear/debug/logstream.hxx>
-#include <simgear/io/lowlevel.hxx> // endian tests
-#include <simgear/io/iochannel.hxx>
-#include <simgear/timing/sg_time.hxx>
-
-#include <FDM/flight.hxx>
-#include <Time/tmp.hxx>
-#include <Main/fg_props.hxx>
-#include <Main/globals.hxx>
-
-#include "mini_fdm.hxx"
-
-// FreeBSD works better with this included last ... (?)
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include <windows.h>
-#else
-#  include <netinet/in.h>      // htonl() ntohl()
-#endif
-
-
-// The function htond is defined this way due to the way some
-// processors and OSes treat floating point values.  Some will raise
-// an exception whenever a "bad" floating point value is loaded into a
-// floating point register.  Solaris is notorious for this, but then
-// so is LynxOS on the PowerPC.  By translating the data in place,
-// there is no need to load a FP register with the "corruped" floating
-// point value.  By doing the BIG_ENDIAN test, I can optimize the
-// routine for big-endian processors so it can be as efficient as
-// possible
-static void htond (double &x)  
-{
-    if ( sgIsLittleEndian() ) {
-        int    *Double_Overlay;
-        int     Holding_Buffer;
-    
-        Double_Overlay = (int *) &x;
-        Holding_Buffer = Double_Overlay [0];
-    
-        Double_Overlay [0] = htonl (Double_Overlay [1]);
-        Double_Overlay [1] = htonl (Holding_Buffer);
-    } else {
-        return;
-    }
-}
-
-
-FGMiniFDM::FGMiniFDM() {
-}
-
-FGMiniFDM::~FGMiniFDM() {
-}
-
-
-// open hailing frequencies
-bool FGMiniFDM::open() {
-    if ( is_enabled() ) {
-       SG_LOG( SG_IO, SG_ALERT, "This shouldn't happen, but the channel " 
-               << "is already in use, ignoring" );
-       return false;
-    }
-
-    SGIOChannel *io = get_io_channel();
-
-    if ( ! io->open( get_direction() ) ) {
-       SG_LOG( SG_IO, SG_ALERT, "Error opening channel communication layer." );
-       return false;
-    }
-
-    set_enabled( true );
-
-    cur_fdm_state->_set_Sea_level_radius( SG_EQUATORIAL_RADIUS_FT );
-    return true;
-}
-
-
-void FGProps2NetMiniFDM( FGNetMiniFDM *net ) {
-    int i;
-
-    // Version sanity checking
-    net->version = FG_NET_FDM_MINI_VERSION;
-
-    // Aero parameters
-    net->longitude = cur_fdm_state->get_Longitude();
-    net->latitude = cur_fdm_state->get_Latitude();
-    net->altitude = cur_fdm_state->get_Altitude() * SG_FEET_TO_METER;
-    net->phi = cur_fdm_state->get_Phi();
-    net->theta = cur_fdm_state->get_Theta();
-    net->psi = cur_fdm_state->get_Psi();
-
-    // Velocities
-    net->vcas = cur_fdm_state->get_V_calibrated_kts();
-    net->climb_rate = cur_fdm_state->get_Climb_Rate();
-
-    // Consumables
-    net->num_tanks = FGNetMiniFDM::FG_MAX_TANKS;
-    for ( i = 0; i < net->num_tanks; ++i ) {
-        SGPropertyNode *node = fgGetNode("/consumables/fuel/tank", i, true);
-        net->fuel_quantity[i] = node->getDoubleValue("level-gal_us");
-    }
-
-    // the following really aren't used in this context
-    net->cur_time = globals->get_time_params()->get_cur_time();
-    net->warp = globals->get_warp();
-
-    // Convert the net buffer to network format
-    net->version = htonl(net->version);
-
-    htond(net->longitude);
-    htond(net->latitude);
-    htond(net->altitude);
-    htond(net->phi);
-    htond(net->theta);
-    htond(net->psi);
-    htond(net->vcas);
-    htond(net->climb_rate);
-
-    for ( i = 0; i < net->num_tanks; ++i ) {
-        htond(net->fuel_quantity[i]);
-    }
-    net->num_tanks = htonl(net->num_tanks);
-
-    net->cur_time = htonl( net->cur_time );
-    net->warp = htonl( net->warp );
-}
-
-
-void FGNetMiniFDM2Props( FGNetMiniFDM *net ) {
-    int i;
-
-    // Convert to the net buffer from network format
-    net->version = ntohl(net->version);
-
-    htond(net->longitude);
-    htond(net->latitude);
-    htond(net->altitude);
-    htond(net->phi);
-    htond(net->theta);
-    htond(net->psi);
-    htond(net->vcas);
-    htond(net->climb_rate);
-
-    net->num_tanks = htonl(net->num_tanks);
-    for ( i = 0; i < net->num_tanks; ++i ) {
-       htond(net->fuel_quantity[i]);
-    }
-
-    net->cur_time = ntohl(net->cur_time);
-    net->warp = ntohl(net->warp);
-
-    if ( net->version == FG_NET_FDM_MINI_VERSION ) {
-        // cout << "pos = " << net->longitude << " " << net->latitude << endl;
-        // cout << "sea level rad = " << cur_fdm_state->get_Sea_level_radius()
-       //      << endl;
-        cur_fdm_state->_updateGeodeticPosition( net->latitude,
-                                                net->longitude,
-                                                net->altitude
-                                                  * SG_METER_TO_FEET );
-        cur_fdm_state->_set_Euler_Angles( net->phi,
-                                          net->theta,
-                                          net->psi );
-
-        cur_fdm_state->_set_V_calibrated_kts( net->vcas );
-        cur_fdm_state->_set_Climb_Rate( net->climb_rate );
-
-       for (i = 0; i < net->num_tanks; ++i ) {
-           SGPropertyNode * node
-               = fgGetNode("/consumables/fuel/tank", i, true);
-           node->setDoubleValue("level-gal_us", net->fuel_quantity[i] );
-       }
-
-       if ( net->cur_time ) {
-           fgSetLong("/sim/time/cur-time-override", net->cur_time);
-       }
-
-        globals->set_warp( net->warp );
-    } else {
-       SG_LOG( SG_IO, SG_ALERT,
-                "Error: version mismatch in FGNetMiniFDM2Props()" );
-       SG_LOG( SG_IO, SG_ALERT,
-               "\tread " << net->version << " need " << FG_NET_FDM_MINI_VERSION );
-       SG_LOG( SG_IO, SG_ALERT,
-               "\tNeed to upgrade net_fdm.hxx and recompile." );
-    }
-}
-
-
-// process work for this port
-bool FGMiniFDM::process() {
-    SGIOChannel *io = get_io_channel();
-    int length = sizeof(buf);
-
-    if ( get_direction() == SG_IO_OUT ) {
-       // cout << "size of cur_fdm_state = " << length << endl;
-       FGProps2NetMiniFDM( &buf );
-       if ( ! io->write( (char *)(& buf), length ) ) {
-           SG_LOG( SG_IO, SG_ALERT, "Error writing data." );
-           return false;
-       }
-    } else if ( get_direction() == SG_IO_IN ) {
-       if ( io->get_type() == sgFileType ) {
-           if ( io->read( (char *)(& buf), length ) == length ) {
-               SG_LOG( SG_IO, SG_DEBUG, "Success reading data." );
-               FGNetMiniFDM2Props( &buf );
-           }
-       } else {
-           while ( io->read( (char *)(& buf), length ) == length ) {
-               SG_LOG( SG_IO, SG_DEBUG, "Success reading data." );
-               FGNetMiniFDM2Props( &buf );
-           }
-       }
-    }
-
-    return true;
-}
-
-
-// close the channel
-bool FGMiniFDM::close() {
-    SGIOChannel *io = get_io_channel();
-
-    set_enabled( false );
-
-    if ( ! io->close() ) {
-       return false;
-    }
-
-    return true;
-}
diff --git a/src/Network/mini_fdm.hxx b/src/Network/mini_fdm.hxx
deleted file mode 100644 (file)
index aa110c5..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// mini_fdm.hxx -- FGFS "mini" flight dynamics protocal class
-//
-// Written by Curtis Olson, started January 2002.
-//
-// Copyright (C) 2002  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_MINI_FDM_HXX
-#define _FG_MINI_FDM_HXX
-
-
-#include <simgear/compiler.h>
-
-#include <FDM/flight.hxx>
-
-#include "protocol.hxx"
-#include "net_fdm_mini.hxx"
-
-
-class FGMiniFDM : public FGProtocol, public FGInterface {
-
-    FGNetMiniFDM buf;
-    int length;
-
-public:
-
-    FGMiniFDM();
-    ~FGMiniFDM();
-
-    // open hailing frequencies
-    bool open();
-
-    // process work for this port
-    bool process();
-
-    // close the channel
-    bool close();
-};
-
-
-// Helper functions which may be useful outside this class
-
-// Populate the FGNetMiniFDM structure from the property tree.
-void FGProps2NetMiniFDM( FGNetMiniFDM *net );
-
-// Update the property tree from the FGNetMiniFDM structure.
-void FGNetMiniFDM2Props( FGNetMiniFDM *net );
-
-
-#endif // _FG_MINI_FDM_HXX
-
-
diff --git a/src/Network/native_gui.cxx b/src/Network/native_gui.cxx
new file mode 100644 (file)
index 0000000..5dbcf95
--- /dev/null
@@ -0,0 +1,255 @@
+// native_gui.cxx -- FGFS external gui data export class
+//
+// Written by Curtis Olson, started January 2002.
+//
+// Copyright (C) 2002  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$
+
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <simgear/debug/logstream.hxx>
+#include <simgear/io/lowlevel.hxx> // endian tests
+#include <simgear/io/iochannel.hxx>
+#include <simgear/timing/sg_time.hxx>
+
+#include <FDM/flight.hxx>
+#include <Time/tmp.hxx>
+#include <Main/fg_props.hxx>
+#include <Main/globals.hxx>
+
+#include "native_gui.hxx"
+
+// FreeBSD works better with this included last ... (?)
+#if defined(WIN32) && !defined(__CYGWIN__)
+#  include <windows.h>
+#else
+#  include <netinet/in.h>      // htonl() ntohl()
+#endif
+
+
+// The function htond is defined this way due to the way some
+// processors and OSes treat floating point values.  Some will raise
+// an exception whenever a "bad" floating point value is loaded into a
+// floating point register.  Solaris is notorious for this, but then
+// so is LynxOS on the PowerPC.  By translating the data in place,
+// there is no need to load a FP register with the "corruped" floating
+// point value.  By doing the BIG_ENDIAN test, I can optimize the
+// routine for big-endian processors so it can be as efficient as
+// possible
+static void htond (double &x)  
+{
+    if ( sgIsLittleEndian() ) {
+        int    *Double_Overlay;
+        int     Holding_Buffer;
+    
+        Double_Overlay = (int *) &x;
+        Holding_Buffer = Double_Overlay [0];
+    
+        Double_Overlay [0] = htonl (Double_Overlay [1]);
+        Double_Overlay [1] = htonl (Holding_Buffer);
+    } else {
+        return;
+    }
+}
+
+
+FGNativeGUI::FGNativeGUI() {
+}
+
+FGNativeGUI::~FGNativeGUI() {
+}
+
+
+// open hailing frequencies
+bool FGNativeGUI::open() {
+    if ( is_enabled() ) {
+       SG_LOG( SG_IO, SG_ALERT, "This shouldn't happen, but the channel " 
+               << "is already in use, ignoring" );
+       return false;
+    }
+
+    SGIOChannel *io = get_io_channel();
+
+    if ( ! io->open( get_direction() ) ) {
+       SG_LOG( SG_IO, SG_ALERT, "Error opening channel communication layer." );
+       return false;
+    }
+
+    set_enabled( true );
+
+    cur_fdm_state->_set_Sea_level_radius( SG_EQUATORIAL_RADIUS_FT );
+    return true;
+}
+
+
+void FGProps2NetGUI( FGNetGUI *net ) {
+    int i;
+
+    // Version sanity checking
+    net->version = FG_NET_GUI_VERSION;
+
+    // Aero parameters
+    net->longitude = cur_fdm_state->get_Longitude();
+    net->latitude = cur_fdm_state->get_Latitude();
+    net->altitude = cur_fdm_state->get_Altitude() * SG_FEET_TO_METER;
+    net->phi = cur_fdm_state->get_Phi();
+    net->theta = cur_fdm_state->get_Theta();
+    net->psi = cur_fdm_state->get_Psi();
+
+    // Velocities
+    net->vcas = cur_fdm_state->get_V_calibrated_kts();
+    net->climb_rate = cur_fdm_state->get_Climb_Rate();
+
+    // Consumables
+    net->num_tanks = FGNetGUI::FG_MAX_TANKS;
+    for ( i = 0; i < net->num_tanks; ++i ) {
+        SGPropertyNode *node = fgGetNode("/consumables/fuel/tank", i, true);
+        net->fuel_quantity[i] = node->getDoubleValue("level-gal_us");
+    }
+
+    // the following really aren't used in this context
+    net->cur_time = globals->get_time_params()->get_cur_time();
+    net->warp = globals->get_warp();
+
+    // Convert the net buffer to network format
+    net->version = htonl(net->version);
+
+    htond(net->longitude);
+    htond(net->latitude);
+    htond(net->altitude);
+    htond(net->phi);
+    htond(net->theta);
+    htond(net->psi);
+    htond(net->vcas);
+    htond(net->climb_rate);
+
+    for ( i = 0; i < net->num_tanks; ++i ) {
+        htond(net->fuel_quantity[i]);
+    }
+    net->num_tanks = htonl(net->num_tanks);
+
+    net->cur_time = htonl( net->cur_time );
+    net->warp = htonl( net->warp );
+}
+
+
+void FGNetGUI2Props( FGNetGUI *net ) {
+    int i;
+
+    // Convert to the net buffer from network format
+    net->version = ntohl(net->version);
+
+    htond(net->longitude);
+    htond(net->latitude);
+    htond(net->altitude);
+    htond(net->phi);
+    htond(net->theta);
+    htond(net->psi);
+    htond(net->vcas);
+    htond(net->climb_rate);
+
+    net->num_tanks = htonl(net->num_tanks);
+    for ( i = 0; i < net->num_tanks; ++i ) {
+       htond(net->fuel_quantity[i]);
+    }
+
+    net->cur_time = ntohl(net->cur_time);
+    net->warp = ntohl(net->warp);
+
+    if ( net->version == FG_NET_GUI_VERSION ) {
+        // cout << "pos = " << net->longitude << " " << net->latitude << endl;
+        // cout << "sea level rad = " << cur_fdm_state->get_Sea_level_radius()
+       //      << endl;
+        cur_fdm_state->_updateGeodeticPosition( net->latitude,
+                                                net->longitude,
+                                                net->altitude
+                                                  * SG_METER_TO_FEET );
+        cur_fdm_state->_set_Euler_Angles( net->phi,
+                                          net->theta,
+                                          net->psi );
+
+        cur_fdm_state->_set_V_calibrated_kts( net->vcas );
+        cur_fdm_state->_set_Climb_Rate( net->climb_rate );
+
+       for (i = 0; i < net->num_tanks; ++i ) {
+           SGPropertyNode * node
+               = fgGetNode("/consumables/fuel/tank", i, true);
+           node->setDoubleValue("level-gal_us", net->fuel_quantity[i] );
+       }
+
+       if ( net->cur_time ) {
+           fgSetLong("/sim/time/cur-time-override", net->cur_time);
+       }
+
+        globals->set_warp( net->warp );
+    } else {
+       SG_LOG( SG_IO, SG_ALERT,
+                "Error: version mismatch in FGNetNativeGUI2Props()" );
+       SG_LOG( SG_IO, SG_ALERT,
+               "\tread " << net->version << " need " << FG_NET_GUI_VERSION );
+       SG_LOG( SG_IO, SG_ALERT,
+               "\tNeed to upgrade net_fdm.hxx and recompile." );
+    }
+}
+
+
+// process work for this port
+bool FGNativeGUI::process() {
+    SGIOChannel *io = get_io_channel();
+    int length = sizeof(buf);
+
+    if ( get_direction() == SG_IO_OUT ) {
+       // cout << "size of cur_fdm_state = " << length << endl;
+       FGProps2NetGUI( &buf );
+       if ( ! io->write( (char *)(& buf), length ) ) {
+           SG_LOG( SG_IO, SG_ALERT, "Error writing data." );
+           return false;
+       }
+    } else if ( get_direction() == SG_IO_IN ) {
+       if ( io->get_type() == sgFileType ) {
+           if ( io->read( (char *)(& buf), length ) == length ) {
+               SG_LOG( SG_IO, SG_DEBUG, "Success reading data." );
+               FGNetGUI2Props( &buf );
+           }
+       } else {
+           while ( io->read( (char *)(& buf), length ) == length ) {
+               SG_LOG( SG_IO, SG_DEBUG, "Success reading data." );
+               FGNetGUI2Props( &buf );
+           }
+       }
+    }
+
+    return true;
+}
+
+
+// close the channel
+bool FGNativeGUI::close() {
+    SGIOChannel *io = get_io_channel();
+
+    set_enabled( false );
+
+    if ( ! io->close() ) {
+       return false;
+    }
+
+    return true;
+}
diff --git a/src/Network/native_gui.hxx b/src/Network/native_gui.hxx
new file mode 100644 (file)
index 0000000..c92d9e6
--- /dev/null
@@ -0,0 +1,68 @@
+// native_gui.hxx -- FGFS external gui data export class
+//
+// Written by Curtis Olson, started January 2002.
+//
+// Copyright (C) 2002  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_GUI_HXX
+#define _FG_NATIVE_GUI_HXX
+
+
+#include <simgear/compiler.h>
+
+#include <FDM/flight.hxx>
+
+#include "protocol.hxx"
+#include "net_gui.hxx"
+
+
+class FGNativeGUI : public FGProtocol, public FGInterface {
+
+    FGNetGUI buf;
+    int length;
+
+public:
+
+    FGNativeGUI();
+    ~FGNativeGUI();
+
+    // open hailing frequencies
+    bool open();
+
+    // process work for this port
+    bool process();
+
+    // close the channel
+    bool close();
+};
+
+
+// Helper functions which may be useful outside this class
+
+// Populate the FGNetGUI structure from the property tree.
+void FGProps2NetGUI( FGNetGUI *net );
+
+// Update the property tree from the FGNetGUI structure.
+void FGNetGUI2Props( FGNetGUI *net );
+
+
+#endif // _FG_NATIVE_GUI_HXX
+
+
diff --git a/src/Network/net_gui.hxx b/src/Network/net_gui.hxx
new file mode 100644 (file)
index 0000000..7fb16fd
--- /dev/null
@@ -0,0 +1,79 @@
+// net_gui.hxx -- defines a simple subset I/O interface to the flight
+//                     dynamics model variables
+//
+// Written by Curtis Olson, started January 2002.
+//
+// Copyright (C) 2002  Curtis L. Olson  - curt@flightgear.com
+//
+// 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 _NET_GUI_HXX
+#define _NET_GUI_HXX
+
+
+#ifndef __cplusplus                                                          
+# error This library requires C++
+#endif                                   
+
+
+const int FG_NET_GUI_VERSION = 1;
+
+
+// Define a structure containing the top level flight dynamics model
+// parameters
+
+class FGNetGUI {
+
+public:
+
+    enum {
+        FG_MAX_ENGINES = 4,
+        FG_MAX_WHEELS = 3,
+        FG_MAX_TANKS = 4
+    };
+
+    int version;               // increment when data values change
+    int pad;                    // keep doubles 64-bit aligned for some
+                                // hardware platforms, such as the Sun
+                                // SPARC, which don't like misaligned
+                                // data
+
+    // Positions
+    double longitude;          // geodetic (radians)
+    double latitude;           // geodetic (radians)
+    double altitude;           // above sea level (meters)
+    double agl;                        // above ground level (meters)
+    double phi;                        // roll (radians)
+    double theta;              // pitch (radians)
+    double psi;                        // yaw or true heading (radians)
+
+    // Velocities
+    double vcas;
+    double climb_rate;         // feet per second
+
+    // Consumables
+    int num_tanks;             // Max number of fuel tanks
+    double fuel_quantity[FG_MAX_TANKS];
+
+    // Environment
+    time_t cur_time;            // current unix time
+    long int warp;              // offset in seconds to unix time
+};
+
+
+#endif // _NET_GUI_HXX