Unity 8
ofono_helper.py
1 #!/usr/bin/python -tt
2 
3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
4 #
5 # Unity Indicators Autopilot Test Suite
6 # Copyright (C) 2014, 2015 Canonical
7 #
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
12 #
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 
21 
22 from __future__ import absolute_import
23 
24 import dbus
25 import subprocess
26 from time import sleep
27 
28 
29 class OfonoManager(object):
30 
31  def __init__(self):
32  self.system_bus = dbus.SystemBus()
33  self.ofono = self.system_bus.get_object('org.ofono', '/')
34 
35  self.real_manager = dbus.Interface(
36  self.ofono,
37  'org.ofono.Manager'
38  )
39 
40  def _get_sim_manager(self):
41  modems = self.real_manager.GetModems()
42  path = modems[0][0]
43  return dbus.Interface(self.system_bus.get_object('org.ofono', path),
44  'org.ofono.SimManager')
45 
46  def physical_sim_is_present(self):
47  sim_manager = self._get_sim_manager()
48  properties = sim_manager.GetProperties()
49  return properties["Present"] == 1
50 
51 
52 class PhonesimManager(object):
53 
54  def __init__(self, sims, exe=None):
55  if exe is None:
56  self.phonesim_exe = '/usr/bin/ofono-phonesim'
57  else:
58  self.phonesim_exe = exe
59  self.sims = sims
60  self.sim_processes = {}
61  self.system_bus = dbus.SystemBus()
62  self.ofono = self.system_bus.get_object('org.ofono', '/')
63 
64  self.phonesim_manager = dbus.Interface(
65  self.ofono,
66  'org.ofono.phonesim.Manager'
67  )
68 
69  def start_phonesim_processes(self):
70  for simname, simport, conffile in self.sims:
71  cmd = ['/usr/bin/xvfb-run',
72  '-a',
73  self.phonesim_exe,
74  '-p',
75  str(simport),
76  conffile]
77 
78  p = subprocess.Popen(cmd)
79  self.sim_processes[simname] = p
80  # give the processes some time to start
81  sleep(3)
82 
83  def shutdown(self):
84  for p in self.sim_processes.values():
85  p.kill()
86  self.sim_processes = {}
87 
88  def reset_ofono(self):
89  self.phonesim_manager.Reset()
90 
91  def remove_all_ofono(self):
92  self.phonesim_manager.RemoveAll()
93 
94  def add_ofono(self, name):
95  for simname, simport, _ in self.sims:
96  if name == simname:
97  self.phonesim_manager.Add(simname, '127.0.0.1', str(simport))
98  return
99  raise RuntimeError('Tried to add unknown modem %s.' % name)
100 
101  def power_on(self, sim_name):
102  sim = self.system_bus.get_object('org.ofono', '/'+sim_name)
103  modem = dbus.Interface(sim, dbus_interface='org.ofono.Modem')
104  modem.SetProperty('Powered', True)
105  sleep(1)
106 
107  def power_off(self, sim_name):
108  sim = self.system_bus.get_object('org.ofono', '/'+sim_name)
109  modem = dbus.Interface(sim, dbus_interface='org.ofono.Modem')
110  modem.SetProperty('Powered', False)
111  sleep(1)
112 
113  def get_required_pin(self, sim_name):
114  sim = self.system_bus.get_object('org.ofono', '/'+sim_name)
115  interface = dbus.Interface(sim, dbus_interface='org.ofono.SimManager')
116  return str(interface.GetProperties()['PinRequired'])