]> git.mxchange.org Git - flightgear.git/commitdiff
Added support for passing wind speed/direction.
authorcurt <curt>
Wed, 16 Oct 2002 03:43:52 +0000 (03:43 +0000)
committercurt <curt>
Wed, 16 Oct 2002 03:43:52 +0000 (03:43 +0000)
Added support for passing various freeze commands to fdm.
Initial support for in-air starts.

src/FDM/ExternalNet/ExternalNet.cxx

index eae848793bc55928ef6589a528baaf6d2f22241e..e2691f4f04a9fd4c246ad44e31be5b497a65dd9f 100644 (file)
@@ -120,6 +120,9 @@ static void global2net( FGNetCtrls *net ) {
     net->master_alt = node->getChild("master-alt")->getBoolValue();
     net->master_avionics = node->getChild("master-avionics")->getBoolValue();
 
+    net->wind_speed_kt = fgGetDouble("/environment/wind-speed-kt");
+    net->wind_dir_deg = fgGetDouble("/environment/wind-from-heading-deg");
+
     // cur_fdm_state->get_ground_elev_ft() is what we want ... this
     // reports the altitude of the aircraft.
     // "/environment/ground-elevation-m" reports the ground elevation
@@ -128,6 +131,16 @@ static void global2net( FGNetCtrls *net ) {
     net->hground = cur_fdm_state->get_ground_elev_ft() * SG_FEET_TO_METER;
     net->magvar = fgGetDouble("/environment/magnetic-variation-deg");
     net->speedup = fgGetInt("/sim/speed-up");
+    net->freeze = 0;
+    if ( fgGetBool("/sim/freeze/master") ) {
+        net->freeze |= 0x01;
+    }
+    if ( fgGetBool("/sim/freeze/position") ) {
+        net->freeze |= 0x02;
+    }
+    if ( fgGetBool("/sim/freeze/fuel") ) {
+        net->freeze |= 0x04;
+    }
 
     // convert to network byte order
     net->version = htonl(net->version);
@@ -158,9 +171,12 @@ static void global2net( FGNetCtrls *net ) {
     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);
 }
 
 
@@ -379,8 +395,10 @@ void FGExternalNet::init() {
 
     double lon = fgGetDouble( "/position/longitude-deg" );
     double lat = fgGetDouble( "/position/latitude-deg" );
+    double alt = fgGetDouble( "/position/altitude-ft" );
     double ground = fgGetDouble( "/environment/ground-elevation-m" );
     double heading = fgGetDouble("/orientation/heading-deg");
+    double speed = fgGetDouble( "/velocities/airspeed-kt" );
 
     char cmd[256];
 
@@ -395,11 +413,21 @@ void FGExternalNet::init() {
     while ( !http->isDone(1000000) ) http->poll(0);
     delete http;
 
+    sprintf( cmd, "/altitude-ft?value=%.8f", alt );
+    http = new HTTPClient( fdm_host.c_str(), cmd_port, cmd );
+    while ( !http->isDone(1000000) ) http->poll(0);
+    delete http;
+
     sprintf( cmd, "/ground-m?value=%.8f", ground );
     http = new HTTPClient( fdm_host.c_str(), cmd_port, cmd );
     while ( !http->isDone(1000000) ) http->poll(0);
     delete http;
 
+    sprintf( cmd, "/speed-kts?value=%.8f", speed );
+    http = new HTTPClient( fdm_host.c_str(), cmd_port, cmd );
+    while ( !http->isDone(1000000) ) http->poll(0);
+    delete http;
+
     sprintf( cmd, "/heading-deg?value=%.8f", heading );
     http = new HTTPClient( fdm_host.c_str(), cmd_port, cmd );
     while ( !http->isDone(1000000) ) http->poll(0);
@@ -407,7 +435,11 @@ void FGExternalNet::init() {
 
     SG_LOG( SG_IO, SG_INFO, "before sending reset command." );
 
-    sprintf( cmd, "/reset?value=ground" );
+    if( fgGetBool("/sim/startup/onground") ) {
+      sprintf( cmd, "/reset?value=ground" );
+    } else {
+      sprintf( cmd, "/reset?value=air" );
+    }
     http = new HTTPClient( fdm_host.c_str(), cmd_port, cmd );
     while ( !http->isDone(1000000) ) http->poll(0);
     delete http;