#!/usr/bin/python import gobject import sys import dbus import dbus.service import dbus.mainloop.glib class GoBack(dbus.DBusException): _dbus_error_name = "org.ofono.Error.GoBack" class EndSession(dbus.DBusException): _dbus_error_name = "org.ofono.Error.EndSession" class Busy(dbus.DBusException): _dbus_error_name = "org.ofono.Error.Busy" class StkAgent(dbus.service.Object): exit_on_release = True def set_exit_on_release(self, exit_on_release): self.exit_on_release = exit_on_release @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="", out_signature="") def Release(self): print "Release" if self.exit_on_release: mainloop.quit() @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="sya(sy)n", out_signature="y") def RequestSelection(self, title, icon, items, default): print "Title: (%s)" % (title) print "Icon: (%d)" % (icon) index = 0; for item in items: print "%d. %s (icon: %d)" % (index, item[0], item[1]) index += 1 print "\nDefault: %d" % (default) select = raw_input("Enter Selection (t, b):") if select == 'b': raise GoBack("User wishes to go back") elif select == 't': raise EndSession("User wishes to terminate session") else: return int(select); @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="syb", out_signature="") def DisplayText(self, title, icon, urgent): print "DisplayText (%s)" % (title) print "Icon: (%d)" % (icon) print "Urgent: (%d)" % (urgent) key = raw_input("Press return to clear ('t' terminates, " "'b' goes back, 'n' busy):") if key == 'b': raise GoBack("User wishes to go back") elif key == 't': raise EndSession("User wishes to terminate session") elif key == 'n': raise Busy("User wishes to simulate busy screen") @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="sysyyb", out_signature="s") def RequestInput(self, title, icon, default, min_chars, max_chars, hide_typing): print "Title: (%s)" % (title) print "Icon: (%d)" % (icon) print "Default: (%s)" % (default) print "Hide typing: (%s)" % (hide_typing) print "Enter characters, min: %d, max: %d:" % (min_chars, max_chars) userin = raw_input(""); return userin @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="sysyyb", out_signature="s") def RequestDigits(self, title, icon, default, min_chars, max_chars, hide_typing): print "Title: (%s)" % (title) print "Icon: (%d)" % (icon) print "Default: (%s)" % (default) print "Hide typing: (%s)" % (hide_typing) print "Enter digits, min: %d, max: %d:" % (min_chars, max_chars) userin = raw_input("'t' terminates, 'b' goes back:"); if userin == 'b': raise GoBack("User wishes to go back") elif userin == 't': raise EndSession("User wishes to terminate session") else: return userin @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="sy", out_signature="s") def RequestKey(self, title, icon): print "Title: (%s)" % (title) print "Icon: (%d)" % (icon) key = raw_input("Enter Key (t, b):") if key == 'b': raise GoBack("User wishes to go back"); elif key == 't': raise EndSession("User wishes to terminate session"); else: return key @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="sy", out_signature="s") def RequestDigit(self, title, icon): print "Title: (%s)" % (title) print "Icon: (%d)" % (icon) key = raw_input("Enter Digit (t, b):") if key == 'b': raise GoBack("User wishes to go back"); elif key == 't': raise EndSession("User wishes to terminate session"); else: return key @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="sy", out_signature="b") def RequestConfirmation(self, title, icon): print "Title: (%s)" % (title) print "Icon: (%d)" % (icon) key = raw_input("Enter Confirmation (t, b, y, n):") if key == 'b': raise GoBack("User wishes to go back"); elif key == 't': raise EndSession("User wishes to terminate session"); elif key == 'y': return True else: return False @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="sy", out_signature="b") def ConfirmCallSetup(self, info, icon): print "Information: (%s)" % (info) print "Icon: (%d)" % (icon) key = raw_input("Enter Confirmation (t, y, n):") if key == 't': raise EndSession("User wishes to terminate session"); elif key == 'y': return True else: return False @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="", out_signature="") def Cancel(self): print "Cancel" @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="ssy", out_signature="") def PlayTone(self, tone, text, icon): print "PlayTone: %s" % (tone) print "Text: %s" % (text) print "Icon: %d" % (icon) @dbus.service.method("org.ofono.SimToolkitAgent", in_signature="ssy", out_signature="") def LoopTone(self, tone, text, icon): print "LoopTone: %s" % (tone) print "Text: %s" % (text) print "Icon: %d" % (icon) key = raw_input("Press return to end before timeout (t):") if key == 't': raise EndSession("User wishes to terminate session"); def property_changed(name, value): print "SimToolKit property: %s changed to '%s'" % (name, value) if __name__ == '__main__': if len(sys.argv) == 2: mode = sys.argv[1] else: mode = 'menu' dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) bus = dbus.SystemBus() manager = dbus.Interface(bus.get_object("org.ofono", "/"), "org.ofono.Manager") modems = manager.GetModems() for path, properties in modems: if "org.ofono.SimToolkit" not in properties["Interfaces"]: continue stk = dbus.Interface(bus.get_object('org.ofono', path), 'org.ofono.SimToolkit') stk.connect_to_signal("PropertyChanged", property_changed) properties = stk.GetProperties() if mode == 'menu': if "MainMenuTitle" in properties: print "Main Menu:" print "%s" % (properties["MainMenuTitle"]) print "\n" if "MainMenu" in properties: print "Items:" index = 0 for item in properties["MainMenu"]: print "%d. %s" % (index, item[0]) index += 1 path = "/test/agent" agent = StkAgent(bus, path) select = int(raw_input("Enter Selection: ")) stk.SelectItem(select, path) elif mode == 'agent': path = "/test/agent" agent = StkAgent(bus, path) stk.RegisterAgent(path) print "Default Agent registered - Waiting for STK command..." else: print "%s [menu|agent]" % (sys.argv[0]) exit(0) mainloop = gobject.MainLoop() mainloop.run()