]> git.mxchange.org Git - flightgear.git/commitdiff
Initial revision.
authorcurt <curt>
Fri, 19 Dec 2003 15:36:54 +0000 (15:36 +0000)
committercurt <curt>
Fri, 19 Dec 2003 15:36:54 +0000 (15:36 +0000)
scripts/perl/examples/flyplan.pl [new file with mode: 0755]
scripts/perl/examples/reset.pl [new file with mode: 0755]
scripts/perl/examples/telnet.pl [new file with mode: 0644]

diff --git a/scripts/perl/examples/flyplan.pl b/scripts/perl/examples/flyplan.pl
new file mode 100755 (executable)
index 0000000..3924241
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/perl
+#
+# Written by Curtis L. Olson, started January 2003
+#
+# This file is in the Public Domain and comes with no warranty.
+#
+# $Id$
+# ----------------------------------------------------------------------------
+
+
+use strict;
+
+require "telnet.pl";
+
+my( $server ) = "localhost";
+my( $port ) = 5401;
+my( $timeout ) = 10;
+
+my( %Route );
+$Route{0} = "OAK:116.80:020";
+$Route{1} = "OAK:116.80:019:27";
+$Route{2} = "SAC:115.20:020";
+$Route{3} = "SAC:115.20:080:43";
+$Route{4} = "ECA:116.0:209";
+
+my( $i );
+
+foreach $i ( keys(%Route) ) {
+    &fly_to( $Route{$i} );
+}
+
+
+sub fly_to() {
+    my( $waypoint ) = shift;
+
+    # decode waypoint
+    my( $id, $freq, $radial, $dist ) = split( /:/, $waypoint );
+
+    print "Next way point is $id - $freq\n";
+    print "  Target radial is $radial\n";
+    if ( $dist ne "" ) {
+        print "  Flying outbound for $dist nm\n";
+    } else {
+        print "  Flying inbound to station\n";
+    }
+
+    # tune radio and set autopilot
+    my( $fgfs );
+    if ( !( $fgfs = &connect($server, $port, $timeout) ) ) {
+        print "Error: can't open socket\n";
+        return;
+    }
+    &send( $fgfs, "data" );     # switch to raw data mode
+    set_prop( $fgfs, "/radios/nav[0]/frequencies/selected-mhz", $freq );
+    set_prop( $fgfs, "/radios/nav[0]/radials/selected-deg", $radial );
+    set_prop( $fgfs, "/radios/dme/switch-position", "1" );
+    set_prop( $fgfs, "/autopilot/locks/nav", "true" );
+
+    # monitor progress until goal is achieved
+    my( $done ) = 0;
+    my( $last_range ) = 9999.0;
+    while ( !$done ) {
+        my( $inrange ) = get_prop( $fgfs, "/radios/nav[0]/in-range" );
+        if ( $inrange eq "false" ) {
+            print "Warning, VOR not in range, we are lost!\n";
+        }
+        my( $cur_range ) = get_prop( $fgfs, "/radios/dme/distance-nm" );
+        print "  range = $cur_range\n";
+        if ( $dist ne "" ) {
+            # a target dist is specified so assume we are flying outbound
+            if ( $cur_range > $dist ) {
+                $done = 1;
+            }
+        } else {
+            # no target dist is specified, assume we are flying
+            # inbound to the station
+            if ( $cur_range < 0.25 && $cur_range > 0.0 ) {
+                $done = 1;
+            } elsif ( $last_range < $cur_range ) {
+                $done = 1;
+            }
+        }
+        $last_range = $cur_range;
+
+        # loop once per second
+        sleep(1);
+    }
+
+    &send( $fgfs, "quit");
+    close $fgfs;
+}
diff --git a/scripts/perl/examples/reset.pl b/scripts/perl/examples/reset.pl
new file mode 100755 (executable)
index 0000000..ed77926
--- /dev/null
@@ -0,0 +1,79 @@
+#!/usr/bin/perl
+
+require "telnet.pl";
+
+use strict;
+
+my( $airport_id ) = "KSNA";
+my( $rwy_no ) = "19R";
+my( $reset_sec ) = 30;
+
+my( $server ) = "localhost";
+my( $port ) = 5401;
+my( $timeout ) = 5;
+
+while ( 1 ) {
+    print "Reseting to $airport_id $rwy_no\n";
+    reset_position( $airport_id, $rwy_no );
+    sleep( $reset_sec );
+}
+
+
+sub reset_position {
+    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/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-distance" } = "";
+    $HASH{ "/sim/presets/offset-azimuth" } = "";
+    $HASH{ "/sim/presets/heading-deg" } = "-9999.0";
+    $HASH{ "/sim/presets/altitude-ft" } = "";
+    $HASH{ "/sim/presets/glideslope-deg" } = "";
+    $HASH{ "/sim/presets/airspeed-kt" } = "";
+
+    my( $fgfs );
+
+    if ( !( $fgfs = &connect($server, $port, $timeout) ) ) {
+        print "Error: can't open socket\n";
+        return;
+    }
+
+    &send( $fgfs, "data" );     # switch to raw data mode
+
+    foreach $prop ( keys(%HASH) ) {
+        $value = $HASH{$prop};
+        # if ( $value eq "" ) {
+        #    $value = 0;
+        # }
+        print "setting $prop = $value\n";
+        &set_prop( $fgfs, $prop, $value );
+    }
+
+    &send( $fgfs, "run presets-commit" );
+
+    # set time of day to noon
+    &send( $fgfs, "run timeofday noon" );
+
+    # start the engine
+    &set_prop( $fgfs, "/controls/engines/engine[0]/magnetos", "3" );
+    &set_prop( $fgfs, "/controls/engines/engine[0]/starter", "true" );
+    sleep(2);
+    &set_prop( $fgfs, "/controls/engines/engine[0]/starter", "false" );
+
+    &send( $fgfs, "quit" );
+    close $fgfs;
+}
+
+
+
diff --git a/scripts/perl/examples/telnet.pl b/scripts/perl/examples/telnet.pl
new file mode 100644 (file)
index 0000000..a738a72
--- /dev/null
@@ -0,0 +1,84 @@
+#!/usr/bin/perl
+#
+# Written by Curtis L. Olson, started December 2002
+# Some code portions courtesy of Melchior FRANZ
+#
+# This file is in the Public Domain and comes with no warranty.
+#
+# $Id$
+# ----------------------------------------------------------------------------
+
+
+use IO::Socket;
+
+use strict;
+
+
+sub my_not() {
+    my( $val ) = shift;
+
+    if ( $val eq "true" ) {
+        return 0;
+    } elsif ( $val eq "false" ) {
+        return 1;
+    } elsif ( $val eq "" ) {
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
+
+sub get_prop() {
+    my( $handle ) = shift;
+
+    &send( $handle, "get " . shift );
+    eof $handle and die "\nconnection closed by host";
+    $_ = <$handle>;
+    s/\015?\012$//;
+    /^-ERR (.*)/ and die "\nfgfs error: $1\n";
+
+    return $_;
+}
+
+
+sub set_prop() {       
+    my( $handle ) = shift;
+    my( $prop ) = shift;
+    my( $value ) = shift;
+
+    &send( $handle, "set $prop $value");
+
+    # eof $handle and die "\nconnection closed by host";
+}
+
+
+sub send() {
+    my( $handle ) = shift;
+
+    print $handle shift, "\015\012";
+}
+
+
+sub connect() {
+    my( $host ) = shift;
+    my( $port ) = shift;
+    my( $timeout ) = (shift || 120);
+    my( $socket );
+    STDOUT->autoflush(1);
+    while ($timeout--) {
+        if ($socket = IO::Socket::INET->new( Proto => 'tcp',
+                                             PeerAddr => $host,
+                                             PeerPort => $port) )
+        {
+            $socket->autoflush(1);
+            return $socket;
+        }      
+        print "Attempting to connect to $host ... " . $timeout . "\n";
+        sleep(1);
+    }
+    return 0;
+}
+
+
+return 1;                    # make perl happy