X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Ffg_io.cxx;h=36ca64433d3f6dc923acdfcdaa59374ea88856d7;hb=f467ba360902e4395d23b35481c55844a3946b91;hp=e0e2a5c241957adab5f5061b0d8447c47bfff7f2;hpb=667e64e1ebc86a0c53112b92b53475898f315c36;p=flightgear.git diff --git a/src/Main/fg_io.cxx b/src/Main/fg_io.cxx index e0e2a5c24..36ca64433 100644 --- a/src/Main/fg_io.cxx +++ b/src/Main/fg_io.cxx @@ -26,7 +26,7 @@ #include -#include // atoi() +#include // atoi() #include @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #ifdef FG_JPEG_SERVER @@ -67,6 +68,7 @@ #include "globals.hxx" #include "fg_io.hxx" +using std::atoi; using std::string; @@ -135,6 +137,9 @@ FGIO::parse_port_config( const string& config ) } else if ( protocol == "AV400" ) { FGAV400 *av400 = new FGAV400; io = av400; + } else if ( protocol == "AV400Sim" ) { + FGAV400Sim *av400sim = new FGAV400Sim; + io = av400sim; } else if ( protocol == "garmin" ) { FGGarmin *garmin = new FGGarmin; io = garmin; @@ -182,14 +187,21 @@ FGIO::parse_port_config( const string& config ) FGRUL *rul = new FGRUL; io = rul; } else if ( protocol == "generic" ) { - int configToken; - if (tokens[1] == "socket") + size_t configToken; + if (tokens[1] == "socket") { configToken = 7; - else if (tokens[1] == "file") + } else if (tokens[1] == "file") { configToken = 5; - else + } else { configToken = 6; - FGGeneric *generic = new FGGeneric( tokens[configToken] ); + } + + if (configToken >= tokens.size()) { + SG_LOG( SG_IO, SG_ALERT, "Not enough tokens passed for the generic protocol."); + return NULL; + } + + FGGeneric *generic = new FGGeneric( tokens ); io = generic; } else if ( protocol == "multiplay" ) { if ( tokens.size() != 5 ) { @@ -242,6 +254,7 @@ FGIO::parse_port_config( const string& config ) string baud = tokens[5]; SG_LOG( SG_IO, SG_INFO, " baud = " << baud ); + SGSerial *ch = new SGSerial( device, baud ); io->set_io_channel( ch ); } else if ( medium == "file" ) { @@ -253,9 +266,17 @@ FGIO::parse_port_config( const string& config ) string file = tokens[4]; SG_LOG( SG_IO, SG_INFO, " file name = " << file ); - bool repeat = false; - if (tokens.size() >= 7 && tokens[6] == "repeat") - repeat = true; + int repeat = 1; + if (tokens.size() >= 7 && tokens[6] == "repeat") { + if (tokens.size() >= 8) { + repeat = atoi(tokens[7].c_str()); + FGGeneric* generic = dynamic_cast(io); + if (generic) + generic->setExitOnError(true); + } else { + repeat = -1; + } + } SGFile *ch = new SGFile( file, repeat ); io->set_io_channel( ch ); } else if ( medium == "socket" ) { @@ -313,6 +334,11 @@ FGIO::init() } } +void +FGIO::reinit() +{ +} + // process any IO channel work void