summaryrefslogtreecommitdiff
path: root/dexcom_reader
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2017-02-10 23:19:10 +0000
committerAndrew Cady <d@jerkface.net>2017-02-10 23:19:10 +0000
commit6b735adbead93403c46de690f4c225d0d347f452 (patch)
tree78c6f11597937fdea1f66f56f5dcd0382c24eab0 /dexcom_reader
parentaed1997320c94a8acb7ad051e6297fdd112322b7 (diff)
throw a specific exception for serial port errors
Diffstat (limited to 'dexcom_reader')
-rw-r--r--dexcom_reader/constants.py2
-rwxr-xr-xdexcom_reader/dexcom_dumper.py9
-rw-r--r--dexcom_reader/readdata.py32
3 files changed, 31 insertions, 12 deletions
diff --git a/dexcom_reader/constants.py b/dexcom_reader/constants.py
index 628d325..08c62ec 100644
--- a/dexcom_reader/constants.py
+++ b/dexcom_reader/constants.py
@@ -8,6 +8,8 @@ class Error(Exception):
8class CrcError(Error): 8class CrcError(Error):
9 """Failed to CRC properly.""" 9 """Failed to CRC properly."""
10 10
11class SerialPortError(Error):
12 """Error communicating with Dexcom receiver."""
11 13
12DEXCOM_G4_USB_VENDOR = 0x22a3 14DEXCOM_G4_USB_VENDOR = 0x22a3
13DEXCOM_G4_USB_PRODUCT = 0x0047 15DEXCOM_G4_USB_PRODUCT = 0x0047
diff --git a/dexcom_reader/dexcom_dumper.py b/dexcom_reader/dexcom_dumper.py
index 0a2d8ee..18724ac 100755
--- a/dexcom_reader/dexcom_dumper.py
+++ b/dexcom_reader/dexcom_dumper.py
@@ -166,12 +166,9 @@ def poll():
166 try: 166 try:
167 poll_remote() if HOST else poll_stdout() 167 poll_remote() if HOST else poll_stdout()
168 168
169 except ValueError as v: 169 except constants.SerialPortError:
170 if (v.args[0] == 'Attempting to use a port that is not open'): 170 connected(False)
171 connected(False) 171 dexcom_reconnect()
172 dexcom_reconnect()
173 else:
174 print_verbose('Caught error: %s' % v.args[0])
175 sleep_verbose(10) 172 sleep_verbose(10)
176 except KeyboardInterrupt: 173 except KeyboardInterrupt:
177 print_verbose('Exiting.') 174 print_verbose('Exiting.')
diff --git a/dexcom_reader/readdata.py b/dexcom_reader/readdata.py
index e589b1a..84c2356 100644
--- a/dexcom_reader/readdata.py
+++ b/dexcom_reader/readdata.py
@@ -11,7 +11,7 @@ import re
11import util 11import util
12import xml.etree.ElementTree as ET 12import xml.etree.ElementTree as ET
13import platform 13import platform
14 14import termios
15 15
16class ReadPacket(object): 16class ReadPacket(object):
17 def __init__(self, command, data): 17 def __init__(self, command, data):
@@ -74,10 +74,20 @@ class Dexcom(object):
74 return self._port 74 return self._port
75 75
76 def write(self, *args, **kwargs): 76 def write(self, *args, **kwargs):
77 return self.port.write(*args, **kwargs) 77 try:
78 return self.port.write(*args, **kwargs)
79 except ValueError:
80 raise constants.SerialPortError
81 except termios.error:
82 raise constants.SerialPortError
78 83
79 def read(self, *args, **kwargs): 84 def read(self, *args, **kwargs):
80 return self.port.read(*args, **kwargs) 85 try:
86 return self.port.read(*args, **kwargs)
87 except ValueError:
88 raise constants.SerialPortError
89 except termios.error:
90 raise constants.SerialPortError
81 91
82 def readpacket(self, timeout=None): 92 def readpacket(self, timeout=None):
83 total_read = 4 93 total_read = 4
@@ -218,11 +228,21 @@ class Dexcom(object):
218 return ET.fromstring(data) 228 return ET.fromstring(data)
219 229
220 def flush(self): 230 def flush(self):
221 self.port.flush() 231 try:
232 self.port.flush()
233 except ValueError:
234 raise constants.SerialPortError
235 except termios.error:
236 raise constants.SerialPortError
222 237
223 def clear(self): 238 def clear(self):
224 self.port.flushInput() 239 try:
225 self.port.flushOutput() 240 self.port.flushInput()
241 self.port.flushOutput()
242 except ValueError:
243 raise constants.SerialPortError
244 except termios.error:
245 raise constants.SerialPortError
226 246
227 def GetFirmwareHeader(self): 247 def GetFirmwareHeader(self):
228 i = self.GenericReadCommand(constants.READ_FIRMWARE_HEADER) 248 i = self.GenericReadCommand(constants.READ_FIRMWARE_HEADER)