//
// 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$
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
#include <simgear/compiler.h>
#include <simgear/misc/strutils.hxx>
#include <Network/protocol.hxx>
-#include <Network/atc610x.hxx>
+#include <Network/ATC-Main.hxx>
#include <Network/atlas.hxx>
#include <Network/garmin.hxx>
#include <Network/httpd.hxx>
#include <Network/ray.hxx>
#include <Network/rul.hxx>
#include <Network/generic.hxx>
-
-#ifdef FG_MPLAYER_AS
#include <Network/multiplay.hxx>
-#endif
#include "globals.hxx"
#include "fg_io.hxx"
try
{
- if ( protocol == "atc610x" ) {
- FGATC610x *atc610x = new FGATC610x;
- atc610x->set_hz( 30 );
- if ( tokens.size() > 1 ) {
- if ( tokens[1] == "no-rudder" ) {
- atc610x->set_use_rudder( false );
- }
+ if ( protocol == "atcsim" ) {
+ FGATCMain *atcsim = new FGATCMain;
+ atcsim->set_hz( 30 );
+ if ( tokens.size() != 6 ) {
+ SG_LOG( SG_IO, SG_ALERT, "Usage: --atcsim=[no-]pedals,"
+ << "input0_config,input1_config,"
+ << "output0_config,output1_config,file.nas" );
+ return NULL;
}
- return atc610x;
+ if ( tokens[1] == "no-pedals" ) {
+ fgSetBool( "/input/atcsim/ignore-pedal-controls", true );
+ } else {
+ fgSetBool( "/input/atcsim/ignore-pedal-controls", false );
+ }
+ atcsim->set_path_names(tokens[2], tokens[3], tokens[4], tokens[5]);
+ return atcsim;
} else if ( protocol == "atlas" ) {
FGAtlas *atlas = new FGAtlas;
io = atlas;
FGRUL *rul = new FGRUL;
io = rul;
} else if ( protocol == "generic" ) {
- FGGeneric *generic = new FGGeneric( tokens[6] );
+ int n = 6;
+ if (tokens[1] == "socket") n++;
+ else if (tokens[1] == "file") n--;
+ FGGeneric *generic = new FGGeneric( tokens[n] );
io = generic;
-
-#ifdef FG_MPLAYER_AS
} else if ( protocol == "multiplay" ) {\
//Determine dir, rate, host & port
string dir = tokens[1];
string host = tokens[3];
string port = tokens[4];
return new FGMultiplay(dir, atoi(rate.c_str()), host, atoi(port.c_str()));
-#endif
-
} else {
return NULL;
}
delete io;
return 0;
}
-
+
+ if (tokens.size() < 3) {
+ SG_LOG( SG_IO, SG_ALERT, "Incompatible number of network arguments.");
+ return NULL;
+ }
string medium = tokens[1];
SG_LOG( SG_IO, SG_INFO, " medium = " << medium );
SG_LOG( SG_IO, SG_INFO, " hertz = " << hertz );
if ( medium == "serial" ) {
+ if ( tokens.size() < 5) {
+ SG_LOG( SG_IO, SG_ALERT, "Incompatible number of arguments for serial communications.");
+ return NULL;
+ }
// device name
string device = tokens[4];
SG_LOG( SG_IO, SG_INFO, " device = " << device );
io->set_io_channel( ch );
} else if ( medium == "file" ) {
// file name
+ if ( tokens.size() < 4) {
+ SG_LOG( SG_IO, SG_ALERT, "Incompatible number of arguments for file I/O.");
+ return NULL;
+ }
+
string file = tokens[4];
SG_LOG( SG_IO, SG_INFO, " file name = " << file );
SGFile *ch = new SGFile( file );
io->set_io_channel( ch );
} else if ( medium == "socket" ) {
- string hostname = tokens[4];
+ if ( tokens.size() < 6) {
+ SG_LOG( SG_IO, SG_ALERT, "Incompatible number of arguments for socket communications.");
+ return NULL;
+ }
+ string hostname = tokens[4];
string port = tokens[5];
string style = tokens[6];
FGIO::shutdown_all() {
FGProtocol *p;
- // cout << "processing I/O channels" << endl;
+ // cout << "shutting down all I/O channels" << endl;
typedef vector< FGProtocol* > container;
container::iterator i = io_channels.begin();