{
int ret = 0;
+ // Open device
if (description.empty() && serial.empty())
ret = ftdi_usb_open(d->ftdi, vendor, product);
else
ret = ftdi_usb_open_desc(d->ftdi, vendor, product, description.c_str(), serial.c_str());
- d->dev = usb_device(d->ftdi->usb_dev);
+ if (ret < 0)
+ return ret;
- if ((ret = ftdi_usb_open_dev(d->ftdi, d->dev)) >= 0)
- {
- d->open = true;
- get_strings();
- }
+ // Get device strings (closes device)
+ get_strings();
+
+ // Reattach device
+ ret = ftdi_usb_open_dev(d->ftdi, d->dev);
+ d->open = (ret >= 0);
return ret;
}
int Context::open(struct usb_device *dev)
{
- int ret = 0;
-
if (dev != 0)
d->dev = dev;
if (d->dev == 0)
return -1;
- if ((ret = ftdi_usb_open_dev(d->ftdi, d->dev)) >= 0)
- {
- d->open = true;
- get_strings();
- }
+ // Get device strings (closes device)
+ get_strings();
+
+ // Reattach device
+ int ret = ftdi_usb_open_dev(d->ftdi, d->dev);
+ d->open = (ret >= 0);
return ret;
}
return 1;
}
-/*! \fn vendor
- * \fn description
- * \fn serial
- * \brief Device strings properties.
+/*! \brief Device strings properties.
*/
const std::string& Context::vendor()
{
return d->vendor;
}
+/*! \brief Device strings properties.
+ */
const std::string& Context::description()
{
return d->description;
}
+/*! \brief Device strings properties.
+ */
const std::string& Context::serial()
{
return d->serial;
return ftdi_write_eeprom(d->context, eeprom);
}
+int Eeprom::read_location(int eeprom_addr, unsigned short *eeprom_val)
+{
+ return ftdi_read_eeprom_location(d->context, eeprom_addr, eeprom_val);
+}
+
+int Eeprom::write_location(int eeprom_addr, unsigned short eeprom_val)
+{
+ return ftdi_write_eeprom_location(d->context, eeprom_addr, eeprom_val);
+}
+
int Eeprom::erase()
{
return ftdi_erase_eeprom(d->context);