X-Git-Url: http://git.tpope.net/?p=tpope-extra.git;a=blobdiff_plain;f=perl%2Fmobile-phone-monitor;h=5a46f1e2a954b2cad27540933daae393da8c9011;hp=535b4f67d898edd4e8e6ae4e4663bd95c6b0cf5e;hb=HEAD;hpb=51802422e65a00d0533a09adbcf413942afdfdd8 diff --git a/perl/mobile-phone-monitor b/perl/mobile-phone-monitor index 535b4f6..5a46f1e 100755 --- a/perl/mobile-phone-monitor +++ b/perl/mobile-phone-monitor @@ -1,8 +1,8 @@ #!/usr/bin/perl # $Id$ -# -*- perl -*- vim: ft=perl sw=4 sts=4 +# -*- perl -*- vim:set ft=perl sw=4 sts=4: -# Monitors a bluetooth mobile phome for calls. You'll need to bind rfcomm1 to +# Monitors a bluetooth mobile phone for calls. You'll need to bind rfcomm1 to # your mobile phone's SP service. You'll also need my Device::Nokia module # (the name is misleading, it's not Nokia specific). @@ -12,7 +12,7 @@ my $number; my %status; my $quiton; my $daemonize; - +my $last=0; my $gsm = new Device::Nokia( port => '/dev/rfcomm1', log => 'file,/dev/null'); $SIG{INT} = 'death'; @@ -36,10 +36,11 @@ while($_=shift) { daemonize() if $daemonize; +$|=1; while(1) { %status=("is_active"=>1); while($status{"is_active"} ne 0) { - for(my $i=0;$i<8;$i++) { + for(my $i=0;$i<3;$i++) { sleep 1; $number = wait_for_ring(); if($number) { @@ -50,18 +51,21 @@ while($status{"is_active"} ne 0) { } elsif(!defined($number)) { $status{"is_active"}=0; last; }; } my %newstatus=gather_data($gsm); - ring() if($newstatus{"call"}!=0 && $status{"call"}!=0); + ring() if($newstatus{"call"}!=0 && $status{"call"}==0 && !$status{"number"}); foreach (keys %newstatus) { $status{$_} = $newstatus{$_} if(defined ($newstatus{$_})); } undef $status{"number"} if (!$number && $status{"callsetup"}==0 && $status{"call"}==0); output_status(%status); - death() if ($status{"source"}==0 && $status{"callsetup"}==0 && $status{"call"}==0 && $quiton); + if ($status{"source"}==0 && $status{"callsetup"}==0 && $status{"call"}==0 && $quiton) { + death() if(time-$last>600); + } elsif ($quiton) { + $last=time; + } } $gsm->disconnect(); -#print "Chillin'...\n"; output_status(is_active => 0); -do {sleep 60} +do {sleep (60-30*$quiton);} until(initialize($gsm)); } @@ -89,13 +93,13 @@ sub ring { sub gather_data { my %data; my $gsm=shift; - eval { - local $SIG{ALRM} = sub { die "alarm\n" }; - alarm 15; + eval { + local $SIG{ALRM} = sub { die "alarm\n" }; + alarm 15; %data=$gsm->indicators(); my ($first, $second) = $gsm->battery_strength(); $data{"source"}=$first; - $data{"battery"}=$second; + #$data{"battery"}=$second; ($first, $second) = $gsm->signal_quality(); $data{"signal"}=$first; alarm 0; @@ -119,7 +123,6 @@ sub output_status { rename "/tmp/.phone-status.new", "/tmp/.phone-status" || die $!; } - sub daemonize { chdir "/"; my $pid=fork();