From 17984a16a763dee4b1f20f3383b2f39721cfeb95 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Sat, 8 Apr 2017 16:31:27 -0400 Subject: repeal & replace the old polling code --- dexcom_reader/dexcom_dumper.py | 75 +++++++++--------------------------------- 1 file 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(): dd = readdata.Dexcom.FindDevice() return readdata.Dexcom(dd) -dr = get_dexcom_reader() +dr = None + +if command is not 'poll': + dr = get_dexcom_reader() def parseable_record_types(): unparseable = ['FIRMWARE_PARAMETER_DATA', 'RECEIVER_LOG_DATA', 'USER_SETTING_DATA', 'MAX_VALUE'] @@ -157,57 +160,7 @@ def print_cgm_bg(now, r): print '%s: %s %s' % (format_times(now, r.system_time), r.glucose, r.trend_arrow) stdout.flush() -def dexcom_reconnect(): - global dr - if dr: - dr.Disconnect() - dr = get_dexcom_reader() - -def poll(): - print_verbose('Started dexcom_dumper.') - while True: - try: - poll_remote() if HOST else poll_stdout() - - except constants.SerialPortError: - connected(False) - dexcom_reconnect() - sleep_verbose(10) - except KeyboardInterrupt: - print_verbose('Exiting.') - return - except: - # Check for requests.ConnectionError without necessarily importing requests - if (str(sys.exc_info()[0]) == ""): - print_verbose('Error: could not connect to remote host.') - else: - print_verbose('Exception: %s' % str(sys.exc_info()[0])) - traceback.print_exc() - dexcom_reconnect() - sleep_verbose(10) - def poll_remote(): - (n, r) = remote_update('EGV_DATA') - connected(True) - if n is None: - sleep_verbose(10) - else: - now = dr.ReadSystemTime() - if n == 0: - send_ping(now) - if r: - for t in ['METER_DATA', 'INSERTION_TIME', 'USER_EVENT_DATA']: - # TODO: track how long this takes & adjust sleep accordingly - try: - remote_update(t) - except: - traceback.print_exc() - next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() - sleep_verbose(max(10, next_reading)) - else: - sleep_verbose(10) - -def poll_remote_redux(): (n, r) = remote_update('EGV_DATA') if n is None: return 10 @@ -227,8 +180,9 @@ def poll_remote_redux(): else: return 10 -def poll_redux(): - poll = poll_remote_redux +def poll(): + print_verbose('Started dexcom_dumper.') + poll_once = poll_remote if HOST else poll_stdout dexcom_g5_product = '22a3/47/100' @@ -242,6 +196,10 @@ def poll_redux(): try: print_verbose("Waiting for device.") if not devicer.wait_add(600): + # This does not really need to time out, but if there + # is no timeout, then keyboard interrupt does not work. + # Might as well use the opportunity to print more + # garbage into the log, though. continue print_verbose("Device found.") @@ -254,7 +212,7 @@ def poll_redux(): while devicer.have(): print_verbose("Polling device.") try: - sleeptime = poll() + sleeptime = poll_once() except: sleeptime = 10 @@ -267,14 +225,13 @@ def poll_redux(): def poll_stdout(): (r, now) = read_recent_egv_data() - connected(True) if r is None: - sleep_verbose(10) + return 10 else: print_cgm_bg(now, r) next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() - if (next_reading > 0): - sleep_verbose(next_reading) + return next_reading if (next_reading > 0) else 10 + def since(when, rectype): filt = lambda r: (r.system_time > when) if when else True @@ -402,5 +359,5 @@ def toJSON(o): {"dump_everything": dump_everything, "dump_cgm": dump_cgm, "poll": poll, - "test": poll_redux, + "test": poll, }[command]() -- cgit v1.2.3