iwd/autotests/util/ofono.py

60 lines
1.9 KiB
Python

import dbus
import time
from gi.repository import GLib
from config import ctx
SIM_AUTH_IFACE = 'org.ofono.SimAuthentication'
class Ofono(dbus.service.Object):
def __init__(self, namespace=ctx):
self._bus = namespace.get_bus()
tries = 0
while not self._bus.name_has_owner('org.ofono'):
if tries > 100:
raise TimeoutError('Waiting for org.ofono service timed out')
tries += 1
time.sleep(0.1)
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
try:
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')
finally:
GLib.source_remove(timeout)