Mercurial > templog
comparison server/ts.py @ 403:45d96250387c
be quicker responding
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Mon, 16 Jul 2012 22:56:41 +0800 |
parents | 1137f315209b |
children | 9485da05bc11 |
comparison
equal
deleted
inserted
replaced
400:1137f315209b | 403:45d96250387c |
---|---|
1 #!/usr/bin/env python2.7 | 1 #!/usr/bin/env python2.7 |
2 | 2 |
3 # time that the bluetooth takes to get going? | 3 # time that the bluetooth takes to get going? |
4 EXTRA_WAKEUP = 0 | 4 EXTRA_WAKEUP = -3 |
5 | 5 |
6 FETCH_TRIES = 3 | 6 FETCH_TRIES = 3 |
7 | 7 |
8 # avoid turning off the bluetooth etc. | 8 # avoid turning off the bluetooth etc. |
9 TESTING = False | 9 TESTING = False |
32 | 32 |
33 import bluetooth | 33 import bluetooth |
34 | 34 |
35 def get_socket(addr): | 35 def get_socket(addr): |
36 s = bluetooth.BluetoothSocket( bluetooth.RFCOMM ) | 36 s = bluetooth.BluetoothSocket( bluetooth.RFCOMM ) |
37 L("connecting") | |
37 s.connect((addr, 1)) | 38 s.connect((addr, 1)) |
38 s.setblocking(False) | 39 s.setblocking(False) |
40 s.settimeout(1) | |
39 | 41 |
40 return s | 42 return s |
41 | 43 |
42 | 44 |
43 @retry() | 45 @retry() |
47 crc = 0 | 49 crc = 0 |
48 | 50 |
49 lines = [] | 51 lines = [] |
50 l = readline(sock) | 52 l = readline(sock) |
51 if l != 'START\n': | 53 if l != 'START\n': |
52 W("Bad expected START line '%s'\n" % l.rstrip('\n')) | 54 W("Bad expected START line '%s'\n" % str(l).rstrip('\n')) |
53 return None | 55 return None |
54 crc = crc16(l, crc) | 56 crc = crc16(l, crc) |
55 | 57 |
56 while True: | 58 while True: |
57 l = readline(sock) | 59 l = readline(sock) |
106 | 108 |
107 toks = dict(v.split('=') for v in l.split(',')) | 109 toks = dict(v.split('=') for v in l.split(',')) |
108 | 110 |
109 rem = int(toks['rem']) | 111 rem = int(toks['rem']) |
110 tick_secs = int(toks['tick_secs']) | 112 tick_secs = int(toks['tick_secs']) |
111 tick_secs = int(toks['tick_wake']) | 113 tick_wake = int(toks['tick_wake']) |
112 next_wake = int(toks['next_wake']) | 114 next_wake = int(toks['next_wake']) |
113 | 115 |
114 rem_secs = float(rem) / tick_wake * tick_secs | 116 rem_secs = float(rem) / tick_wake * tick_secs |
115 | 117 |
116 next_wake_secs = next_wake - rem_secs | 118 next_wake_secs = next_wake - rem_secs |
179 L("Running templog rfcomm server") | 181 L("Running templog rfcomm server") |
180 | 182 |
181 if '--daemon' in sys.argv: | 183 if '--daemon' in sys.argv: |
182 utils.cheap_daemon() | 184 utils.cheap_daemon() |
183 | 185 |
186 next_wake_time = 0 | |
184 while True: | 187 while True: |
185 sock = None | 188 sock = None |
186 try: | 189 try: |
187 sock = get_socket(config.BTADDR) | 190 sock = get_socket(config.BTADDR) |
188 except Exception, e: | 191 except Exception, e: |
189 #logging.exception("Error connecting") | 192 #logging.exception("Error connecting") |
190 pass | 193 pass |
191 next_wake_time = 0 | |
192 if sock: | 194 if sock: |
193 try: | 195 try: |
194 avr_wake = do_comms(sock) | 196 avr_wake = do_comms(sock) |
195 next_wake_time = time.time() + avr_wake | 197 next_wake_time = time.time() + avr_wake |
196 except Exception, e: | 198 except Exception, e: |
197 logging.exception("Error in do_comms") | 199 logging.exception("Error in do_comms") |
198 | 200 |
199 next_wake_interval = next_wake_time - time.time() - EXTRA_WAKEUP | 201 next_wake_interval = next_wake_time - time.time() + EXTRA_WAKEUP |
200 sleep_time = config.SLEEP_TIME | 202 sleep_time = config.SLEEP_TIME |
201 if next_wake_interval > 0: | 203 if next_wake_interval > 0: |
202 sleep_time = min(next_wake_interval, sleep_time) | 204 sleep_time = min(next_wake_interval, sleep_time) |
203 L("Sleeping for %d, next wake time %f" % (sleep_time, next_wake_time)) | 205 if next_wake_interval < 0 and next_wake_interval > -30: |
206 L("not sleeping, next_wake_interval overdue %f" % next_wake_interval) | |
207 continue | |
208 L("Sleeping for %d, next wake interval %f" % (sleep_time, next_wake_interval)) | |
204 sleep_for(sleep_time) | 209 sleep_for(sleep_time) |
205 | 210 |
206 if __name__ == '__main__': | 211 if __name__ == '__main__': |
207 main() | 212 main() |