]> git.neil.brown.name Git - plato.git/commitdiff
gsmd2: add search_carrier supprt.
authorNeilBrown <neil@brown.name>
Sun, 11 Oct 2015 08:11:39 +0000 (19:11 +1100)
committerNeilBrown <neil@brown.name>
Sun, 11 Oct 2015 08:11:39 +0000 (19:11 +1100)
If file is created in /run/gsm-state, find available carriers and
list them.

Signed-off-by: NeilBrown <neil@brown.name>
gsm/gsmd2.py

index 6ca4c28f6e7712c3e29077bfed6ced77a7719ab4..8181d4c879c70d3c1526bbf59a2e25f74316a7f5 100644 (file)
@@ -62,6 +62,10 @@ def record(key, value):
 def recall(key, nofile = ""):
     return safe_read("/run/gsm-state/" + key, nofile)
 
+def forget(key):
+    os.unlink("/run/gsm-state/" + key)
+
+
 lastlog={}
 def call_log(key, msg):
     f = open('/var/log/' + key, 'a')
@@ -1132,6 +1136,7 @@ class config(Engine):
     def __init__(self):
         Engine.__init__(self)
         watch('/run/gsm-state','request_carrier', self.check_carrier)
+        watch('/run/gsm-state','search_carrier', self.search_carrier)
     def set_service(self, state):
         if state:
             at_queue('+CLIP=1', None)
@@ -1146,7 +1151,39 @@ class config(Engine):
         else:
             at_queue('+COPS=4,2,'+l, self.got_cops, 10000)
 
+    def search_carrier(self, f = None):
+        l = recall('search_carrier','no')
+        if l == 'no':
+            return
+        at_queue('+COPS=?', self.report_carriers, 65000)
+        return False
+
+    def report_carriers(self, line):
+        if not line:
+            forget('carrier_list')
+            forget('search_carrier')
+            return False
+        clist = re.findall('\((\d+,"[^"]*","[^"]*","[^"]*",\d+)\)', line)
+        lst = ''
+        for (l) in clist:
+            lst = lst + l + '\n'
+        record('carrier_list', lst)
+        forget('search_carrier')
+        return False
+
     def got_cops(self, line):
+        at_queue('+COPS=3,1', None)
+        at_queue('+COPS?', self.check_cops)
+        return False
+
+    def check_cops(self,line):
+        if line:
+            # +COPS: 4,1,"voda NL - amaysim",2
+            m = re.match('\+COPS: (\d),(\d),"([^"]*)",(\d)', line)
+            if m and m.group(2) == '1':
+                record('carrier', m.group(3))
+            if not m:
+                record('carrier', 'No/limited service')
         self.unblock()
         return False