// (Log is kept at end of this file)
-#include <stdlib.h> // atoi()
+#include <Include/compiler.h>
-#include <string>
+#ifdef FG_HAVE_STD_INCLUDES
+# include <cstdlib> // atoi()
+#else
+# include <stdlib.h> // atoi()
+#endif
+
+#include STL_STRING
+#include STL_IOSTREAM
#include <vector>
#include "Include/fg_stl_config.h"
-#ifdef NEEDNAMESPACESTD
-using namespace std;
-#endif
+FG_USING_NAMESPACE(std);
#include <Aircraft/aircraft.hxx>
#include <Debug/logstream.hxx>
}
-static void send_nmea_out( fgIOCHANNEL& p ) {
+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];
// $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 );
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 = "$";
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( fgIOCHANNEL& p ) {
+static void read_nmea_in( fgIOCHANNEL *p ) {
}
-static void send_garmin_out( fgIOCHANNEL& p ) {
- 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];
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( fgIOCHANNEL& p ) {
+static void read_garmin_in( fgIOCHANNEL *p ) {
}
-static void send_fgfs_out( fgIOCHANNEL& p ) {
+static void send_fgfs_out( fgIOCHANNEL *p ) {
}
-static void read_fgfs_in( fgIOCHANNEL& p ) {
+static void read_fgfs_in( fgIOCHANNEL *p ) {
}
// one more level of indirection ...
-static void process_port( fgIOCHANNEL& p ) {
- 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);
}
}
// 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 );
}
}
// $Log$
+// 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.
//