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: except util.TimeoutError, err:
pass pass


except Exception, err:
self._running = False

raise err

time.sleep(0.01) time.sleep(0.01)


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


except (usb.core.USBError, FtdiError), err: 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 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) self._id = 'USB {0}:{1}'.format(self._device.usb_dev.bus, self._device.usb_dev.address)


except (usb.core.USBError, FtdiError), err: 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: else:
self._running = True self._running = True
@@ -248,7 +253,7 @@ class USBDevice(Device):


self.on_write(data) self.on_write(data)
except FtdiError, err: 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): def read(self):
""" """
@@ -263,7 +268,7 @@ class USBDevice(Device):
ret = self._device.read_data(1) ret = self._device.read_data(1)


except (usb.core.USBError, FtdiError), err: 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 return ret


@@ -318,7 +323,7 @@ class USBDevice(Device):
except (usb.core.USBError, FtdiError), err: except (usb.core.USBError, FtdiError), err:
timer.cancel() 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: else:
if got_line: if got_line:
@@ -365,7 +370,7 @@ class SerialDevice(Device):
devices = serial.tools.list_ports.comports() devices = serial.tools.list_ports.comports()


except SerialException, err: 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 return devices


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


except (serial.SerialException, ValueError), err: 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: else:
self._running = True self._running = True
@@ -460,7 +465,7 @@ class SerialDevice(Device):
pass pass


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


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


except serial.SerialException, err: 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 return ret


@@ -529,7 +534,7 @@ class SerialDevice(Device):
except (OSError, serial.SerialException), err: except (OSError, serial.SerialException), err:
timer.cancel() 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: else:
if got_line: if got_line:
@@ -635,7 +640,7 @@ class SocketDevice(Device):
:param no_reader_thread: Whether or not to automatically open the reader thread. :param no_reader_thread: Whether or not to automatically open the reader thread.
:type no_reader_thread: bool :type no_reader_thread: bool


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


if self._use_ssl: 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._device.connect((self._host, self._port))


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


except socket.error, err: 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: else:
self._running = True self._running = True
@@ -703,8 +713,8 @@ class SocketDevice(Device):


self.on_write(data) 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 return data_sent


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


except socket.error, err: 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 return data


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


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


if buf == "\n": if buf == "\n":
@@ -776,7 +786,7 @@ class SocketDevice(Device):
except socket.error, err: except socket.error, err:
timer.cancel() 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: else:
if got_line: if got_line:


Loading…
Cancel
Save