diff --git a/src/examples/test_usb_i2c.cpp b/src/examples/test_usb_i2c.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..65586b5c35f7889821ac80d2edb0bbd2f8d58fe8
--- /dev/null
+++ b/src/examples/test_usb_i2c.cpp
@@ -0,0 +1,93 @@
+#include "exceptions.h"
+#include "usb_i2c.h"
+#include <iostream>
+
+const std::string usb_port="/dev/ttyUSB0";
+const unsigned char dev_id=0x22;
+
+int main(int argc, char *argv[])
+{
+  CUSBI2C adapter("adapter");
+  int i=0;
+  
+  try{
+    adapter.open(usb_port);
+    std::cout << "Firmware revision: " << (int)adapter.get_revision() << std::endl;
+    std::cout << "Turning the led off ..." << std::endl;
+    adapter.turn_led_off();
+    sleep(1);
+    std::cout << "Turning the led on ..." << std::endl;
+    adapter.turn_led_on();
+    std::cout << "Using the second general purose I/O as digital output ..." << std::endl;
+    adapter.config_gpio(gpio2,digital_output);
+    std::cout << "  Outputing a high level ..." << std::endl;
+    adapter.set_gpio(gpio2,true);
+    sleep(2);
+    std::cout << "  Outputing a low level ..." << std::endl;
+    adapter.set_gpio(gpio2,false);
+    sleep(2);
+    std::cout << "Using the second general purose I/O as digital input ..." << std::endl;
+    adapter.config_gpio(gpio2,digital_input);
+    std::cout << "  Reading the current value ..." << std::endl;
+    for(i=0;i<10;i++)
+    {
+      if(adapter.get_gpio(gpio2))
+        std::cout << "    high level." << std::endl;
+      else
+        std::cout << "    low level." << std::endl;
+      usleep(500000);
+    }
+    std::cout << "Using the second general purose I/O as analog input ..." << std::endl;
+    adapter.config_gpio(gpio2,analog_input);
+    std::cout << "  Reading the current value ..." << std::endl;
+    for(i=0;i<10;i++)
+    {
+      std::cout << "    " << adapter.get_analog(gpio2) << std::endl;
+      usleep(500000);
+    }
+    std::cout << "Using the second general purose I/O as I2C ..." << std::endl;
+    adapter.config_gpio(gpio2,i2c);
+    std::cout << "Using the third general purose I/O as digital output ..." << std::endl;
+    adapter.config_gpio(gpio1,digital_output);
+    std::cout << "  Outputing a high level ..." << std::endl;
+    adapter.set_gpio(gpio3,true);
+    sleep(2);
+    std::cout << "  Outputing a low level ..." << std::endl;
+    adapter.set_gpio(gpio3,false);
+    sleep(2);
+    std::cout << "Using the third general purose I/O as digital input ..." << std::endl;
+    adapter.config_gpio(gpio3,digital_input);
+    std::cout << "  Reading the current value ..." << std::endl;
+    for(i=0;i<10;i++)
+    {
+      if(adapter.get_gpio(gpio3))
+        std::cout << "    high level." << std::endl;
+      else
+        std::cout << "    low level." << std::endl;
+      usleep(500000);
+    }
+    std::cout << "Using the third general purose I/O as analog input ..." << std::endl;
+    adapter.config_gpio(gpio3,analog_input);
+    std::cout << "  Reading the current value ..." << std::endl;
+    for(i=0;i<10;i++)
+    {
+      std::cout << "    " << adapter.get_analog(gpio3) << std::endl;
+      usleep(500000);
+    }
+    std::cout << "Using the third general purose I/O as I2C ..." << std::endl;
+    adapter.config_gpio(gpio3,i2c);
+    std::cout << "Using the first general purose I/O as digital input ..." << std::endl;
+    adapter.config_gpio(gpio1,digital_input);
+    for(i=0;i<10;i++)
+    {
+      if(adapter.get_gpio(gpio1))
+        std::cout << "    high level." << std::endl;
+      else
+        std::cout << "    low level." << std::endl;
+      usleep(500000);
+    }
+  }catch(CException &e)
+  {
+    std::cout << e.what() << std::endl;
+  }
+}
diff --git a/src/usb_i2c.cpp b/src/usb_i2c.cpp
index 3a375e45e0e8d17839838821a74ed2ea3194a00f..c6a511ca119c1141197abdaa25c994efd8aa67d9 100644
--- a/src/usb_i2c.cpp
+++ b/src/usb_i2c.cpp
@@ -180,6 +180,7 @@ short int CUSBI2C::get_analog(gpio_pins pin)
       analog_value=answer[0]*256+answer[1];
     else
       analog_value=answer[2]*256+answer[3];
+    return analog_value;
   }
   else
   {