From a7ae4b6a7a52e3fc77ae1c618fb30e6c3e433ae2 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Mon, 16 Dec 2013 15:10:31 +1100 Subject: [PATCH] gsmd2: update to the code I am actually running. --- gsm/gsmd2.py | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/gsm/gsmd2.py b/gsm/gsmd2.py index 5683eeb..081f749 100644 --- a/gsm/gsmd2.py +++ b/gsm/gsmd2.py @@ -24,6 +24,7 @@ # use CLCC to get number import gobject +import sys import re, time, os from atchan import AtChannel import dnotify, suspend @@ -277,6 +278,8 @@ def set_suspend(blocker): return state.suspend = True for e in engines: + if e.blocking: + raise ValueError blocker.block() if e.set_suspend(): blocker.release() @@ -358,6 +361,8 @@ class modem(Engine,AtChannel): gpio_set(186, 0) self.atcmd("$QCPWRDN") self.close() + time.sleep(2); + Popen("rmmod ehci_hcd", shell=True).wait(); def set_suspend(self): self.suspended = True @@ -373,6 +378,7 @@ class modem(Engine,AtChannel): self.suspended = False #self.reopen() self.pending_command = self.ignore + self.cancel_timeout() self.atcmd('') def close(self): @@ -393,6 +399,10 @@ class modem(Engine,AtChannel): if self.altchan.connect(5): break self.close() + if sleep_time > 30: + print "will now reboot" + sys.stdout.flush() + Popen("/sbin/reboot -f", shell=True).wait() gpio_set(186, 0) Popen('rmmod ehci_omap; rmmod ehci-hcd; modprobe ehci-hcd; modprobe ehci_omap', shell=True).wait() time.sleep(1) @@ -571,7 +581,7 @@ add_engine(flight()) class register(Engine): def __init__(self): Engine.__init__(self) - self.resuming_delay = 300 + self.resuming_delay = 600 def set_on(self, state): if state: @@ -623,7 +633,8 @@ class register(Engine): self.unblock() return False -add_engine(register()) +reg = register() +add_engine(reg) ### # signal # While there is service, monitor signal strength. @@ -664,6 +675,8 @@ class signal(Engine): if strength == '0': self.zero_count += 1 self.delay = 5000 + global reg + reg.retry(0) else: self.zero_count = 0 self.delay = 120000 @@ -699,6 +712,7 @@ class Blocker(): self.count -= 1 if self.count == 0: self.cb() + self.cb = None class suspender(Engine): def __init__(self): @@ -723,6 +737,7 @@ class Cellid(Engine): Engine.__init__(self) request_async('+CREG:', self.async) request_async('+CBM:', self.cellname, extras=self.the_name) + self.last_try = 0 self.delay = 60000 self.newname = '' self.cellnames = {} @@ -734,7 +749,9 @@ class Cellid(Engine): def set_resume(self): # might have moved while we slept - self.retry(0) + if time.time() > self.last_try + 2*60: + self.block() + self.retry(0) def set_service(self, state): if not state: @@ -744,7 +761,9 @@ class Cellid(Engine): record('carrier','-') def do_retry(self): + self.last_try = time.time() at_queue('+CREG?', self.got, 5000) + self.unblock() def got(self, line): self.retry() @@ -869,7 +888,7 @@ class proto(Engine): def update(self, f): global state - self.set_on(state.service) + self.set_service(state.service) def set_service(self, state): if not state: @@ -893,7 +912,7 @@ class proto(Engine): def got(self, line): if line == "OK": self.confirmed = True; - self.do_retry() + self.retry() return False add_engine(proto()) @@ -1162,10 +1181,12 @@ class voice(Engine): def do_retry(self): at_queue('+CPAS', self.get_activity) def get_activity(self, line): + if line == None: + return False m = re.match('\+CPAS: (\d)', line) if m: n = m.group(1) - if n == '0': + if n == '0' or (n == '4' and self.state == 'idle'): self.zero_cnt += 1 if self.zero_cnt >= 4 or self.state == 'idle': self.to_idle() @@ -1199,14 +1220,16 @@ class voice(Engine): self.to_idle() elif l == 'answer': if self.state == 'incoming': - at_queue('A', None) + at_queue('A', self.answered) set_alert('ring', None) - self.to_active() elif self.state == 'idle': call_log('outgoing', l) at_queue('D%s;' % l, None) self.to_active() + def answered(self, line): + self.to_active() + def check_dtmf(self, f): l = recall('dtmf') if l: @@ -1255,6 +1278,7 @@ class voice(Engine): self.retry() def to_active(self): + self.block() if not self.router: try: open('/run/sound/00-voicecall','w').close() -- 2.39.5