From a80d0320d7e144d484d2d4f6a6a49d773ef15b4e Mon Sep 17 00:00:00 2001 From: curt Date: Sat, 7 Feb 2004 03:32:40 +0000 Subject: [PATCH] Initial revisions. --- scripts/perl/examples/aircraft.pl | 90 +++++++++++++++++ scripts/perl/examples/autopilot.pl | 141 +++++++++++++++++++++++++++ scripts/perl/examples/environment.pl | 125 ++++++++++++++++++++++++ scripts/perl/examples/position.pl | 94 ++++++++++++++++++ 4 files changed, 450 insertions(+) create mode 100755 scripts/perl/examples/aircraft.pl create mode 100755 scripts/perl/examples/autopilot.pl create mode 100755 scripts/perl/examples/environment.pl create mode 100755 scripts/perl/examples/position.pl diff --git a/scripts/perl/examples/aircraft.pl b/scripts/perl/examples/aircraft.pl new file mode 100755 index 000000000..41703bfcf --- /dev/null +++ b/scripts/perl/examples/aircraft.pl @@ -0,0 +1,90 @@ +#!/usr/bin/perl + +require "telnet.pl"; + +use strict; + +sub start_engine { + my( $fgfs ) = shift; + my( $engine_num ) = shift; + + my( $prop, $value ); + my( %HASH ) = (); + + &set_prop( $fgfs, "/controls/engines/engine[$engine_num]/magnetos", "3" ); + &set_prop( $fgfs, "/controls/engines/engine[$engine_num]/starter", "true" ); + sleep(3); + &set_prop( $fgfs, "/controls/engines/engine[$engine_num]/starter", + "false" ); +} + + +sub set_throttle { + my( $fgfs ) = shift; + my( $engine ) = shift; + my( $throttle_norm ) = shift; + + &set_prop( $fgfs, "/controls/engines/engine[$engine]/throttle", + $throttle_norm ); +} + + +sub set_mixture { + my( $fgfs ) = shift; + my( $engine ) = shift; + my( $mix_norm ) = shift; + + &set_prop( $fgfs, "/controls/engines/engine[$engine]/mixture", $mix_norm ); +} + + +sub set_weight { + my( $fgfs ) = shift; + my( $lbs ) = shift; + + &set_prop( $fgfs, "/sim/aircraft-weight-lbs", $lbs ); +} + + +sub set_cg { + my( $fgfs ) = shift; + my( $inches ) = shift; + + &set_prop( $fgfs, "/sim/aircraft-cg-offset-inches", $inches ); +} + + +sub set_parking_brake { + my( $fgfs ) = shift; + my( $pos_norm ) = shift; + + &set_prop( $fgfs, "/controls/gear/brake-parking", $pos_norm ); +} + +sub set_flaps { + my( $fgfs ) = shift; + my( $pos_norm ) = shift; + + &set_prop( $fgfs, "/controls/flight/flaps", $pos_norm ); +} + +sub set_aileron { + my( $fgfs ) = shift; + my( $pos_norm ) = shift; + + &set_prop( $fgfs, "/controls/flight/aileron", $pos_norm ); +} + +sub set_elevator { + my( $fgfs ) = shift; + my( $pos_norm ) = shift; + + &set_prop( $fgfs, "/controls/flight/elevator", $pos_norm ); +} + +sub set_rudder { + my( $fgfs ) = shift; + my( $pos_norm ) = shift; + + &set_prop( $fgfs, "/controls/flight/rudder", $pos_norm ); +} diff --git a/scripts/perl/examples/autopilot.pl b/scripts/perl/examples/autopilot.pl new file mode 100755 index 000000000..0c28a147e --- /dev/null +++ b/scripts/perl/examples/autopilot.pl @@ -0,0 +1,141 @@ +#!/usr/bin/perl + +require "telnet.pl"; + +use strict; + + +sub autopilot_off { + my( $fgfs ) = shift; + + &set_prop( $fgfs, "/autopilot/locks/heading", "" ); + &set_prop( $fgfs, "/autopilot/locks/altitude", "" ); + &set_prop( $fgfs, "/autopilot/locks/speed", "" ); +} + + +sub wing_leveler { + my( $fgfs ) = shift; + my( $state ) = shift; + + if ( $state ) { + &set_prop( $fgfs, "/autopilot/locks/heading", "wing-leveler" ); + } else { + &set_prop( $fgfs, "/autopilot/locks/heading", "" ); + } +} + + +sub bank_hold { + my( $fgfs ) = shift; + my( $state ) = shift; + my( $bank_deg ) = shift; + + if ( $state ) { + &set_prop( $fgfs, "/autopilot/locks/heading", "bank-hold" ); + &set_prop( $fgfs, "/autopilot/settings/target-bank-deg", $bank_deg ); + } else { + &set_prop( $fgfs, "/autopilot/locks/heading", "" ); + } +} + + +sub heading_hold { + my( $fgfs ) = shift; + my( $state ) = shift; + my( $hdg_deg ) = shift; + + if ( $state ) { + &set_prop( $fgfs, "/autopilot/locks/heading", "dg-heading-hold" ); + &set_prop( $fgfs, "/autopilot/settings/heading-bug-deg", $hdg_deg ); + } else { + &set_prop( $fgfs, "/autopilot/locks/heading", "" ); + } +} + + +sub pitch_hold_trim { + my( $fgfs ) = shift; + my( $state ) = shift; + my( $pitch_deg ) = shift; + + if ( $state ) { + &set_prop( $fgfs, "/autopilot/locks/altitude", "pitch-hold" ); + &set_prop( $fgfs, "/autopilot/settings/target-pitch-deg", $pitch_deg ); + } else { + &set_prop( $fgfs, "/autopilot/locks/altitude", "" ); + } +} + + +sub pitch_hold_yoke { + my( $fgfs ) = shift; + my( $state ) = shift; + my( $pitch_deg ) = shift; + + if ( $state ) { + &set_prop( $fgfs, "/autopilot/locks/altitude", "pitch-hold-yoke" ); + &set_prop( $fgfs, "/autopilot/settings/target-pitch-deg", $pitch_deg ); + } else { + &set_prop( $fgfs, "/autopilot/locks/altitude", "" ); + } +} + + +sub altitude_hold { + my( $fgfs ) = shift; + my( $state ) = shift; + my( $alt_ft ) = shift; + + if ( $state ) { + &set_prop( $fgfs, "/autopilot/locks/altitude", "altitude-hold" ); + &set_prop( $fgfs, "/autopilot/settings/target-altitude-ft", $alt_ft ); + } else { + &set_prop( $fgfs, "/autopilot/locks/altitude", "" ); + } +} + + +sub auto_speed_throttle { + my( $fgfs ) = shift; + my( $state ) = shift; + my( $kts ) = shift; + + if ( $state ) { + &set_prop( $fgfs, "/autopilot/locks/speed", "speed-with-throttle" ); + &set_prop( $fgfs, "/autopilot/settings/target-speed-kt", $kts ); + } else { + &set_prop( $fgfs, "/autopilot/locks/speed", "" ); + } +} + + +sub auto_speed_pitch_trim { + my( $fgfs ) = shift; + my( $state ) = shift; + my( $kts ) = shift; + + if ( $state ) { + &set_prop( $fgfs, "/autopilot/locks/speed", "speed-with-pitch-trim" ); + &set_prop( $fgfs, "/autopilot/settings/target-speed-kt", $kts ); + } else { + &set_prop( $fgfs, "/autopilot/locks/speed", "" ); + } +} + +sub auto_speed_pitch_yoke { + my( $fgfs ) = shift; + my( $state ) = shift; + my( $kts ) = shift; + + if ( $state ) { + &set_prop( $fgfs, "/autopilot/locks/speed", "speed-with-pitch-yoke" ); + &set_prop( $fgfs, "/autopilot/settings/target-speed-kt", $kts ); + } else { + &set_prop( $fgfs, "/autopilot/locks/speed", "" ); + } +} + + + + diff --git a/scripts/perl/examples/environment.pl b/scripts/perl/examples/environment.pl new file mode 100755 index 000000000..8837c5410 --- /dev/null +++ b/scripts/perl/examples/environment.pl @@ -0,0 +1,125 @@ +#!/usr/bin/perl + +require "telnet.pl"; + +use strict; + + +sub set_timeofday { + my( $fgfs ) = shift; + my( $timeofday ) = shift; + + &send( $fgfs, "run timeofday $timeofday" ); +} + + +sub set_env_layer { + my( $fgfs ) = shift; + my( $layer_type ) = shift; # boundary or aloft + my( $layer_num ) = shift; + my( $wind_hdg_deg ) = shift; + my( $wind_spd_kt ) = shift; + my( $turb_norm ) = shift; + my( $temp_degc ) = shift; + my( $press_inhg ) = shift; + my( $dew_degc ) = shift; + my( $vis ) = shift; + my( $elevation ) = shift; + + my( $prop, $value ); + my( %HASH ) = (); + + my( $prefix ) = "/environment/config/$layer_type/entry[$layer_num]"; + $HASH{ "$prefix/wind-from-heading-deg" } = $wind_hdg_deg; + $HASH{ "$prefix/wind-speed-kt" } = $wind_spd_kt; + $HASH{ "$prefix/turbulence/magnitude-norm" } = $turb_norm; + $HASH{ "$prefix/temperature-degc" } = $temp_degc; + $HASH{ "$prefix/pressure-sea-level-inhg" } = $press_inhg; + $HASH{ "$prefix/dewpoint-degc" } = $dew_degc; + $HASH{ "$prefix/visibility-m" } = $vis; + $HASH{ "$prefix/elevation-ft" } = $elevation; + + foreach $prop ( keys(%HASH) ) { + $value = $HASH{$prop}; + print "setting $prop = $value\n"; + &set_prop( $fgfs, $prop, $value ); + } +} + + +sub set_oat { + my( $fgfs ) = shift; + my( $oat ) = shift; + + # set the outside air temperature (simply) + &send( $fgfs, "run set-outside-air-temp-degc $oat" ); +} + + +sub set_pressure { + my( $fgfs ) = shift; + my( $pressure_inhg ) = shift; + + my( $layer_type ) = shift; # boundary or aloft + my( $layer_num ) = shift; + my( $wind_hdg_deg ) = shift; + my( $wind_spd_kt ) = shift; + my( $turb_norm ) = shift; + my( $temp_degc ) = shift; + my( $press_inhg ) = shift; + my( $dew_degc ) = shift; + my( $vis ) = shift; + my( $elevation ) = shift; + + my( $prop, $value ); + my( %HASH ) = (); + + my( $i ); + + for ( $i = 0; $i < 3; ++$i ) { + my( $prefix ) = "/environment/config/boundary/entry[$i]"; + $HASH{ "$prefix/pressure-sea-level-inhg" } = $pressure_inhg; + } + + for ( $i = 0; $i < 5; ++$i ) { + my( $prefix ) = "/environment/config/aloft/entry[$i]"; + $HASH{ "$prefix/pressure-sea-level-inhg" } = $pressure_inhg; + } + + foreach $prop ( keys(%HASH) ) { + $value = $HASH{$prop}; + print "setting $prop = $value\n"; + &set_prop( $fgfs, $prop, $value ); + } +} + + +sub set_cloud_layer { + my( $fgfs ) = shift; + my( $layer ) = shift; + my( $coverage ) = shift; + my( $elevation_ft ) = shift; + my( $thickness_ft ) = shift; + my( $transition_ft ) = shift; + + my( $prop, $value ); + my( %HASH ) = (); + + $HASH{ "/environment/clouds/layer[$layer]/coverage" } = $coverage; + $HASH{ "/environment/clouds/layer[$layer]/elevation-ft" } = $elevation_ft; + $HASH{ "/environment/clouds/layer[$layer]/thickness-ft" } = $thickness_ft; + $HASH{ "/environment/clouds/layer[$layer]/transition-ft" } = $transition_ft; + + foreach $prop ( keys(%HASH) ) { + $value = $HASH{$prop}; + print "setting $prop = $value\n"; + &set_prop( $fgfs, $prop, $value ); + } +} + + +sub reinit_environment() { + my( $fgfs ) = shift; + + &send( $fgfs, "run reinit environment" ); +} diff --git a/scripts/perl/examples/position.pl b/scripts/perl/examples/position.pl new file mode 100755 index 000000000..c94e04a43 --- /dev/null +++ b/scripts/perl/examples/position.pl @@ -0,0 +1,94 @@ +#!/usr/bin/perl + +require "telnet.pl"; + +use strict; + +my( $airport_id ) = "KSNA"; +my( $rwy_no ) = "19R"; +my( $reset_sec ) = 300; + +my( $server ) = "localhost"; +my( $port ) = 5401; +my( $timeout ) = 5; + + +sub reset_in_air { + my( $fgfs ) = shift; + my( $aptid ) = shift; + my( $rwy ) = shift; + my( $offset_dist ) = shift; + my( $glideslope_deg ) = shift; + my( $altitude_ft ) = shift; + my( $airspeed_kt ) = shift; + + my( $prop, $value ); + my( %HASH ) = (); + + $HASH{ "/sim/presets/airport-id" } = $aptid; + $HASH{ "/sim/presets/runway" } = $rwy; + $HASH{ "/sim/presets/offset-distance" } = $offset_dist; + if ( $glideslope_deg > 0 ) { + $HASH{ "/sim/presets/glideslope-deg" } = $glideslope_deg; + $HASH{ "/sim/presets/altitude-ft" } = ""; + } else { + $HASH{ "/sim/presets/glideslope-deg" } = ""; + $HASH{ "/sim/presets/altitude-ft" } = $altitude_ft; + } + + $HASH{ "/sim/presets/airspeed-kt" } = $airspeed_kt; + $HASH{ "/sim/presets/vor-id" } = ""; + $HASH{ "/sim/presets/vor-freq" } = ""; + $HASH{ "/sim/presets/ndb-id" } = ""; + $HASH{ "/sim/presets/ndb-freq" } = ""; + $HASH{ "/sim/presets/fix" } = ""; + $HASH{ "/sim/presets/longitude-deg" } = "-9999.0"; + $HASH{ "/sim/presets/latitude-deg" } = "-9999.0"; + $HASH{ "/sim/presets/offset-azimuth" } = ""; + $HASH{ "/sim/presets/heading-deg" } = "-9999.0"; + + foreach $prop ( keys(%HASH) ) { + $value = $HASH{$prop}; + print "setting $prop = $value\n"; + &set_prop( $fgfs, $prop, $value ); + } + + &send( $fgfs, "run presets-commit" ); +} + + +sub reset_on_ground { + my( $fgfs ) = shift; + my( $aptid ) = shift; + my( $rwy ) = shift; + + my( $prop, $value ); + my( %HASH ) = (); + + $HASH{ "/sim/presets/airport-id" } = $aptid; + $HASH{ "/sim/presets/runway" } = $rwy; + $HASH{ "/sim/presets/offset-distance" } = ""; + $HASH{ "/sim/presets/glideslope-deg" } = ""; + $HASH{ "/sim/presets/altitude-ft" } = ""; + $HASH{ "/sim/presets/airspeed-kt" } = ""; + $HASH{ "/sim/presets/vor-id" } = ""; + $HASH{ "/sim/presets/vor-freq" } = ""; + $HASH{ "/sim/presets/ndb-id" } = ""; + $HASH{ "/sim/presets/ndb-freq" } = ""; + $HASH{ "/sim/presets/fix" } = ""; + $HASH{ "/sim/presets/longitude-deg" } = "-9999.0"; + $HASH{ "/sim/presets/latitude-deg" } = "-9999.0"; + $HASH{ "/sim/presets/offset-azimuth" } = ""; + $HASH{ "/sim/presets/heading-deg" } = "-9999.0"; + + foreach $prop ( keys(%HASH) ) { + $value = $HASH{$prop}; + print "setting $prop = $value\n"; + &set_prop( $fgfs, $prop, $value ); + } + + &send( $fgfs, "run presets-commit" ); +} + + +