@@ -65,7 +65,7 @@ class AD2Factory(object): | |||||
device = cls.__devices[0] | device = cls.__devices[0] | ||||
vendor, product, sernum, ifcount, description = device | vendor, product, sernum, ifcount, description = device | ||||
device = USBDevice((sernum, ifcount - 1)) | |||||
device = USBDevice(interface=sernum) | |||||
return AD2(device) | return AD2(device) | ||||
@@ -167,18 +167,21 @@ class USBDevice(Device): | |||||
:returns: the interface used to connect to the device. | :returns: the interface used to connect to the device. | ||||
""" | """ | ||||
return (self._serial_number, self._endpoint) | |||||
return self._interface | |||||
@interface.setter | @interface.setter | ||||
def interface(self, value): | def interface(self, value): | ||||
""" | """ | ||||
Sets the interface used to connect to the device. | 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 | @property | ||||
def serial_number(self): | def serial_number(self): | ||||
@@ -219,21 +222,23 @@ class USBDevice(Device): | |||||
""" | """ | ||||
self._description = value | self._description = value | ||||
def __init__(self, interface=(None, 0)): | |||||
def __init__(self, interface=0): | |||||
""" | """ | ||||
Constructor | 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) | Device.__init__(self) | ||||
self._device = Ftdi() | 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._vendor_id = USBDevice.FTDI_VENDOR_ID | ||||
self._product_id = USBDevice.FTDI_PRODUCT_ID | self._product_id = USBDevice.FTDI_PRODUCT_ID | ||||
self._device_number = None | |||||
self._endpoint = 0 | |||||
self._description = None | self._description = None | ||||
def open(self, baudrate=BAUDRATE, no_reader_thread=False): | def open(self, baudrate=BAUDRATE, no_reader_thread=False): | ||||
@@ -36,15 +36,15 @@ class TestAD2Factory(TestCase): | |||||
with patch.object(USBDevice, 'find_all', return_value=[(0, 0, 'AD2', 1, 'AD2')]): | with patch.object(USBDevice, 'find_all', return_value=[(0, 0, 'AD2', 1, 'AD2')]): | ||||
device = AD2Factory.create() | device = AD2Factory.create() | ||||
self.assertEquals(device._device.interface, ('AD2', 0)) | |||||
self.assertEquals(device._device.interface, 'AD2') | |||||
def test_create_with_param(self): | 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')]): | 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')) | 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')) | 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): | def test_events(self): | ||||
self.assertEquals(self._attached, False) | self.assertEquals(self._attached, False) | ||||
@@ -34,8 +34,22 @@ class TestUSBDevice(TestCase): | |||||
with self.assertRaises(CommError): | with self.assertRaises(CommError): | ||||
devices = USBDevice.find_all() | 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): | def test_open(self): | ||||
self._device.interface = ('AD2USB', 0) | |||||
self._device.interface = 'AD2USB' | |||||
with patch.object(self._device._device, 'open') as mock: | with patch.object(self._device._device, 'open') as mock: | ||||
self._device.open(no_reader_thread=True) | self._device.open(no_reader_thread=True) | ||||
@@ -43,7 +57,7 @@ class TestUSBDevice(TestCase): | |||||
mock.assert_any_calls() | mock.assert_any_calls() | ||||
def test_open_failed(self): | 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 patch.object(self._device._device, 'open', side_effect=[USBError('testing'), FtdiError]): | ||||
with self.assertRaises(NoDeviceError): | with self.assertRaises(NoDeviceError): | ||||
@@ -53,7 +67,7 @@ class TestUSBDevice(TestCase): | |||||
self._device.open(no_reader_thread=True) | self._device.open(no_reader_thread=True) | ||||
def test_write(self): | def test_write(self): | ||||
self._device.interface = ('AD2USB', 0) | |||||
self._device.interface = 'AD2USB' | |||||
self._device.open(no_reader_thread=True) | self._device.open(no_reader_thread=True) | ||||
with patch.object(self._device._device, 'write_data') as mock: | with patch.object(self._device._device, 'write_data') as mock: | ||||
@@ -67,7 +81,7 @@ class TestUSBDevice(TestCase): | |||||
self._device.write('test') | self._device.write('test') | ||||
def test_read(self): | def test_read(self): | ||||
self._device.interface = ('AD2USB', 0) | |||||
self._device.interface = 'AD2USB' | |||||
self._device.open(no_reader_thread=True) | self._device.open(no_reader_thread=True) | ||||
with patch.object(self._device._device, 'read_data') as mock: | with patch.object(self._device._device, 'read_data') as mock: | ||||