]> git.mxchange.org Git - flightgear.git/blobdiff - src/Network/rul.cxx
Fix a potential timing glitch.
[flightgear.git] / src / Network / rul.cxx
index 97f1e9eec1669634572b36eabbe1917686ca8219..9040a8c4f850ecdebe43bea79aa7f962ffdf776d 100644 (file)
 // $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"
 
 
@@ -39,13 +41,27 @@ FGRUL::~FGRUL() {
 }
 
 
-// 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;
     }
@@ -53,7 +69,7 @@ bool FGRUL::gen_message() {
        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;
     }
@@ -70,7 +86,7 @@ bool FGRUL::gen_message() {
     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;
 }
@@ -78,7 +94,7 @@ bool FGRUL::gen_message() {
 
 // 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;
 }
@@ -86,16 +102,16 @@ bool FGRUL::parse_message() {
 
 // 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;
     }