// $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 "rul.hxx"
}
-// generate Garmin message
+// "RUL" output format (for some sort of motion platform)
+//
+// The Baud rate is 2400 , one start bit, eight data bits, 1 stop bit,
+// no parity.
+//
+// For position it requires a 3-byte data packet defined as follows:
+//
+// First bite: ascII character "P" ( 0x50 or 80 decimal )
+// Second byte X pos. (1-255) 1 being 0* and 255 being 359*
+// Third byte Y pos.( 1-255) 1 being 0* and 255 359*
+//
+// So sending 80 127 127 to the two axis motors will position on 180*
+// The RS- 232 port is a nine pin connector and the only pins used are
+// 3&5.
+
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;
+ 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;
}
sprintf( buf, "p%c%c\n", roll, pitch);
length = 4;
- FG_LOG( FG_IO, FG_INFO, "p " << roll << " " << pitch );
+ SG_LOG( SG_IO, SG_INFO, "p " << roll << " " << pitch );
return true;
}
// parse RUL message
bool FGRUL::parse_message() {
- FG_LOG( FG_IO, FG_ALERT, "RUL input not supported" );
+ SG_LOG( SG_IO, SG_ALERT, "RUL input not supported" );
return false;
}
// process work for this port
bool FGRUL::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;
}