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()