#!/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()