# use CLCC to get number
import gobject
+import sys
import re, time, os
from atchan import AtChannel
import dnotify, suspend
return
state.suspend = True
for e in engines:
+ if e.blocking:
+ raise ValueError
blocker.block()
if e.set_suspend():
blocker.release()
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
self.suspended = False
#self.reopen()
self.pending_command = self.ignore
+ self.cancel_timeout()
self.atcmd('')
def close(self):
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)
class register(Engine):
def __init__(self):
Engine.__init__(self)
- self.resuming_delay = 300
+ self.resuming_delay = 600
def set_on(self, state):
if state:
self.unblock()
return False
-add_engine(register())
+reg = register()
+add_engine(reg)
###
# signal
# While there is service, monitor signal strength.
if strength == '0':
self.zero_count += 1
self.delay = 5000
+ global reg
+ reg.retry(0)
else:
self.zero_count = 0
self.delay = 120000
self.count -= 1
if self.count == 0:
self.cb()
+ self.cb = None
class suspender(Engine):
def __init__(self):
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 = {}
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:
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()
def update(self, f):
global state
- self.set_on(state.service)
+ self.set_service(state.service)
def set_service(self, state):
if not state:
def got(self, line):
if line == "OK":
self.confirmed = True;
- self.do_retry()
+ self.retry()
return False
add_engine(proto())
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()
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:
self.retry()
def to_active(self):
+ self.block()
if not self.router:
try:
open('/run/sound/00-voicecall','w').close()