]> git.neil.brown.name Git - plato.git/commitdiff
gsmd: record status and be more lenient of CFUN errors.
authorNeilBrown <neilb@suse.de>
Sun, 17 Feb 2013 03:28:52 +0000 (14:28 +1100)
committerNeilBrown <neilb@suse.de>
Sun, 17 Feb 2013 03:28:52 +0000 (14:28 +1100)
Only treat CFUN states as bad if signal level is zero.

Signed-off-by: NeilBrown <neilb@suse.de>
gsm/gsmd.py

index e1980d93e07ec0e41e31231cfa34f130b38d59dd..ccd30a0f462f7413568243d72f78b67afe6e6592 100644 (file)
@@ -22,12 +22,19 @@ import dnotify, suspend
 from tracing import log
 from subprocess import Popen
 
+recording = {}
 def record(key, value):
-    f = open('/run/gsm-state/.new.' + key, 'w')
-    f.write(value)
-    f.close()
-    os.rename('/run/gsm-state/.new.' + key,
-              '/run/gsm-state/' + key)
+    global recording
+    try:
+        f = open('/run/gsm-state/.new.' + key, 'w')
+        f.write(value)
+        f.close()
+        os.rename('/run/gsm-state/.new.' + key,
+                  '/run/gsm-state/' + key)
+    except OSError:
+        # I got this once on the rename, don't know why
+        pass
+    recording[key] = value
 
 def recall(key, nofile = ""):
     try:
@@ -442,6 +449,12 @@ def check_cfun(channel, line, m):
             channel.set_state('init2')
         return
     if m.groups()[0] != '0':
+        global recording
+        if 'signal_strength' in recording:
+            s = recording['signal_strength'].split('/')
+            if s[0] != '0':
+                return
+
         if channel.last_reset + 100 < time.time():
             channel.last_reset = time.time()
             channel.set_state('reset')