Mercurial > templog
comparison server/ts.py @ 23:b5925cb4f264
Fix bugs in server code (try actually running it)
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Mon, 04 Jun 2012 23:50:42 +0800 |
parents | 885532437100 |
children | 44c5ab5ea879 |
comparison
equal
deleted
inserted
replaced
22:885532437100 | 23:b5925cb4f264 |
---|---|
1 #!/usr/bin/env python2.7 | 1 #!/usr/bin/env python2.7 |
2 | 2 |
3 BTADDR = "00:12:03:27:70:88" | 3 BTADDR = "00:12:03:27:70:88" |
4 SLEEP_TIME = 180 | 4 SLEEP_TIME = 180 |
5 # time that the bluetooth takes to get going? | |
6 EXTRA_WAKEUP = 0 | |
7 | |
8 # avoid turning off the bluetooth etc. | |
9 TESTING = True | |
5 | 10 |
6 import sys | 11 import sys |
7 import httplib | 12 import httplib |
8 import time | 13 import time |
9 import traceback | 14 import traceback |
10 | 15 |
11 from utils import monotonic_time, retry | 16 from utils import monotonic_time, retry, readline |
12 | 17 |
13 lightblue = None | 18 lightblue = None |
14 try: | 19 try: |
15 import lightblue | 20 import lightblue |
16 except ImportError: | 21 except ImportError: |
17 import bluetooth | 22 import bluetooth |
18 | 23 |
19 def get_socket(addr): | 24 def get_socket(addr): |
20 if lightblue: | 25 if lightblue: |
21 s = lightblue.socket() | 26 s = lightblue.socket() |
22 s.connect(addr, 1) | 27 s.connect((addr, 1)) |
23 else: | 28 else: |
24 s = bluetooth.BluetoothSocket( bluetooth.RFCOMM ) | 29 s = bluetooth.BluetoothSocket( bluetooth.RFCOMM ) |
25 s.connect((addr, 1)) | 30 s.connect((addr, 1)) |
26 | 31 |
27 s.setnonblocking(True) | 32 s.setnonblocking(True) |
91 | 96 |
92 return ''.join(lines) | 97 return ''.join(lines) |
93 | 98 |
94 @retry() | 99 @retry() |
95 def turn_off(sock): | 100 def turn_off(sock): |
101 if TESTING: | |
102 return None | |
96 sock.send("btoff\n"); | 103 sock.send("btoff\n"); |
97 # read newline | 104 # read newline |
98 l = readline(sock) | 105 l = readline(sock) |
99 if not l: | 106 if not l: |
100 print>>sys.stderr, "Bad response to btoff\n" | 107 print>>sys.stderr, "Bad response to btoff\n" |
103 off, next_wake = l.rstrip().split(':') | 110 off, next_wake = l.rstrip().split(':') |
104 if off != 'Off': | 111 if off != 'Off': |
105 print>>sys.stderr, "Bad response to btoff '%s'\n" % l | 112 print>>sys.stderr, "Bad response to btoff '%s'\n" % l |
106 | 113 |
107 return int(next_wake) | 114 return int(next_wake) |
108 | |
109 | 115 |
110 def do_comms(sock): | 116 def do_comms(sock): |
111 d = None | 117 d = None |
112 # serial could be unreliable, try a few times | 118 # serial could be unreliable, try a few times |
113 for i in range(FETCH_TRIES): | 119 for i in range(FETCH_TRIES): |
129 return next_wake | 135 return next_wake |
130 | 136 |
131 testcount = 0 | 137 testcount = 0 |
132 | 138 |
133 def sleep_for(secs): | 139 def sleep_for(secs): |
134 until = monotonic_time + secs | 140 until = monotonic_time() + secs |
135 while True: | 141 while True: |
136 length = until < monotonic_time() | 142 length = until < monotonic_time() |
137 if length <= 0: | 143 if length <= 0: |
138 return | 144 return |
139 time.sleep(length) | 145 time.sleep(length) |
140 | 146 |
141 def main(): | 147 def main(): |
142 | 148 |
143 while True: | 149 while True: |
144 sock = get_socket() | 150 sock = None |
151 try: | |
152 sock = get_socket(BTADDR) | |
153 except Exception, e: | |
154 print>>sys.stderr, "Error connecting:" | |
155 traceback.print_exc(file=sys.stderr) | |
145 sleep_time = SLEEP_TIME | 156 sleep_time = SLEEP_TIME |
146 if sock: | 157 if sock: |
147 next_wake = None | 158 next_wake = None |
148 try: | 159 try: |
149 next_wake = do_comms(sock) | 160 next_wake = do_comms(sock) |
150 except Exception, e: | 161 except Exception, e: |
151 print>>sys.stderr, "Error in do_comms:" | 162 print>>sys.stderr, "Error in do_comms:" |
152 traceback.print_last(file=sys.stderr) | 163 traceback.print_exc(file=sys.stderr) |
153 if next_wake: | 164 if next_wake: |
154 sleep_time = min(next_wake, sleep_time) | 165 sleep_time = min(next_wake+EXTRA_WAKEUP, sleep_time) |
155 | 166 |
167 if TESTING: | |
168 print "Sleeping for %d" % sleep_time | |
156 sleep_for(sleep_time) | 169 sleep_for(sleep_time) |
157 | 170 |
158 if __name__ == '__main__': | 171 if __name__ == '__main__': |
159 main() | 172 main() |