cmake: add FTDI FT4222 support
authorHenry Bruce <henry.bruce@intel.com>
Fri, 26 Jun 2015 20:48:23 +0000 (13:48 -0700)
committerBrendan Le Foll <brendan.le.foll@intel.com>
Tue, 8 Sep 2015 13:42:03 +0000 (14:42 +0100)
Existing FTDI D2xx support is just for serial comms library
but FT4222 needs a different library for i2c operation.

Signed-off-by: Henry Bruce <henry.bruce@intel.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
CMakeLists.txt
cmake/modules/FindFtd4222.cmake [new file with mode: 0644]
examples/CMakeLists.txt
src/CMakeLists.txt
src/usb/CMakeLists.txt
src/usb/usb.c

index eb4ce97..1d2e5c0 100644 (file)
@@ -56,6 +56,7 @@ option (BUILDSWIGNODE "Build swig node modules." ON)
 option (BUILDSWIGJAVA "Build Java API." OFF)
 option (USBPLAT "Detection USB platform." ON)
 option (FTDID2XX "Build with FTDI D2xx subplatform support." OFF)
 option (BUILDSWIGJAVA "Build Java API." OFF)
 option (USBPLAT "Detection USB platform." ON)
 option (FTDID2XX "Build with FTDI D2xx subplatform support." OFF)
+option (FTDI4222 "Build with FTDI FT4222 subplatform support." OFF)
 option (IPK "Generate IPK using CPack" OFF)
 option (RPM "Generate RPM using CPack" OFF)
 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
 option (IPK "Generate IPK using CPack" OFF)
 option (RPM "Generate RPM using CPack" OFF)
 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
diff --git a/cmake/modules/FindFtd4222.cmake b/cmake/modules/FindFtd4222.cmake
new file mode 100644 (file)
index 0000000..ea49aac
--- /dev/null
@@ -0,0 +1,75 @@
+# - Try to find LIBFT4222
+# Once done this will define
+#
+#  LIBFT4222_FOUND - system has LIBFT4222
+#  LIBFT4222_INCLUDE_DIRS - the LIBFT4222 include directory
+#  LIBFT4222_LIBRARIES - Link these to use LIBFT4222
+#  LIBFT4222_DEFINITIONS - Compiler switches required for using LIBFT4222
+#
+#  Adapted from cmake-modules Google Code project
+#
+#  Copyright (c) 2006 Andreas Schneider <mail@cynapses.org>
+#
+#  (Changes for LIBFTD2XX) Copyright (c) 2008 Kyle Machulis <kyle@nonpolynomial.com>
+#  (Changes for LIBFT4222) Henry Bruce <henry.bruce@intel.com> Copyright (c) 2015 Intel Corporation. 
+#
+# Redistribution and use is allowed according to the terms of the New BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+if (LIBFT4222_LIBRARIES AND LIBFT4222_INCLUDE_DIRS)
+  # in cache already
+  set(LIBFT4222_FOUND TRUE)
+else (LIBFT4222_LIBRARIES AND LIBFT4222_INCLUDE_DIRS)
+  find_path(LIBFT4222_INCLUDE_DIR
+    NAMES
+    libft4222.h
+    PATHS
+    /usr/include
+    /usr/local/include
+    /opt/local/include
+    /sw/include
+       )
+
+  SET(FTD4222_LIBNAME ft4222)
+  IF(WIN32)
+       SET(FTD4222_LIBNAME LibFT4222.lib)
+  ENDIF(WIN32)
+
+  find_library(LIBFT4222_LIBRARY
+    NAMES
+    ${FTD4222_LIBNAME}
+    PATHS
+    /usr/lib
+    /usr/local/lib
+    /opt/local/lib
+    /sw/lib
+       )
+
+  if(LIBFT4222_INCLUDE_DIR)
+       set(LIBFT4222_INCLUDE_DIRS
+      ${LIBFT4222_INCLUDE_DIR}
+         )
+  endif(LIBFT4222_INCLUDE_DIR)
+  set(LIBFT4222_LIBRARIES
+    ${LIBFT4222_LIBRARY}
+       )
+
+  if (LIBFT4222_INCLUDE_DIRS AND LIBFT4222_LIBRARIES)
+    set(LIBFT4222_FOUND TRUE)
+  endif (LIBFT4222_INCLUDE_DIRS AND LIBFT4222_LIBRARIES)
+
+  if (LIBFT4222_FOUND)
+    if (NOT LIBFT4222_FIND_QUIETLY)
+         message(STATUS "Found LIBFT4222: ${LIBFT4222_LIBRARIES}")
+    endif (NOT LIBFT4222_FIND_QUIETLY)
+  else (LIBFT4222_FOUND)
+    if (LIBFT4222_FIND_REQUIRED)
+         message(FATAL_ERROR "Could not find LIBFT4222")
+    endif (LIBFT4222_FIND_REQUIRED)
+  endif (LIBFT4222_FOUND)
+
+  # show the LIBFT4222_INCLUDE_DIRS and LIBFT4222_LIBRARIES variables only in the advanced view
+  mark_as_advanced(LIBFT4222_INCLUDE_DIRS LIBFT4222_LIBRARIES)
+
+endif (LIBFT4222_LIBRARIES AND LIBFT4222_INCLUDE_DIRS)
+
index 03e8e06..de29ff3 100644 (file)
@@ -14,7 +14,7 @@ add_executable (mraa-i2c mraa-i2c.c)
 add_executable (spi_max7219 spi_max7219.c)
 
 include_directories(${PROJECT_SOURCE_DIR}/api)
 add_executable (spi_max7219 spi_max7219.c)
 
 include_directories(${PROJECT_SOURCE_DIR}/api)
-# FIXME Hack to access internal types used by mraa-i2c
+# FIXME Hack to access mraa internal types used by mraa-i2c
 include_directories(${PROJECT_SOURCE_DIR}/include)
 include_directories(${PROJECT_SOURCE_DIR}/api/mraa)
 
 include_directories(${PROJECT_SOURCE_DIR}/include)
 include_directories(${PROJECT_SOURCE_DIR}/api/mraa)
 
index a411332..8faa785 100644 (file)
@@ -48,7 +48,7 @@ if (ARMPLAT)
 endif()
 
 if (USBPLAT)
 endif()
 
 if (USBPLAT)
-  add_subdirectory(usb)
+  message (INFO " - Adding USB platforms")
   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSBPLAT=1")
   find_package (Ftd2xx)
   if (FTDID2xx)
   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSBPLAT=1")
   find_package (Ftd2xx)
   if (FTDID2xx)
@@ -59,9 +59,18 @@ if (USBPLAT)
       message (WARNING " - Enabled FTDID2xx support but library not found")
     endif ()
   endif ()
       message (WARNING " - Enabled FTDID2xx support but library not found")
     endif ()
   endif ()
+  find_package (Ftd4222)
+  if (FTDI4222)
+    if (${LIBFT4222_FOUND})
+      set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFTDI4222=1")
+      set (mraa_LIBS ${mraa_LIBS} ${LIBFT4222_LIBRARIES})
+    else ()
+      message (WARNING " - Enabled FTDI4222 support but library not found")
+    endif ()
+  endif ()
+  add_subdirectory(usb)
 endif ()
 
 endif ()
 
-
 set (mraa_LIB_SRCS
   ${mraa_LIB_PLAT_SRCS_NOAUTO}
 # autogenerated version file
 set (mraa_LIB_SRCS
   ${mraa_LIB_PLAT_SRCS_NOAUTO}
 # autogenerated version file
index a0c5c87..786c49b 100644 (file)
@@ -1,12 +1,14 @@
-message (INFO " - Adding USB platforms")
 set (mraa_LIB_SRCS_NOAUTO ${mraa_LIB_SRCS_NOAUTO}
   ${PROJECT_SOURCE_DIR}/src/usb/usb.c
 set (mraa_LIB_SRCS_NOAUTO ${mraa_LIB_SRCS_NOAUTO}
   ${PROJECT_SOURCE_DIR}/src/usb/usb.c
-  PARENT_SCOPE
 )
 )
-if (FTDID2XX)
-  set (mraa_LIB_SRCS_NOAUTO
+
+if (FTDI4222)
+   message (INFO " - FTDI4222")
+  set (mraa_LIB_SRCS_NOAUTO ${mraa_LIB_SRCS_NOAUTO}
     ${PROJECT_SOURCE_DIR}/src/usb/ftdi_ft4222.c
     PARENT_SCOPE
   )
 endif ()
 
     ${PROJECT_SOURCE_DIR}/src/usb/ftdi_ft4222.c
     PARENT_SCOPE
   )
 endif ()
 
+
+
index 1e2d688..46832f5 100644 (file)
@@ -26,7 +26,7 @@
 #include <string.h>
 
 #include "mraa_internal.h"
 #include <string.h>
 
 #include "mraa_internal.h"
-#ifdef FTDID2XX
+#ifdef FTDI4222
 #include "usb/ftdi_ft4222.h"
 #endif
 
 #include "usb/ftdi_ft4222.h"
 #endif
 
@@ -35,7 +35,7 @@ mraa_platform_t
 mraa_usb_platform_extender(mraa_board_t* board)
 {
     mraa_platform_t platform_type = MRAA_UNKNOWN_PLATFORM;
 mraa_usb_platform_extender(mraa_board_t* board)
 {
     mraa_platform_t platform_type = MRAA_UNKNOWN_PLATFORM;
-#ifdef FTDID2XX
+#ifdef FTDI4222
     if (mraa_ftdi_ft4222_init() == MRAA_SUCCESS) {
         unsigned int versionChip, versionLib;
         if (mraa_ftdi_ft4222_get_version(&versionChip, &versionLib) == MRAA_SUCCESS) {
     if (mraa_ftdi_ft4222_init() == MRAA_SUCCESS) {
         unsigned int versionChip, versionLib;
         if (mraa_ftdi_ft4222_get_version(&versionChip, &versionLib) == MRAA_SUCCESS) {
@@ -43,13 +43,17 @@ mraa_usb_platform_extender(mraa_board_t* board)
             platform_type = MRAA_FTDI_FT4222;        
         }
     }  
             platform_type = MRAA_FTDI_FT4222;        
         }
     }  
+#endif
     switch (platform_type) {
     switch (platform_type) {
+#ifdef FTDI4222
         case MRAA_FTDI_FT4222:
             mraa_ftdi_ft4222(board);
             break;
         case MRAA_FTDI_FT4222:
             mraa_ftdi_ft4222(board);
             break;
+#endif
         default:
             syslog(LOG_ERR, "Unknown USB Platform Extender, currently not supported by MRAA");
     }
         default:
             syslog(LOG_ERR, "Unknown USB Platform Extender, currently not supported by MRAA");
     }
-#endif
+
     return platform_type;
 }
     return platform_type;
 }
+