diff --git a/pyad2/ad2.py b/pyad2/ad2.py index 865ad38..e7569be 100644 --- a/pyad2/ad2.py +++ b/pyad2/ad2.py @@ -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) diff --git a/pyad2/devices.py b/pyad2/devices.py index d00ba5e..2ef56a0 100644 --- a/pyad2/devices.py +++ b/pyad2/devices.py @@ -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): diff --git a/pyad2/tests/test_ad2.py b/pyad2/tests/test_ad2.py index 0737a00..7715a7e 100644 --- a/pyad2/tests/test_ad2.py +++ b/pyad2/tests/test_ad2.py @@ -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) diff --git a/pyad2/tests/test_devices.py b/pyad2/tests/test_devices.py index cfcf21d..7e7c42f 100644 --- a/pyad2/tests/test_devices.py +++ b/pyad2/tests/test_devices.py @@ -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: