diff --git a/bootstrap b/bootstrap index 56423768535a768ea3b7ab2f01ae00df384eb07d..9234fbf9b11c14ad089b894d441ecc8c45e664ad 100755 --- a/bootstrap +++ b/bootstrap @@ -3,5 +3,6 @@ set -x mkdir -p autoconf aclocal -I autoconf +autoheader automake --add-missing autoconf diff --git a/configure.ac b/configure.ac index 6126815a65c34fba82afc42f83687f58a7d0aaa5..d4dd3d66fb82f5e0e7150ac17ceeff13671915bc 100644 --- a/configure.ac +++ b/configure.ac @@ -2,10 +2,13 @@ # $Id$ #------------------------------------------------------------------------------ +AC_PREREQ(2.59) AC_INIT([ethercat],[1.1],[fp@igh-essen.com]) AC_CONFIG_AUX_DIR([autoconf]) -AC_PREFIX_DEFAULT([/opt/etherlab]) AM_INIT_AUTOMAKE([-Wall -Werror foreign dist-bzip2]) +AC_PREFIX_DEFAULT([/opt/etherlab]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_SRCDIR([config.h.in]) #------------------------------------------------------------------------------ # Linux sources @@ -48,12 +51,33 @@ if test -z "$DEPMOD"; then AC_MSG_WARN([depmod was not found!]); fi +#------------------------------------------------------------------------------ +# Debug interface +#------------------------------------------------------------------------------ + +AC_ARG_ENABLE([debug-if], + AS_HELP_STRING([--enable-dbg-if], + [Create a debug interface for each master @<:@NO@:>@]), + [case "${enableval}" in + yes) dbg=1 + AC_DEFINE([EC_DBG_IF], [1], [Debug interfaces enabled]) + ;; + no) dbg=0 + ;; + *) AC_MSG_ERROR([Invalid value for --enable-dbg-if]) + ;; + esac], + [dbg=0] +) +AM_CONDITIONAL(EC_DBG_IF, test "x$dbg" = x1) +AC_SUBST([EC_DBG_IF],${dbg}) + #------------------------------------------------------------------------------ AC_CONFIG_FILES([ - Makefile - master/Makefile - devices/Makefile + Makefile + master/Makefile + devices/Makefile script/Makefile include/Makefile examples/mini/Makefile diff --git a/master/Kbuild b/master/Kbuild index c489bcfac529128921184379d7989de4d1d1b304..3e4b3b3e4824a2d8a34282bcb7604ea1e21eba83 100644 --- a/master/Kbuild +++ b/master/Kbuild @@ -38,7 +38,11 @@ obj-m := ec_master.o ec_master-objs := module.o master.o device.o slave.o datagram.o \ - domain.o mailbox.o ethernet.o debug.o fsm.o xmldev.o + domain.o mailbox.o ethernet.o fsm.o xmldev.o + +ifeq ($(EC_DBG_IF),1) + ec_master-objs += debug.o +endif REV := $(shell if test -s $(src)/../svnrevision; then \ cat $(src)/../svnrevision; \ diff --git a/master/Makefile.am b/master/Makefile.am index bad227aeea103099d36140cc3255a0042bb37f0a..f1c8f06a9e40f055fddc191d8562d5d468beae76 100644 --- a/master/Makefile.am +++ b/master/Makefile.am @@ -52,7 +52,8 @@ EXTRA_DIST = \ xmldev.c xmldev.h all: - $(MAKE) -C "$(LINUX_SOURCE_DIR)" M="@abs_srcdir@" modules + $(MAKE) -C "$(LINUX_SOURCE_DIR)" \ + M="@abs_srcdir@" EC_DBG_IF="$(EC_DBG_IF)" modules clean-local: $(MAKE) -C "$(LINUX_SOURCE_DIR)" M="@abs_srcdir@" clean diff --git a/master/device.c b/master/device.c index c38cfc126001606c66f207dc0a8c793c034faeb0..5f681b5fb3cacf5b36a0943688e1d57338666659 100644 --- a/master/device.c +++ b/master/device.c @@ -71,14 +71,20 @@ int ec_device_init(ec_device_t *device, /**< EtherCAT device */ device->open = 0; device->link_state = 0; // down +#ifdef EC_DBG_IF if (ec_debug_init(&device->dbg)) { EC_ERR("Failed to init debug device!\n"); goto out_return; } +#endif if (!(device->tx_skb = dev_alloc_skb(ETH_FRAME_LEN))) { EC_ERR("Error allocating device socket buffer!\n"); +#ifdef EC_DBG_IF goto out_debug; +#else + goto out_return; +#endif } device->tx_skb->dev = net_dev; @@ -92,8 +98,10 @@ int ec_device_init(ec_device_t *device, /**< EtherCAT device */ return 0; +#ifdef EC_DBG_IF out_debug: ec_debug_clear(&device->dbg); +#endif out_return: return -1; } @@ -108,7 +116,9 @@ void ec_device_clear(ec_device_t *device /**< EtherCAT device */) { if (device->open) ec_device_close(device); if (device->tx_skb) dev_kfree_skb(device->tx_skb); +#ifdef EC_DBG_IF ec_debug_clear(&device->dbg); +#endif } /*****************************************************************************/ @@ -201,7 +211,9 @@ void ec_device_send(ec_device_t *device, /**< EtherCAT device */ ec_print_data(device->tx_skb->data + ETH_HLEN, size); } +#ifdef EC_DBG_IF ec_debug_send(&device->dbg, device->tx_skb->data, ETH_HLEN + size); +#endif // start sending device->dev->hard_start_xmit(device->tx_skb, device->dev); @@ -243,7 +255,9 @@ void ecdev_receive(ec_device_t *device, /**< EtherCAT device */ data + ETH_HLEN, size - ETH_HLEN); } +#ifdef EC_DBG_IF ec_debug_send(&device->dbg, data, size); +#endif ec_master_receive_datagrams(device->master, data + ETH_HLEN, diff --git a/master/device.h b/master/device.h index 3ab41d85da952fc1ebe4956815bb0e268826a6b8..90291bd15c13b631f6d226b9d58fbdb5c16ce971 100644 --- a/master/device.h +++ b/master/device.h @@ -46,7 +46,10 @@ #include "../include/ecrt.h" #include "../devices/ecdev.h" #include "globals.h" + +#ifdef EC_DBG_IF #include "debug.h" +#endif /*****************************************************************************/ @@ -65,7 +68,9 @@ struct ec_device ec_isr_t isr; /**< pointer to the device's interrupt service routine */ struct module *module; /**< pointer to the device's owning module */ uint8_t link_state; /**< device link state */ +#ifdef EC_DBG_IF ec_debug_t dbg; /**< debug device */ +#endif }; /*****************************************************************************/ diff --git a/master/globals.h b/master/globals.h index 488577a490a51302073bf737262fb6723708051e..7d67899118f946ff93d1035f800808a6f406e57e 100644 --- a/master/globals.h +++ b/master/globals.h @@ -43,6 +43,8 @@ #include <linux/types.h> +#include "../config.h" + /****************************************************************************** * EtherCAT master *****************************************************************************/