diff --git a/autotests/util/ofono.py b/autotests/util/ofono.py new file mode 100644 index 00000000..2bc6338b --- /dev/null +++ b/autotests/util/ofono.py @@ -0,0 +1,47 @@ +import dbus +from gi.repository import GLib + +SIM_AUTH_IFACE = 'org.ofono.SimAuthentication' + +class Ofono(dbus.service.Object): + def __init__(self): + self._bus = dbus.SystemBus() + + def enable_modem(self, path): + self._modem_path = path + self._modem_iface = dbus.Interface( + self._bus.get_object('org.ofono', path), + 'org.ofono.Modem') + self._modem_iface.SetProperty("Powered", dbus.Boolean(1), + timeout = 120) + + def _modem_prop_changed(self, property, changed): + if property == 'Interfaces': + if SIM_AUTH_IFACE in changed: + self._sim_auth_up = True + + def wait_for_sim_auth(self, max_wait = 15): + mainloop = GLib.MainLoop() + self._sim_auth_up = False + + props = self._modem_iface.GetProperties() + if SIM_AUTH_IFACE in props['Interfaces']: + self._sim_auth_up = True + return + + self._modem_iface.connect_to_signal('PropertyChanged', + self._modem_prop_changed) + + self._wait_timed_out = False + def wait_timeout_cb(): + self._wait_timed_out = True + return False + + timeout = GLib.timeout_add_seconds(max_wait, wait_timeout_cb) + context = mainloop.get_context() + while (not self._sim_auth_up): + context.iteration(may_block=True) + if self._wait_timed_out: + raise TimeoutError('waiting for SimAuthentication timed out') + + GLib.source_remove(timeout)