|
|
@@ -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: |
|
|
|