###
# sms_send
+###
+# clock
+# +CTZU=1 - auto timezone update
+# +CTZR=1 - auto timezone report ???
+# +CCLK? - report time .. year might be '99'
+
+class clock(Engine):
+ def __init__(self):
+ Engine.__init__(self)
+
+ def set_on(self, state):
+ if state:
+ self.retry(1000)
+
+ def do_retry(self):
+ at_queue('+CTZU?', self.got_u, 1000)
+ at_queue('+CCLK?', self.got_clk, 1000)
+
+ def got_u(self, line):
+ if not line:
+ self.retry(10000)
+ return False
+ m = re.match('\+CTZU: (\d)', line)
+ if m:
+ n = m.group(1)
+ if n != '1':
+ at_queue('+CTZU=1', self.didset, 2000)
+ return False
+
+ def got_clk(self, line):
+ now = time.time()
+ if not line:
+ self.retry(30000)
+ return False
+
+ m = re.match('\+CCLK: "(..)/(..)/(..),(..):(..):(..)\+([0-9]*)"',
+ line)
+ if m:
+ if m.group(1) == '99':
+ self.retry(60000)
+ return False
+ tm = time.struct_time([int(m.group(1))+2000,
+ int(m.group(2)),
+ int(m.group(3)),
+ int(m.group(4)),
+ int(m.group(5)),
+ int(m.group(6)),
+ 0,0,-1])
+ then = time.mktime(tm)
+ if abs(now - then) > 30:
+ log("Time is ", time.strftime("%Y-%m-%d %H:%M:%S", tm))
+ log("Time difference is", now-then)
+ if then > now:
+ os.system("date -s +%dseconds" % int(then-now))
+ self.retry(10*60*1000)
+ return False
+
+add_engine(clock())
+
c = gobject.main_context_default()
while True: