| #!/usr/bin/python3 |
| |
| from gi.repository import GLib |
| import sys |
| import os |
| |
| import dbus |
| import dbus.service |
| import dbus.mainloop.glib |
| |
| GNSS_INTERFACE = "org.ofono.AssistedSatelliteNavigation" |
| AGENT_INTERFACE = "org.ofono.PositioningRequestAgent" |
| |
| class PositioningAgent(dbus.service.Object): |
| @dbus.service.method(AGENT_INTERFACE, |
| in_signature="", out_signature="") |
| def Release(self): |
| print("Release") |
| mainloop.quit() |
| |
| @dbus.service.method(AGENT_INTERFACE, |
| in_signature="s", out_signature="") |
| def Request(self, xml): |
| print("positioning data: %s" % (xml)) |
| |
| @dbus.service.method(AGENT_INTERFACE, |
| in_signature="", out_signature="") |
| def ResetAssistanceData(self): |
| print("Reset Assistance Data request received") |
| |
| def print_menu(): |
| print("Select test case") |
| print("-----------------------------------------------------------") |
| print("[0] SendPositioningElement") |
| print("[1] RegisterPositioningRequestAgent") |
| print("[2] UnregisterPositioningRequestAgent") |
| print("[x] Exit") |
| print("-----------------------------------------------------------") |
| |
| def stdin_handler(channel, condition, gnss, path): |
| in_key = os.read(channel.unix_get_fd(), 160).rstrip().decode('UTF-8') |
| if in_key == '0': |
| xml = input('type the element and press enter: ') |
| try: |
| gnss.SendPositioningElement(dbus.String(xml)) |
| print("ok") |
| except dbus.DBusException as e: |
| print("Unable to send positioning element") |
| |
| elif in_key == '1': |
| try: |
| gnss.RegisterPositioningRequestAgent("/test/posagent") |
| print("ok") |
| except dbus.DBusException as e: |
| print("Unable to register positioning agent") |
| |
| elif in_key == '2': |
| try: |
| gnss.UnregisterPositioningRequestAgent(path) |
| print("ok") |
| except dbus.DBusException as e: |
| print("Unable to unregister positioning agent") |
| elif in_key == 'x': |
| sys.exit(1) |
| |
| return True |
| |
| if __name__ == "__main__": |
| if len(sys.argv) < 1: |
| 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() |
| for path, properties in modems: |
| if GNSS_INTERFACE not in properties["Interfaces"]: |
| continue |
| |
| gnss = dbus.Interface(bus.get_object('org.ofono', path), |
| GNSS_INTERFACE) |
| |
| path = "/test/posagent" |
| agent = PositioningAgent(bus, path) |
| |
| print_menu() |
| |
| GLib.io_add_watch(GLib.IOChannel(filedes=sys.stdin.fileno()), |
| GLib.PRIORITY_DEFAULT, GLib.IO_IN, stdin_handler, |
| gnss, path) |
| mainloop = GLib.MainLoop() |
| mainloop.run() |