diff options
author | Andrew Cady <d@jerkface.net> | 2017-04-08 16:31:27 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2017-04-08 16:31:27 -0400 |
commit | 17984a16a763dee4b1f20f3383b2f39721cfeb95 (patch) | |
tree | 11f4d59a34db07796bb77329d0f9dfb2642aad84 | |
parent | 572aad546bb8ee9ccd095a2098e1b292176c53da (diff) |
repeal & replace the old polling code
-rwxr-xr-x | dexcom_reader/dexcom_dumper.py | 75 |
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 | ||
56 | dr = get_dexcom_reader() | 56 | dr = None |
57 | |||
58 | if command is not 'poll': | ||
59 | dr = get_dexcom_reader() | ||
57 | 60 | ||
58 | def parseable_record_types(): | 61 | def 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 | ||
160 | def dexcom_reconnect(): | ||
161 | global dr | ||
162 | if dr: | ||
163 | dr.Disconnect() | ||
164 | dr = get_dexcom_reader() | ||
165 | |||
166 | def 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 | |||
189 | def poll_remote(): | 163 | def 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 | |||
210 | def 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 | ||
230 | def poll_redux(): | 183 | def 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 | ||
268 | def poll_stdout(): | 226 | def 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 | ||
279 | def since(when, rectype): | 236 | def 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]() |