]> git.neil.brown.name Git - plato.git/commitdiff
gsmd2: update to the code I am actually running.
authorNeilBrown <neilb@suse.de>
Mon, 16 Dec 2013 04:10:31 +0000 (15:10 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 16 Dec 2013 04:10:31 +0000 (15:10 +1100)
gsm/gsmd2.py

index 5683eeb10085a344657aa8d89bd1d4ad236b6ea8..081f74985582e39d5a4a46f255a391889ce6b723 100644 (file)
@@ -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()