#!/usr/bin/perl use IO::Socket; use IO::Select; $host = "127.0.0.1"; $port = "2947"; $pictureinterval = 60; sub do_command { my @ready, $s, $buf; my $handle = shift(@_); my $command = shift(@_); my $read_set = new IO::Select($handle); print $handle "$command\n"; while (1) { if (@ready = $read_set->can_read(2)) { foreach $s (@ready) { $buf = <$s>; if ($buf =~ m/GPSD/) { return $buf; } } } else { return 0; } } } while ((! $gpsd) && ($opencount < 30)) { $gpsd = new IO::Socket::INET (PeerAddr => $host, PeerPort => $port, Proto => 'tcp',); $opencount++; sleep 1; } die "Could not create socket: $!\n" unless $gpsd; $gpsd->autoflush(1); $| = 1; $month = $day = "01"; $hour = $minute = "00"; while (1) { do_command($gpsd, "d") =~ m/GPSD,D=(\S+)\s+(\S+)/; $date = $1; $time = $2; $date =~ m/(\d+)\/(\d+)\/\d+/; $month = $1; $day = $2; $time =~ m/(\d+):(\d+):\d+/; $hour = $1; $minute = $2; do_command($gpsd, "p") =~ m/GPSD,P=(\S+)\s+(\S+)/; $lat = $1; $lon = $2; do_command($gpsd, "a") =~ m/GPSD,A=(\S+)/; $alt = int($1 * 3.28); # print "$date $time $lat $lon $alt\n"; system("export LD_LIBRARY_PATH=/usr/local/lib HOME=/root; /bin/echo 'x' | /usr/local/bin/pencam2 snap > /dev/null"); $convertstring = "export LD_LIBRARY_PATH=/usr/local/lib; /usr/local/bin/ppmlabel -color \"#00FF00\" -x 400 -y 430 -text \"$date Alt: $alt\" -text \"$time UTC\" -text \"$lat $lon\" /mnt/images/raw001.ppm | /usr/local/bin/pnmtojpeg -quality 98 > /mnt/images/" . $month . $day . $hour . $minute . ".jpg"; # print $convertstring; system("$convertstring"); sleep $pictureinterval; }