2017-12-15 00:02:45 +01:00
|
|
|
import dbus
|
2020-09-11 01:12:26 +02:00
|
|
|
import time
|
2017-12-15 00:02:45 +01:00
|
|
|
from gi.repository import GLib
|
2020-11-17 21:53:02 +01:00
|
|
|
from config import ctx
|
2017-12-15 00:02:45 +01:00
|
|
|
|
|
|
|
SIM_AUTH_IFACE = 'org.ofono.SimAuthentication'
|
|
|
|
|
|
|
|
class Ofono(dbus.service.Object):
|
2020-11-17 21:53:02 +01:00
|
|
|
def __init__(self, namespace=ctx):
|
|
|
|
self._bus = namespace.get_bus()
|
2017-12-15 00:02:45 +01:00
|
|
|
|
2020-09-11 01:12:26 +02:00
|
|
|
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)
|
|
|
|
|
2017-12-15 00:02:45 +01:00
|
|
|
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
|
|
|
|
|
2020-09-11 01:12:26 +02:00
|
|
|
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')
|
2017-12-15 00:02:45 +01:00
|
|
|
|
2020-09-11 01:12:26 +02:00
|
|
|
finally:
|
|
|
|
GLib.source_remove(timeout)
|