Browse Source

Reworked USBDevice constructor so that it makes more sense and actually functions correctly.

pyserial_fix
Scott Petersen 11 years ago
parent
commit
8ef1c250c9
4 changed files with 38 additions and 19 deletions
  1. +1
    -1
      pyad2/ad2.py
  2. +16
    -11
      pyad2/devices.py
  3. +3
    -3
      pyad2/tests/test_ad2.py
  4. +18
    -4
      pyad2/tests/test_devices.py

+ 1
- 1
pyad2/ad2.py View File

@@ -65,7 +65,7 @@ class AD2Factory(object):
device = cls.__devices[0]

vendor, product, sernum, ifcount, description = device
device = USBDevice((sernum, ifcount - 1))
device = USBDevice(interface=sernum)

return AD2(device)



+ 16
- 11
pyad2/devices.py View File

@@ -167,18 +167,21 @@ class USBDevice(Device):

:returns: the interface used to connect to the device.
"""
return (self._serial_number, self._endpoint)
return self._interface

@interface.setter
def interface(self, value):
"""
Sets the interface used to connect to the device.

:param value: Tuple containing the serial number and endpoint number to use.
:type value: tuple
:param value: May specify either the serial number or the device index.
:type value: str or int
"""
self._serial_number = value[0]
self._endpoint = value[1]
self._interface = value
if isinstance(value, int):
self._device_number = value
else:
self._serial_number = value

@property
def serial_number(self):
@@ -219,21 +222,23 @@ class USBDevice(Device):
"""
self._description = value

def __init__(self, interface=(None, 0)):
def __init__(self, interface=0):
"""
Constructor

:param interface: Tuple containing the serial number and endpoint number to use.
:type interface: tuple
:param interface: May specify either the serial number or the device index.
:type interface: str or int
"""
Device.__init__(self)

self._device = Ftdi()
self._serial_number = interface[0]
self._endpoint = interface[1]

self._device_number = 0
self._serial_number = None
self.interface = interface
self._vendor_id = USBDevice.FTDI_VENDOR_ID
self._product_id = USBDevice.FTDI_PRODUCT_ID
self._device_number = None
self._endpoint = 0
self._description = None

def open(self, baudrate=BAUDRATE, no_reader_thread=False):


+ 3
- 3
pyad2/tests/test_ad2.py View File

@@ -36,15 +36,15 @@ class TestAD2Factory(TestCase):
with patch.object(USBDevice, 'find_all', return_value=[(0, 0, 'AD2', 1, 'AD2')]):
device = AD2Factory.create()

self.assertEquals(device._device.interface, ('AD2', 0))
self.assertEquals(device._device.interface, 'AD2')

def test_create_with_param(self):
with patch.object(USBDevice, 'find_all', return_value=[(0, 0, 'AD2-1', 1, 'AD2'), (0, 0, 'AD2-2', 1, 'AD2')]):
device = AD2Factory.create((0, 0, 'AD2-1', 1, 'AD2'))
self.assertEquals(device._device.interface, ('AD2-1', 0))
self.assertEquals(device._device.interface, 'AD2-1')

device = AD2Factory.create((0, 0, 'AD2-2', 1, 'AD2'))
self.assertEquals(device._device.interface, ('AD2-2', 0))
self.assertEquals(device._device.interface, 'AD2-2')

def test_events(self):
self.assertEquals(self._attached, False)


+ 18
- 4
pyad2/tests/test_devices.py View File

@@ -34,8 +34,22 @@ class TestUSBDevice(TestCase):
with self.assertRaises(CommError):
devices = USBDevice.find_all()

def test_interface_serial_number(self):
self._device.interface = 'AD2USB'

self.assertEquals(self._device.interface, 'AD2USB')
self.assertEquals(self._device.serial_number, 'AD2USB')
self.assertEquals(self._device._device_number, 0)

def test_interface_index(self):
self._device.interface = 1

self.assertEquals(self._device.interface, 1)
self.assertEquals(self._device.serial_number, None)
self.assertEquals(self._device._device_number, 1)

def test_open(self):
self._device.interface = ('AD2USB', 0)
self._device.interface = 'AD2USB'

with patch.object(self._device._device, 'open') as mock:
self._device.open(no_reader_thread=True)
@@ -43,7 +57,7 @@ class TestUSBDevice(TestCase):
mock.assert_any_calls()

def test_open_failed(self):
self._device.interface = ('AD2USB', 0)
self._device.interface = 'AD2USB'

with patch.object(self._device._device, 'open', side_effect=[USBError('testing'), FtdiError]):
with self.assertRaises(NoDeviceError):
@@ -53,7 +67,7 @@ class TestUSBDevice(TestCase):
self._device.open(no_reader_thread=True)

def test_write(self):
self._device.interface = ('AD2USB', 0)
self._device.interface = 'AD2USB'
self._device.open(no_reader_thread=True)

with patch.object(self._device._device, 'write_data') as mock:
@@ -67,7 +81,7 @@ class TestUSBDevice(TestCase):
self._device.write('test')

def test_read(self):
self._device.interface = ('AD2USB', 0)
self._device.interface = 'AD2USB'
self._device.open(no_reader_thread=True)

with patch.object(self._device._device, 'read_data') as mock:


Loading…
Cancel
Save