summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2017-04-08 16:31:27 -0400
committerAndrew Cady <d@jerkface.net>2017-04-08 16:31:27 -0400
commit17984a16a763dee4b1f20f3383b2f39721cfeb95 (patch)
tree11f4d59a34db07796bb77329d0f9dfb2642aad84
parent572aad546bb8ee9ccd095a2098e1b292176c53da (diff)
repeal & replace the old polling code
-rwxr-xr-xdexcom_reader/dexcom_dumper.py75
1 files changed, 16 insertions, 59 deletions
diff --git a/dexcom_reader/dexcom_dumper.py b/dexcom_reader/dexcom_dumper.py
index e7db00e..78e9841 100755
--- a/dexcom_reader/dexcom_dumper.py
+++ b/dexcom_reader/dexcom_dumper.py
@@ -53,7 +53,10 @@ def get_dexcom_reader():
53 dd = readdata.Dexcom.FindDevice() 53 dd = readdata.Dexcom.FindDevice()
54 return readdata.Dexcom(dd) 54 return readdata.Dexcom(dd)
55 55
56dr = get_dexcom_reader() 56dr = None
57
58if command is not 'poll':
59 dr = get_dexcom_reader()
57 60
58def parseable_record_types(): 61def parseable_record_types():
59 unparseable = ['FIRMWARE_PARAMETER_DATA', 'RECEIVER_LOG_DATA', 'USER_SETTING_DATA', 'MAX_VALUE'] 62 unparseable = ['FIRMWARE_PARAMETER_DATA', 'RECEIVER_LOG_DATA', 'USER_SETTING_DATA', 'MAX_VALUE']
@@ -157,58 +160,8 @@ def print_cgm_bg(now, r):
157 print '%s: %s %s' % (format_times(now, r.system_time), r.glucose, r.trend_arrow) 160 print '%s: %s %s' % (format_times(now, r.system_time), r.glucose, r.trend_arrow)
158 stdout.flush() 161 stdout.flush()
159 162
160def dexcom_reconnect():
161 global dr
162 if dr:
163 dr.Disconnect()
164 dr = get_dexcom_reader()
165
166def poll():
167 print_verbose('Started dexcom_dumper.')
168 while True:
169 try:
170 poll_remote() if HOST else poll_stdout()
171
172 except constants.SerialPortError:
173 connected(False)
174 dexcom_reconnect()
175 sleep_verbose(10)
176 except KeyboardInterrupt:
177 print_verbose('Exiting.')
178 return
179 except:
180 # Check for requests.ConnectionError without necessarily importing requests
181 if (str(sys.exc_info()[0]) == "<class 'requests.exceptions.ConnectionError'>"):
182 print_verbose('Error: could not connect to remote host.')
183 else:
184 print_verbose('Exception: %s' % str(sys.exc_info()[0]))
185 traceback.print_exc()
186 dexcom_reconnect()
187 sleep_verbose(10)
188
189def poll_remote(): 163def poll_remote():
190 (n, r) = remote_update('EGV_DATA') 164 (n, r) = remote_update('EGV_DATA')
191 connected(True)
192 if n is None:
193 sleep_verbose(10)
194 else:
195 now = dr.ReadSystemTime()
196 if n == 0:
197 send_ping(now)
198 if r:
199 for t in ['METER_DATA', 'INSERTION_TIME', 'USER_EVENT_DATA']:
200 # TODO: track how long this takes & adjust sleep accordingly
201 try:
202 remote_update(t)
203 except:
204 traceback.print_exc()
205 next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds()
206 sleep_verbose(max(10, next_reading))
207 else:
208 sleep_verbose(10)
209
210def poll_remote_redux():
211 (n, r) = remote_update('EGV_DATA')
212 if n is None: 165 if n is None:
213 return 10 166 return 10
214 else: 167 else:
@@ -227,8 +180,9 @@ def poll_remote_redux():
227 else: 180 else:
228 return 10 181 return 10
229 182
230def poll_redux(): 183def poll():
231 poll = poll_remote_redux 184 print_verbose('Started dexcom_dumper.')
185 poll_once = poll_remote if HOST else poll_stdout
232 186
233 dexcom_g5_product = '22a3/47/100' 187 dexcom_g5_product = '22a3/47/100'
234 188
@@ -242,6 +196,10 @@ def poll_redux():
242 try: 196 try:
243 print_verbose("Waiting for device.") 197 print_verbose("Waiting for device.")
244 if not devicer.wait_add(600): 198 if not devicer.wait_add(600):
199 # This does not really need to time out, but if there
200 # is no timeout, then keyboard interrupt does not work.
201 # Might as well use the opportunity to print more
202 # garbage into the log, though.
245 continue 203 continue
246 print_verbose("Device found.") 204 print_verbose("Device found.")
247 205
@@ -254,7 +212,7 @@ def poll_redux():
254 while devicer.have(): 212 while devicer.have():
255 print_verbose("Polling device.") 213 print_verbose("Polling device.")
256 try: 214 try:
257 sleeptime = poll() 215 sleeptime = poll_once()
258 except: 216 except:
259 sleeptime = 10 217 sleeptime = 10
260 218
@@ -267,14 +225,13 @@ def poll_redux():
267 225
268def poll_stdout(): 226def poll_stdout():
269 (r, now) = read_recent_egv_data() 227 (r, now) = read_recent_egv_data()
270 connected(True)
271 if r is None: 228 if r is None:
272 sleep_verbose(10) 229 return 10
273 else: 230 else:
274 print_cgm_bg(now, r) 231 print_cgm_bg(now, r)
275 next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() 232 next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds()
276 if (next_reading > 0): 233 return next_reading if (next_reading > 0) else 10
277 sleep_verbose(next_reading) 234
278 235
279def since(when, rectype): 236def since(when, rectype):
280 filt = lambda r: (r.system_time > when) if when else True 237 filt = lambda r: (r.system_time > when) if when else True
@@ -402,5 +359,5 @@ def toJSON(o):
402{"dump_everything": dump_everything, 359{"dump_everything": dump_everything,
403 "dump_cgm": dump_cgm, 360 "dump_cgm": dump_cgm,
404 "poll": poll, 361 "poll": poll,
405 "test": poll_redux, 362 "test": poll,
406}[command]() 363}[command]()