libftdi-git Archives

Subject: A library to talk to FTDI chips branch, master, updated. v0.16-38-g58cce2d

From: libftdi-git@xxxxxxxxxxxxxxxxxxxxxxx
To: libftdi-git@xxxxxxxxxxxxxxxxxxxxxxx
Date: Sun, 13 Dec 2009 17:57:06 +0100 (CET)
The branch, master has been updated
       via  58cce2d45cf6d7dae4650dadf96dce18b3ba151f (commit)
      from  50ea690440f9a0d083d115183db723c03766ddac (commit)


- Log -----------------------------------------------------------------
commit 58cce2d45cf6d7dae4650dadf96dce18b3ba151f
Author: Gerd v. Egidy <gerd.von.egidy@xxxxxxxxxxxxx>
Date:   Sun Dec 13 17:53:29 2009 +0100

    small improvements in C++ wrapper:
    
    - make ftdi_usb_open_string() available
    - reduce code dupliation in open() functions
    - overloaded set_bitmask using the correct enum ftdi_mpsse_mode

-----------------------------------------------------------------------

Summary of changes:
 ftdipp/ftdi.cpp |   76 +++++++++++++++++++++++++++++++++++++++----------------
 ftdipp/ftdi.hpp |    6 +++-
 2 files changed, 59 insertions(+), 23 deletions(-)

diff --git a/ftdipp/ftdi.cpp b/ftdipp/ftdi.cpp
index 7c2dd78..2bc6c6e 100644
--- a/ftdipp/ftdi.cpp
+++ b/ftdipp/ftdi.cpp
@@ -77,27 +77,44 @@ bool Context::is_open()
     return d->open;
 }
 
-int Context::open(int vendor, int product, const std::string& description, 
const std::string& serial)
+int Context::open(int vendor, int product)
 {
-    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());
+    int ret = ftdi_usb_open(d->ftdi, vendor, product);
 
     if (ret < 0)
        return ret;
 
-    // Get device strings (closes device)
-    get_strings();
+    return get_strings_and_reopen();
+}
 
-    // Reattach device
-    ret = ftdi_usb_open_dev(d->ftdi, d->dev);
-    d->open = (ret >= 0);
+int Context::open(int vendor, int product, const std::string& description, 
const std::string& serial, unsigned int index)
+{
+    // translate empty strings to NULL
+    // -> do not use them to find the device (vs. require an empty string to 
be set in the EEPROM)
+    const char* c_description=NULL;
+    const char* c_serial=NULL;
+    if (!description.empty())
+        c_description=description.c_str();
+    if (!serial.empty())
+        c_serial=serial.c_str();
 
-    return ret;
+    int ret = ftdi_usb_open_desc_index(d->ftdi, vendor, product, 
c_description, c_serial, index);
+
+    if (ret < 0)
+       return ret;
+
+    return get_strings_and_reopen();
+}
+
+int Context::open(const std::string& description)
+{
+    int ret = ftdi_usb_open_string(d->ftdi, description.c_str());
+
+    if (ret < 0)
+       return ret;
+
+    return get_strings_and_reopen();
 }
 
 int Context::open(struct usb_device *dev)
@@ -108,14 +125,7 @@ int Context::open(struct usb_device *dev)
     if (d->dev == 0)
         return -1;
 
-    // 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 get_strings_and_reopen();
 }
 
 int Context::close()
@@ -263,7 +273,7 @@ int Context::set_error_char(unsigned char errorch, unsigned 
char enable)
 
 int Context::bitbang_enable(unsigned char bitmask)
 {
-    return ftdi_enable_bitbang(d->ftdi, bitmask);
+    return ftdi_set_bitmode(d->ftdi, bitmask, BITMODE_BITBANG);
 }
 
 int Context::bitbang_disable()
@@ -273,6 +283,11 @@ int Context::bitbang_disable()
 
 int Context::set_bitmode(unsigned char bitmask, unsigned char mode)
 {
+    return set_bitmode(bitmask, mode);
+}
+
+int Context::set_bitmode(unsigned char bitmask, enum ftdi_mpsse_mode mode)
+{
     return ftdi_set_bitmode(d->ftdi, bitmask, mode);
 }
 
@@ -303,6 +318,23 @@ int Context::get_strings()
     return 1;
 }
 
+int Context::get_strings_and_reopen()
+{
+    // Get device strings (closes device)
+    int ret=get_strings();
+    if (ret < 0)
+    {
+        d->open = 0;
+        return ret;
+    }
+
+    // Reattach device
+    ret = ftdi_usb_open_dev(d->ftdi, d->dev);
+    d->open = (ret >= 0);
+
+    return ret;
+}
+
 /*! \brief Device strings properties.
  */
 const std::string& Context::vendor()
diff --git a/ftdipp/ftdi.hpp b/ftdipp/ftdi.hpp
index 76868c3..9c345c3 100644
--- a/ftdipp/ftdi.hpp
+++ b/ftdipp/ftdi.hpp
@@ -80,7 +80,9 @@ public:
     /* Device manipulators */
     bool is_open();
     int open(struct usb_device *dev = 0);
-    int open(int vendor, int product, const std::string& description = 
std::string(), const std::string& serial = std::string());
+    int open(int vendor, int product);
+    int open(int vendor, int product, const std::string& description, const 
std::string& serial = std::string(), unsigned int index=0);
+    int open(const std::string& description);
     int close();
     int reset();
     int flush(int mask = Input|Output);
@@ -120,6 +122,7 @@ public:
 
     /* BitBang mode */
     int set_bitmode(unsigned char bitmask, unsigned char mode);
+    int set_bitmode(unsigned char bitmask, enum ftdi_mpsse_mode mode);
     int DEPRECATED(bitbang_enable(unsigned char bitmask));
     int bitbang_disable();
     int read_pins(unsigned char *pins);
@@ -129,6 +132,7 @@ public:
 
 protected:
     int get_strings();
+    int get_strings_and_reopen();
 
     /* Properties */
     struct ftdi_context* context();


hooks/post-receive
-- 
A library to talk to FTDI chips

--
libftdi-git - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi-git+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx   

Current Thread
  • A library to talk to FTDI chips branch, master, updated. v0.16-38-g58cce2d, libftdi-git <=