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