]> git.mxchange.org Git - flightgear.git/commitdiff
Added PVE (ProVision Entertainment) and RUL (some guy's motion platform)
authorcurt <curt>
Fri, 19 Nov 1999 03:02:49 +0000 (03:02 +0000)
committercurt <curt>
Fri, 19 Nov 1999 03:02:49 +0000 (03:02 +0000)
formats.

src/Network/Makefile.am
src/Network/protocol.cxx
src/Network/pve.cxx [new file with mode: 0644]
src/Network/pve.hxx [new file with mode: 0644]
src/Network/rul.cxx [new file with mode: 0644]
src/Network/rul.hxx [new file with mode: 0644]

index 9207bdf531876396d4f9ef23cf8e13d86b1175b8..6d6c76e96493a1781726c278aa012b596ecb0d97 100644 (file)
@@ -7,6 +7,8 @@ libNetwork_a_SOURCES = \
        protocol.cxx protocol.hxx \
        garmin.cxx garmin.hxx \
        nmea.cxx nmea.hxx \
+       pve.cxx pve.hxx \
+       rul.cxx rul.hxx \
        net_hud.cxx network.cxx network.h
 
 INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib -I$(top_builddir)/Simulator
index 2954f04b659e3691e0d93c0e67cf83f00d582ff9..1e5b7ca0d3d2a2c6a34384d1770607427053183b 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <Debug/logstream.hxx>
 
+#include "iochannel.hxx"
 #include "protocol.hxx"
 
 
@@ -38,11 +39,24 @@ FGProtocol::~FGProtocol() {
 }
 
 
-// dummy open routine
+// standard I/O channel open routine
 bool FGProtocol::open() {
-    FG_LOG( FG_IO, FG_INFO, "dummy FGProtocol::open()" );
-    enabled = false;
-    return false;
+    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;
 }
 
 
@@ -60,10 +74,17 @@ bool FGProtocol::close() {
 }
 
 
-// dummy close routine
+// standard I/O channel close routine
 bool FGProtocol::gen_message() {
-    FG_LOG( FG_IO, FG_INFO, "dummy FGProtocol::gen_message()" );
-    return false;
+    FGIOChannel *io = get_io_channel();
+
+    set_enabled( false );
+
+    if ( ! io->close() ) {
+       return false;
+    }
+
+    return true;
 }
 
 
diff --git a/src/Network/pve.cxx b/src/Network/pve.cxx
new file mode 100644 (file)
index 0000000..2caa940
--- /dev/null
@@ -0,0 +1,117 @@
+// pve.cxx -- "PVE" protocal class (for Provision Entertainment)
+//
+// 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 <FDM/flight.hxx>
+#include <Math/fg_geodesy.hxx>
+#include <Time/fg_time.hxx>
+
+#include "iochannel.hxx"
+#include "pve.hxx"
+
+
+FGPVE::FGPVE() {
+}
+
+
+FGPVE::~FGPVE() {
+}
+
+
+// generate Garmin message
+bool FGPVE::gen_message() {
+    // cout << "generating pve message" << endl;
+    FGInterface *f = cur_fdm_state;
+
+    // get roll and pitch, convert to degrees
+    double roll_deg = f->get_Phi() * RAD_TO_DEG;
+    while ( roll_deg <= -180.0 ) {
+       roll_deg += 360.0;
+    }
+    while ( roll_deg > 180.0 ) {
+       roll_deg -= 360.0;
+    }
+
+    double pitch_deg = f->get_Theta() * RAD_TO_DEG;
+    while ( pitch_deg <= -180.0 ) {
+       pitch_deg += 360.0;
+    }
+    while ( pitch_deg > 180.0 ) {
+       pitch_deg -= 360.0;
+    }
+
+    short int heave = (int)(f->get_W_body() * 128.0);
+
+    // scale roll and pitch to output format (1 - 255)
+    // straight && level == (128, 128)
+
+    short int roll = (int)(roll_deg * 32768 / 180.0);
+    short int pitch = (int)(pitch_deg * 32768 / 180.0);
+
+    unsigned char roll_b1, roll_b2, pitch_b1, pitch_b2, heave_b1, heave_b2;
+    roll_b1 = roll >> 8;
+    roll_b2 = roll & 0x00ff;
+    pitch_b1 = pitch >> 8;
+    pitch_b2 = pitch & 0x00ff;
+    heave_b1 = heave >> 8;
+    heave_b2 = heave & 0x00ff;
+
+    sprintf( buf, "p%c%c%c%c%c%c\n", 
+            roll_b1, roll_b2, pitch_b1, pitch_b2, heave_b1, heave_b2 );
+    length = 8;
+
+    // printf( "p [ %u %u ]  [ %u %u ]  [ %u %u ]\n", 
+    //         roll_b1, roll_b2, pitch_b1, pitch_b2, heave_b1, heave_b2 );
+
+    FG_LOG( FG_IO, FG_INFO, "roll=" << roll << " pitch=" << pitch <<
+           " heave=" << heave );
+
+    return true;
+}
+
+
+// parse RUL message
+bool FGPVE::parse_message() {
+    FG_LOG( FG_IO, FG_ALERT, "PVE input not supported" );
+
+    return false;
+}
+
+
+// process work for this port
+bool FGPVE::process() {
+    FGIOChannel *io = get_io_channel();
+
+    if ( get_direction() == out ) {
+       gen_message();
+       if ( ! io->write( buf, length ) ) {
+           FG_LOG( FG_IO, FG_ALERT, "Error writing data." );
+           return false;
+       }
+    } else if ( get_direction() == in ) {
+       FG_LOG( FG_IO, FG_ALERT, "in direction not supported for RUL." );
+       return false;
+    }
+
+    return true;
+}
diff --git a/src/Network/pve.hxx b/src/Network/pve.hxx
new file mode 100644 (file)
index 0000000..632dafd
--- /dev/null
@@ -0,0 +1,57 @@
+// pve.hxx -- "PVE" protocal class (for Provision Entertainment)
+//
+// 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_PVE_HXX
+#define _FG_PVE_HXX
+
+
+#include "Include/compiler.h"
+
+#include STL_STRING
+
+#include "protocol.hxx"
+
+FG_USING_STD(string);
+
+
+class FGPVE : public FGProtocol {
+
+    char buf[ 10 ];
+    int length;
+
+public:
+
+    FGPVE();
+    ~FGPVE();
+
+    bool gen_message();
+    bool parse_message();
+    // process work for this port
+    bool process();
+};
+
+
+#endif // _FG_PVE_HXX
+
+
diff --git a/src/Network/rul.cxx b/src/Network/rul.cxx
new file mode 100644 (file)
index 0000000..97f1e9e
--- /dev/null
@@ -0,0 +1,103 @@
+// rul.cxx -- "RUL" protocal class (for some sort of motion platform
+//            some guy was building)
+//
+// 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 <FDM/flight.hxx>
+#include <Math/fg_geodesy.hxx>
+#include <Time/fg_time.hxx>
+
+#include "iochannel.hxx"
+#include "rul.hxx"
+
+
+FGRUL::FGRUL() {
+}
+
+
+FGRUL::~FGRUL() {
+}
+
+
+// generate Garmin message
+bool FGRUL::gen_message() {
+    // cout << "generating rul message" << endl;
+    FGInterface *f = cur_fdm_state;
+
+    // get roll and pitch, convert to degrees
+    double roll_deg = f->get_Phi() * RAD_TO_DEG;
+    while ( roll_deg < -180.0 ) {
+       roll_deg += 360.0;
+    }
+    while ( roll_deg > 180.0 ) {
+       roll_deg -= 360.0;
+    }
+
+    double pitch_deg = f->get_Theta() * RAD_TO_DEG;
+    while ( pitch_deg < -180.0 ) {
+       pitch_deg += 360.0;
+    }
+    while ( pitch_deg > 180.0 ) {
+       pitch_deg -= 360.0;
+    }
+
+    // scale roll and pitch to output format (1 - 255)
+    // straight && level == (128, 128)
+
+    int roll = (int)( (roll_deg+180.0) * 255.0 / 360.0) + 1;
+    int pitch = (int)( (pitch_deg+180.0) * 255.0 / 360.0) + 1;
+
+    sprintf( buf, "p%c%c\n", roll, pitch);
+    length = 4;
+
+    FG_LOG( FG_IO, FG_INFO, "p " << roll << " " << pitch );
+
+    return true;
+}
+
+
+// parse RUL message
+bool FGRUL::parse_message() {
+    FG_LOG( FG_IO, FG_ALERT, "RUL input not supported" );
+
+    return false;
+}
+
+
+// process work for this port
+bool FGRUL::process() {
+    FGIOChannel *io = get_io_channel();
+
+    if ( get_direction() == out ) {
+       gen_message();
+       if ( ! io->write( buf, length ) ) {
+           FG_LOG( FG_IO, FG_ALERT, "Error writing data." );
+           return false;
+       }
+    } else if ( get_direction() == in ) {
+       FG_LOG( FG_IO, FG_ALERT, "in direction not supported for RUL." );
+       return false;
+    }
+
+    return true;
+}
diff --git a/src/Network/rul.hxx b/src/Network/rul.hxx
new file mode 100644 (file)
index 0000000..b093244
--- /dev/null
@@ -0,0 +1,58 @@
+// rul.hxx -- "RUL" protocal class (for some sort of motion platform
+//            some guy was building)
+//
+// 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_RUL_HXX
+#define _FG_RUL_HXX
+
+
+#include "Include/compiler.h"
+
+#include STL_STRING
+
+#include "protocol.hxx"
+
+FG_USING_STD(string);
+
+
+class FGRUL : public FGProtocol {
+
+    char buf[ 10 ];
+    int length;
+
+public:
+
+    FGRUL();
+    ~FGRUL();
+
+    bool gen_message();
+    bool parse_message();
+    // process work for this port
+    bool process();
+};
+
+
+#endif // _FG_RUL_HXX
+
+