#!/usr/bin/python import sys import gobject import os import dbus import dbus.mainloop.glib state = None def ussd_notification_received(content): print("Network sent a Notification: " + content) def ussd_request_received(content): print("Network sent a Request: " + content) ss.Cancel() def ussd_property_changed(name, value): global state if name != "State": return print("USSD session state is " + value) state = str(value) def stdin_handler(fd, condition): s = os.read(fd.fileno(), 160).rstrip() if not s: ss.Cancel() elif state == "user-response": print ss.Respond(s, timeout = 100) elif state == "idle": print ss.Initiate(s, timeout = 100) else: print "Invalid state", state return True if __name__ == "__main__": if (len(sys.argv) < 2): print "Usage: %s " % (sys.argv[0]) sys.exit(1) 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() ss = dbus.Interface(bus.get_object('org.ofono', modems[0][0]), 'org.ofono.SupplementaryServices') props = ss.GetProperties() for p in props: ussd_property_changed(p, props[p]) ss.connect_to_signal("NotificationReceived", ussd_notification_received) ss.connect_to_signal("RequestReceived", ussd_request_received) ss.connect_to_signal("PropertyChanged", ussd_property_changed) print ss.Initiate(sys.argv[1], timeout=100) gobject.io_add_watch(sys.stdin, gobject.IO_IN, stdin_handler) mainloop = gobject.MainLoop() mainloop.run()