From b6ce6469023437140c5ddec2d5ea9c9d36fe3033 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Sun, 11 Oct 2015 19:11:39 +1100 Subject: [PATCH] gsmd2: add search_carrier supprt. If file is created in /run/gsm-state, find available carriers and list them. Signed-off-by: NeilBrown --- gsm/gsmd2.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/gsm/gsmd2.py b/gsm/gsmd2.py index 6ca4c28..8181d4c 100644 --- a/gsm/gsmd2.py +++ b/gsm/gsmd2.py @@ -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 -- 2.39.5