Hello!
Attached to this mail you'll find a patch which aims to fix all issues
compiling libftdi-0.20 using Microsoft Visual Studio 2012 including a
README.msvc describing how to do it.
I would be happy if this patch would be commited to the repository.
Greetings
Matthias
--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to [email protected]
diff --unidirectional-new-file --strip-trailing-cr -u -r libftdi-0.20_orig/CMakeLists.txt libftdi-0.20/CMakeLists.txt
--- libftdi-0.20_orig/CMakeLists.txt 2012-03-19 12:21:16.000000000 +0100
+++ libftdi-0.20/CMakeLists.txt 2012-10-12 00:58:42.071816000 +0200
@@ -79,6 +79,16 @@
set(CPACK_SOURCE_IGNORE_FILES "\\\\.git")
set(CPACK_SOURCE_PACKAGE_FILE_NAME ${CPACK_PACKAGE_FILE_NAME})
+if(MSVC)
+ FIND_PACKAGE(Boost)
+ if(Boost_FOUND)
+ INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
+ ADD_DEFINITIONS( "-DHAS_BOOST" )
+ endif(Boost_FOUND)
+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
+ add_definitions(-DMSVC)
+endif()
+
# Subdirectories
if(${UNIX})
set(CPACK_SET_DESTDIR "ON")
diff --unidirectional-new-file --strip-trailing-cr -u -r libftdi-0.20_orig/examples/CMakeLists.txt libftdi-0.20/examples/CMakeLists.txt
--- libftdi-0.20_orig/examples/CMakeLists.txt 2012-03-15 10:58:44.000000000 +0100
+++ libftdi-0.20/examples/CMakeLists.txt 2012-10-12 01:13:42.957844000 +0200
@@ -2,9 +2,9 @@
if (EXAMPLES)
# Includes
- include( ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}
- )
+# include( ${CMAKE_CURRENT_SOURCE_DIR}
+# ${CMAKE_CURRENT_BINARY_DIR}
+# )
message(STATUS "Building example programs.")
@@ -13,23 +13,27 @@
# Targets
add_executable(simple simple.c)
- add_executable(bitbang bitbang.c)
- add_executable(bitbang2 bitbang2.c)
- add_executable(bitbang_cbus bitbang_cbus.c)
- add_executable(bitbang_ft2232 bitbang_ft2232.c)
add_executable(find_all find_all.c)
- add_executable(serial_test serial_test.c)
- add_executable(baud_test baud_test.c)
+ if(NOT MSVC)
+ add_executable(bitbang bitbang.c)
+ add_executable(bitbang2 bitbang2.c)
+ add_executable(bitbang_cbus bitbang_cbus.c)
+ add_executable(bitbang_ft2232 bitbang_ft2232.c)
+ add_executable(baud_test baud_test.c)
+ add_executable(serial_test serial_test.c)
+ endif(NOT MSVC)
# Linkage
target_link_libraries(simple ftdi)
- target_link_libraries(bitbang ftdi)
- target_link_libraries(bitbang2 ftdi)
- target_link_libraries(bitbang_cbus ftdi)
- target_link_libraries(bitbang_ft2232 ftdi)
target_link_libraries(find_all ftdi)
- target_link_libraries(serial_test ftdi)
- target_link_libraries(baud_test ftdi)
+ if(NOT MSVC)
+ target_link_libraries(bitbang ftdi)
+ target_link_libraries(bitbang2 ftdi)
+ target_link_libraries(bitbang_cbus ftdi)
+ target_link_libraries(bitbang_ft2232 ftdi)
+ target_link_libraries(baud_test ftdi)
+ target_link_libraries(serial_test ftdi)
+ endif(NOT MSVC)
# libftdi++ examples
if(FTDI_BUILD_CPP)
diff --unidirectional-new-file --strip-trailing-cr -u -r libftdi-0.20_orig/FindUSB.cmake libftdi-0.20/FindUSB.cmake
--- libftdi-0.20_orig/FindUSB.cmake 2012-03-15 10:58:44.000000000 +0100
+++ libftdi-0.20/FindUSB.cmake 2012-10-12 00:28:27.632513000 +0200
@@ -1,4 +1,4 @@
-# - Try to find the freetype library
+# - Try to find the libusb library
# Once done this defines
#
# LIBUSB_FOUND - system has libusb
@@ -24,11 +24,13 @@
pkg_check_modules(PC_LIBUSB libusb)
ENDIF(NOT WIN32)
- FIND_PATH(LIBUSB_INCLUDE_DIR usb.h
- PATHS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
-
- FIND_LIBRARY(LIBUSB_LIBRARIES NAMES usb
- PATHS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
+ if(MSVC)
+ FIND_PATH(LIBUSB_INCLUDE_DIR lusb0_usb.h PATHS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
+ FIND_LIBRARY(LIBUSB_LIBRARIES libusb.lib PATHS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
+ else(MSVC)
+ FIND_PATH(LIBUSB_INCLUDE_DIR usb.h PATHS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
+ FIND_LIBRARY(LIBUSB_LIBRARIES NAMES usb PATHS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
+ endif(MSVC)
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
diff --unidirectional-new-file --strip-trailing-cr -u -r libftdi-0.20_orig/ftdipp/CMakeLists.txt libftdi-0.20/ftdipp/CMakeLists.txt
--- libftdi-0.20_orig/ftdipp/CMakeLists.txt 2012-03-15 10:58:44.000000000 +0100
+++ libftdi-0.20/ftdipp/CMakeLists.txt 2012-10-12 01:11:34.433812000 +0200
@@ -29,7 +29,12 @@
# Static library
add_library(ftdipp-static STATIC ${cpp_sources})
- set_target_properties(ftdipp-static PROPERTIES OUTPUT_NAME "ftdipp")
+ if(MSVC)
+ set_target_properties(ftdipp-static PROPERTIES OUTPUT_NAME "ftdipp-static")
+ else(MSVC)
+ set_target_properties(ftdipp-static PROPERTIES OUTPUT_NAME "ftdipp")
+ endif(MSVC)
+
# Prevent clobbering each other during the build
set_target_properties(ftdipp PROPERTIES CLEAN_DIRECT_OUTPUT 1)
diff --unidirectional-new-file --strip-trailing-cr -u -r libftdi-0.20_orig/ftdipp/ftdi.hpp libftdi-0.20/ftdipp/ftdi.hpp
--- libftdi-0.20_orig/ftdipp/ftdi.hpp 2012-03-15 10:58:44.000000000 +0100
+++ libftdi-0.20/ftdipp/ftdi.hpp 2012-10-12 00:53:51.868124000 +0200
@@ -29,6 +29,16 @@
#ifndef __libftdi_hpp__
#define __libftdi_hpp__
+#if defined (_WIN32)
+ #if defined (ftdipp_EXPORTS)
+ #define FTDIPP_EXPORT __declspec(dllexport)
+ #else
+ #define FTDIPP_EXPORT __declspec(dllimport)
+ #endif /* FTDIPP_EXPORTS */
+#else /* defined (_WIN32) */
+ #define FTDIPP_EXPORT
+#endif
+
#include <list>
#include <string>
#include <boost/shared_ptr.hpp>
@@ -44,7 +54,7 @@
/*! \brief FTDI device context.
* Represents single FTDI device context.
*/
-class Context
+class FTDIPP_EXPORT Context
{
/* Friends */
friend class Eeprom;
@@ -146,7 +156,7 @@
/*! \brief Device EEPROM.
*/
-class Eeprom
+class FTDIPP_EXPORT Eeprom
{
public:
Eeprom(Context* parent);
@@ -171,7 +181,7 @@
/*! \brief Device list.
*/
-class List
+class FTDIPP_EXPORT List
{
public:
List(struct ftdi_device_list* devlist = 0);
diff --unidirectional-new-file --strip-trailing-cr -u -r libftdi-0.20_orig/README.msvc libftdi-0.20/README.msvc
--- libftdi-0.20_orig/README.msvc 1970-01-01 01:00:00.000000000 +0100
+++ libftdi-0.20/README.msvc 2012-10-12 00:58:21.977226000 +0200
@@ -0,0 +1,15 @@
+This manual expects libusb-win32 to be located in
+C:/build/libusb-win32-bin-1.2.6.0
+
+and the libftdi source code in
+C:/build/libftdi-0.20
+
+1. Open MSVC command line
+2. cd C:\build
+3. mkdir libftdi-msvc-build
+4. cd libftdi-msvc-build
+5. cmake -DPC_LIBUSB_LIBDIR="C:/build/libusb-win32-bin-1.2.6.0/lib/msvc" -DPC_LIBUSB_INCLUDEDIR="C:/build/libusb-win32-bin-1.2.6.0/include" ../libftdi-0.20
+6. nmake
+
+After this step you should find the result libraries in the subdirectories of
+C:/build/libftdi-msvc-build
\ Kein Zeilenumbruch am Dateiende.
diff --unidirectional-new-file --strip-trailing-cr -u -r libftdi-0.20_orig/src/CMakeLists.txt libftdi-0.20/src/CMakeLists.txt
--- libftdi-0.20_orig/src/CMakeLists.txt 2012-03-15 10:58:44.000000000 +0100
+++ libftdi-0.20/src/CMakeLists.txt 2012-10-12 01:14:18.427322000 +0200
@@ -14,7 +14,11 @@
# Static library
add_library(ftdi-static STATIC ${c_sources})
-set_target_properties(ftdi-static PROPERTIES OUTPUT_NAME "ftdi")
+if(MSVC)
+ set_target_properties(ftdi-static PROPERTIES OUTPUT_NAME "ftdi-static")
+else(MSVC)
+ set_target_properties(ftdi-static PROPERTIES OUTPUT_NAME "ftdi")
+endif(MSVC)
# Prevent clobbering each other during the build
set_target_properties(ftdi PROPERTIES CLEAN_DIRECT_OUTPUT 1)
@@ -51,7 +55,7 @@
)
install( TARGETS ftdi-static
- DESTINATION bin
+ DESTINATION lib
COMPONENT staticlibs
)
diff --unidirectional-new-file --strip-trailing-cr -u -r libftdi-0.20_orig/src/ftdi.c libftdi-0.20/src/ftdi.c
--- libftdi-0.20_orig/src/ftdi.c 2012-03-15 10:58:44.000000000 +0100
+++ libftdi-0.20/src/ftdi.c 2012-10-12 00:35:42.806781000 +0200
@@ -28,7 +28,11 @@
/** \addtogroup libftdi */
/* @{ */
+#if defined(MSVC)
+#include <lusb0_usb.h>
+#else
#include <usb.h>
+#endif
#include <string.h>
#include <errno.h>
#include <stdio.h>
diff --unidirectional-new-file --strip-trailing-cr -u -r libftdi-0.20_orig/src/ftdi.h libftdi-0.20/src/ftdi.h
--- libftdi-0.20_orig/src/ftdi.h 2012-03-15 10:58:44.000000000 +0100
+++ libftdi-0.20/src/ftdi.h 2012-10-12 00:56:48.830663000 +0200
@@ -17,7 +17,21 @@
#ifndef __libftdi_h__
#define __libftdi_h__
+#if defined (_WIN32)
+ #if defined (ftdi_EXPORTS) || defined (ftdistatic_EXPORTS)
+ #define FTDI_EXPORT __declspec(dllexport)
+ #else
+ #define FTDI_EXPORT __declspec(dllimport)
+ #endif /* ftdi_EXPORTS */
+#else /* defined (_WIN32) */
+ #define FTDI_EXPORT
+#endif
+
+#if defined(MSVC)
+#include <lusb0_usb.h>
+#else
#include <usb.h>
+#endif
#define FTDI_DEFAULT_EEPROM_SIZE 128
@@ -361,95 +375,95 @@
{
#endif
- int ftdi_init(struct ftdi_context *ftdi);
- struct ftdi_context *ftdi_new(void);
- int ftdi_set_interface(struct ftdi_context *ftdi, enum ftdi_interface interface);
-
- void ftdi_deinit(struct ftdi_context *ftdi);
- void ftdi_free(struct ftdi_context *ftdi);
- void ftdi_set_usbdev (struct ftdi_context *ftdi, usb_dev_handle *usbdev);
+ FTDI_EXPORT int ftdi_init(struct ftdi_context *ftdi);
+ FTDI_EXPORT struct ftdi_context *ftdi_new(void);
+ FTDI_EXPORT int ftdi_set_interface(struct ftdi_context *ftdi, enum ftdi_interface interface);
+
+ FTDI_EXPORT void ftdi_deinit(struct ftdi_context *ftdi);
+ FTDI_EXPORT void ftdi_free(struct ftdi_context *ftdi);
+ FTDI_EXPORT void ftdi_set_usbdev (struct ftdi_context *ftdi, usb_dev_handle *usbdev);
- int ftdi_usb_find_all(struct ftdi_context *ftdi, struct ftdi_device_list **devlist,
+ FTDI_EXPORT int ftdi_usb_find_all(struct ftdi_context *ftdi, struct ftdi_device_list **devlist,
int vendor, int product);
- void ftdi_list_free(struct ftdi_device_list **devlist);
- void ftdi_list_free2(struct ftdi_device_list *devlist);
- int ftdi_usb_get_strings(struct ftdi_context *ftdi, struct usb_device *dev,
+ FTDI_EXPORT void ftdi_list_free(struct ftdi_device_list **devlist);
+ FTDI_EXPORT void ftdi_list_free2(struct ftdi_device_list *devlist);
+ FTDI_EXPORT int ftdi_usb_get_strings(struct ftdi_context *ftdi, struct usb_device *dev,
char * manufacturer, int mnf_len,
char * description, int desc_len,
char * serial, int serial_len);
- int ftdi_usb_open(struct ftdi_context *ftdi, int vendor, int product);
- int ftdi_usb_open_desc(struct ftdi_context *ftdi, int vendor, int product,
+ FTDI_EXPORT int ftdi_usb_open(struct ftdi_context *ftdi, int vendor, int product);
+ FTDI_EXPORT int ftdi_usb_open_desc(struct ftdi_context *ftdi, int vendor, int product,
const char* description, const char* serial);
- int ftdi_usb_open_desc_index(struct ftdi_context *ftdi, int vendor, int product,
+ FTDI_EXPORT int ftdi_usb_open_desc_index(struct ftdi_context *ftdi, int vendor, int product,
const char* description, const char* serial, unsigned int index);
- int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct usb_device *dev);
- int ftdi_usb_open_string(struct ftdi_context *ftdi, const char* description);
+ FTDI_EXPORT int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct usb_device *dev);
+ FTDI_EXPORT int ftdi_usb_open_string(struct ftdi_context *ftdi, const char* description);
- int ftdi_usb_close(struct ftdi_context *ftdi);
- int ftdi_usb_reset(struct ftdi_context *ftdi);
- int ftdi_usb_purge_rx_buffer(struct ftdi_context *ftdi);
- int ftdi_usb_purge_tx_buffer(struct ftdi_context *ftdi);
- int ftdi_usb_purge_buffers(struct ftdi_context *ftdi);
+ FTDI_EXPORT int ftdi_usb_close(struct ftdi_context *ftdi);
+ FTDI_EXPORT int ftdi_usb_reset(struct ftdi_context *ftdi);
+ FTDI_EXPORT int ftdi_usb_purge_rx_buffer(struct ftdi_context *ftdi);
+ FTDI_EXPORT int ftdi_usb_purge_tx_buffer(struct ftdi_context *ftdi);
+ FTDI_EXPORT int ftdi_usb_purge_buffers(struct ftdi_context *ftdi);
- int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate);
- int ftdi_set_line_property(struct ftdi_context *ftdi, enum ftdi_bits_type bits,
+ FTDI_EXPORT int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate);
+ FTDI_EXPORT int ftdi_set_line_property(struct ftdi_context *ftdi, enum ftdi_bits_type bits,
enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity);
- int ftdi_set_line_property2(struct ftdi_context *ftdi, enum ftdi_bits_type bits,
+ FTDI_EXPORT int ftdi_set_line_property2(struct ftdi_context *ftdi, enum ftdi_bits_type bits,
enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity,
enum ftdi_break_type break_type);
- int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size);
- int ftdi_read_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize);
- int ftdi_read_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize);
-
- int ftdi_write_data(struct ftdi_context *ftdi, unsigned char *buf, int size);
- int ftdi_write_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize);
- int ftdi_write_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize);
-
- int ftdi_write_data_async(struct ftdi_context *ftdi, unsigned char *buf, int size);
- void ftdi_async_complete(struct ftdi_context *ftdi, int wait_for_more);
-
- int DEPRECATED(ftdi_enable_bitbang(struct ftdi_context *ftdi, unsigned char bitmask));
- int ftdi_disable_bitbang(struct ftdi_context *ftdi);
- int ftdi_set_bitmode(struct ftdi_context *ftdi, unsigned char bitmask, unsigned char mode);
- int ftdi_read_pins(struct ftdi_context *ftdi, unsigned char *pins);
+ FTDI_EXPORT int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size);
+ FTDI_EXPORT int ftdi_read_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize);
+ FTDI_EXPORT int ftdi_read_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize);
+
+ FTDI_EXPORT int ftdi_write_data(struct ftdi_context *ftdi, unsigned char *buf, int size);
+ FTDI_EXPORT int ftdi_write_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize);
+ FTDI_EXPORT int ftdi_write_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize);
+
+ FTDI_EXPORT int ftdi_write_data_async(struct ftdi_context *ftdi, unsigned char *buf, int size);
+ FTDI_EXPORT void ftdi_async_complete(struct ftdi_context *ftdi, int wait_for_more);
+
+ FTDI_EXPORT int DEPRECATED(ftdi_enable_bitbang(struct ftdi_context *ftdi, unsigned char bitmask));
+ FTDI_EXPORT int ftdi_disable_bitbang(struct ftdi_context *ftdi);
+ FTDI_EXPORT int ftdi_set_bitmode(struct ftdi_context *ftdi, unsigned char bitmask, unsigned char mode);
+ FTDI_EXPORT int ftdi_read_pins(struct ftdi_context *ftdi, unsigned char *pins);
- int ftdi_set_latency_timer(struct ftdi_context *ftdi, unsigned char latency);
- int ftdi_get_latency_timer(struct ftdi_context *ftdi, unsigned char *latency);
+ FTDI_EXPORT int ftdi_set_latency_timer(struct ftdi_context *ftdi, unsigned char latency);
+ FTDI_EXPORT int ftdi_get_latency_timer(struct ftdi_context *ftdi, unsigned char *latency);
- int ftdi_poll_modem_status(struct ftdi_context *ftdi, unsigned short *status);
+ FTDI_EXPORT int ftdi_poll_modem_status(struct ftdi_context *ftdi, unsigned short *status);
/* flow control */
- int ftdi_setflowctrl(struct ftdi_context *ftdi, int flowctrl);
- int ftdi_setdtr_rts(struct ftdi_context *ftdi, int dtr, int rts);
- int ftdi_setdtr(struct ftdi_context *ftdi, int state);
- int ftdi_setrts(struct ftdi_context *ftdi, int state);
+ FTDI_EXPORT int ftdi_setflowctrl(struct ftdi_context *ftdi, int flowctrl);
+ FTDI_EXPORT int ftdi_setdtr_rts(struct ftdi_context *ftdi, int dtr, int rts);
+ FTDI_EXPORT int ftdi_setdtr(struct ftdi_context *ftdi, int state);
+ FTDI_EXPORT int ftdi_setrts(struct ftdi_context *ftdi, int state);
- int ftdi_set_event_char(struct ftdi_context *ftdi, unsigned char eventch, unsigned char enable);
- int ftdi_set_error_char(struct ftdi_context *ftdi, unsigned char errorch, unsigned char enable);
+ FTDI_EXPORT int ftdi_set_event_char(struct ftdi_context *ftdi, unsigned char eventch, unsigned char enable);
+ FTDI_EXPORT int ftdi_set_error_char(struct ftdi_context *ftdi, unsigned char errorch, unsigned char enable);
/* set eeprom size */
- void ftdi_eeprom_setsize(struct ftdi_context *ftdi, struct ftdi_eeprom *eeprom, int size);
+ FTDI_EXPORT void ftdi_eeprom_setsize(struct ftdi_context *ftdi, struct ftdi_eeprom *eeprom, int size);
/* init and build eeprom from ftdi_eeprom structure */
- void ftdi_eeprom_initdefaults(struct ftdi_eeprom *eeprom);
- void ftdi_eeprom_free(struct ftdi_eeprom *eeprom);
- int ftdi_eeprom_build(struct ftdi_eeprom *eeprom, unsigned char *output);
- int ftdi_eeprom_decode(struct ftdi_eeprom *eeprom, unsigned char *output, int size);
+ FTDI_EXPORT void ftdi_eeprom_initdefaults(struct ftdi_eeprom *eeprom);
+ FTDI_EXPORT void ftdi_eeprom_free(struct ftdi_eeprom *eeprom);
+ FTDI_EXPORT int ftdi_eeprom_build(struct ftdi_eeprom *eeprom, unsigned char *output);
+ FTDI_EXPORT int ftdi_eeprom_decode(struct ftdi_eeprom *eeprom, unsigned char *output, int size);
/* "eeprom" needs to be valid 128 byte eeprom (generated by the eeprom generator)
the checksum of the eeprom is valided */
- int ftdi_read_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom);
- int ftdi_read_chipid(struct ftdi_context *ftdi, unsigned int *chipid);
- int ftdi_read_eeprom_getsize(struct ftdi_context *ftdi, unsigned char *eeprom, int maxsize);
- int ftdi_write_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom);
- int ftdi_erase_eeprom(struct ftdi_context *ftdi);
+ FTDI_EXPORT int ftdi_read_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom);
+ FTDI_EXPORT int ftdi_read_chipid(struct ftdi_context *ftdi, unsigned int *chipid);
+ FTDI_EXPORT int ftdi_read_eeprom_getsize(struct ftdi_context *ftdi, unsigned char *eeprom, int maxsize);
+ FTDI_EXPORT int ftdi_write_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom);
+ FTDI_EXPORT int ftdi_erase_eeprom(struct ftdi_context *ftdi);
- int ftdi_read_eeprom_location (struct ftdi_context *ftdi, int eeprom_addr, unsigned short *eeprom_val);
- int ftdi_write_eeprom_location(struct ftdi_context *ftdi, int eeprom_addr, unsigned short eeprom_val);
+ FTDI_EXPORT int ftdi_read_eeprom_location (struct ftdi_context *ftdi, int eeprom_addr, unsigned short *eeprom_val);
+ FTDI_EXPORT int ftdi_write_eeprom_location(struct ftdi_context *ftdi, int eeprom_addr, unsigned short eeprom_val);
- char *ftdi_get_error_string(struct ftdi_context *ftdi);
+ FTDI_EXPORT char *ftdi_get_error_string(struct ftdi_context *ftdi);
#ifdef __cplusplus
}