Here is my first software designed for the FreeRunner: polysms. It's a commandline tool: you pass it a polygen grammar name and a phone number, and it will send a SMS to that phone number using the polygen output for that grammar as the SMS text:
# polyrun manager 0012345678
And here is the code, that works on the http://www.freesmartphone.org dbus framework:
#!/usr/bin/python
# (C) 2008 Enrico Zini
# Most bits of this are stripped from zhone, which is:
# (C) 2007 Johannes 'Josch' Schauer
# (C) 2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
# (C) 2008 Jan 'Shoragan' Luebbe
# (C) 2008 Daniel 'Alphaone' Willmann
# (C) 2008 Openmoko, Inc.
# GPLv2 or later
from dbus import SystemBus, Interface
from dbus.exceptions import DBusException
import logging
logger = logging.getLogger( __name__ )
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
import gobject
import sys
from subprocess import Popen, PIPE
class Phone:
def tryGetProxy( self, busname, objname ):
try:
return self.bus.get_object( busname, objname )
except DBusException, e:
logger.warning( "could not create proxy for %s:%s" % ( busname, objname ) )
def __init__(self):
try:
self.bus = SystemBus()
except DBusException, e:
logger.error( "could not connect to dbus_object system bus: %s" % e )
return False
# Phone
self.gsm_device_obj = self.tryGetProxy( 'org.freesmartphone.ogsmd', '/org/freesmartphone/GSM/Device' )
if ( self.gsm_device_obj is not None ):
self.gsm_device_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Device')
self.gsm_sim_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.SIM')
self.gsm_network_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Network')
self.gsm_call_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Call')
self.gsm_test_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Test')
# Main loop
self.loop = gobject.MainLoop()
def send(self, number, message):
def onSent():
print "SENT"
self.loop.quit()
def onStore(index):
print "STORED AS", index
self.gsm_sim_iface.SendStoredMessage(
index,
reply_handler=onSent,
error_handler=self.onError
)
self.gsm_sim_iface.StoreMessage(
number, message,
reply_handler=onStore,
error_handler=self.onError
)
def onError(self, result):
print "ERROR", result
def mainloop(self):
self.loop.run()
if len(sys.argv) != 3:
print >>sys.stderr, "Usage: %s grammarname phonenumber"
sys.exit(1)
message = Popen(["/usr/bin/polyrun", sys.argv[1]], stdout=PIPE).communicate()[0]
number = sys.argv[2]
print "Sending to %s:" % number
print message
phone = Phone()
phone.send(number, message)
phone.mainloop()