]> git.mxchange.org Git - flightgear.git/blobdiff - LaRCsim/ls_interface.c
Attempting to iron out seg faults and crashes.
[flightgear.git] / LaRCsim / ls_interface.c
index 0ad6d134de8c22e227ddf68355d4ef11a2d2f248..4017b7c935fe5efff4397a9fa39be1f92e9628b4 100644 (file)
@@ -242,6 +242,9 @@ $Original log: LaRCsim.c,v $
 #include "ls_init.h"
 #include <Flight/flight.h>
 #include <Aircraft/aircraft.h>
+#include <Autopilot/autopilot.h>
+#include <Debug/fg_debug.h>
+
 
 /* global variable declarations */
 
@@ -252,7 +255,6 @@ COCKPIT         cockpit_;
 
 SCALAR                 Simtime;
 
-/* #define DEFAULT_TERM_UPDATE_HZ 20 */ /* original value */
 #define DEFAULT_TERM_UPDATE_HZ 20
 #define DEFAULT_MODEL_HZ 120
 #define DEFAULT_END_TIME 3600.
@@ -496,11 +498,11 @@ void ls_loop( SCALAR dt, int initialize ) {
 
 
 int ls_cockpit( void ) {
-    struct fgCONTROLS *c;
+    fgCONTROLS *c;
 
     sim_control_.paused = 0;
 
-    c = &current_aircraft.controls;
+    c = current_aircraft.controls;
 
     Lat_control = FG_Aileron;
     Long_control = FG_Elevator;
@@ -530,11 +532,11 @@ int fgLaRCsimInit(double dt) {
        return 1;
     }
 
-    printf("LS pre Init pos = %.2f\n", Latitude);
+    /* printf("LS pre Init pos = %.2f\n", Latitude); */
 
     ls_init();
 
-    printf("LS post Init pos = %.2f\n", Latitude);
+    /* printf("LS post Init pos = %.2f\n", Latitude); */
 
     if (speedup > 0) {
        /* Initialize (get) cockpit (controls) settings */
@@ -546,7 +548,8 @@ int fgLaRCsimInit(double dt) {
 
 
 /* Run an iteration of the EOM (equations of motion) */
-int fgLaRCsimUpdate(int multiloop) {
+int fgLaRCsimUpdate(fgFLIGHT *f, int multiloop) {
+    double save_alt = 0.0;
     int        i;
 
     if (speedup > 0) {
@@ -554,7 +557,40 @@ int fgLaRCsimUpdate(int multiloop) {
     }
 
     for ( i = 0; i < multiloop; i++ ) {
+       //Insertion by Jeff Goeke-Smith for Autopilot.
+       
+       // run Autopilot system
+       // fgPrintf( FG_ALL, FG_BULK, "Attempting autopilot run\n");
+       fgAPRun();
+
+       /* lets try to avoid really screwing up the LaRCsim model */
+       if ( FG_Altitude < -9000 ) {
+           save_alt = FG_Altitude;
+           FG_Altitude = 0;
+       }
+
+       // translate FG to LaRCsim structure
+       fgFlight_2_LaRCsim(f);
+       // printf("FG_Altitude = %.2f\n", FG_Altitude * 0.3048);
+       // printf("Altitude = %.2f\n", Altitude * 0.3048);
+       // printf("Radius to Vehicle = %.2f\n", Radius_to_vehicle * 0.3048);
+
+       // end of insertion 
+       
        ls_loop( model_dt, 0);
+
+       // printf("%d FG_Altitude = %.2f\n", i, FG_Altitude * 0.3048);
+       // printf("%d Altitude = %.2f\n", i, Altitude * 0.3048);
+
+       // translate LaRCsim back to FG structure so that the
+       // autopilot (and the rest of the sim can use the updated
+       // values
+       fgLaRCsim_2_Flight(f);
+
+       /* but lets restore our original bogus altitude when we are done */
+       if ( save_alt < -9000 ) {
+           FG_Altitude = save_alt;
+       }
     }
 
     return(1);
@@ -562,7 +598,7 @@ int fgLaRCsimUpdate(int multiloop) {
 
 
 /* Convert from the fgFLIGHT struct to the LaRCsim generic_ struct */
-int fgFlight_2_LaRCsim (struct fgFLIGHT *f) {
+int fgFlight_2_LaRCsim (fgFLIGHT *f) {
     Mass =      FG_Mass;
     I_xx =      FG_I_xx;
     I_yy =      FG_I_yy;
@@ -738,7 +774,7 @@ int fgFlight_2_LaRCsim (struct fgFLIGHT *f) {
 
 
 /* Convert from the LaRCsim generic_ struct to the fgFLIGHT struct */
-int fgLaRCsim_2_Flight (struct fgFLIGHT *f) {
+int fgLaRCsim_2_Flight (fgFLIGHT *f) {
     FG_Mass =   Mass;
     FG_I_xx =   I_xx;
     FG_I_yy =   I_yy;
@@ -912,9 +948,48 @@ int fgLaRCsim_2_Flight (struct fgFLIGHT *f) {
     return ( 0 );
 }
 
+
+/* Set the altitude (force) */
+int ls_ForceAltitude(double alt_feet) {
+    Altitude = alt_feet;
+    ls_geod_to_geoc( Latitude, Altitude, &Sea_level_radius, &Lat_geocentric);
+    Radius_to_vehicle = Altitude + Sea_level_radius;
+}
+
+
 /* Flight Gear Modification Log
  *
  * $Log$
+ * Revision 1.21  1998/08/22 14:49:56  curt
+ * Attempting to iron out seg faults and crashes.
+ * Did some shuffling to fix a initialization order problem between view
+ * position, scenery elevation.
+ *
+ * Revision 1.20  1998/07/12 03:11:03  curt
+ * Removed some printf()'s.
+ * Fixed the autopilot integration so it should be able to update it's control
+ *   positions every time the internal flight model loop is run, and not just
+ *   once per rendered frame.
+ * Added a routine to do the necessary stuff to force an arbitrary altitude
+ *   change.
+ * Gave the Navion engine just a tad more power.
+ *
+ * Revision 1.19  1998/05/11 18:17:28  curt
+ * Output message tweaking.
+ *
+ * Revision 1.18  1998/04/21 16:59:38  curt
+ * Integrated autopilot.
+ * Prepairing for C++ integration.
+ *
+ * Revision 1.17  1998/02/23 19:07:58  curt
+ * Incorporated Durk's Astro/ tweaks.  Includes unifying the sun position
+ * calculation code between sun display, and other FG sections that use this
+ * for things like lighting.
+ *
+ * Revision 1.16  1998/02/07 15:29:38  curt
+ * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
+ * <chotchkiss@namg.us.anritsu.com>
+ *
  * Revision 1.15  1998/01/22 22:03:47  curt
  * Removed #include <sys/stat.h>
  *