]> git.mxchange.org Git - flightgear.git/blobdiff - src/Network/native_ctrls.cxx
Moved some of the low level scene graph construction code over to simgear.
[flightgear.git] / src / Network / native_ctrls.cxx
index bf84bb571f8b7552f5194e14a2ef74938116ea34..6a4d858b2c04d5e4747616f04763baad046ae4a1 100644 (file)
@@ -98,58 +98,66 @@ static void htond (double &x)
 
 
 // Populate the FGNetCtrls structure from the property tree.
-void FGProps2NetCtrls( FGNetCtrls *net ) {
+void FGProps2NetCtrls( FGNetCtrls *net, bool net_byte_order ) {
     int i;
-
-    SGPropertyNode * node = fgGetNode("/controls", true);
+    SGPropertyNode * node;
+    SGPropertyNode * tempnode;
 
     // fill in values
+    node  = fgGetNode("/controls/flight", true);
     net->version = FG_NET_CTRLS_VERSION;
     net->aileron = node->getDoubleValue( "aileron" );
     net->elevator = node->getDoubleValue( "elevator" );
     net->elevator_trim = node->getDoubleValue( "elevator-trim" );
     net->rudder = node->getDoubleValue( "rudder" );
     net->flaps = node->getDoubleValue( "flaps" );
+    node = fgGetNode("/controls", true); 
     net->flaps_power
             = node->getDoubleValue( "/systems/electrical/outputs/flaps",
                                     1.0 ) >= 1.0;
     net->num_engines = FGNetCtrls::FG_MAX_ENGINES;
     for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
+        node = fgGetNode("/controls/engines/engine", i );
        net->throttle[i] = node->getDoubleValue( "throttle", 0.0 );
        net->mixture[i] = node->getDoubleValue( "mixture", 0.0 );
-       net->fuel_pump_power[i]
-            = node->getDoubleValue( "/systems/electrical/outputs/fuel-pump",
-                                    1.0 ) >= 1.0;
        net->prop_advance[i] = node->getDoubleValue( "propeller-pitch", 0.0 );
        net->magnetos[i] = node->getIntValue( "magnetos", 0 );
        if ( i == 0 ) {
          // cout << "Magnetos -> " << node->getIntValue( "magnetos", 0 );
        }
-       net->starter_power[i]
-            = node->getDoubleValue( "/systems/electrical/outputs/starter",
-                                    1.0 ) >= 1.0;
        if ( i == 0 ) {
-         // cout << " Starter -> " << node->getIntValue( "stater", false )
+         // cout << "Starter -> " << node->getIntValue( "starter", false )
          //      << endl;
        }
+        node = fgGetNode("/controls", true);
+       net->fuel_pump_power[i]
+            = node->getDoubleValue( "/systems/electrical/outputs/fuel-pump",
+                                    1.0 ) >= 1.0;
+
+       net->starter_power[i]
+            = node->getDoubleValue( "/systems/electrical/outputs/starter",
+                                    1.0 ) >= 1.0;
     }
     net->num_tanks = FGNetCtrls::FG_MAX_TANKS;
     for ( i = 0; i < FGNetCtrls::FG_MAX_TANKS; ++i ) {
-        if ( node->getChild("fuel-selector", i) != 0 ) {
+        node = fgGetNode("/controls/fuel/tank", i);
+        if ( node->getChild("fuel-selector") != 0 ) {
             net->fuel_selector[i]
-                = node->getChild("fuel-selector", i)->getDoubleValue();
+                = node->getChild("fuel-selector")->getBoolValue();
         } else {
             net->fuel_selector[i] = false;
         }
     }
     net->num_wheels = FGNetCtrls::FG_MAX_WHEELS;
+    tempnode = fgGetNode("/controls/gear", true);
     for ( i = 0; i < FGNetCtrls::FG_MAX_WHEELS; ++i ) {
-        if ( node->getChild("brakes", i) != 0 ) {
-            if ( node->getChild("parking-brake")->getDoubleValue() > 0.0 ) {
+        node = fgGetNode("/controls/gear/wheel", i);
+        if ( node->getChild("brake") != 0 ) {
+            if ( tempnode->getChild("parking-brake")->getDoubleValue() > 0.0 ) {
                 net->brake[i] = 1.0;
            } else {
                 net->brake[i]
-                    = node->getChild("brakes", i)->getDoubleValue();
+                    = node->getChild("brake")->getDoubleValue();
             }
         } else {
             net->brake[i] = 0.0;
@@ -183,85 +191,89 @@ void FGProps2NetCtrls( FGNetCtrls *net ) {
         net->freeze |= 0x04;
     }
 
-    // convert to network byte order
-    net->version = htonl(net->version);
-    htond(net->aileron);
-    htond(net->elevator);
-    htond(net->elevator_trim);
-    htond(net->rudder);
-    htond(net->flaps);
-    net->flaps_power = htonl(net->flaps_power);
-    for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
-       htond(net->throttle[i]);
-       htond(net->mixture[i]);
-        net->fuel_pump_power[i] = htonl(net->fuel_pump_power[i]);
-       htond(net->prop_advance[i]);
-       net->magnetos[i] = htonl(net->magnetos[i]);
-       net->starter_power[i] = htonl(net->starter_power[i]);
-    }
-    net->num_engines = htonl(net->num_engines);
-    for ( i = 0; i < FGNetCtrls::FG_MAX_TANKS; ++i ) {
-        net->fuel_selector[i] = htonl(net->fuel_selector[i]);
-    }
-    net->num_tanks = htonl(net->num_tanks);
-    for ( i = 0; i < FGNetCtrls::FG_MAX_WHEELS; ++i ) {
-       htond(net->brake[i]);
+    if ( net_byte_order ) {
+        // convert to network byte order
+        net->version = htonl(net->version);
+        htond(net->aileron);
+        htond(net->elevator);
+        htond(net->elevator_trim);
+        htond(net->rudder);
+        htond(net->flaps);
+        net->flaps_power = htonl(net->flaps_power);
+        for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
+            htond(net->throttle[i]);
+            htond(net->mixture[i]);
+            net->fuel_pump_power[i] = htonl(net->fuel_pump_power[i]);
+            htond(net->prop_advance[i]);
+            net->magnetos[i] = htonl(net->magnetos[i]);
+            net->starter_power[i] = htonl(net->starter_power[i]);
+        }
+        net->num_engines = htonl(net->num_engines);
+        for ( i = 0; i < FGNetCtrls::FG_MAX_TANKS; ++i ) {
+            net->fuel_selector[i] = htonl(net->fuel_selector[i]);
+        }
+        net->num_tanks = htonl(net->num_tanks);
+        for ( i = 0; i < FGNetCtrls::FG_MAX_WHEELS; ++i ) {
+            htond(net->brake[i]);
+        }
+        net->num_wheels = htonl(net->num_wheels);
+        net->gear_handle = htonl(net->gear_handle);
+        net->master_bat = htonl(net->master_bat);
+        net->master_alt = htonl(net->master_alt);
+        net->master_avionics = htonl(net->master_avionics);
+        htond(net->wind_speed_kt);
+        htond(net->wind_dir_deg);
+        htond(net->hground);
+        htond(net->magvar);
+        net->speedup = htonl(net->speedup);
+        net->freeze = htonl(net->freeze);
     }
-    net->num_wheels = htonl(net->num_wheels);
-    net->gear_handle = htonl(net->gear_handle);
-    net->master_bat = htonl(net->master_bat);
-    net->master_alt = htonl(net->master_alt);
-    net->master_avionics = htonl(net->master_avionics);
-    htond(net->wind_speed_kt);
-    htond(net->wind_dir_deg);
-    htond(net->hground);
-    htond(net->magvar);
-    net->speedup = htonl(net->speedup);
-    net->freeze = htonl(net->freeze);
 }
 
 
 // Update the property tree from the FGNetCtrls structure.
-void FGNetCtrls2Props( FGNetCtrls *net ) {
+void FGNetCtrls2Props( FGNetCtrls *net, bool net_byte_order ) {
     int i;
 
-    SGPropertyNode * node = fgGetNode("/controls", true);
-
-    // convert from network byte order
-    net->version = htonl(net->version);
-    htond(net->aileron);
-    htond(net->elevator);
-    htond(net->elevator_trim);
-    htond(net->rudder);
-    htond(net->flaps);
-    net->flaps_power = htonl(net->flaps_power);
-    net->num_engines = htonl(net->num_engines);
-    for ( i = 0; i < net->num_engines; ++i ) {
-        net->magnetos[i] = htonl(net->magnetos[i]);
-        net->starter_power[i] = htonl(net->starter_power[i]);
-       htond(net->throttle[i]);
-       htond(net->mixture[i]);
-        net->fuel_pump_power[i] = htonl(net->fuel_pump_power[i]);
-       htond(net->prop_advance[i]);
-    }
-    net->num_tanks = htonl(net->num_tanks);
-    for ( i = 0; i < net->num_tanks; ++i ) {
-       net->fuel_selector[i] = htonl(net->fuel_selector[i]);
-    }
-    net->num_wheels = htonl(net->num_wheels);
-    for ( i = 0; i < net->num_wheels; ++i ) {
-       htond(net->brake[i]);
+    SGPropertyNode * node;
+
+    if ( net_byte_order ) {
+        // convert from network byte order
+        net->version = htonl(net->version);
+        htond(net->aileron);
+        htond(net->elevator);
+        htond(net->elevator_trim);
+        htond(net->rudder);
+        htond(net->flaps);
+        net->flaps_power = htonl(net->flaps_power);
+        net->num_engines = htonl(net->num_engines);
+        for ( i = 0; i < net->num_engines; ++i ) {
+            net->magnetos[i] = htonl(net->magnetos[i]);
+            net->starter_power[i] = htonl(net->starter_power[i]);
+            htond(net->throttle[i]);
+            htond(net->mixture[i]);
+            net->fuel_pump_power[i] = htonl(net->fuel_pump_power[i]);
+            htond(net->prop_advance[i]);
+        }
+        net->num_tanks = htonl(net->num_tanks);
+        for ( i = 0; i < net->num_tanks; ++i ) {
+            net->fuel_selector[i] = htonl(net->fuel_selector[i]);
+        }
+        net->num_wheels = htonl(net->num_wheels);
+        for ( i = 0; i < net->num_wheels; ++i ) {
+            htond(net->brake[i]);
+        }
+        net->gear_handle = htonl(net->gear_handle);
+        net->master_bat = htonl(net->master_bat);
+        net->master_alt = htonl(net->master_alt);
+        net->master_avionics = htonl(net->master_avionics);
+        htond(net->wind_speed_kt);
+        htond(net->wind_dir_deg);
+        htond(net->hground);
+        htond(net->magvar);
+        net->speedup = htonl(net->speedup);
+        net->freeze = htonl(net->freeze);
     }
-    net->gear_handle = htonl(net->gear_handle);
-    net->master_bat = htonl(net->master_bat);
-    net->master_alt = htonl(net->master_alt);
-    net->master_avionics = htonl(net->master_avionics);
-    htond(net->wind_speed_kt);
-    htond(net->wind_dir_deg);
-    htond(net->hground);
-    htond(net->magvar);
-    net->speedup = htonl(net->speedup);
-    net->freeze = htonl(net->freeze);
 
     if ( net->version != FG_NET_CTRLS_VERSION ) {
        SG_LOG( SG_IO, SG_ALERT,
@@ -270,7 +282,7 @@ void FGNetCtrls2Props( FGNetCtrls *net ) {
                 "FlightGear needs version = " << FG_NET_CTRLS_VERSION
                 << " but is receiving version = "  << net->version );
     }
-
+    node = fgGetNode("/controls/flight", true);
     node->setDoubleValue( "aileron", net->aileron );
     node->setDoubleValue( "elevator", net->elevator );
     node->setDoubleValue( "elevator-trim", net->elevator_trim );
@@ -280,11 +292,12 @@ void FGNetCtrls2Props( FGNetCtrls *net ) {
     fgSetBool( "/systems/electrical/outputs/flaps", net->flaps_power );
 
     for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
-        node->getChild( "throttle", i )->setDoubleValue( net->throttle[i] );
-        node->getChild( "mixture", i )->setDoubleValue( net->mixture[i] );
-        node->getChild( "propeller-pitch", i )
+        node = fgGetNode("/controls/engines/engine", i);
+        node->getChild( "throttle" )->setDoubleValue( net->throttle[i] );
+        node->getChild( "mixture" )->setDoubleValue( net->mixture[i] );
+        node->getChild( "propeller-pitch" )
             ->setDoubleValue( net->prop_advance[i] );
-        node->getChild( "magnetos", i )->setDoubleValue( net->magnetos[i] );
+        node->getChild( "magnetos" )->setDoubleValue( net->magnetos[i] );
     }
 
     fgSetBool( "/systems/electrical/outputs/fuel-pump",
@@ -293,13 +306,16 @@ void FGNetCtrls2Props( FGNetCtrls *net ) {
                net->starter_power[0] );
 
     for ( i = 0; i < FGNetCtrls::FG_MAX_TANKS; ++i ) {
-        node->getChild( "fuel-selector", i )
+        node = fgGetNode( "/controls/fuel/tank", i );
+        node->getChild( "fuel-selector" )
             ->setBoolValue( net->fuel_selector[i] );
     }
     for ( i = 0; i < FGNetCtrls::FG_MAX_WHEELS; ++i ) {
-        node->getChild( "brakes", i )->setDoubleValue( net->brake[i] );
+        node = fgGetNode( "/controls/gear/wheel", i );
+        node->getChild( "brake" )->setDoubleValue( net->brake[i] );
     }
 
+    node = fgGetNode( "/controls/gear", true );
     node->setBoolValue( "gear-down", net->gear_handle );
 
     node = fgGetNode( "/controls/switches", true );
@@ -323,36 +339,6 @@ void FGNetCtrls2Props( FGNetCtrls *net ) {
 }
 
 
-static void net2global( const FGNetCtrls *net, FGControls *global ) {
-    int i;
-
-    if ( net->version == FG_NET_CTRLS_VERSION ) {
-       globals->get_controls()->set_aileron( net->aileron );
-       globals->get_controls()->set_elevator( net->elevator );
-       globals->get_controls()->set_elevator_trim( net->elevator_trim );
-       globals->get_controls()->set_rudder( net->rudder );
-       globals->get_controls()->set_flaps( net->flaps );
-       for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {    
-           globals->get_controls()->set_throttle( i, net->throttle[i] );
-           globals->get_controls()->set_mixture( i, net->mixture[i] );
-           globals->get_controls()->set_prop_advance( i, net->prop_advance[i]);
-       }
-       for ( i = 0; i < FGNetCtrls::FG_MAX_TANKS; ++i ) {
-           globals->get_controls()->set_fuel_selector( i, net->fuel_selector[i] );
-       }
-       for ( i = 0; i < FGNetCtrls::FG_MAX_WHEELS; ++i ) {
-           globals->get_controls()->set_brake( i, net->brake[i] );
-       }
-       globals->get_controls()->set_gear_down( net->gear_handle );
-       globals->get_scenery()->set_cur_elev( net->hground );
-    } else {
-       SG_LOG( SG_IO, SG_ALERT, "Error: version mismatch in net2global()" );
-       SG_LOG( SG_IO, SG_ALERT,
-               "\tsomeone needs to upgrade net_ctrls.hxx and recompile." );
-    }
-}
-
-
 // process work for this port
 bool FGNativeCtrls::process() {
     SGIOChannel *io = get_io_channel();
@@ -371,12 +357,12 @@ bool FGNativeCtrls::process() {
        if ( io->get_type() == sgFileType ) {
            if ( io->read( (char *)(& net_ctrls), length ) == length ) {
                SG_LOG( SG_IO, SG_DEBUG, "Success reading data." );
-               net2global( &net_ctrls, globals->get_controls() );
+               FGNetCtrls2Props( &net_ctrls );
            }
        } else {
            while ( io->read( (char *)(& net_ctrls), length ) == length ) {
                SG_LOG( SG_IO, SG_DEBUG, "Success reading data." );
-               net2global( &net_ctrls, globals->get_controls() );
+               FGNetCtrls2Props( &net_ctrls );
            }
        }
     }