raw->rudder = node->getDoubleValue( "rudder" );
raw->flaps = node->getDoubleValue( "flaps" );
for ( i = 0; i < FGRawCtrls::FG_MAX_ENGINES; ++i ) {
- raw->throttle[i] = node->getDoubleValue( "throttle", i );
- raw->mixture[i] = node->getDoubleValue( "mixture", i );
- raw->prop_advance[i] = node->getDoubleValue( "propeller-pitch", i );
- raw->magnetos[i] = node->getIntValue( "magnetos", i );
- raw->starter[i] = node->getBoolValue( "starter", i );
+ raw->throttle[i] = node->getDoubleValue( "throttle", 0.0 );
+ raw->mixture[i] = node->getDoubleValue( "mixture", 0.0 );
+ raw->prop_advance[i] = node->getDoubleValue( "propeller-pitch", 0.0 );
+ raw->magnetos[i] = node->getIntValue( "magnetos", 0 );
+ if ( i == 0 ) {
+ // cout << "Magnetos -> " << node->getIntValue( "magnetos", 0 );
+ }
+ raw->starter[i] = node->getBoolValue( "starter", false );
+ if ( i == 0 ) {
+ // cout << " Starter -> " << node->getIntValue( "stater", false )
+ // << endl;
+ }
}
for ( i = 0; i < FGRawCtrls::FG_MAX_WHEELS; ++i ) {
- raw->brake[i] = node->getDoubleValue( "brakes", i );
+ raw->brake[i] = node->getDoubleValue( "brakes", 0.0 );
}
raw->hground = fgGetDouble( "/environment/ground-elevation-m" );
raw->magvar = fgGetDouble("/environment/magnetic-variation-deg");
}
net->num_wheels = htonl(net->num_wheels);
- for ( i = 0; i < net->num_wheels; ++i ) {
- net->wow[i] = htonl(net->wow[i]);
- }
+ // I don't need to convert the Wow flags, since they are one byte in size
+ htond(net->flap_deflection);
net->cur_time = ntohl(net->cur_time);
net->warp = ntohl(net->warp);
node->setDoubleValue("wow", net->wow[i] );
}
+ fgSetDouble("/surface-positions/flap-pos-norm", net->flap_deflection);
+ SGPropertyNode * node = fgGetNode("/controls", true);
+ fgSetDouble("/surface-positions/elevator-pos-norm",
+ node->getDoubleValue( "elevator" ));
+ fgSetDouble("/surface-positions/rudder-pos-norm",
+ node->getDoubleValue( "rudder" ));
+ fgSetDouble("/surface-positions/left-aileron-pos-norm",
+ node->getDoubleValue( "aileron" ));
+ fgSetDouble("/surface-positions/right-aileron-pos-norm",
+ -node->getDoubleValue( "aileron" ));
+
/* these are ignored for now ... */
/*
if ( net->cur_time ) {
FGExternalNet::FGExternalNet( double dt, string host, int dop, int dip, int cp )
{
- set_delta_t( dt );
+// set_delta_t( dt );
valid = true;
}
-// Run an iteration of the EOM. This is a NOP here because the flight
-// model values are getting filled in elsewhere (most likely from some
-// external source.)
-void FGExternalNet::update( int multiloop ) {
+// Run an iteration of the EOM.
+void FGExternalNet::update( double dt ) {
int length;
int result;
+ if (is_suspended())
+ return;
+
// Send control positions to remote fdm
length = sizeof(ctrls);
global2raw( &ctrls );
// Read next set of FDM data (blocking enabled to maintain 'sync')
length = sizeof(fdm);
- if ( (result = data_server.recv( (char *)(& fdm), length, 0)) >= 0 ) {
+ while ( (result = data_server.recv( (char *)(& fdm), length, 0)) >= 0 ) {
SG_LOG( SG_IO, SG_DEBUG, "Success reading data." );
net2global( &fdm );
}