From f0d12ab5326e0dded33d30a07a5877098709b8c3 Mon Sep 17 00:00:00 2001 From: marcfir Date: Wed, 28 Feb 2024 16:27:00 +0100 Subject: [PATCH 01/12] Fix and improve the CMake building --- .gitignore | 2 + CMakeLists.txt | 88 ++++++++++++++------ README | 0 README.md | 10 +++ cmake_config.h.in => cmake/cmake_config.h.in | 83 +++++++++--------- 5 files changed, 118 insertions(+), 65 deletions(-) delete mode 100644 README rename cmake_config.h.in => cmake/cmake_config.h.in (64%) diff --git a/.gitignore b/.gitignore index 889107f..02b0940 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,5 @@ cmake-build-* *.ko Module.symvers modules.order + +build \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 81221ca..cadf1cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,34 +1,67 @@ cmake_minimum_required(VERSION 3.5) -project(libethercat) +project(libethercat VERSION 0.4.0) set(ECAT_DEVICE "sock_raw" CACHE STRING "EtherCAT device layer") -INCLUDE(CheckIncludeFiles) +include(CheckIncludeFiles) +include(CheckSymbolExists) +include(CheckLibraryExists) +include(ExternalProject) set(CMAKE_CXX_STANDARD 11) set(CMAKE_C_STANDARD 11) -CHECK_INCLUDE_FILES("netinet/in.h" HAVE_NETINET_IN_H) -CHECK_INCLUDE_FILES("arpa/inet.h" HAVE_ARPA_INET_H) -CHECK_INCLUDE_FILES("net/if.h" HAVE_NET_IF_H) -CHECK_INCLUDE_FILES("net/bpf.h" HAVE_NET_BPF_H) -CHECK_INCLUDE_FILES("fcntl.h" HAVE_FCNTL_H) -CHECK_INCLUDE_FILES("limits.h" HAVE_LIMITS_H) -CHECK_INCLUDE_FILES("stdint.h" HAVE_STDINT_H) -CHECK_INCLUDE_FILES("stdlib.h" HAVE_STDLIB_H) -CHECK_INCLUDE_FILES("string.h" HAVE_STRING_H) -CHECK_INCLUDE_FILES("sys/ioctl.h" HAVE_SYS_IOCTL_H) -CHECK_INCLUDE_FILES("sys/socket.h" HAVE_SYS_SOCKET_H) -CHECK_INCLUDE_FILES("sys/time.h" HAVE_SYS_TIME_H) -CHECK_INCLUDE_FILES("unistd.h" HAVE_UNISTD_H) - -find_package (libosal) +set(LIBETHERCAT_STDC_HEADERS 1) +set(LIBETHERCAT_PACKAGE_VERSION "${CMAKE_PROJECT_VERSION}") +set(LIBETHERCAT_VERSION "${CMAKE_PROJECT_VERSION}") +set(LIBETHERCAT_PACKAGE_URL "${CMAKE_PROJECT_HOMEPAGE_URL}") +set(LIBETHERCAT_PACKAGE "${CMAKE_PROJECT_NAME}") +set(LIBETHERCAT_PACKAGE_NAME "${CMAKE_PROJECT_NAME}") +set(LIBETHERCAT_PACKAGE_TARNAME "${CMAKE_PROJECT_NAME}") +set(LIBETHERCAT_PACKAGE_STRING "${CMAKE_PROJECT_NAME} ${CMAKE_PROJECT_VERSION}") + +check_include_files("arpa/inet.h" LIBETHERCAT_HAVE_ARPA_INET_H) +check_symbol_exists("clock_gettime" "time.h" LIBETHERCAT_HAVE_CLOCK_GETTIME) +check_include_files("dlfcn.h" LIBETHERCAT_HAVE_DLFCN_H) +check_include_files("fcntl.h" LIBETHERCAT_HAVE_FCNTL_H) +check_include_files("inttypes.h" LIBETHERCAT_HAVE_INTTYPES_H) +find_library(HAS_RT_RAW rt) +if(HAS_RT_RAW) + SET(LIBETHERCAT_HAVE_LIBRT 1) +endif() +check_include_files("limits.h" LIBETHERCAT_HAVE_LIMITS_H) +check_symbol_exists("malloc" "stdlib.h" LIBETHERCAT_HAVE_MALLOC) +check_include_files("memory.h" LIBETHERCAT_HAVE_MEMORY_H) +check_symbol_exists("memset" "string.h" LIBETHERCAT_HAVE_MALLOC) +check_include_files("net/bpf.h" LIBETHERCAT_HAVE_NET_BPF_H) +check_include_files("net/if.h" LIBETHERCAT_HAVE_NET_IF_H) +check_include_files("pthread.h" LIBETHERCAT_HAVE_PTHREAD) +list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) +check_symbol_exists("pthread_setaffinity_np" "pthread.h" LIBETHERCAT_HAVE_PTHREAD_SETAFFINITY_NP) +check_symbol_exists("realloc" "stdlib.h" LIBETHERCAT_HAVE_REALLOC) +check_symbol_exists("socket" "sys/socket.h" LIBETHERCAT_HAVE_SOCKET) +check_include_files("stdint.h" LIBETHERCAT_HAVE_STDINT_H) +check_include_files("stdlib.h" LIBETHERCAT_HAVE_STDLIB_H) +check_symbol_exists("strdup" "string.h" LIBETHERCAT_HAVE_STRDUP) +check_symbol_exists("strerror" "string.h" LIBETHERCAT_HAVE_STRERROR) +check_include_files("strings.h" LIBETHERCAT_HAVE_STRINGS_H) +check_include_files("string.h" LIBETHERCAT_HAVE_STRING_H) +check_symbol_exists("strndup" "string.h" LIBETHERCAT_HAVE_STRNDUP) +check_include_files("sys/ioctl.h" LIBETHERCAT_HAVE_SYS_IOCTL_H) +check_include_files("sys/socket.h" LIBETHERCAT_HAVE_SYS_SOCKET_H) +check_include_files("sys/stat.h" LIBETHERCAT_HAVE_SYS_STAT_H) +check_include_files("sys/time.h" LIBETHERCAT_HAVE_SYS_TIME_H) +check_include_files("sys/types.h" LIBETHERCAT_HAVE_SYS_TYPES_H) +check_include_files("unistd.h" LIBETHERCAT_HAVE_UNISTD_H) + +find_package(libosal REQUIRED) +find_package (Threads REQUIRED) include_directories(${libosal_INCLUDE_DIRS} include) +link_directories(${libosal_LIB_DIR}) -configure_file(cmake_config.h.in config.h) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/include/libethercat/config.h) -set(DEFAULT_DEFS HAVE_STDLIB_H HAVE_NET_IF_H HAVE_ARPA_INET_H) set(SRC_ETHERCAT src/async_loop.c @@ -50,29 +83,32 @@ set(SRC_ETHERCAT if (${ECAT_DEVICE} STREQUAL "sock_raw") set(SRC_HW_LAYER src/hw_sock_raw.c) + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_SOCK_RAW_LEGACY) +elseif (${ECAT_DEVICE} STREQUAL "sock_raw_mmaped") + set(SRC_HW_LAYER src/hw_file.c) + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_SOCK_RAW_MMAPED) elseif (${ECAT_DEVICE} STREQUAL "file") set(SRC_HW_LAYER src/hw_file.c) + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_FILE) elseif (${ECAT_DEVICE} STREQUAL "pikeos") set(SRC_HW_LAYER src/hw_pikeos.c) + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_PIKEOS) elseif (${ECAT_DEVICE} STREQUAL "bpf") set(SRC_HW_LAYER src/hw_bpf.c) + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_BPD) endif() # LIBS add_library(ethercat ${SRC_ETHERCAT} ${SRC_HW_LAYER}) -target_compile_definitions(ethercat PRIVATE $DEFAULT_DEFS) target_link_libraries (ethercat ${CMAKE_THREAD_LIBS_INIT} ${libosal_LIBS}) # TOOLS add_executable(eepromtool tools/eepromtool/eepromtool.c) -target_compile_definitions(eepromtool PRIVATE $DEFAULT_DEFS) -target_link_libraries (eepromtool ethercat) +target_link_libraries (eepromtool ethercat ${libosal_LIBS}) add_executable(ethercatdiag tools/ethercatdiag/ethercatdiag.c) -target_compile_definitions(ethercatdiag PRIVATE $DEFAULT_DEFS) -target_link_libraries (ethercatdiag ethercat) +target_link_libraries (ethercatdiag ethercat ${libosal_LIBS}) add_executable(example_with_dc tools/example_with_dc/example_with_dc.c) -target_compile_definitions(example_with_dc PRIVATE $DEFAULT_DEFS) -target_link_libraries (example_with_dc ethercat m) +target_link_libraries (example_with_dc ethercat ${libosal_LIBS} m) diff --git a/README b/README deleted file mode 100644 index e69de29..0000000 diff --git a/README.md b/README.md index 208072c..f58b263 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,16 @@ sudo make install This will build and install a static as well as a dynamic library. For use in other project you can use the generated pkg-config file to retreave cflags and linker flags. +### CMake + +```bash +mkdir build +cd build +# Please change the path to the install dir. If you chose a global install you can omit the CMAKE_PREFIX_PATH option +cmake .. -DCMAKE_PREFIX_PATH= +cmake --build . +``` + ## Tools libethercat also provides some small helper programs for the EtherCAT bus. diff --git a/cmake_config.h.in b/cmake/cmake_config.h.in similarity index 64% rename from cmake_config.h.in rename to cmake/cmake_config.h.in index 342b53b..b0185ae 100644 --- a/cmake_config.h.in +++ b/cmake/cmake_config.h.in @@ -1,122 +1,125 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - +#ifndef _INCLUDE_LIBETHERCAT_CONFIG_H +#define _INCLUDE_LIBETHERCAT_CONFIG_H 1 /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_ARPA_INET_H ${HAVE_ARPA_INET_H} +#cmakedefine LIBETHERCAT_HAVE_ARPA_INET_H ${LIBETHERCAT_HAVE_ARPA_INET_H} /* Define to 1 if you have the `clock_gettime' function. */ -#cmakedefine HAVE_CLOCK_GETTIME ${HAVE_CLOCK_GETTIME} +#cmakedefine LIBETHERCAT_HAVE_CLOCK_GETTIME ${LIBETHERCAT_HAVE_CLOCK_GETTIME} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_DLFCN_H ${HAVE_DLFCN_H} +#cmakedefine LIBETHERCAT_HAVE_DLFCN_H ${LIBETHERCAT_HAVE_DLFCN_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_FCNTL_H ${HAVE_FCNTL_H} +#cmakedefine LIBETHERCAT_HAVE_FCNTL_H ${LIBETHERCAT_HAVE_FCNTL_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_INTTYPES_H ${HAVE_INTTYPES_H} +#cmakedefine LIBETHERCAT_HAVE_INTTYPES_H ${LIBETHERCAT_HAVE_INTTYPES_H} /* Define to 1 if you have the `rt' library (-lrt). */ -#cmakedefine HAVE_LIBRT ${HAVE_LIBRT} +#cmakedefine LIBETHERCAT_HAVE_LIBRT ${LIBETHERCAT_HAVE_LIBRT} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_LIMITS_H ${HAVE_LIMITS_H} +#cmakedefine LIBETHERCAT_HAVE_LIMITS_H ${LIBETHERCAT_HAVE_LIMITS_H} /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ -#cmakedefine HAVE_MALLOC ${HAVE_MALLOC} +#cmakedefine LIBETHERCAT_HAVE_MALLOC ${LIBETHERCAT_HAVE_MALLOC} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_MEMORY_H ${HAVE_MEMORY_H} +#cmakedefine LIBETHERCAT_HAVE_MEMORY_H ${LIBETHERCAT_HAVE_MEMORY_H} /* Define to 1 if you have the `memset' function. */ -#cmakedefine HAVE_MEMSET ${HAVE_MEMSET} +#cmakedefine LIBETHERCAT_HAVE_MEMSET ${LIBETHERCAT_HAVE_MEMSET} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_NET_BPF_H ${HAVE_NET_BPF_H} +#cmakedefine LIBETHERCAT_HAVE_NET_BPF_H ${LIBETHERCAT_HAVE_NET_BPF_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_NET_IF_H ${HAVE_NET_IF_H} +#cmakedefine LIBETHERCAT_HAVE_NET_IF_H ${LIBETHERCAT_HAVE_NET_IF_H} /* Define if you have POSIX threads libraries and header files. */ -#cmakedefine HAVE_PTHREAD ${HAVE_PTHREAD} +#cmakedefine LIBETHERCAT_HAVE_PTHREAD ${LIBETHERCAT_HAVE_PTHREAD} /* Define to 1 if you have the `pthread_setaffinity_np' function. */ -#cmakedefine HAVE_PTHREAD_SETAFFINITY_NP ${HAVE_PTHREAD_SETAFFINITY_NP} +#cmakedefine LIBETHERCAT_HAVE_PTHREAD_SETAFFINITY_NP ${LIBETHERCAT_HAVE_PTHREAD_SETAFFINITY_NP} /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ -#cmakedefine HAVE_REALLOC ${HAVE_REALLOC} +#cmakedefine LIBETHERCAT_HAVE_REALLOC ${LIBETHERCAT_HAVE_REALLOC} /* Define to 1 if you have the `socket' function. */ -#cmakedefine HAVE_SOCKET ${HAVE_SOCKET} +#cmakedefine LIBETHERCAT_HAVE_SOCKET ${LIBETHERCAT_HAVE_SOCKET} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STDINT_H ${HAVE_STDINT_H} +#cmakedefine LIBETHERCAT_HAVE_STDINT_H ${LIBETHERCAT_HAVE_STDINT_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STDLIB_H ${HAVE_STDLIB_H} +#cmakedefine LIBETHERCAT_HAVE_STDLIB_H ${LIBETHERCAT_HAVE_STDLIB_H} /* Define to 1 if you have the `strdup' function. */ -#cmakedefine HAVE_STRDUP ${HAVE_STRDUP} +#cmakedefine LIBETHERCAT_HAVE_STRDUP ${LIBETHERCAT_HAVE_STRDUP} /* Define to 1 if you have the `strerror' function. */ -#cmakedefine HAVE_STRERROR ${HAVE_STRERROR} +#cmakedefine LIBETHERCAT_HAVE_STRERROR ${LIBETHERCAT_HAVE_STRERROR} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STRINGS_H ${HAVE_STRINGS_H} +#cmakedefine LIBETHERCAT_HAVE_STRINGS_H ${LIBETHERCAT_HAVE_STRINGS_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STRING_H ${HAVE_STRING_H} +#cmakedefine LIBETHERCAT_HAVE_STRING_H ${LIBETHERCAT_HAVE_STRING_H} /* Define to 1 if you have the `strndup' function. */ -#cmakedefine HAVE_STRNDUP ${HAVE_STRNDUP} +#cmakedefine LIBETHERCAT_HAVE_STRNDUP ${LIBETHERCAT_HAVE_STRNDUP} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_SYS_IOCTL_H ${HAVE_SYS_IOCTL_H} +#cmakedefine LIBETHERCAT_HAVE_SYS_IOCTL_H ${LIBETHERCAT_HAVE_SYS_IOCTL_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_SYS_SOCKET_H ${HAVE_SYS_SOCKET_H} +#cmakedefine LIBETHERCAT_HAVE_SYS_SOCKET_H ${LIBETHERCAT_HAVE_SYS_SOCKET_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_SYS_STAT_H ${HAVE_SYS_STAT_H} +#cmakedefine LIBETHERCAT_HAVE_SYS_STAT_H ${LIBETHERCAT_HAVE_SYS_STAT_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_SYS_TIME_H ${HAVE_SYS_TIME_H} +#cmakedefine LIBETHERCAT_HAVE_SYS_TIME_H ${LIBETHERCAT_HAVE_SYS_TIME_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H} +#cmakedefine LIBETHERCAT_HAVE_SYS_TYPES_H ${LIBETHERCAT_HAVE_SYS_TYPES_H} /* Define to 1 if you have the header file. */ -#cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H} +#cmakedefine LIBETHERCAT_HAVE_UNISTD_H ${LIBETHERCAT_HAVE_UNISTD_H} /* Define to the sub-directory in which libtool stores uninstalled libraries. - */ + */ #undef LT_OBJDIR /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* Name of package */ -#undef PACKAGE +#cmakedefine LIBETHERCAT_PACKAGE "@LIBETHERCAT_PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT +#cmakedefine LIBETHERCAT_PACKAGE_BUGREPORT "@LIBETHERCAT_PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ -#undef PACKAGE_NAME +#cmakedefine LIBETHERCAT_PACKAGE_NAME "@LIBETHERCAT_PACKAGE_NAME@" /* Define to the full name and version of this package. */ -#undef PACKAGE_STRING +#cmakedefine LIBETHERCAT_PACKAGE_STRING "@LIBETHERCAT_PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME +#cmakedefine LIBETHERCAT_PACKAGE_TARNAME "@LIBETHERCAT_PACKAGE_TARNAME@" /* Define to the home page for this package. */ -#undef PACKAGE_URL +#cmakedefine LIBETHERCAT_PACKAGE_URL "@LIBETHERCAT_PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine LIBETHERCAT_PACKAGE_VERSION "@LIBETHERCAT_PACKAGE_VERSION@" /* Define to the version of this package. */ -#undef PACKAGE_VERSION +#cmakedefine LIBETHERCAT_VERSION "@LIBETHERCAT_VERSION@" /* Define to necessary symbol if this constant uses a non-standard name on your system. */ @@ -185,3 +188,5 @@ /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t + +#endif \ No newline at end of file From 47ce5d775824337356932afbfb483ebcc0198341 Mon Sep 17 00:00:00 2001 From: Robert Burger Date: Thu, 29 Feb 2024 06:32:34 +0100 Subject: [PATCH 02/12] Create doxygen-gh-pages.yml --- .github/workflows/doxygen-gh-pages.yml | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/doxygen-gh-pages.yml diff --git a/.github/workflows/doxygen-gh-pages.yml b/.github/workflows/doxygen-gh-pages.yml new file mode 100644 index 0000000..3bfa40b --- /dev/null +++ b/.github/workflows/doxygen-gh-pages.yml @@ -0,0 +1,37 @@ +name: Doxygen + +on: + repository_dispatch: + push: + branches: + - master + - gh-pages + +# In that case do the job 'make_and_deploy_doxygen' +jobs: + make_and_deploy_doxygen: + runs-on: ubuntu-latest + # which needs the following steps to be executed: + steps: + # 1. Checkout current branch of GitHub repository. + - name: Checkout current branch + uses: actions/checkout@v2 + # 2. Install doxygen and its auxiliary components. + - name: Install doxygen and latex components + run: sudo apt-get update; sudo apt-get install -y doxygen graphviz texlive-full + # 3. Create the doxygen pages. + - name: Create the doxygen + run: | + git clone https://github.com/robert-burger/libethercat.git + cd libethercat + make -f Makefile.doc doc/html BUILDCMD=doxygen + - name: Moving Files + run: | + mv ./doc/html ./api + + # Deploy to GitHub Pages + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./ From 6389e1b8a6d5eb50a86170664c9916da5b48b7f3 Mon Sep 17 00:00:00 2001 From: Robert Burger Date: Thu, 29 Feb 2024 06:40:41 +0100 Subject: [PATCH 03/12] Update doxygen-gh-pages.yml --- .github/workflows/doxygen-gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/doxygen-gh-pages.yml b/.github/workflows/doxygen-gh-pages.yml index 3bfa40b..e97950c 100644 --- a/.github/workflows/doxygen-gh-pages.yml +++ b/.github/workflows/doxygen-gh-pages.yml @@ -27,7 +27,7 @@ jobs: make -f Makefile.doc doc/html BUILDCMD=doxygen - name: Moving Files run: | - mv ./doc/html ./api + mv ./libethercat/doc/html ./api # Deploy to GitHub Pages - name: Deploy From 52377e55a7b92e3a80df5c2e7e8b6aa5c9a898fc Mon Sep 17 00:00:00 2001 From: Robert Burger Date: Thu, 29 Feb 2024 07:11:47 +0100 Subject: [PATCH 04/12] Update doxygen-gh-pages.yml --- .github/workflows/doxygen-gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/doxygen-gh-pages.yml b/.github/workflows/doxygen-gh-pages.yml index e97950c..753c619 100644 --- a/.github/workflows/doxygen-gh-pages.yml +++ b/.github/workflows/doxygen-gh-pages.yml @@ -33,5 +33,5 @@ jobs: - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: - github_token: ${{ secrets.GITHUB_TOKEN }} + deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} publish_dir: ./ From 7958ff583eedd1a69713736728d4955de659382c Mon Sep 17 00:00:00 2001 From: Robert Burger Date: Thu, 29 Feb 2024 08:19:32 +0100 Subject: [PATCH 05/12] Update doxygen-gh-pages.yml --- .github/workflows/doxygen-gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/doxygen-gh-pages.yml b/.github/workflows/doxygen-gh-pages.yml index 753c619..47de908 100644 --- a/.github/workflows/doxygen-gh-pages.yml +++ b/.github/workflows/doxygen-gh-pages.yml @@ -34,4 +34,4 @@ jobs: uses: peaceiris/actions-gh-pages@v3 with: deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} - publish_dir: ./ + publish_dir: ./api From 374759729239c90405366dd41b64bd2b0f4b3313 Mon Sep 17 00:00:00 2001 From: Robert Burger Date: Thu, 29 Feb 2024 08:29:35 +0100 Subject: [PATCH 06/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f58b263..1ed161f 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Germany (ETG, www.ethercat.org). ## Usage -See INTRODUCTION.md or gh-pages for reference. +See INTRODUCTION.md or [gh-pages](https://robert-burger.github.io/libethercat/) for reference. ## Build from source From a1fc312a98cd61f1cee36b6491512ca87a9850fd Mon Sep 17 00:00:00 2001 From: Robert Burger Date: Thu, 29 Feb 2024 08:30:39 +0100 Subject: [PATCH 07/12] Update eoe.h Typo --- include/libethercat/eoe.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/libethercat/eoe.h b/include/libethercat/eoe.h index f8d2c21..fecf097 100644 --- a/include/libethercat/eoe.h +++ b/include/libethercat/eoe.h @@ -46,7 +46,7 @@ #include "libethercat/common.h" -/** \defgroup eoe_group Ethernet over Ethercat (CoE) +/** \defgroup eoe_group Ethernet over Ethercat (EoE) * * This modules contains functions on how to communicate via Ethernet over EtherCAT mailbox. * From 0253bc4898853ef1a1e311b46b7da71b2185a8c3 Mon Sep 17 00:00:00 2001 From: Robert Burger Date: Thu, 29 Feb 2024 09:39:08 +0100 Subject: [PATCH 08/12] change: reading VERSION from project.properties in CMakeLists.txt --- CMakeLists.txt | 5 ++++- project.properties | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cadf1cd..69738df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,8 @@ cmake_minimum_required(VERSION 3.5) -project(libethercat VERSION 0.4.0) +file(READ "project.properties" PROJECT_PROPERTIES) +string(REGEX MATCH "VERSION = ([0-9]*.[0-9]*.[0-9]*)" _ ${PROJECT_PROPERTIES}) +set(PROJECT_VERSION ${CMAKE_MATCH_1}) +project(libethercat VERSION ${PROJECT_VERSION}) set(ECAT_DEVICE "sock_raw" CACHE STRING "EtherCAT device layer") diff --git a/project.properties b/project.properties index 41961aa..2cbc6c4 100644 --- a/project.properties +++ b/project.properties @@ -1,2 +1,2 @@ -VERSION = 0.4.0 +VERSION = 0.5.1 MAINTAINER = Robert Burger From d9a4e2e6a86a4d1b5e10b72179e85452af9cdd84 Mon Sep 17 00:00:00 2001 From: Robert Burger Date: Fri, 1 Mar 2024 06:50:19 +0100 Subject: [PATCH 09/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ed161f..5cb68e7 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ This library provides all functionality to communicate with EtherCAT slaves atta # Network device access -- **raw socket** » The most common way sending ethernet frames in Linux is opening a raw network socket (`SOCK_RAW`). Therefor the program must either be run as root or with the capability flag `CAP_NET_RAW`. +- **raw socket** » The most common way sending ethernet frames in Linux is opening a raw network socket (`SOCK_RAW`). Therefor the program must either be run as root or with the capability flag `CAP_NET_RAW`. Either do sth like: `sudo setcap cap_net_raw=ep .libs/example_with_dc` or checkout grant_cap_net_raw kernel module from Flo Schmidt (https://gitlab.com/fastflo/open_ethercat). - **raw_socket_mmaped** » Like above but don't use read/write to provide frame buffers to kernel and use mmaped buffers directly from kernel. - **file** » Most performant/determinstic interface to send/receive frames with network hardware. Requires hacked linux network driver. Can also be used without interrupts to avoid context switches. For how to compile and use such a driver head over to [drivers readme](linux/README.md). - **pikeos** » Special pikeos hardware access. From 860009a5ed81de8f3042b778c3cb0e129fcdb68a Mon Sep 17 00:00:00 2001 From: marcfir Date: Fri, 1 Mar 2024 16:02:30 +0100 Subject: [PATCH 10/12] Add install command to cmake file --- CMakeLists.txt | 32 ++++++++++++++++++++++++++++++ cmake/libethercatConfig.cmake.in | 34 ++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 cmake/libethercatConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 69738df..2fc83ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ include(CheckIncludeFiles) include(CheckSymbolExists) include(CheckLibraryExists) include(ExternalProject) +include(CMakePackageConfigHelpers) set(CMAKE_CXX_STANDARD 11) set(CMAKE_C_STANDARD 11) @@ -115,3 +116,34 @@ target_link_libraries (ethercatdiag ethercat ${libosal_LIBS}) add_executable(example_with_dc tools/example_with_dc/example_with_dc.c) target_link_libraries (example_with_dc ethercat ${libosal_LIBS} m) +# Install +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/libethercatConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion +) + +set(INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) +set(ETHERCAT_LIB_NAME ethercat) + +configure_package_config_file( + ${PROJECT_SOURCE_DIR}/cmake/libethercatConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/libethercatConfig.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/cmake/libethercat + PATH_VARS ETHERCAT_LIB_NAME INSTALL_DIR +) + +install(TARGETS ethercat EXPORT libethercatTargets) +install( + EXPORT libethercatTargets + FILE libethercatTargets.cmake + DESTINATION lib/cmake/libethercat +) +install(DIRECTORY include/libethercat/ DESTINATION include/libethercat + FILES_MATCHING PATTERN "*.h" +) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libethercatConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libethercatConfigVersion.cmake" + DESTINATION lib/cmake/libethercat +) \ No newline at end of file diff --git a/cmake/libethercatConfig.cmake.in b/cmake/libethercatConfig.cmake.in new file mode 100644 index 0000000..21a2fe2 --- /dev/null +++ b/cmake/libethercatConfig.cmake.in @@ -0,0 +1,34 @@ +# =================================================================================== +# @PROJECT_NAME@ CMake configuration file +# +# ** File generated automatically, do not modify ** +# +# Usage from an external project: +# In your CMakeLists.txt, add these lines: +# +# FIND_PACKAGE(@PROJECT_NAME@ REQUIRED ) +# TARGET_LINK_LIBRARIES(MY_TARGET_NAME ${@PROJECT_NAME@_LIBS}) +# +# This file will define the following variables: +# - @PROJECT_NAME@_LIBS : The list of libraries to links against. +# - @PROJECT_NAME@_LIB_DIR : The directory where lib files are. Calling LINK_DIRECTORIES +# with this path is NOT needed. +# - @PROJECT_NAME@_VERSION : The version of this PROJECT_NAME build. Example: "1.2.0" +# - @PROJECT_NAME@_VERSION_MAJOR : Major version part of VERSION. Example: "1" +# - @PROJECT_NAME@_VERSION_MINOR : Minor version part of VERSION. Example: "2" +# - @PROJECT_NAME@_VERSION_PATCH : Patch version part of VERSION. Example: "0" +# +# =================================================================================== +@PACKAGE_INIT@ +INCLUDE_DIRECTORIES("@PACKAGE_INSTALL_DIR@/include") +SET(@PROJECT_NAME@_INCLUDE_DIRS "@PACKAGE_INSTALL_DIR@/include") + +LINK_DIRECTORIES("@PACKAGE_INSTALL_DIR@/lib") +SET(@PROJECT_NAME@_LIB_DIR "@PACKAGE_INSTALL_DIR@/lib") + +SET(@PROJECT_NAME@_LIBS @REQUIRED_LIBRARIES@ @ETHERCAT_LIB_NAME@@PROJECT_DLLVERSION@) +SET(@PROJECT_NAME@_FOUND YES) +SET(@PROJECT_NAME@_VERSION @PROJECT_VERSION@) +SET(@PROJECT_NAME@_VERSION_MAJOR @PROJECT_VERSION_MAJOR@) +SET(@PROJECT_NAME@_VERSION_MINOR @PROJECT_VERSION_MINOR@) +SET(@PROJECT_NAME@_VERSION_PATCH @PROJECT_VERSION_PATCH@) \ No newline at end of file From 6741ff99059a599323558b51b51b99ff8a1d2010 Mon Sep 17 00:00:00 2001 From: Robert Burger Date: Mon, 4 Mar 2024 17:01:39 +0100 Subject: [PATCH 11/12] doc: return value of ec_set_state issue, fixes #4 --- include/libethercat/ec.h | 3 ++- src/ec.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/libethercat/ec.h b/include/libethercat/ec.h index 2ce5d34..dffbeeb 100644 --- a/include/libethercat/ec.h +++ b/include/libethercat/ec.h @@ -361,7 +361,8 @@ int ec_transmit_no_reply(ec_t *pec, osal_uint8_t cmd, osal_uint32_t adr, * \param[in] pec Pointer to ethercat master structure, * which you got from \link ec_open \endlink. * \param[in] state New ethercat state. - * \return 0 on success + * + * \return Reached master state. */ int ec_set_state(ec_t *pec, ec_state_t state); diff --git a/src/ec.c b/src/ec.c index c79b4d8..358c7b6 100644 --- a/src/ec.c +++ b/src/ec.c @@ -861,7 +861,8 @@ static void ec_scan(ec_t *pec) { /*! * \param pec ethercat master pointer * \param state new ethercat state - * \return 0 on success + * + * \return Reached master state. */ int ec_set_state(ec_t *pec, ec_state_t state) { assert(pec != NULL); From 595470823424fcb4ed653a10880e49109f4cefbf Mon Sep 17 00:00:00 2001 From: marcfir Date: Tue, 12 Mar 2024 13:57:22 +0100 Subject: [PATCH 12/12] fix(build_so): Make anon_cb an explicit function in dc.c --- src/dc.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/dc.c b/src/dc.c index 344f911..0e6aa8b 100644 --- a/src/dc.c +++ b/src/dc.c @@ -58,6 +58,12 @@ #define ONE_SEC ((osal_uint64_t)1000000000u) +static void anon_cb(struct ec *cb_pec, pool_entry_t *cb_p_entry, ec_datagram_t *cb_p_dg) { + (void)cb_pec; + (void)cb_p_dg; + osal_binary_semaphore_post(&cb_p_entry->p_idx->waiter); +}; + // mesaure packet duration (important in case of master_as_ref_clock !) static inline osal_uint64_t get_packet_duration(ec_t *pec) { assert(pec != NULL); @@ -86,12 +92,7 @@ static inline osal_uint64_t get_packet_duration(ec_t *pec) { p_dg->irq = 0; p_entry->p_idx = p_idx; - p_entry->user_cb = ({ - void anon_cb(struct ec *cb_pec, pool_entry_t *cb_p_entry, ec_datagram_t *cb_p_dg) { - (void)cb_pec; - (void)cb_p_dg; - osal_binary_semaphore_post(&cb_p_entry->p_idx->waiter); - } &anon_cb; }); + p_entry->user_cb = anon_cb; // queue frame and trigger tx pool_put(&pec->hw.tx_high, p_entry);