1
0
Fork 0

Updates from John to pass additional data to the external OpenGC display.

This commit is contained in:
curt 2002-01-31 20:17:33 +00:00
parent 8998dbe0bb
commit c19a336935
3 changed files with 129 additions and 63 deletions

View file

@ -1,8 +1,15 @@
// opengc.cxx - Network interface program to send sim data onto a LAN // opengc.cxx - Network interface program to send data to display processor over LAN
// //
// Created by: J. Wojnaroski -- castle@mminternet.com // Created by: J. Wojnaroski -- castle@mminternet.com
// Date: 21 Nov 2001 // Date: 21 Nov 2001
// //
// Extended from original network code developed by C. Olson
//
// Modified 12/02/01 - Update engine structure for multi-engine models
// - Added data preamble to id msg types
//
// Modified 01/23/02 - Converted portions of the Engine and Gear accesssors to properties
// - Removed data from navigation functions. OpenGC provides own nav functions
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as // modify it under the terms of the GNU General Public License as
@ -28,6 +35,8 @@
#include <FDM/flight.hxx> #include <FDM/flight.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Cockpit/radiostack.hxx> #include <Cockpit/radiostack.hxx>
#include <Controls/controls.hxx>
#include <Main/fg_props.hxx>
SG_USING_STD(vector); SG_USING_STD(vector);
@ -59,48 +68,84 @@ bool FGOpenGC::open() {
static void collect_data( const FGInterface *fdm, ogcFGData *data ) { static void collect_data( const FGInterface *fdm, ogcFGData *data ) {
//static void collect_data( ogcFGData *data ) {
data->version_id = 0x0011; data->version_id = 0x0012;
data->latitude = fdm->get_Longitude_deg(); data->longitude = fdm->get_Longitude_deg();
data->longitude = cur_fdm_state->get_Latitude_deg(); data->latitude = cur_fdm_state->get_Latitude_deg();
data->magvar = globals->get_mag()->get_magvar();
data->pitch = cur_fdm_state->get_Theta_deg(); data->pitch = cur_fdm_state->get_Theta_deg();
data->bank = cur_fdm_state->get_Phi_deg(); data->bank = cur_fdm_state->get_Phi_deg();
data->heading = cur_fdm_state->get_Psi_deg(); data->heading = cur_fdm_state->get_Psi_deg();
data->altitude = cur_fdm_state->get_Altitude(); data->altitude = cur_fdm_state->get_Altitude();
data->altitude_agl = cur_fdm_state->get_Altitude_AGL();
data->v_kcas = cur_fdm_state->get_V_calibrated_kts(); data->v_kcas = cur_fdm_state->get_V_calibrated_kts();
data->vvi = cur_fdm_state->get_Climb_Rate(); data->vvi = cur_fdm_state->get_Climb_Rate();
data->mach = cur_fdm_state->get_Mach_number();
data->groundspeed = cur_fdm_state->get_V_ground_speed();
data->v_tas = cur_fdm_state->get_V_equiv_kts();
data->magvar = globals->get_mag()->get_magvar(); data->alpha = cur_fdm_state->get_Alpha();
data->beta = cur_fdm_state->get_Beta();
data->alpha_dot = cur_fdm_state->get_Alpha_dot();
data->beta_dot = cur_fdm_state->get_Beta_dot();
data->static_temperature = cur_fdm_state->get_Static_temperature();
data->total_temperature = cur_fdm_state->get_Total_temperature();
data->static_pressure = cur_fdm_state->get_Static_pressure();
data->total_pressure = cur_fdm_state->get_Total_pressure();
data->dynamic_pressure = cur_fdm_state->get_Dynamic_pressure();
data->rpm[0] = fgGetDouble("/engines/engine[0]/rpm"); data->rpm[0] = fgGetDouble("/engines/engine[0]/rpm");
data->rpm[1] = fgGetDouble("/engines/engine[1]/rpm"); data->rpm[1] = fgGetDouble("/engines/engine[1]/rpm");
data->epr[0] = fgGetDouble("/engines/engine[0]/mp-osi"); data->epr[0] = fgGetDouble("/engines/engine[0]/epr");
data->epr[1] = fgGetDouble("/engines/engine[1]/mp-osi"); data->epr[1] = fgGetDouble("/engines/engine[1]/epr");
data->epr[2] = fgGetDouble("/engines/engine[2]/epr");
data->epr[3] = fgGetDouble("/engines/engine[3]/epr");
data->egt[0] = fgGetDouble("/engines/engine[0]/egt-degf"); data->egt[0] = fgGetDouble("/engines/engine[0]/egt-degf");
data->egt[1] = fgGetDouble("/engines/engine[1]/egt-degf"); data->egt[1] = fgGetDouble("/engines/engine[1]/egt-degf");
data->egt[2] = fgGetDouble("/engines/engine[2]/egt-degf");
data->egt[3] = fgGetDouble("/engines/engine[3]/egt-degf");
data->n2_turbine[0] = fgGetDouble("/engines/engine[0]/n2");
data->n2_turbine[1] = fgGetDouble("/engines/engine[1]/n2");
data->n2_turbine[2] = fgGetDouble("/engines/engine[2]/n2");
data->n2_turbine[3] = fgGetDouble("/engines/engine[3]/n2");
data->n1_turbine[0] = fgGetDouble("/engines/engine[0]/n1");
data->n1_turbine[1] = fgGetDouble("/engines/engine[1]/n1");
data->n1_turbine[2] = fgGetDouble("/engines/engine[2]/n1");
data->n1_turbine[3] = fgGetDouble("/engines/engine[3]/n1");
data->fuel_flow[0] = fgGetDouble("/engines/engine[0]/fuel-flow-gph");
data->fuel_flow[1] = fgGetDouble("/engines/engine[1]/fuel-flow-gph");
data->fuel_flow[1] = fgGetDouble("/engines/engine[1]/fuel-flow-gph");
data->fuel_flow[2] = fgGetDouble("/engines/engine[2]/fuel-flow-gph");
data->oil_pressure[0] = fgGetDouble("/engines/engine[0]/oil-pressure-psi"); data->oil_pressure[0] = fgGetDouble("/engines/engine[0]/oil-pressure-psi");
data->oil_pressure[1] = fgGetDouble("/engines/engine[1]/oil-pressure-psi"); data->oil_pressure[1] = fgGetDouble("/engines/engine[1]/oil-pressure-psi");
data->oil_pressure[2] = fgGetDouble("/engines/engine[2]/oil-pressure-psi");
data->oil_pressure[3] = fgGetDouble("/engines/engine[3]/oil-pressure-psi");
data->man_pressure[0] = fgGetDouble("/engines/engine[0]/mp-osi");
data->man_pressure[1] = fgGetDouble("/engines/engine[1]/mp-osi");
// navigation data //data->gear_nose = p_gear[0]->GetPosition();
// Once OPenGC develops a comparable navaids database some of this will not be required //data->gear_left = p_gear[1]->GetPosition();
//data->gear_right = p_gear[2]->GetPosition();
//data->nav1_ident = current_radiostack->get_nav1_ident();
data->nav1_freq = current_radiostack->get_nav1_freq();
data->nav1_radial = current_radiostack->get_nav1_sel_radial();
data->nav1_course_dev = current_radiostack->get_nav1_heading_needle_deflection();
//data->nav1_ident = current_radiostack->get_nav1_ident();
data->nav2_freq = current_radiostack->get_nav2_freq();
data->nav2_radial = current_radiostack->get_nav2_sel_radial();
data->nav2_course_dev = current_radiostack->get_nav2_heading_needle_deflection();
data->aileron = globals->get_controls()->get_aileron();
//data->aileron_trim = p_Controls->get_aileron_trim();
data->elevator = globals->get_controls()->get_elevator();
data->elevator_trim = globals->get_controls()->get_elevator_trim();
data->rudder = globals->get_controls()->get_rudder();
//data->rudder_trim = p_Controls->get_rudder_trim();
//data->flaps = fgGetDouble("/controls/flaps");
data->flaps = globals->get_controls()->get_flaps();
} }
static void distribute_data( const ogcFGData *data, FGInterface *chunk ) { static void distribute_data( const ogcFGData *data, FGInterface *chunk ) {

View file

@ -1,10 +1,12 @@
//// opengc.cxx - Network interface program to send sim data onto a LAN //// opengc.hxx - Network interface program to send sim data onto a LAN
// //
// Created by: J. Wojnaroski -- castle@mminternet.com // Created by: J. Wojnaroski -- castle@mminternet.com
// Date: 21 Nov 2001 // Date: 21 Nov 2001
// //
//
// Adapted from original network code developed by C. Olson
//
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as // modify it under the terms of the GNU General Public License as
// published by the Free Software Foundation; either version 2 of the // published by the Free Software Foundation; either version 2 of the

View file

@ -1,9 +1,12 @@
// opengc.hxx -- Define structure of OpenGC/FG interface parameters // opengc_data.hxx -- Define structure of OpenGC/FG interface parameters
// //
// Version by J. Wojnaroski for interface to Open Glass Displays // Version by J. Wojnaroski for interface to Open Glass Displays
// //
// Modified 02/12/01 - Update engine structure for multi-engine models // Modified 02/12/01 - Update engine structure for multi-engine models
// - Added data preamble to id msg types // - Added data preamble to id msg types
//
// Modified 01/23/02 - Converted portions of the Engine and Gear accesssors to properties
// - Removed data from navigation functions. OpenGC provides own
// //
// This file defines the class/structure of the UDP packet that sends // This file defines the class/structure of the UDP packet that sends
// the simulation data created by FlightGear to the glass displays. It // the simulation data created by FlightGear to the glass displays. It
@ -37,12 +40,18 @@ class ogcFGData {
public: public:
// defines msg types and contents. typedefs & classes are TBS // defines msg types and contents. The msg_content is used as a 'pointer' to
// a predefined set of msg strings
unsigned int version_id; unsigned int version_id;
unsigned int msg_id; unsigned int msg_type;
unsigned int msg_content; unsigned int msg_content;
unsigned short autopilot_mode;
unsigned short afds_armed_mode; // position
double latitude;
double longitude;
double magvar;
// flight parameters // flight parameters
@ -54,48 +63,58 @@ public:
double v_kcas; double v_kcas;
double groundspeed; double groundspeed;
double vvi; double vvi;
double mach; double mach;
double v_tas; // true airspeed in knots
// position // Data used by the FMC and autopilots
double latitude; double phi_dot;
double longitude; double theta_dot;
double magvar; double psi_dot;
double alpha;
double alpha_dot;
double beta;
double beta_dot;
// Control surface positions
double aileron;
double aileron_trim;
double elevator;
double elevator_trim;
double rudder;
double rudder_trim;
double flaps;
// Gear positions 0 = UP and 1 = DOWN
double gear_nose;
double gear_left;
double gear_right;
// engine data // engine data
double rpm[4]; double rpm[4]; // this is for pistons, jets see below
double n1_turbine[4];
double epr[4]; double epr[4];
double egt[4]; double egt[4];
double n2_turbine[4];
double fuel_flow[4]; double fuel_flow[4];
double man_pressure[4];
double oil_pressure[4]; double oil_pressure[4];
double throttle[4];
double mixture[4];
double prop_advance[4];
double n1_turbine[4]; // Pressures and temperatures
double n2_turbine[4];
// navigation data double static_temperature;
// This will require a lot of related work to build the nav double total_temperature;
// database for the ND and some msg traffic both ways to display double static_pressure;
// and configure nav aids, freqs, courses, etc etc. OpenGC will double total_pressure;
// most likely define an FMC to hold the database and do nav stuff double dynamic_pressure;
double nav1_freq;
double nav1_radial;
double nav1_course_dev;
double nav1_gs_dev;
double nav1_dme;
double nav2_freq;
double nav2_radial;
double nav2_course_dev;
double nav2_gs_dev;
double nav2_dme;
// some other locations serving as place holders for user defined
// variables reduces the need to update FG or OpenGC code
double d_ogcdata[16];
float f_ogcdata[16];
int i_ogcdata[16];
}; };
#endif // _OPENGC_HXX #endif // _OPENGC_HXX