]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/UIUCModel/uiuc_wrapper.cpp
Reset: work with threaded OSG modes
[flightgear.git] / src / FDM / UIUCModel / uiuc_wrapper.cpp
index ba2333889681d30b1653be4028b20fc9838975f0..47897560e644e1d9e919b437116e4b4c866dc62b 100644 (file)
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
+
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA or view http://www.gnu.org/copyleft/gpl.html.
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
 **********************************************************************/
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 
+#include <iostream>
+#include <cstring>
+
 #include <simgear/compiler.h>
 #include <simgear/misc/sg_path.hxx>
-#include <Aircraft/aircraft.hxx>
 #include <Main/fg_props.hxx>
 
 #include "uiuc_aircraft.h"
-#include "uiuc_aircraftdir.h"
 #include "uiuc_coefficients.h"
 #include "uiuc_getwind.h"
 #include "uiuc_engine.h"
 //#include "uiuc_network.h"
 #include "uiuc_get_flapper.h"
 
-SG_USING_STD(cout);
-SG_USING_STD(endl);
-
 extern "C" void uiuc_initial_init ();
 extern "C" void uiuc_defaults_inits ();
 extern "C" void uiuc_vel_init ();
@@ -119,8 +116,7 @@ extern "C" void uiuc_record_routine(double dt);
 extern "C" void uiuc_network_recv_routine();
 extern "C" void uiuc_network_send_routine();
 
-AIRCRAFT *aircraft_ = new AIRCRAFT;
-AIRCRAFTDIR *aircraftdir_ = new AIRCRAFTDIR;
+AIRCRAFT *aircraft_ = 0;
 
 // SendArray testarray(4950);
 
@@ -134,9 +130,11 @@ AIRCRAFTDIR *aircraftdir_ = new AIRCRAFTDIR;
 
 void uiuc_initial_init ()
 {
-  // This function called from both ls_step and ls_model(uiuc model side).
-  // Apply brute force initializations, which override ls_step and ls_aux values
-  // for the first time step.
+  // This function is called from uiuc_init_2_wrapper (uiuc_aero.c in LaRCsim)
+  // which is called from ls_step and ls_model.
+  // Apply brute force initializations, which override unwanted changes
+  // performed by LaRCsim.
+  // Used during initialization (while Simtime=0).
   if (P_body_init_true)
     P_body = P_body_init;
   if (Q_body_init_true)
@@ -161,7 +159,10 @@ void uiuc_initial_init ()
 
 void uiuc_defaults_inits ()
 {
-  // set defaults and initialize (called from ls_step.c at Simtime=0)
+  if (aircraft_ == 0)
+    aircraft_ = new AIRCRAFT;
+
+  // set defaults and initialize (called once from uiuc_init_2_wrapper)
 
   //fog inits 
   fog_field = 0;
@@ -173,105 +174,124 @@ void uiuc_defaults_inits ()
   fog_current_segment = 0;
   Fog = 0;
 
-  use_V_rel_wind_2U = 0;
-  nondim_rate_V_rel_wind = 0;
-  use_abs_U_body_2U = 0;
-  use_dyn_on_speed_curve1 = 0;
-  use_Alpha_dot_on_speed = 0;
-  use_gamma_horiz_on_speed = 0;
-  b_downwashMode = 0;
-  P_body_init_true = 0;
-  Q_body_init_true = 0;
-  R_body_init_true = 0;
-  Phi_init_true = 0;
-  Theta_init_true = 0;
-  Psi_init_true = 0;
-  Alpha_init_true = 0;
-  Beta_init_true = 0;
-  U_body_init_true = 0;
-  V_body_init_true = 0;
-  W_body_init_true = 0;
-  trim_case_2 = 0;
-  use_uiuc_network = 0;
-  old_flap_routine = 0;
-  icing_demo = 0;
-  outside_control = 0;
-  set_Long_trim = 0;
-  zero_Long_trim = 0;
-  elevator_step = 0;
-  elevator_singlet = 0;
-  elevator_doublet = 0;
-  elevator_input = 0;
-  aileron_input = 0;
-  rudder_input = 0;
-  pilot_elev_no = 0;
-  pilot_elev_no_check = 0;
-  pilot_ail_no = 0;
-  pilot_ail_no_check = 0;
-  pilot_rud_no = 0;
-  pilot_rud_no_check = 0;
-  use_flaps = 0;
-  use_spoilers = 0;
-  flap_pos_input = 0;
-  use_elevator_sas_type1 = 0;
-  use_elevator_sas_max = 0;
-  use_elevator_sas_min = 0;
-  use_elevator_stick_gain = 0;
-  use_aileron_sas_type1 = 0;
-  use_aileron_sas_max = 0;
-  use_aileron_stick_gain = 0;
-  use_rudder_sas_type1 = 0;
-  use_rudder_sas_max = 0;
-  use_rudder_stick_gain = 0;
-  simpleSingleModel = 0;
-  Throttle_pct_input = 0;
-  gyroForce_Q_body = 0;
-  gyroForce_R_body = 0;
-  b_slipstreamEffects = 0;
-  Xp_input = 0;
-  Zp_input = 0;
-  Mp_input = 0;
-  b_CLK = 0;
+  use_V_rel_wind_2U = false;
+  nondim_rate_V_rel_wind = false;
+  use_abs_U_body_2U = false;
+  use_dyn_on_speed_curve1 = false;
+  use_Alpha_dot_on_speed = false;
+  use_gamma_horiz_on_speed = false;
+  b_downwashMode = false;
+  P_body_init_true = false;
+  Q_body_init_true = false;
+  R_body_init_true = false;
+  Phi_init_true = false;
+  Theta_init_true = false;
+  Psi_init_true = false;
+  Alpha_init_true = false;
+  Beta_init_true = false;
+  U_body_init_true = false;
+  V_body_init_true = false;
+  W_body_init_true = false;
+  trim_case_2 = false;
+  use_uiuc_network = false;
+  icing_demo = false;
+  outside_control = false;
+  set_Long_trim = false;
+  zero_Long_trim = false;
+  elevator_step = false;
+  elevator_singlet = false;
+  elevator_doublet = false;
+  elevator_input = false;
+  elevator_input_ntime = 0;
+  aileron_input = false;
+  aileron_input_ntime = 0;
+  rudder_input = false;
+  rudder_input_ntime = 0;
+  pilot_elev_no = false;
+  pilot_elev_no_check = false;
+  pilot_ail_no = false;
+  pilot_ail_no_check = false;
+  pilot_rud_no = false;
+  pilot_rud_no_check = false;
+  use_flaps = false;
+  use_spoilers = false;
+  flap_pos_input = false;
+  flap_pos_input_ntime = 0;
+  use_elevator_sas_type1 = false;
+  use_elevator_sas_max = false;
+  use_elevator_sas_min = false;
+  use_elevator_stick_gain = false;
+  use_aileron_sas_type1 = false;
+  use_aileron_sas_max = false;
+  use_aileron_stick_gain = false;
+  use_rudder_sas_type1 = false;
+  use_rudder_sas_max = false;
+  use_rudder_stick_gain = false;
+  simpleSingleModel = false;
+  Throttle_pct_input = false;
+  Throttle_pct_input_ntime = 0;
+  gyroForce_Q_body = false;
+  gyroForce_R_body = false;
+  b_slipstreamEffects = false;
+  Xp_input = false;
+  Xp_input_ntime = 0;
+  Zp_input = false;
+  Zp_input_ntime = 0;
+  Mp_input = false;
+  Mp_input_ntime = 0;
+  b_CLK = false;
   //  gear_model[MAX_GEAR]
-  memset(gear_model,0,MAX_GEAR*sizeof(gear_model[0])); 
-  use_gear = 0;
+  memset(gear_model,false,MAX_GEAR*sizeof(gear_model[0])); 
+  use_gear = false;
   // start with gear down if it is ultimately used
   gear_pos_norm = 1;
-  ice_model = 0;
-  ice_on = 0;
-  beta_model = 0;
+  ice_model = false;
+  ice_on = false;
+  beta_model = false;
   //  bootTrue[20] = 0;
-  eta_from_file = 0;
-  eta_wing_left_input = 0;
-  eta_wing_right_input = 0;
-  eta_tail_input = 0;
-  demo_eps_alpha_max = 0;
-  demo_eps_pitch_max = 0;
-  demo_eps_pitch_min = 0;
-  demo_eps_roll_max = 0;
-  demo_eps_thrust_min = 0;
-  demo_eps_airspeed_max = 0;
-  demo_eps_airspeed_min = 0;
-  demo_eps_flap_max = 0;
-  demo_boot_cycle_tail = 0;
-  demo_boot_cycle_wing_left = 0;
-  demo_boot_cycle_wing_right = 0;
-  demo_eps_pitch_input = 0;
-  tactilefadef = 0;
-  demo_ap_pah_on = 0;
-  demo_ap_Theta_ref_deg = 0;
-  demo_tactile = 0;
-  demo_ice_tail = 0;
-  demo_ice_left = 0;
-  demo_ice_right = 0;
-  flapper_model = 0;
-  ignore_unknown_keywords = 0;
-  pilot_throttle_no = 0;
+  memset(bootTrue,false,20*sizeof(gear_model[0]));
+  eta_from_file = false;
+  eta_wing_left_input = false;
+  eta_wing_right_input = false;
+  eta_tail_input = false;
+  demo_eps_alpha_max = false;
+  demo_eps_pitch_max = false;
+  demo_eps_pitch_min = false;
+  demo_eps_roll_max = false;
+  demo_eps_thrust_min = false;
+  demo_eps_airspeed_max = false;
+  demo_eps_airspeed_min = false;
+  demo_eps_flap_max = false;
+  demo_boot_cycle_tail = false;
+  demo_boot_cycle_wing_left = false;
+  demo_boot_cycle_wing_right = false;
+  demo_eps_pitch_input = false;
+  tactilefadef = false;
+  demo_ap_pah_on = false;
+  demo_ap_alh_on = false;
+  demo_ap_Theta_ref = false;
+  demo_ap_alt_ref = false;
+  demo_tactile = false;
+  demo_ice_tail = false;
+  demo_ice_left = false;
+  demo_ice_right = false;
+  flapper_model = false;
+  ignore_unknown_keywords = false;
+  pilot_throttle_no = false;
+  Dx_cg = 0.0;
+  Dy_cg = 0.0;
+  Dz_cg = 0.0;
+  ap_pah_on = 0;
+  ap_alh_on = 0;
 
 }
 
 void uiuc_vel_init ()
 {
+  // Calculates the local velocity (V_north, V_east, V_down) from the body
+  // velocities.
+  // Called from uiuc_local_vel_init which is called from ls_step.
+  // Used during initialization (while Simtime=0)
   if (U_body_init_true && V_body_init_true && W_body_init_true)
     {
   double det_T_l_to_b, cof11, cof12, cof13, cof21, cof22, cof23, cof31, cof32, cof33;
@@ -297,10 +317,12 @@ void uiuc_vel_init ()
 
 void uiuc_init_aeromodel ()
 {
+  // Initializes the UIUC aircraft model.
+  // Called once from uiuc_init_2_wrapper
   SGPath path(globals->get_fg_root());
-  path.append(aircraft_dir);
+  path.append(fgGetString("/sim/aircraft-dir"));
   path.append("aircraft.dat");
-  cout << "We are using "<< path.str() << endl;
+  std::cout << "We are using "<< path.str() << std::endl;
   uiuc_initializemaps(); // Initialize the <string,int> maps
   uiuc_menu(path.str());   // Read the specified aircraft file 
 }
@@ -358,6 +380,10 @@ void uiuc_force_moment(double dt)
   if (I_zz_appMass_ratio)
     M_n_aero += -(I_zz_appMass_ratio * I_zz) * R_dot_body;
 
+  // adding in apparent mass in body axis X direction
+  // F_X_aero += -(0.05 * Mass) * U_dot_body;
+
+
   if (Mass_appMass)
     F_Z_aero += -Mass_appMass * W_dot_body;
   if (I_xx_appMass)
@@ -458,12 +484,12 @@ void uiuc_record_routine(double dt)
 void uiuc_network_recv_routine()
 {
   //if (use_uiuc_network)
-    //uiuc_network(1);
+  //  uiuc_network(1);
 }
 
 void uiuc_network_send_routine()
 {
   //if (use_uiuc_network)
-    //uiuc_network(2);
+  //  uiuc_network(2);
 }
 //end uiuc_wrapper.cpp