//
// Written by Curtis Olson, started November 1999.
//
-// Copyright (C) 1999 Curtis L. Olson - curt@flightgear.org
+// Copyright (C) 1999 Curtis L. Olson - http://www.flightgear.org/~curt
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
// $Id$
-#include <Debug/logstream.hxx>
+#include <stdio.h> // sprintf()
+
+#include <simgear/constants.h>
+#include <simgear/debug/logstream.hxx>
+#include <simgear/io/iochannel.hxx>
+
#include <FDM/flight.hxx>
-#include <Math/fg_geodesy.hxx>
-#include <Time/fg_time.hxx>
-#include "iochannel.hxx"
#include "pve.hxx"
}
-// generate Garmin message
+// "PVE" (ProVision Entertainment) output format (for some sort of
+// motion platform)
+//
+// Outputs a 5-byte data packet defined as follows:
+//
+// First bite: ASCII character "P" ( 0x50 or 80 decimal )
+// Second byte: "roll" value (1-255) 1 being 0* and 255 being 359*
+// Third byte: "pitch" value (1-255) 1 being 0* and 255 being 359*
+// Fourth byte: "heave" value (or vertical acceleration?)
+
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;
+ double roll_deg = f->get_Phi() * SGD_RADIANS_TO_DEGREES;
while ( roll_deg <= -180.0 ) {
roll_deg += 360.0;
}
roll_deg -= 360.0;
}
- double pitch_deg = f->get_Theta() * RAD_TO_DEG;
+ double pitch_deg = f->get_Theta() * SGD_RADIANS_TO_DEGREES;
while ( pitch_deg <= -180.0 ) {
pitch_deg += 360.0;
}
// 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 <<
+ SG_LOG( SG_IO, SG_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" );
+ SG_LOG( SG_IO, SG_ALERT, "PVE input not supported" );
return false;
}
// process work for this port
bool FGPVE::process() {
- FGIOChannel *io = get_io_channel();
+ SGIOChannel *io = get_io_channel();
- if ( get_direction() == out ) {
+ if ( get_direction() == SG_IO_OUT ) {
gen_message();
if ( ! io->write( buf, length ) ) {
- FG_LOG( FG_IO, FG_ALERT, "Error writing data." );
+ SG_LOG( SG_IO, SG_ALERT, "Error writing data." );
return false;
}
- } else if ( get_direction() == in ) {
- FG_LOG( FG_IO, FG_ALERT, "in direction not supported for RUL." );
+ } else if ( get_direction() == SG_IO_IN ) {
+ SG_LOG( SG_IO, SG_ALERT, "in direction not supported for RUL." );
return false;
}