#!/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).
my %status;
my $quiton;
my $daemonize;
-
+my $last=0;
my $gsm = new Device::Nokia( port => '/dev/rfcomm1', log => 'file,/dev/null');
$SIG{INT} = 'death';
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) {
} 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));
}
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;
rename "/tmp/.phone-status.new", "/tmp/.phone-status" || die $!;
}
-
sub daemonize {
chdir "/";
my $pid=fork();