1 /**************************************************************************
2 * ls_interface.c -- the FG interface to the LaRCsim routines
3 * This is a heavily modified version of LaRCsim.c
4 * As a result there is much old baggage left in this file.
6 * Originally Written 921230 by Bruce Jackson
7 * Modified by Curtis Olson, started May 1997.
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License, or (at your option) any later version.
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 * (Log is kept at end of this file)
25 **************************************************************************/
27 /* Original headers follow: */
29 /***************************************************************************
33 ----------------------------------------------------------------------------
35 FUNCTION: Top level routine for LaRCSIM. Includes
36 global variable declarations.
38 ----------------------------------------------------------------------------
40 MODULE STATUS: Developmental
42 ----------------------------------------------------------------------------
44 GENEALOGY: Written 921230 by Bruce Jackson
46 ----------------------------------------------------------------------------
54 ----------------------------------------------------------------------------
60 930111 Added "progname" variable to keep name of invoking command.
62 931012 Removed altitude < 0. test to support gear development. EBJ
63 931214 Added various pressures (Impact, Dynamic, Static, etc.) EBJ
64 931215 Adopted new generic variable structure. EBJ
65 931218 Added command line options decoding. EBJ
66 940110 Changed file type of matrix file to ".m" EBJ
67 940513 Renamed this routine "LaRCsim.c" from "ls_main.c" EBJ
68 940513 Added time_stamp routine, t_stamp. EBJ
69 950225 Added options flag, 'i', to set I/O output rate. EBJ
70 950306 Added calls to ls_get_settings() and ls_put_settings() EBJ
71 950314 Options flag 'i' now reads IC file; 'o' is output rate EBJ
72 950406 Many changes: added definition of default value macros;
73 removed local variables term_update_hz, model_dt, endtime,
74 substituted sim_control_ globals for these; removed
75 initialization of sim_control_.tape_channels; moved optarg
76 to generic extern; added mod_end_time & mod_buf_size flags
77 and temporary buffer_time and data_rate locals to
78 ls_checkopts(); added additional command line switches '-s'
79 and '-b'; made psuedo-mandatory file names for data output
80 switches; considerable rewrite of logic for setting data
81 buffer length and interleave parameters; updated '-h' help
82 output message; added protection logic to calculations of
83 these parameters; added check of return value on first call
84 to ls_cockpit() so <esc> abort works from initial pause
85 state; added call to ls_unsync() immediately following
86 first ls_sync() call, if paused (to avoid alarm clock
87 timeout); moved call to ls_record() into non-paused
88 multiloop path (was filling buffer with identical data
89 during pause); put check of paused flag before calling sync
90 routine ls_pause(); and added call to exit() on termination.
94 $Original log: LaRCsim.c,v $
95 * Revision 1.4.1.7 1995/04/07 01:04:37 bjax
96 * Many changes made to support storage of sim options from run to run,
97 * as well as restructuring storage buffer sizing and some loop logic
98 * changes. See the modification log for details.
100 * Revision 1.4.1.6 1995/03/29 16:12:09 bjax
101 * Added argument to -o switch; changed run loop to pass dt=0
102 * if in paused mode. EBj
104 * Revision 1.4.1.5 1995/03/15 12:30:20 bjax
105 * Set paused flag to non-zero by default; moved 'i' I/O rate flag
106 * switch to 'o'; made 'i' an initial conditions file switch; added
107 * null string to ls_get_settings() call so that default settings
108 * file will be read. EBJ
110 * Revision 1.4.1.4 1995/03/08 12:31:34 bjax
111 * Added userid retrieval and proper termination of time & date strings.
113 * Revision 1.4.1.3 1995/03/08 12:00:21 bjax
114 * Moved setting of default options to ls_setdefopts from
115 * ls_checkopts; rearranged order of ls_get_settings() call
116 * to between ls_setdefopts and ls_checkopts, so command
117 * line options will override settings file options.
120 * Revision 1.4.1.2 1995/03/06 18:48:49 bjax
121 * Added calles to ls_get_settings() and ls_put_settings(); added
122 * passing of dt and init flags in ls_model(). EBJ
124 * Revision 1.4.1.1 1995/03/03 02:23:08 bjax
125 * Beta version for LaRCsim, version 1.4
127 * Revision 1.3.2.7 1995/02/27 20:00:21 bjax
130 * Revision 1.3.2.6 1995/02/25 16:52:31 bjax
131 * Added 'i' option to set I/O iteration rate. EBJ
133 * Revision 1.3.2.5 1995/02/06 19:33:15 bjax
136 * Revision 1.3.2.4 1995/02/06 19:30:30 bjax
137 * Oops, should really compile these before checking in. Fixed capitailzation of
138 * Initialize in ls_loop parameter.
140 * Revision 1.3.2.3 1995/02/06 19:25:44 bjax
141 * Moved main simulation loop into subroutine ls_loop. EBJ
143 * Revision 1.3.2.2 1994/05/20 21:46:45 bjax
144 * A little better logic on checking for option arguments.
146 * Revision 1.3.2.1 1994/05/20 19:29:51 bjax
147 * Added options arguments to command line.
149 * Revision 1.3.1.16 1994/05/17 15:08:45 bjax
150 * Corrected so that full name to directyr and file is saved
151 * in new global variable "fullname"; this allows symbol table
152 * to be extracted when in another default directory.
154 * Revision 1.3.1.15 1994/05/17 14:50:24 bjax
157 * Revision 1.3.1.14 1994/05/17 14:50:23 bjax
160 * Revision 1.3.1.13 1994/05/17 14:50:21 bjax
163 * Revision 1.3.1.12 1994/05/17 14:50:20 bjax
166 * Revision 1.3.1.11 1994/05/17 13:56:24 bjax
169 * Revision 1.3.1.10 1994/05/17 13:23:03 bjax
172 * Revision 1.3.1.9 1994/05/17 13:20:03 bjax
175 * Revision 1.3.1.8 1994/05/17 13:19:23 bjax
178 * Revision 1.3.1.7 1994/05/17 13:18:29 bjax
181 * Revision 1.3.1.6 1994/05/17 13:16:30 bjax
184 * Revision 1.3.1.5 1994/05/17 13:03:44 bjax
187 * Revision 1.3.1.4 1994/05/17 13:03:38 bjax
190 * Revision 1.3.1.3 1994/05/17 12:49:08 bjax
193 * Revision 1.3.1.2 1994/05/17 12:48:45 bjax
194 * *** empty log message ***
196 * Revision 1.3.1.1 1994/05/13 20:39:17 bjax
199 * Revision 1.2 1994/05/13 19:51:50 bjax
203 ----------------------------------------------------------------------------
207 ----------------------------------------------------------------------------
211 ----------------------------------------------------------------------------
215 ----------------------------------------------------------------------------
219 ----------------------------------------------------------------------------
223 --------------------------------------------------------------------------*/
225 #include <sys/types.h>
226 #include <sys/stat.h>
232 #include "ls_types.h"
233 #include "ls_constants.h"
234 #include "ls_generic.h"
235 #include "ls_sim_control.h"
236 #include "ls_cockpit.h"
237 #include "ls_interface.h"
238 #include "../flight.h"
239 #include "../../Aircraft/aircraft.h"
241 /* global variable declarations */
245 SIM_CONTROL sim_control_;
250 /* #define DEFAULT_TERM_UPDATE_HZ 20 */ /* original value */
251 #define DEFAULT_TERM_UPDATE_HZ 20
252 #define DEFAULT_MODEL_HZ 120
253 #define DEFAULT_END_TIME 3600.
254 #define DEFAULT_SAVE_SPACING 8
255 #define DEFAULT_WRITE_SPACING 1
256 #define MAX_FILE_NAME_LENGTH 80
258 /* global variables */
263 /* file variables - default simulation settings */
265 static double model_dt;
266 static double speedup;
267 static char asc1name[MAX_FILE_NAME_LENGTH] = "run.asc1";
268 static char tabname[MAX_FILE_NAME_LENGTH] = "run.dat";
269 static char fltname[MAX_FILE_NAME_LENGTH] = "run.flt";
270 static char matname[MAX_FILE_NAME_LENGTH] = "run.m";
276 char rcsid[] = "$Id$";
277 char revid[] = "$Revision$";
278 char dateid[] = "$Date$";
283 /* report version of LaRCsim*/
284 printf("\nLaRCsim %s, %s\n\n", revid, dateid);
286 nowtime_t = time( 0 );
287 nowtime = localtime( &nowtime_t ); /* set fields to correct time values */
288 date = (nowtime->tm_year)*10000
289 + (nowtime->tm_mon + 1)*100
290 + (nowtime->tm_mday);
291 sprintf(sim_control_.date_string, "%06d\0", date);
292 sprintf(sim_control_.time_stamp, "%02d:%02d:%02d\0",
293 nowtime->tm_hour, nowtime->tm_min, nowtime->tm_sec);
294 cuserid( sim_control_.userid ); /* set up user id */
301 /* set default values for most options */
303 sim_control_.debug = 0; /* change to non-zero if in dbx! */
304 sim_control_.vision = 0;
305 sim_control_.write_av = 0; /* write Agile-Vu '.flt' file */
306 sim_control_.write_mat = 0; /* write matrix-x/matlab script */
307 sim_control_.write_tab = 0; /* write tab delim. history file */
308 sim_control_.write_asc1 = 0; /* write GetData file */
309 sim_control_.sim_type = GLmouse; /* hook up to mouse */
310 sim_control_.save_spacing = DEFAULT_SAVE_SPACING;
311 /* interpolation on recording */
312 sim_control_.write_spacing = DEFAULT_WRITE_SPACING;
313 /* interpolation on output */
314 sim_control_.end_time = DEFAULT_END_TIME;
315 sim_control_.model_hz = DEFAULT_MODEL_HZ;
316 sim_control_.term_update_hz = DEFAULT_TERM_UPDATE_HZ;
317 sim_control_.time_slices = DEFAULT_END_TIME * DEFAULT_MODEL_HZ /
318 DEFAULT_SAVE_SPACING;
319 sim_control_.paused = 0;
325 /* return result codes from ls_checkopts */
333 int ls_checkopts(argc, argv) /* check and set options flags */
339 int mod_end_time = 0;
340 int mod_buf_size = 0;
341 float buffer_time, data_rate;
343 /* set default values */
345 buffer_time = sim_control_.time_slices * sim_control_.save_spacing /
346 sim_control_.model_hz;
347 data_rate = sim_control_.model_hz / sim_control_.save_spacing;
349 while ((c = getopt(argc, argv, "Aa:b:de:f:hi:kmo:r:s:t:x:")) != EOF)
352 if (sim_control_.sim_type == GLmouse)
354 fprintf(stderr, "Cannot specify both keyboard (k) and ACES (A) cockpits option\n");
355 fprintf(stderr, "Keyboard operation assumed.\n");
358 sim_control_.sim_type = cockpit;
361 sim_control_.write_av = 1;
364 strncpy(fltname, optarg, MAX_FILE_NAME_LENGTH);
369 buffer_time = atof(optarg);
370 if (buffer_time <= 0.) opt_err = -1;
374 sim_control_.debug = 1;
377 sim_control_.end_time = atof(optarg);
381 sim_control_.model_hz = atof(optarg);
387 /* ls_get_settings( optarg ); */
390 sim_control_.sim_type = GLmouse;
393 sim_control_.vision = 1;
396 sim_control_.term_update_hz = atof(optarg);
397 if (sim_control_.term_update_hz <= 0.) opt_err = 1;
400 sim_control_.write_mat = 1;
403 strncpy(matname, optarg, MAX_FILE_NAME_LENGTH);
408 data_rate = atof(optarg);
409 if (data_rate <= 0.) opt_err = -1;
412 sim_control_.write_tab = 1;
415 strncpy(tabname, optarg, MAX_FILE_NAME_LENGTH);
420 sim_control_.write_asc1 = 1;
423 strncpy(asc1name, optarg, MAX_FILE_NAME_LENGTH);
434 fprintf(stderr, "Usage: %s [-options]\n", progname);
435 fprintf(stderr, "\n");
436 fprintf(stderr, " where [-options] is zero or more of the following:\n");
437 fprintf(stderr, "\n");
438 fprintf(stderr, " [A|k] Run mode: [A]CES cockpit [default]\n");
439 fprintf(stderr, " or [k]eyboard\n");
440 fprintf(stderr, "\n");
441 fprintf(stderr, " [i <filename>] [i]nitial conditions filename\n");
442 fprintf(stderr, "\n");
443 fprintf(stderr, " [f <value>] Iteration rate [f]requency, Hz (default is %5.2f Hz)\n",
444 sim_control_.model_hz);
445 fprintf(stderr, "\n");
446 fprintf(stderr, " [o <value>] Display [o]utput frequency, Hz (default is %5.2f Hz)\n",
447 sim_control_.term_update_hz);
448 fprintf(stderr, "\n");
449 fprintf(stderr, " [s <value>] Data storage frequency, Hz (default is %5.2f Hz)\n",
451 fprintf(stderr, "\n");
452 fprintf(stderr, " [e <value>] [e]nd time in seconds (default %5.1f seconds)\n",
453 sim_control_.end_time);
454 fprintf(stderr, "\n");
455 fprintf(stderr, " [b <value>] circular time history storage [b]uffer size, in seconds \n");
456 fprintf(stderr, " (default %5.1f seconds) (normally same as end time)\n",
457 sim_control_.time_slices*sim_control_.save_spacing/
458 sim_control_.model_hz);
459 fprintf(stderr, "\n");
460 fprintf(stderr, " [atxr [<filename>]] Output: [a]gile-vu (default name: %s )\n", fltname);
461 fprintf(stderr, " and/or [t]ab delimited ( '' name: %s )\n", tabname);
462 fprintf(stderr, " and/or [x]plot (default name: %s)\n", asc1name);
463 fprintf(stderr, " and/or mat[r]ix script ( '' name: %s )\n", matname);
464 fprintf(stderr, "\n");
468 /* calculate additional controls */
470 sim_control_.save_spacing = (int) (0.5 + sim_control_.model_hz / data_rate);
471 if (sim_control_.save_spacing < 1) sim_control_.save_spacing = 1;
473 sim_control_.time_slices = buffer_time * sim_control_.model_hz /
474 sim_control_.save_spacing;
475 if (sim_control_.time_slices < 2) sim_control_.time_slices = 2;
481 void ls_loop( dt, initialize )
487 /* printf (" In ls_loop()\n"); */
488 ls_step( dt, initialize );
489 /* if (sim_control_.sim_type == cockpit ) ls_ACES(); */
491 ls_model( dt, initialize );
498 struct fgCONTROLS *c;
500 sim_control_.paused = 0;
502 c = ¤t_aircraft.controls;
504 Lat_control = FG_Aileron;
505 Long_control = FG_Elevator;
506 Long_trim = FG_Elev_Trim;
507 Rudder_pedal = FG_Rudder;
508 Throttle_pct = FG_Throttle[0];
510 /* printf("Mach = %.2f ", Mach_number);
511 printf("%.4f,%.4f,%.2f ", Latitude, Longitude, Altitude);
512 printf("%.2f,%.2f,%.2f\n", Phi, Theta, Psi); */
517 /* Initialize the LaRCsim flight model, dt is the time increment for
518 each subsequent iteration through the EOM */
519 int fgLaRCsimInit(double dt) {
522 ls_setdefopts(); /* set default options */
524 ls_stamp(); /* ID stamp; record time and date of run */
526 if (speedup == 0.0) {
527 fprintf(stderr, "%s: Cannot run with speedup of 0.\n", progname);
531 printf("LS pre Init pos = %.2f\n", Latitude);
535 printf("LS post Init pos = %.2f\n", Latitude);
538 /* Initialize (get) cockpit (controls) settings */
546 /* Run an iteration of the EOM (equations of motion) */
547 int fgLaRCsimUpdate(int multiloop) {
554 for ( i = 0; i < multiloop; i++ ) {
555 ls_loop( model_dt, 0);
562 /* Convert from the fgFLIGHT struct to the LaRCsim generic_ struct */
563 int fgFlight_2_LaRCsim (struct fgFLIGHT *f) {
569 Dx_pilot = FG_Dx_pilot;
570 Dy_pilot = FG_Dy_pilot;
571 Dz_pilot = FG_Dz_pilot;
578 F_north = FG_F_north;
581 F_X_aero = FG_F_X_aero;
582 F_Y_aero = FG_F_Y_aero;
583 F_Z_aero = FG_F_Z_aero;
584 F_X_engine = FG_F_X_engine;
585 F_Y_engine = FG_F_Y_engine;
586 F_Z_engine = FG_F_Z_engine;
587 F_X_gear = FG_F_X_gear;
588 F_Y_gear = FG_F_Y_gear;
589 F_Z_gear = FG_F_Z_gear;
596 M_l_aero = FG_M_l_aero;
597 M_m_aero = FG_M_m_aero;
598 M_n_aero = FG_M_n_aero;
599 M_l_engine = FG_M_l_engine;
600 M_m_engine = FG_M_m_engine;
601 M_n_engine = FG_M_n_engine;
602 M_l_gear = FG_M_l_gear;
603 M_m_gear = FG_M_m_gear;
604 M_n_gear = FG_M_n_gear;
605 V_dot_north = FG_V_dot_north;
606 V_dot_east = FG_V_dot_east;
607 V_dot_down = FG_V_dot_down;
608 U_dot_body = FG_U_dot_body;
609 V_dot_body = FG_V_dot_body;
610 W_dot_body = FG_W_dot_body;
614 A_X_pilot = FG_A_X_pilot;
615 A_Y_pilot = FG_A_Y_pilot;
616 A_Z_pilot = FG_A_Z_pilot;
620 N_X_pilot = FG_N_X_pilot;
621 N_Y_pilot = FG_N_Y_pilot;
622 N_Z_pilot = FG_N_Z_pilot;
623 P_dot_body = FG_P_dot_body;
624 Q_dot_body = FG_Q_dot_body;
625 R_dot_body = FG_R_dot_body;
626 V_north = FG_V_north;
629 V_north_rel_ground = FG_V_north_rel_ground;
630 V_east_rel_ground = FG_V_east_rel_ground;
631 V_down_rel_ground = FG_V_down_rel_ground;
632 V_north_airmass = FG_V_north_airmass;
633 V_east_airmass = FG_V_east_airmass;
634 V_down_airmass = FG_V_down_airmass;
635 V_north_rel_airmass = FG_V_north_rel_airmass;
636 V_east_rel_airmass = FG_V_east_rel_airmass;
637 V_down_rel_airmass = FG_V_down_rel_airmass;
644 V_rel_wind = FG_V_rel_wind;
645 V_true_kts = FG_V_true_kts;
646 V_rel_ground = FG_V_rel_ground;
647 V_inertial = FG_V_inertial;
648 V_ground_speed = FG_V_ground_speed;
649 V_equiv = FG_V_equiv;
650 V_equiv_kts = FG_V_equiv_kts;
651 V_calibrated = FG_V_calibrated;
652 V_calibrated_kts = FG_V_calibrated_kts;
656 P_local = FG_P_local;
657 Q_local = FG_Q_local;
658 R_local = FG_R_local;
659 P_total = FG_P_total;
660 Q_total = FG_Q_total;
661 R_total = FG_R_total;
662 Phi_dot = FG_Phi_dot;
663 Theta_dot = FG_Theta_dot;
664 Psi_dot = FG_Psi_dot;
665 Latitude_dot = FG_Latitude_dot;
666 Longitude_dot = FG_Longitude_dot;
667 Radius_dot = FG_Radius_dot;
668 Lat_geocentric = FG_Lat_geocentric;
669 Lon_geocentric = FG_Lon_geocentric;
670 Radius_to_vehicle = FG_Radius_to_vehicle;
671 Latitude = FG_Latitude;
672 Longitude = FG_Longitude;
673 Altitude = FG_Altitude;
677 T_local_to_body_11 = FG_T_local_to_body_11;
678 T_local_to_body_12 = FG_T_local_to_body_12;
679 T_local_to_body_13 = FG_T_local_to_body_13;
680 T_local_to_body_21 = FG_T_local_to_body_21;
681 T_local_to_body_22 = FG_T_local_to_body_22;
682 T_local_to_body_23 = FG_T_local_to_body_23;
683 T_local_to_body_31 = FG_T_local_to_body_31;
684 T_local_to_body_32 = FG_T_local_to_body_32;
685 T_local_to_body_33 = FG_T_local_to_body_33;
686 Gravity = FG_Gravity;
687 Centrifugal_relief = FG_Centrifugal_relief;
690 Alpha_dot = FG_Alpha_dot;
691 Beta_dot = FG_Beta_dot;
692 Cos_alpha = FG_Cos_alpha;
693 Sin_alpha = FG_Sin_alpha;
694 Cos_beta = FG_Cos_beta;
695 Sin_beta = FG_Sin_beta;
696 Cos_phi = FG_Cos_phi;
697 Sin_phi = FG_Sin_phi;
698 Cos_theta = FG_Cos_theta;
699 Sin_theta = FG_Sin_theta;
700 Cos_psi = FG_Cos_psi;
701 Sin_psi = FG_Sin_psi;
702 Gamma_vert_rad = FG_Gamma_vert_rad;
703 Gamma_horiz_rad = FG_Gamma_horiz_rad;
705 Density = FG_Density;
706 V_sound = FG_V_sound;
707 Mach_number = FG_Mach_number;
708 Static_pressure = FG_Static_pressure;
709 Total_pressure = FG_Total_pressure;
710 Impact_pressure = FG_Impact_pressure;
711 Dynamic_pressure = FG_Dynamic_pressure;
712 Static_temperature = FG_Static_temperature;
713 Total_temperature = FG_Total_temperature;
714 Sea_level_radius = FG_Sea_level_radius;
715 Earth_position_angle = FG_Earth_position_angle;
716 Runway_altitude = FG_Runway_altitude;
717 Runway_latitude = FG_Runway_latitude;
718 Runway_longitude = FG_Runway_longitude;
719 Runway_heading = FG_Runway_heading;
720 Radius_to_rwy = FG_Radius_to_rwy;
721 D_cg_north_of_rwy = FG_D_cg_north_of_rwy;
722 D_cg_east_of_rwy = FG_D_cg_east_of_rwy;
723 D_cg_above_rwy = FG_D_cg_above_rwy;
724 X_cg_rwy = FG_X_cg_rwy;
725 Y_cg_rwy = FG_Y_cg_rwy;
726 H_cg_rwy = FG_H_cg_rwy;
727 D_pilot_north_of_rwy = FG_D_pilot_north_of_rwy;
728 D_pilot_east_of_rwy = FG_D_pilot_east_of_rwy;
729 D_pilot_above_rwy = FG_D_pilot_above_rwy;
730 X_pilot_rwy = FG_X_pilot_rwy;
731 Y_pilot_rwy = FG_Y_pilot_rwy;
732 H_pilot_rwy = FG_H_pilot_rwy;
736 /* Convert from the LaRCsim generic_ struct to the fgFLIGHT struct */
737 int fgLaRCsim_2_Flight (struct fgFLIGHT *f) {
743 FG_Dx_pilot = Dx_pilot;
744 FG_Dy_pilot = Dy_pilot;
745 FG_Dz_pilot = Dz_pilot;
752 FG_F_north = F_north;
755 FG_F_X_aero = F_X_aero;
756 FG_F_Y_aero = F_Y_aero;
757 FG_F_Z_aero = F_Z_aero;
758 FG_F_X_engine = F_X_engine;
759 FG_F_Y_engine = F_Y_engine;
760 FG_F_Z_engine = F_Z_engine;
761 FG_F_X_gear = F_X_gear;
762 FG_F_Y_gear = F_Y_gear;
763 FG_F_Z_gear = F_Z_gear;
770 FG_M_l_aero = M_l_aero;
771 FG_M_m_aero = M_m_aero;
772 FG_M_n_aero = M_n_aero;
773 FG_M_l_engine = M_l_engine;
774 FG_M_m_engine = M_m_engine;
775 FG_M_n_engine = M_n_engine;
776 FG_M_l_gear = M_l_gear;
777 FG_M_m_gear = M_m_gear;
778 FG_M_n_gear = M_n_gear;
779 FG_V_dot_north = V_dot_north;
780 FG_V_dot_east = V_dot_east;
781 FG_V_dot_down = V_dot_down;
782 FG_U_dot_body = U_dot_body;
783 FG_V_dot_body = V_dot_body;
784 FG_W_dot_body = W_dot_body;
788 FG_A_X_pilot = A_X_pilot;
789 FG_A_Y_pilot = A_Y_pilot;
790 FG_A_Z_pilot = A_Z_pilot;
794 FG_N_X_pilot = N_X_pilot;
795 FG_N_Y_pilot = N_Y_pilot;
796 FG_N_Z_pilot = N_Z_pilot;
797 FG_P_dot_body = P_dot_body;
798 FG_Q_dot_body = Q_dot_body;
799 FG_R_dot_body = R_dot_body;
800 FG_V_north = V_north;
803 FG_V_north_rel_ground = V_north_rel_ground;
804 FG_V_east_rel_ground = V_east_rel_ground;
805 FG_V_down_rel_ground = V_down_rel_ground;
806 FG_V_north_airmass = V_north_airmass;
807 FG_V_east_airmass = V_east_airmass;
808 FG_V_down_airmass = V_down_airmass;
809 FG_V_north_rel_airmass = V_north_rel_airmass;
810 FG_V_east_rel_airmass = V_east_rel_airmass;
811 FG_V_down_rel_airmass = V_down_rel_airmass;
818 FG_V_rel_wind = V_rel_wind;
819 FG_V_true_kts = V_true_kts;
820 FG_V_rel_ground = V_rel_ground;
821 FG_V_inertial = V_inertial;
822 FG_V_ground_speed = V_ground_speed;
823 FG_V_equiv = V_equiv;
824 FG_V_equiv_kts = V_equiv_kts;
825 FG_V_calibrated = V_calibrated;
826 FG_V_calibrated_kts = V_calibrated_kts;
830 FG_P_local = P_local;
831 FG_Q_local = Q_local;
832 FG_R_local = R_local;
833 FG_P_total = P_total;
834 FG_Q_total = Q_total;
835 FG_R_total = R_total;
836 FG_Phi_dot = Phi_dot;
837 FG_Theta_dot = Theta_dot;
838 FG_Psi_dot = Psi_dot;
839 FG_Latitude_dot = Latitude_dot;
840 FG_Longitude_dot = Longitude_dot;
841 FG_Radius_dot = Radius_dot;
842 FG_Lat_geocentric = Lat_geocentric;
843 FG_Lon_geocentric = Lon_geocentric;
844 FG_Radius_to_vehicle = Radius_to_vehicle;
845 FG_Latitude = Latitude;
846 FG_Longitude = Longitude;
847 FG_Altitude = Altitude;
851 FG_T_local_to_body_11 = T_local_to_body_11;
852 FG_T_local_to_body_12 = T_local_to_body_12;
853 FG_T_local_to_body_13 = T_local_to_body_13;
854 FG_T_local_to_body_21 = T_local_to_body_21;
855 FG_T_local_to_body_22 = T_local_to_body_22;
856 FG_T_local_to_body_23 = T_local_to_body_23;
857 FG_T_local_to_body_31 = T_local_to_body_31;
858 FG_T_local_to_body_32 = T_local_to_body_32;
859 FG_T_local_to_body_33 = T_local_to_body_33;
860 FG_Gravity = Gravity;
861 FG_Centrifugal_relief = Centrifugal_relief;
864 FG_Alpha_dot = Alpha_dot;
865 FG_Beta_dot = Beta_dot;
866 FG_Cos_alpha = Cos_alpha;
867 FG_Sin_alpha = Sin_alpha;
868 FG_Cos_beta = Cos_beta;
869 FG_Sin_beta = Sin_beta;
870 FG_Cos_phi = Cos_phi;
871 FG_Sin_phi = Sin_phi;
872 FG_Cos_theta = Cos_theta;
873 FG_Sin_theta = Sin_theta;
874 FG_Cos_psi = Cos_psi;
875 FG_Sin_psi = Sin_psi;
876 FG_Gamma_vert_rad = Gamma_vert_rad;
877 FG_Gamma_horiz_rad = Gamma_horiz_rad;
879 FG_Density = Density;
880 FG_V_sound = V_sound;
881 FG_Mach_number = Mach_number;
882 FG_Static_pressure = Static_pressure;
883 FG_Total_pressure = Total_pressure;
884 FG_Impact_pressure = Impact_pressure;
885 FG_Dynamic_pressure = Dynamic_pressure;
886 FG_Static_temperature = Static_temperature;
887 FG_Total_temperature = Total_temperature;
888 FG_Sea_level_radius = Sea_level_radius;
889 FG_Earth_position_angle = Earth_position_angle;
890 FG_Runway_altitude = Runway_altitude;
891 FG_Runway_latitude = Runway_latitude;
892 FG_Runway_longitude = Runway_longitude;
893 FG_Runway_heading = Runway_heading;
894 FG_Radius_to_rwy = Radius_to_rwy;
895 FG_D_cg_north_of_rwy = D_cg_north_of_rwy;
896 FG_D_cg_east_of_rwy = D_cg_east_of_rwy;
897 FG_D_cg_above_rwy = D_cg_above_rwy;
898 FG_X_cg_rwy = X_cg_rwy;
899 FG_Y_cg_rwy = Y_cg_rwy;
900 FG_H_cg_rwy = H_cg_rwy;
901 FG_D_pilot_north_of_rwy = D_pilot_north_of_rwy;
902 FG_D_pilot_east_of_rwy = D_pilot_east_of_rwy;
903 FG_D_pilot_above_rwy = D_pilot_above_rwy;
904 FG_X_pilot_rwy = X_pilot_rwy;
905 FG_Y_pilot_rwy = Y_pilot_rwy;
906 FG_H_pilot_rwy = H_pilot_rwy;
909 /* Flight Gear Modification Log
912 * Revision 1.10 1997/12/10 22:37:43 curt
913 * Prepended "fg" on the name of all global structures that didn't have it yet.
914 * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
916 * Revision 1.9 1997/08/27 03:30:08 curt
917 * Changed naming scheme of basic shared structures.
919 * Revision 1.8 1997/06/21 17:12:50 curt
920 * Capitalized subdirectory names.
922 * Revision 1.7 1997/05/31 19:16:28 curt
923 * Elevator trim added.
925 * Revision 1.6 1997/05/31 04:13:53 curt
928 * Continuing work on the LaRCsim flight model integration.
929 * Added some MSFS-like keyboard input handling.
931 * Revision 1.5 1997/05/30 23:26:25 curt
932 * Added elevator/aileron controls.
934 * Revision 1.4 1997/05/30 19:30:15 curt
935 * The LaRCsim flight model is starting to look like it is working.
937 * Revision 1.3 1997/05/30 03:54:12 curt
938 * Made a bit more progress towards integrating the LaRCsim flight model.
940 * Revision 1.2 1997/05/29 22:39:59 curt
941 * Working on incorporating the LaRCsim flight model.
943 * Revision 1.1 1997/05/29 00:09:57 curt
944 * Initial Flight Gear revision.