#!/usr/bin/perl -w # cross-platform example7 use strict; use vars qw( $OS_win $ob $file ); BEGIN { $OS_win = ($^O eq "MSWin32") ? 1 : 0; if ($OS_win) { eval "use Win32::SerialPort 0.13"; die "$@\n" if ($@); } else { eval "use Device::SerialPort"; die "$@\n" if ($@); } } # End BEGIN $file = 'tpj4.cfg'; if ($OS_win) { $ob = Win32::SerialPort->start ($file); } else { $ob = Device::SerialPort->start ($file); } die "Can't open serial port from $file: $^E\n" unless ($ob); sub waitfor { my $timeout=$ob->get_tick_count + (1000 * shift); $ob->lookclear; # clear buffers my $gotit = ""; for (;;) { return unless (defined ($gotit = $ob->lookfor)); if ($gotit ne "") { my ($found, $end) = $ob->lastlook; return $gotit.$found; } return if ($ob->reset_error); return if ($ob->get_tick_count > $timeout); } } # =============== execution begins here ======================= $ob->error_msg(1); # use built-in error messages $ob->user_msg(1); $ob->are_match("BUSY","CONNECT","OK","NO DIALTONE","ERROR","RING", "NO CARRIER","NO ANSWER"); $ob->write("ATE0X4\r"); printf "%s\n", waitfor(1); # 1 second print "\nStarting Dial\n"; $ob->write("ATDT5551234\r"); # Use a different number! printf "%s\n", waitfor(20); print "\n5 seconds to failure..\n"; waitfor(5) || print "Timed Out\n"; undef $ob;