Browse Source

Improving exception handling.

pyserial_fix
Scott Petersen 11 years ago
parent
commit
1855931838
1 changed files with 33 additions and 23 deletions
  1. +33
    -23
      pyad2usb/devices.py

+ 33
- 23
pyad2usb/devices.py View File

@@ -110,6 +110,11 @@ class Device(object):
except util.TimeoutError, err:
pass

except Exception, err:
self._running = False

raise err

time.sleep(0.01)

class USBDevice(Device):
@@ -139,7 +144,7 @@ class USBDevice(Device):
devices = Ftdi.find_all([(USBDevice.FTDI_VENDOR_ID, USBDevice.FTDI_PRODUCT_ID)], nocache=True)

except (usb.core.USBError, FtdiError), err:
raise util.CommError('Error enumerating AD2USB devices: {0}'.format(str(err)))
raise util.CommError('Error enumerating AD2USB devices: {0}'.format(str(err)), err)

return devices

@@ -207,7 +212,7 @@ class USBDevice(Device):
self._id = 'USB {0}:{1}'.format(self._device.usb_dev.bus, self._device.usb_dev.address)

except (usb.core.USBError, FtdiError), err:
raise util.NoDeviceError('Error opening device: {0}'.format(str(err)))
raise util.NoDeviceError('Error opening device: {0}'.format(str(err)), err)

else:
self._running = True
@@ -248,7 +253,7 @@ class USBDevice(Device):

self.on_write(data)
except FtdiError, err:
raise util.CommError('Error writing to device: {0}'.format(str(err)))
raise util.CommError('Error writing to device: {0}'.format(str(err)), err)

def read(self):
"""
@@ -263,7 +268,7 @@ class USBDevice(Device):
ret = self._device.read_data(1)

except (usb.core.USBError, FtdiError), err:
raise util.CommError('Error reading from device: {0}'.format(str(err)))
raise util.CommError('Error reading from device: {0}'.format(str(err)), err)

return ret

@@ -318,7 +323,7 @@ class USBDevice(Device):
except (usb.core.USBError, FtdiError), err:
timer.cancel()

raise util.CommError('Error reading from device: {0}'.format(str(err)))
raise util.CommError('Error reading from device: {0}'.format(str(err)), err)

else:
if got_line:
@@ -365,7 +370,7 @@ class SerialDevice(Device):
devices = serial.tools.list_ports.comports()

except SerialException, err:
raise util.CommError('Error enumerating serial devices: {0}'.format(str(err)))
raise util.CommError('Error enumerating serial devices: {0}'.format(str(err)), err)

return devices

@@ -420,7 +425,7 @@ class SerialDevice(Device):
# all issues with it.

except (serial.SerialException, ValueError), err:
raise util.NoDeviceError('Error opening device on port {0}.'.format(interface))
raise util.NoDeviceError('Error opening device on port {0}.'.format(interface), err)

else:
self._running = True
@@ -460,7 +465,7 @@ class SerialDevice(Device):
pass

except serial.SerialException, err:
raise util.CommError('Error writing to device.')
raise util.CommError('Error writing to device.', err)

else:
self.on_write(data)
@@ -478,7 +483,7 @@ class SerialDevice(Device):
ret = self._device.read(1)

except serial.SerialException, err:
raise util.CommError('Error reading from device: {0}'.format(str(err)))
raise util.CommError('Error reading from device: {0}'.format(str(err)), err)

return ret

@@ -529,7 +534,7 @@ class SerialDevice(Device):
except (OSError, serial.SerialException), err:
timer.cancel()

raise util.CommError('Error reading from device: {0}'.format(str(err)))
raise util.CommError('Error reading from device: {0}'.format(str(err)), err)

else:
if got_line:
@@ -635,7 +640,7 @@ class SocketDevice(Device):
:param no_reader_thread: Whether or not to automatically open the reader thread.
:type no_reader_thread: bool

:raises: util.NoDeviceError
:raises: util.NoDeviceError, util.CommError
"""
if interface is not None:
self._interface = interface
@@ -645,19 +650,24 @@ class SocketDevice(Device):
self._device = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

if self._use_ssl:
ctx = SSL.Context(SSL.TLSv1_METHOD)
ctx.use_privatekey_file(self.ssl_key)
ctx.use_certificate_file(self.ssl_certificate)
ctx.load_verify_locations(self.ssl_ca, None)
ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT | SSL.VERIFY_CLIENT_ONCE, self._verify_ssl_callback)
self._device = SSL.Connection(ctx, self._device)
try:
ctx = SSL.Context(SSL.TLSv1_METHOD)
ctx.use_privatekey_file(self.ssl_key)
ctx.use_certificate_file(self.ssl_certificate)
ctx.load_verify_locations(self.ssl_ca, None)
ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT | SSL.VERIFY_CLIENT_ONCE, self._verify_ssl_callback)

self._device = SSL.Connection(ctx, self._device)

except SSL.Error, err:
raise util.CommError('Error setting up SSL connection.', err)

self._device.connect((self._host, self._port))

self._id = '{0}:{1}'.format(self._host, self._port)

except socket.error, err:
raise util.NoDeviceError('Error opening device at {0}:{1}'.format(self._host, self._port))
raise util.NoDeviceError('Error opening device at {0}:{1}'.format(self._host, self._port), err)

else:
self._running = True
@@ -703,8 +713,8 @@ class SocketDevice(Device):

self.on_write(data)

except socket.error, err:
raise util.CommError('Error writing to device: {0}'.format(str(err)))
except (SSL.Error, socket.error), err:
raise util.CommError('Error writing to device.', err)

return data_sent

@@ -721,7 +731,7 @@ class SocketDevice(Device):
data = self._device.recv(1)

except socket.error, err:
raise util.CommError('Error while reading from device: {0}'.format(str(err)))
raise util.CommError('Error while reading from device: {0}'.format(str(err)), err)

return data

@@ -758,7 +768,7 @@ class SocketDevice(Device):
while timeout_event.reading:
buf = self._device.recv(1)

if buf != '':verify_ssl
if buf != '':
self._buffer += buf

if buf == "\n":
@@ -776,7 +786,7 @@ class SocketDevice(Device):
except socket.error, err:
timer.cancel()

raise util.CommError('Error reading from device: {0}'.format(str(err)))
raise util.CommError('Error reading from device: {0}'.format(str(err)), err)

else:
if got_line:


Loading…
Cancel
Save