#!/opt/perl/bin/perl

#
# SmartApron - SMS message to mp3 playback mapper
# (for Mac OSX: requires perl and mpg123 player)
# A. Schiffler, 2004
#

use Device::Gsm;

print "Apron GSM Interface\n\n\n";

# Configure mp3 player
$player = "/usr/local/bin/mpg123 -q ";

# Connect to phone (no pin)
print "Connecting to GSM phone ...\n";
$gsm = new Device::Gsm( port => '/dev/tty.usbserial0', pin => '' );
if( $gsm->connect() ) {
      print "Connected!\n";
} else {
      print "Sorry, no connection with gsm phone on serial port!\n";
      exit;
}

# Register to GSM network (you must supply PIN number in above new() call)
$gsm->register();
print "Registered to GSM network\n";

# Get some info
$do_info=0;
if ($do_info) {
 $man_name = $gsm->manufacturer();
 print "Phone manufacturer: $man_name\n";
 $model = $gsm->model();
 print "Phone model: $model\n";
 $imei = $gsm->imei();
 print "IMEI: $imei\n";
 $level = $gsm->signal_quality();
 print "Signal quality: $level db\n";
}

# Clean up
print "Deleting messages ...\n";
$n=-1;
while ($n > -1) {
 if ( $gsm->delete_sms($n) ) {
  print "Deleted message $n!\n";
 }
 $n--;
}

# Message polling loop
$in_loop=1;
while ($in_loop) {

# Get list of Device::Gsm::Sms message objects
print "Checking messages ...\n";
@messages = $gsm->messages();
$num_messages = $#messages + 1;
print "$num_messages messages\n";

my $smessages = scalar @messages;
if( $smessages ) {
	print "You have messages!\n" ;

	my $n = 0;
	foreach( @messages ) {
		my $sms = $_;
		next unless defined $sms;

		$n++;

		print '-' x 60, "\n", "MESSAGE $n\n";
		print 'Type   ',($sms->type() eq Device::Gsm::Sms::SMS_SUBMIT ? 'SUBMIT' : 'DELIVER'), "\n";
		print 'Status ', $sms->status(), "\n";
		print 'From   ', $sms->sender(), "\n";
		print 'To     ', $sms->recipient(), "\n";
		print 'Text   [', $sms->text(), "]\n";
		print '-' x 60, "\n\n";

		# Play mp3 based on sms message text
	        print "Playing audio ...\n";
 	        system ($player . $sms->text() . ".mp3");

	}

        print "Deleting messages ...\n";
        while ($n > 0) {
  	 if ( $gsm->delete_sms($n) ) {
	        print "Deleted message $n!\n";
         }
         $n--;
        }

 } else { 

	print "No messages!\n";

 }

}

print "Bye\n";
