ofono_client: Implement network registration during connect()
Change-Id: I1db8c7cba8a83746c16e1ca45f4b8aa0d595caf8
This commit is contained in:
parent
943f8a28d7
commit
eb613a2733
|
@ -31,6 +31,10 @@ bus = SystemBus()
|
|||
I_NETREG = 'org.ofono.NetworkRegistration'
|
||||
I_SMS = 'org.ofono.MessageManager'
|
||||
|
||||
# See https://github.com/intgr/ofono/blob/master/doc/network-api.txt#L78
|
||||
ST_REGISTERED = 'registered'
|
||||
ST_ROAMING = 'roaming'
|
||||
|
||||
def poll():
|
||||
global glib_main_ctx
|
||||
while glib_main_ctx.pending():
|
||||
|
@ -58,6 +62,8 @@ class Modem(log.Origin):
|
|||
self._dbus_obj = None
|
||||
self._interfaces = set()
|
||||
self.sms_received_list = []
|
||||
self.netreg_status = None
|
||||
self.nitb = None
|
||||
test.poll()
|
||||
|
||||
def set_msisdn(self, msisdn):
|
||||
|
@ -142,6 +148,9 @@ class Modem(log.Origin):
|
|||
if retries <= 0:
|
||||
self.err('Interface enabled by signal, but not available:', I_SMS)
|
||||
raise
|
||||
elif interface_name == I_NETREG:
|
||||
self.dbus_obj()[I_NETREG].PropertyChanged.connect(self._on_netreg_property_changed)
|
||||
self.register(self.nitb)
|
||||
|
||||
def _on_interface_disabled(self, interface_name):
|
||||
self.dbg('Interface disabled:', interface_name)
|
||||
|
@ -149,6 +158,40 @@ class Modem(log.Origin):
|
|||
def has_interface(self, name):
|
||||
return name in self._interfaces
|
||||
|
||||
def _on_netreg_property_changed(self, name, value):
|
||||
self.log('%r.PropertyChanged() -> %s=%s' % (I_NETREG, name, value))
|
||||
|
||||
def get_netreg_status(self):
|
||||
try:
|
||||
nr = self.dbus_obj()[I_NETREG]
|
||||
self.netreg_status = nr.GetProperties().get('Status')
|
||||
except Exception:
|
||||
self.netreg_status = None
|
||||
return False
|
||||
|
||||
def is_roaming(self):
|
||||
status = self.get_netreg_status()
|
||||
return status == ST_ROAMING
|
||||
|
||||
def is_connected(self):
|
||||
status = self.get_netreg_status()
|
||||
return status == ST_REGISTERED or status == ST_ROAMING
|
||||
|
||||
def register(self, nitb):
|
||||
if nitb == None:
|
||||
return #connect() was not called yet
|
||||
self.log('Registering with the network...', nitb)
|
||||
if self.is_connected():
|
||||
self.log('Already registered with the network')
|
||||
return
|
||||
nr = self.dbus_obj()[I_NETREG]
|
||||
nr.Scan()
|
||||
nr.Register()
|
||||
if self.is_connected():
|
||||
self.dbg('Registered with network successfully: current status is %s', self.netreg_status)
|
||||
else:
|
||||
raise RuntimeError('Failed to register with the network, current status is %s' % self.netreg_status)
|
||||
|
||||
def connect(self, nitb):
|
||||
'set the modem up to connect to MCC+MNC from NITB config'
|
||||
self.log('connect to', nitb)
|
||||
|
@ -156,10 +199,12 @@ class Modem(log.Origin):
|
|||
self.set_powered()
|
||||
self.set_online(False)
|
||||
self.set_online()
|
||||
if not self.has_interface(I_NETREG):
|
||||
self.log('No %r interface, hoping that the modem connects by itself' % I_NETREG)
|
||||
self.nitb = nitb
|
||||
if self.has_interface(I_NETREG):
|
||||
self.register(nitb)
|
||||
else:
|
||||
self.log('Use of %r interface not implemented yet, hoping that the modem connects by itself' % I_NETREG)
|
||||
self.log('No %r interface, delaying registration until it appears' % I_NETREG)
|
||||
|
||||
|
||||
def sms_send(self, to_msisdn):
|
||||
if hasattr(to_msisdn, 'msisdn'):
|
||||
|
|
Loading…
Reference in New Issue