]> git.mxchange.org Git - flightgear.git/blobdiff - Main/fg_serial.cxx
Tweaks for building with native SGI compilers.
[flightgear.git] / Main / fg_serial.cxx
index 8917b04d3f4257354c2a841b3635a189b9a3bf80..d0853074cae75054108c405861f653e688837d7f 100644 (file)
 // (Log is kept at end of this file)
 
 
-#include <stdlib.h>   // atoi()
+#include <Include/compiler.h>
 
-#include <string>
-#include <vector>                                                               
-#include "Include/fg_stl_config.h"                                              
+#ifdef FG_HAVE_STD_INCLUDES
+#  include <cstdlib>    // atoi()
+#else
+#  include <stdlib.h>   // atoi()
+#endif
 
-#ifdef NEEDNAMESPACESTD                                                         
-using namespace std;                                                            
-#endif                                                                          
+#include STL_STRING
+#include STL_IOSTREAM                                           
+#include <vector>                                                               
 
-#include <Aircraft/aircraft.hxx>
 #include <Debug/logstream.hxx>
+#include <Aircraft/aircraft.hxx>
 #include <Include/fg_constants.h>
 #include <Serial/serial.hxx>
 #include <Time/fg_time.hxx>
@@ -42,6 +44,8 @@ using namespace std;
 
 #include "fg_serial.hxx"
 
+FG_USING_STD(string);
+FG_USING_STD(vector);
 
 // support an arbitrary number of serial channels.  Each channel can
 // be assigned to an arbitrary port.  Bi-directional communication is
@@ -221,25 +225,25 @@ char calc_nmea_cksum(char *sentence) {
 }
 
 
-static void send_nmea_out( fgIOCHANNELp ) {
+static void send_nmea_out( fgIOCHANNEL *p ) {
     char rmc[256], gga[256];
     char rmc_sum[10], gga_sum[10];
     char dir;
     int deg;
     double min;
-    fgFLIGHT *f;
+    FGInterface *f;
     fgTIME *t;
 
     // run once every two seconds
-    if ( p.last_time == cur_time_params.cur_time ) {
+    if ( p->last_time == cur_time_params.cur_time ) {
        return;
     }
-    p.last_time = cur_time_params.cur_time;
+    p->last_time = cur_time_params.cur_time;
     if ( cur_time_params.cur_time % 2 != 0 ) {
        return;
     }
 
-    f = current_aircraft.flight;
+    f = current_aircraft.fdm_state;
     t = &cur_time_params;
 
     char utc[10];
@@ -247,7 +251,7 @@ static void send_nmea_out( fgIOCHANNEL& p ) {
             t->gmt->tm_hour, t->gmt->tm_min, t->gmt->tm_sec );
 
     char lat[20];
-    double latd = FG_Latitude * RAD_TO_DEG;
+    double latd = f->get_Latitude() * RAD_TO_DEG;
     if ( latd < 0.0 ) {
        latd *= -1.0;
        dir = 'S';
@@ -259,7 +263,7 @@ static void send_nmea_out( fgIOCHANNEL& p ) {
     sprintf( lat, "%02d%06.3f,%c", abs(deg), min, dir);
 
     char lon[20];
-    double lond = FG_Longitude * RAD_TO_DEG;
+    double lond = f->get_Longitude() * RAD_TO_DEG;
     if ( lond < 0.0 ) {
        lond *= -1.0;
        dir = 'W';
@@ -271,16 +275,16 @@ static void send_nmea_out( fgIOCHANNEL& p ) {
     sprintf( lon, "%03d%06.3f,%c", abs(deg), min, dir);
 
     char speed[10];
-    sprintf( speed, "%05.1f", FG_V_equiv_kts );
+    sprintf( speed, "%05.1f", f->get_V_equiv_kts() );
 
     char heading[10];
-    sprintf( heading, "%05.1f", FG_Psi * RAD_TO_DEG );
+    sprintf( heading, "%05.1f", f->get_Psi() * RAD_TO_DEG );
 
     char altitude_m[10];
-    sprintf( altitude_m, "%02d", (int)(FG_Altitude * FEET_TO_METER) );
+    sprintf( altitude_m, "%02d", (int)(f->get_Altitude() * FEET_TO_METER) );
 
     char altitude_ft[10];
-    sprintf( altitude_ft, "%02d", (int)FG_Altitude );
+    sprintf( altitude_ft, "%02d", (int)f->get_Altitude() );
 
     char date[10];
     sprintf( date, "%02d%02d%02d", 
@@ -289,11 +293,11 @@ static void send_nmea_out( fgIOCHANNEL& p ) {
     // $GPRMC,HHMMSS,A,DDMM.MMM,N,DDDMM.MMM,W,XXX.X,XXX.X,DDMMYY,XXX.X,E*XX
     sprintf( rmc, "GPRMC,%s,A,%s,%s,%s,%s,%s,0.000,E",
             utc, lat, lon, speed, heading, date );
-    sprintf( rmc_sum, "%02X", 0 /*calc_nmea_cksum(rmc)*/ );
+    sprintf( rmc_sum, "%02X", calc_nmea_cksum(rmc) );
 
     sprintf( gga, "GPGGA,%s,%s,%s,1,,,%s,F,,,,",
             utc, lat, lon, altitude_ft );
-    sprintf( gga_sum, "%02X", 0 /*calc_nmea_cksum(gga)*/ );
+    sprintf( gga_sum, "%02X", calc_nmea_cksum(gga) );
 
 
     FG_LOG( FG_SERIAL, FG_DEBUG, rmc );
@@ -305,8 +309,8 @@ static void send_nmea_out( fgIOCHANNEL& p ) {
     rmc_sentence += "*";
     rmc_sentence += rmc_sum;
     rmc_sentence += "\n";
-    p.port.write_port(rmc_sentence);
-    cout << rmc_sentence;
+    p->port.write_port(rmc_sentence);
+    // cout << rmc_sentence;
 
     // GGA sentence
     string gga_sentence = "$";
@@ -314,31 +318,31 @@ static void send_nmea_out( fgIOCHANNEL& p ) {
     gga_sentence += "*";
     gga_sentence += gga_sum;
     gga_sentence += "\n";
-    p.port.write_port(gga_sentence);
-    cout << gga_sentence;
+    p->port.write_port(gga_sentence);
+    // cout << gga_sentence;
 }
 
-static void read_nmea_in( fgIOCHANNELp ) {
+static void read_nmea_in( fgIOCHANNEL *p ) {
 }
 
-static void send_garmin_out( fgIOCHANNELp ) {
-    char rmc[256], rmz[256];
+static void send_garmin_out( fgIOCHANNEL *p ) {
+    char rmc[256], rmc_sum[256], rmz[256], rmz_sum[256];
     char dir;
     int deg;
     double min;
-    fgFLIGHT *f;
+    FGInterface *f;
     fgTIME *t;
 
     // run once per second
-    if ( p.last_time == cur_time_params.cur_time ) {
+    if ( p->last_time == cur_time_params.cur_time ) {
        return;
     }
-    p.last_time = cur_time_params.cur_time;
+    p->last_time = cur_time_params.cur_time;
     if ( cur_time_params.cur_time % 2 != 0 ) {
        return;
     }
     
-    f = current_aircraft.flight;
+    f = current_aircraft.fdm_state;
     t = &cur_time_params;
 
     char utc[10];
@@ -346,7 +350,7 @@ static void send_garmin_out( fgIOCHANNEL& p ) {
             t->gmt->tm_hour, t->gmt->tm_min, t->gmt->tm_sec );
 
     char lat[20];
-    double latd = FG_Latitude * RAD_TO_DEG;
+    double latd = f->get_Latitude() * RAD_TO_DEG;
     if ( latd < 0.0 ) {
        latd *= -1.0;
        dir = 'S';
@@ -358,7 +362,7 @@ static void send_garmin_out( fgIOCHANNEL& p ) {
     sprintf( lat, "%02d%06.3f,%c", abs(deg), min, dir);
 
     char lon[20];
-    double lond = FG_Longitude * RAD_TO_DEG;
+    double lond = f->get_Longitude() * RAD_TO_DEG;
     if ( lond < 0.0 ) {
        lond *= -1.0;
        dir = 'W';
@@ -370,65 +374,77 @@ static void send_garmin_out( fgIOCHANNEL& p ) {
     sprintf( lon, "%03d%06.3f,%c", abs(deg), min, dir);
 
     char speed[10];
-    sprintf( speed, "%05.1f", FG_V_equiv_kts );
+    sprintf( speed, "%05.1f", f->get_V_equiv_kts() );
 
     char heading[10];
-    sprintf( heading, "%05.1f", FG_Psi * RAD_TO_DEG );
+    sprintf( heading, "%05.1f", f->get_Psi() * RAD_TO_DEG );
 
     char altitude_m[10];
-    sprintf( altitude_m, "%02d", (int)(FG_Altitude * FEET_TO_METER) );
+    sprintf( altitude_m, "%02d", (int)(f->get_Altitude() * FEET_TO_METER) );
 
     char altitude_ft[10];
-    sprintf( altitude_ft, "%02d", (int)FG_Altitude );
+    sprintf( altitude_ft, "%02d", (int)f->get_Altitude() );
 
     char date[10];
     sprintf( date, "%02d%02d%02d", 
             t->gmt->tm_mday, t->gmt->tm_mon+1, t->gmt->tm_year );
 
     // $GPRMC,HHMMSS,A,DDMM.MMM,N,DDDMM.MMM,W,XXX.X,XXX.X,DDMMYY,XXX.X,E*XX
-    sprintf( rmc, "$GPRMC,%s,A,%s,%s,%s,%s,%s,000.0,E*00\r\n",
+    sprintf( rmc, "GPRMC,%s,A,%s,%s,%s,%s,%s,000.0,E",
             utc, lat, lon, speed, heading, date );
+    sprintf( rmc_sum, "%02X", calc_nmea_cksum(rmc) );
 
     // sprintf( gga, "$GPGGA,%s,%s,%s,1,04,0.0,%s,M,00.0,M,,*00\r\n",
     //          utc, lat, lon, altitude_m );
 
-    sprintf( rmz, "$PGRMZ,%s,f,3*00\r\n", altitude_ft );
+    sprintf( rmz, "PGRMZ,%s,f,3", altitude_ft );
+    sprintf( rmz_sum, "%02X", calc_nmea_cksum(rmz) );
 
     FG_LOG( FG_SERIAL, FG_DEBUG, rmc );
     FG_LOG( FG_SERIAL, FG_DEBUG, rmz );
 
     // RMC sentence
-    p.port.write_port(rmc);
-    cout << rmc;
+    string rmc_sentence = "$";
+    rmc_sentence += rmc;
+    rmc_sentence += "*";
+    rmc_sentence += rmc_sum;
+    rmc_sentence += "\n";
+    p->port.write_port(rmc_sentence);
+    // cout << rmc_sentence;
 
     // RMZ sentence (garmin proprietary)
-    p.port.write_port(rmz);
-    cout << rmz;
+    string rmz_sentence = "$";
+    rmz_sentence += rmz;
+    rmz_sentence += "*";
+    rmz_sentence += rmz_sum;
+    rmz_sentence += "\n";
+    p->port.write_port(rmz_sentence);
+    // cout << rmz_sentence;
 }
 
-static void read_garmin_in( fgIOCHANNELp ) {
+static void read_garmin_in( fgIOCHANNEL *p ) {
 }
 
-static void send_fgfs_out( fgIOCHANNELp ) {
+static void send_fgfs_out( fgIOCHANNEL *p ) {
 }
 
-static void read_fgfs_in( fgIOCHANNELp ) {
+static void read_fgfs_in( fgIOCHANNEL *p ) {
 }
 
 
 // one more level of indirection ...
-static void process_port( fgIOCHANNELp ) {
-    if ( p.kind == fgIOCHANNEL::FG_SERIAL_NMEA_OUT ) {
+static void process_port( fgIOCHANNEL *p ) {
+    if ( p->kind == fgIOCHANNEL::FG_SERIAL_NMEA_OUT ) {
        send_nmea_out(p);
-    } else if ( p.kind == fgIOCHANNEL::FG_SERIAL_NMEA_IN ) {
+    } else if ( p->kind == fgIOCHANNEL::FG_SERIAL_NMEA_IN ) {
        read_nmea_in(p);
-    } else if ( p.kind == fgIOCHANNEL::FG_SERIAL_GARMIN_OUT ) {
+    } else if ( p->kind == fgIOCHANNEL::FG_SERIAL_GARMIN_OUT ) {
        send_garmin_out(p);
-    } else if ( p.kind == fgIOCHANNEL::FG_SERIAL_GARMIN_IN ) {
+    } else if ( p->kind == fgIOCHANNEL::FG_SERIAL_GARMIN_IN ) {
        read_garmin_in(p);
-    } else if ( p.kind == fgIOCHANNEL::FG_SERIAL_FGFS_OUT ) {
+    } else if ( p->kind == fgIOCHANNEL::FG_SERIAL_FGFS_OUT ) {
        send_fgfs_out(p);
-    } else if ( p.kind == fgIOCHANNEL::FG_SERIAL_FGFS_IN ) {
+    } else if ( p->kind == fgIOCHANNEL::FG_SERIAL_FGFS_IN ) {
        read_fgfs_in(p);
     }
 }
@@ -436,14 +452,14 @@ static void process_port( fgIOCHANNEL& p ) {
 
 // process any serial port work
 void fgSerialProcess() {
-    fgIOCHANNEL port;
+    fgIOCHANNEL *port;
     
-    const_io_iterator current = port_list.begin();
-    const_io_iterator last = port_list.end();
+    io_iterator current = port_list.begin();
+    io_iterator last = port_list.end();
 
     for ( ; current != last; ++current ) {
-       port = *current;
-       if ( port.kind != fgIOCHANNEL::FG_SERIAL_DISABLED ) {
+       port = current;
+       if ( port->kind != fgIOCHANNEL::FG_SERIAL_DISABLED ) {
            process_port ( port );
        }
     }
@@ -451,6 +467,32 @@ void fgSerialProcess() {
 
 
 // $Log$
+// Revision 1.13  1999/03/02 01:03:16  curt
+// Tweaks for building with native SGI compilers.
+//
+// Revision 1.12  1999/02/26 22:09:50  curt
+// Added initial support for native SGI compilers.
+//
+// Revision 1.11  1999/02/05 21:29:11  curt
+// Modifications to incorporate Jon S. Berndts flight model code.
+//
+// Revision 1.10  1999/01/21 00:55:01  curt
+// Fixed some problems with timing of output strings.
+// Added checksum support for nmea and garmin output.
+//
+// Revision 1.9  1999/01/20 13:42:26  curt
+// Tweaked FDM interface.
+// Testing check sum support for NMEA serial output.
+//
+// Revision 1.8  1999/01/19 20:57:04  curt
+// MacOS portability changes contributed by "Robert Puyol" <puyol@abvent.fr>
+//
+// Revision 1.7  1998/12/05 15:54:21  curt
+// Renamed class fgFLIGHT to class FGState as per request by JSB.
+//
+// Revision 1.6  1998/12/03 01:17:18  curt
+// Converted fgFLIGHT to a class.
+//
 // Revision 1.5  1998/11/30 17:43:32  curt
 // Lots of tweaking to get serial output to actually work.
 //