string_list tokens = simgear::strutils::split( config, "," );
if (tokens.empty())
{
- SG_LOG( SG_IO, SG_ALERT,
- "Port configuration error: empty config string" );
- return 0;
+ SG_LOG( SG_IO, SG_ALERT,
+ "Port configuration error: empty config string" );
+ return 0;
}
string protocol = tokens[0];
try
{
- if ( protocol == "atcsim" ) {
+ if ( protocol == "atcsim" ) {
FGATCMain *atcsim = new FGATCMain;
- atcsim->set_hz( 30 );
+ 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" );
- delete atcsim;
+ delete atcsim;
return NULL;
}
if ( tokens[1] == "no-pedals" ) {
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;
- } else if ( protocol == "opengc" ) {
- // char wait;
- // printf("Parsed opengc\n"); cin >> wait;
- FGOpenGC *opengc = new FGOpenGC;
- io = opengc;
- } else if ( protocol == "AV400" ) {
- FGAV400 *av400 = new FGAV400;
- io = av400;
- } else if ( protocol == "AV400Sim" ) {
- FGAV400Sim *av400sim = new FGAV400Sim;
- io = av400sim;
+ return atcsim;
+ } else if ( protocol == "atlas" ) {
+ FGAtlas *atlas = new FGAtlas;
+ io = atlas;
+ } else if ( protocol == "opengc" ) {
+ // char wait;
+ // printf("Parsed opengc\n"); cin >> wait;
+ FGOpenGC *opengc = new FGOpenGC;
+ io = opengc;
+ } else if ( protocol == "AV400" ) {
+ FGAV400 *av400 = new FGAV400;
+ io = av400;
+ } else if ( protocol == "AV400Sim" ) {
+ FGAV400Sim *av400sim = new FGAV400Sim;
+ io = av400sim;
} else if ( protocol == "AV400WSimA" ) {
FGAV400WSimA *av400wsima = new FGAV400WSimA;
io = av400wsima;
} else if ( protocol == "AV400WSimB" ) {
FGAV400WSimB *av400wsimb = new FGAV400WSimB;
io = av400wsimb;
- } else if ( protocol == "garmin" ) {
- FGGarmin *garmin = new FGGarmin;
- io = garmin;
- } else if ( protocol == "httpd" ) {
- // determine port
- string port = tokens[1];
- return new FGHttpd( atoi(port.c_str()) );
+ } else if ( protocol == "garmin" ) {
+ FGGarmin *garmin = new FGGarmin;
+ io = garmin;
+ } else if ( protocol == "httpd" ) {
+ // determine port
+ string port = tokens[1];
+ return new FGHttpd( atoi(port.c_str()) );
#ifdef FG_JPEG_SERVER
- } else if ( protocol == "jpg-httpd" ) {
- // determine port
- string port = tokens[1];
- return new FGJpegHttpd( atoi(port.c_str()) );
+ } else if ( protocol == "jpg-httpd" ) {
+ // determine port
+ string port = tokens[1];
+ return new FGJpegHttpd( atoi(port.c_str()) );
#endif
- } else if ( protocol == "joyclient" ) {
- FGJoyClient *joyclient = new FGJoyClient;
- io = joyclient;
+ } else if ( protocol == "joyclient" ) {
+ FGJoyClient *joyclient = new FGJoyClient;
+ io = joyclient;
} else if ( protocol == "jsclient" ) {
FGJsClient *jsclient = new FGJsClient;
io = jsclient;
- } else if ( protocol == "native" ) {
- FGNative *native = new FGNative;
- io = native;
- } else if ( protocol == "native-ctrls" ) {
- FGNativeCtrls *native_ctrls = new FGNativeCtrls;
- io = native_ctrls;
- } else if ( protocol == "native-fdm" ) {
- FGNativeFDM *native_fdm = new FGNativeFDM;
- io = native_fdm;
- } else if ( protocol == "native-gui" ) {
- FGNativeGUI *net_gui = new FGNativeGUI;
- io = net_gui;
- } else if ( protocol == "nmea" ) {
- FGNMEA *nmea = new FGNMEA;
- io = nmea;
- } else if ( protocol == "props" || protocol == "telnet" ) {
- io = new FGProps( tokens );
- return io;
- } else if ( protocol == "pve" ) {
- FGPVE *pve = new FGPVE;
- io = pve;
- } else if ( protocol == "ray" ) {
- FGRAY *ray = new FGRAY;
- io = ray;
- } else if ( protocol == "rul" ) {
- FGRUL *rul = new FGRUL;
- io = rul;
- } else if ( protocol == "generic" ) {
- FGGeneric *generic = new FGGeneric( tokens );
- if (!generic->getInitOk())
- {
- // failed to initialize (i.e. invalid configuration)
- delete generic;
+ } else if ( protocol == "native" ) {
+ FGNative *native = new FGNative;
+ io = native;
+ } else if ( protocol == "native-ctrls" ) {
+ FGNativeCtrls *native_ctrls = new FGNativeCtrls;
+ io = native_ctrls;
+ } else if ( protocol == "native-fdm" ) {
+ FGNativeFDM *native_fdm = new FGNativeFDM;
+ io = native_fdm;
+ } else if ( protocol == "native-gui" ) {
+ FGNativeGUI *net_gui = new FGNativeGUI;
+ io = net_gui;
+ } else if ( protocol == "nmea" ) {
+ FGNMEA *nmea = new FGNMEA;
+ io = nmea;
+ } else if ( protocol == "props" || protocol == "telnet" ) {
+ io = new FGProps( tokens );
+ return io;
+ } else if ( protocol == "pve" ) {
+ FGPVE *pve = new FGPVE;
+ io = pve;
+ } else if ( protocol == "ray" ) {
+ FGRAY *ray = new FGRAY;
+ io = ray;
+ } else if ( protocol == "rul" ) {
+ FGRUL *rul = new FGRUL;
+ io = rul;
+ } else if ( protocol == "generic" ) {
+ FGGeneric *generic = new FGGeneric( tokens );
+ if (!generic->getInitOk())
+ {
+ // failed to initialize (i.e. invalid configuration)
+ delete generic;
+ return NULL;
+ }
+ io = generic;
+ } else if ( protocol == "multiplay" ) {
+ if ( tokens.size() != 5 ) {
+ SG_LOG( SG_IO, SG_ALERT, "Ignoring invalid --multiplay option "
+ "(4 arguments expected: --multiplay=dir,hz,hostname,port)" );
+ return NULL;
+ }
+ string dir = tokens[1];
+ int rate = atoi(tokens[2].c_str());
+ string host = tokens[3];
+
+ short port = atoi(tokens[4].c_str());
+
+ // multiplay used to be handled by an FGProtocol, but no longer. This code
+ // retains compatability with existing command-line syntax
+ fgSetInt("/sim/multiplay/tx-rate-hz", rate);
+ if (dir == "in") {
+ fgSetInt("/sim/multiplay/rxport", port);
+ fgSetString("/sim/multiplay/rxhost", host.c_str());
+ } else if (dir == "out") {
+ fgSetInt("/sim/multiplay/txport", port);
+ fgSetString("/sim/multiplay/txhost", host.c_str());
+ }
+
return NULL;
- }
- io = generic;
- } else if ( protocol == "multiplay" ) {
- if ( tokens.size() != 5 ) {
- SG_LOG( SG_IO, SG_ALERT, "Ignoring invalid --multiplay option "
- "(4 arguments expected: --multiplay=dir,hz,hostname,port)" );
- return NULL;
- }
- string dir = tokens[1];
- int rate = atoi(tokens[2].c_str());
- string host = tokens[3];
-
- short port = atoi(tokens[4].c_str());
-
- // multiplay used to be handled by an FGProtocol, but no longer. This code
- // retains compatability with existing command-line syntax
- fgSetInt("/sim/multiplay/tx-rate-hz", rate);
- if (dir == "in") {
- fgSetInt("/sim/multiplay/rxport", port);
- fgSetString("/sim/multiplay/rxhost", host.c_str());
- } else if (dir == "out") {
- fgSetInt("/sim/multiplay/txport", port);
- fgSetString("/sim/multiplay/txhost", host.c_str());
- }
-
- return NULL;
#ifdef FG_HAVE_HLA
- } else if ( protocol == "hla" ) {
- return new FGHLA(tokens);
+ } else if ( protocol == "hla" ) {
+ return new FGHLA(tokens);
+ }
#endif
- } else {
- return NULL;
- }
+ } else {
+ return NULL;
+ }
}
catch (FGProtocolConfigError& err)
{
- SG_LOG( SG_IO, SG_ALERT, "Port configuration error: " << err.what() );
- delete io;
- return 0;
+ SG_LOG( SG_IO, SG_ALERT, "Port configuration error: " << err.what() );
+ delete io;
+ return 0;
}
if (tokens.size() < 3) {
- SG_LOG( SG_IO, SG_ALERT, "Incompatible number of network arguments.");
- return NULL;
+ 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 );
if ( medium == "serial" ) {
if ( tokens.size() < 5) {
- SG_LOG( SG_IO, SG_ALERT, "Incompatible number of arguments for serial communications.");
- return NULL;
+ 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 );
+ // device name
+ string device = tokens[4];
+ SG_LOG( SG_IO, SG_INFO, " device = " << device );
- // baud
- string baud = tokens[5];
- SG_LOG( SG_IO, SG_INFO, " baud = " << baud );
+ // baud
+ string baud = tokens[5];
+ SG_LOG( SG_IO, SG_INFO, " baud = " << baud );
- SGSerial *ch = new SGSerial( device, baud );
- io->set_io_channel( ch );
+ SGSerial *ch = new SGSerial( device, baud );
+ io->set_io_channel( ch );
if ( protocol == "AV400WSimB" ) {
if ( tokens.size() < 7 ) {
fgavb->set_hz2(hz2);
}
} else if ( medium == "file" ) {
- // file name
+ // file name
if ( tokens.size() < 4) {
- SG_LOG( SG_IO, SG_ALERT, "Incompatible number of arguments for file I/O.");
- return NULL;
+ 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 );
+ string file = tokens[4];
+ SG_LOG( SG_IO, SG_INFO, " file name = " << file );
int repeat = 1;
if (tokens.size() >= 7 && tokens[6] == "repeat") {
if (tokens.size() >= 8) {
repeat = -1;
}
}
- SGFile *ch = new SGFile( file, repeat );
- io->set_io_channel( ch );
+ SGFile *ch = new SGFile( file, repeat );
+ io->set_io_channel( ch );
} else if ( medium == "socket" ) {
if ( tokens.size() < 6) {
- SG_LOG( SG_IO, SG_ALERT, "Incompatible number of arguments for socket communications.");
- return NULL;
+ 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];
+ string hostname = tokens[4];
+ string port = tokens[5];
+ string style = tokens[6];
- SG_LOG( SG_IO, SG_INFO, " hostname = " << hostname );
- SG_LOG( SG_IO, SG_INFO, " port = " << port );
- SG_LOG( SG_IO, SG_INFO, " style = " << style );
+ SG_LOG( SG_IO, SG_INFO, " hostname = " << hostname );
+ SG_LOG( SG_IO, SG_INFO, " port = " << port );
+ SG_LOG( SG_IO, SG_INFO, " style = " << style );
- io->set_io_channel( new SGSocket( hostname, port, style ) );
+ io->set_io_channel( new SGSocket( hostname, port, style ) );
}
return io;
string_list::iterator i = globals->get_channel_options_list()->begin();
string_list::iterator end = globals->get_channel_options_list()->end();
for (; i != end; ++i ) {
- p = parse_port_config( *i );
- if (!p) {
- continue;
- }
-
- p->open();
- if ( !p->is_enabled() ) {
- SG_LOG( SG_IO, SG_ALERT, "I/O Channel config failed." );
- delete p;
- continue;
- }
+ p = parse_port_config( *i );
+ if (!p) {
+ continue;
+ }
+
+ p->open();
+ if ( !p->is_enabled() ) {
+ SG_LOG( SG_IO, SG_ALERT, "I/O Channel config failed." );
+ delete p;
+ continue;
+ }
- io_channels.push_back( p );
+ io_channels.push_back( p );
} // of channel options iteration
}
FGHTTPClient::instance()->update();
}
- // use wall-clock, not simulation, delta time, so that network
- // protocols update when the simulation is paused
- // see http://code.google.com/p/flightgear-bugs/issues/detail?id=125
+ // use wall-clock, not simulation, delta time, so that network
+ // protocols update when the simulation is paused
+ // see http://code.google.com/p/flightgear-bugs/issues/detail?id=125
double delta_time_sec = _realDeltaTime->getDoubleValue();
ProtocolVec::iterator i = io_channels.begin();
ProtocolVec::iterator end = io_channels.end();
for (; i != end; ++i ) {
- FGProtocol* p = *i;
- if (!p->is_enabled()) {
- continue;
- }
-
- p->dec_count_down( delta_time_sec );
- double dt = 1 / p->get_hz();
- if ( p->get_count_down() < 0.33 * dt ) {
- p->process();
- p->inc_count();
- while ( p->get_count_down() < 0.33 * dt ) {
- p->inc_count_down( dt );
- }
- } // of channel processing
+ FGProtocol* p = *i;
+ if (!p->is_enabled()) {
+ continue;
+ }
+
+ p->dec_count_down( delta_time_sec );
+ double dt = 1 / p->get_hz();
+ if ( p->get_count_down() < 0.33 * dt ) {
+ p->process();
+ p->inc_count();
+ while ( p->get_count_down() < 0.33 * dt ) {
+ p->inc_count_down( dt );
+ }
+ } // of channel processing
} // of io_channels iteration
}
ProtocolVec::iterator end = io_channels.end();
for (; i != end; ++i )
{
- p = *i;
- if ( p->is_enabled() ) {
- p->close();
- }
+ p = *i;
+ if ( p->is_enabled() ) {
+ p->close();
+ }
- delete p;
+ delete p;
}
- io_channels.clear();
+ io_channels.clear();
}
void