diff --git a/utils/fgpanel/FGPanelProtocol.cxx b/utils/fgpanel/FGPanelProtocol.cxx index 7efc849ed..3f4b54a75 100644 --- a/utils/fgpanel/FGPanelProtocol.cxx +++ b/utils/fgpanel/FGPanelProtocol.cxx @@ -123,15 +123,25 @@ FGPanelProtocol::~FGPanelProtocol() void FGPanelProtocol::update( double dt ) { - char buf[8192]; + char buf[2][8192]; if( io == NULL ) return; - int length = io->readline( buf, sizeof(buf)-1 ); - buf[sizeof(buf)-1] = 0; - if ( length > 0 ) { - vector tokens = simgear::strutils::split( buf, "," ); + // read all available lines, keep last one + int Page = 0; + bool HaveData = false; + while ( io->readline( buf[Page], sizeof(buf[Page])-1 ) > 0 ) + { + HaveData = true; + Page ^= 1; + } + + if ( HaveData ) { + // process most recent line of data + Page ^= 1; + buf[Page][sizeof(buf[Page])-1] = 0; + vector tokens = simgear::strutils::split( buf[Page], "," ); for( vector::size_type i = 0; i < tokens.size(); i++ ) { if( i < propertySetterVector.size() ) propertySetterVector[i]->setValue( tokens[i].c_str() );