diff --git a/devices/Makefile b/devices/Makefile index 96002626358416dae5d2ac6449c7b4b98a86c624..1288beee0bf4836c69da9e3512dd949c640347c9 100644 --- a/devices/Makefile +++ b/devices/Makefile @@ -17,7 +17,9 @@ obj-m := ec_8139too.o ec_8139too-objs := 8139too.o -EXTRA_CFLAGS = -DEC_REV="$(shell svnversion $(src))" -DEC_USER="$(USER)" +REV := $(shell svnversion $(src) 2>/dev/null) + +EXTRA_CFLAGS = -DEC_REV=$(REV) -DEC_USER=$(USER) #------------------------------------------------------------------------------ diff --git a/master/Makefile b/master/Makefile index 682663b261a49914bb9386e4d04edc50f8a61917..d3810942156658c10259de33194e5a681717f910 100644 --- a/master/Makefile +++ b/master/Makefile @@ -18,7 +18,9 @@ obj-m := ec_master.o ec_master-objs := module.o master.o device.o slave.o command.o types.o \ domain.o mailbox.o canopen.o ethernet.o -EXTRA_CFLAGS := -DSVNREV=$(shell svnversion $(src)) -DUSER=$(USER) +REV := $(shell svnversion $(src) 2>/dev/null) + +EXTRA_CFLAGS := -DSVNREV=$(REV) -DUSER=$(USER) #------------------------------------------------------------------------------ diff --git a/master/globals.h b/master/globals.h index 89601bb58244ed0f4452b13a4fdc678f5da73601..e718a80f806ee526bccea98729a4da8acdbd9d99 100644 --- a/master/globals.h +++ b/master/globals.h @@ -13,23 +13,45 @@ #include <linux/types.h> -/*****************************************************************************/ +/****************************************************************************** + * EtherCAT master + *****************************************************************************/ + +#define EC_MASTER_VERSION_MAIN 1 +#define EC_MASTER_VERSION_SUB 0 +#define EC_MASTER_VERSION_EXTRA "trunk" + +/** maximum number of FMMUs per slave */ +#define EC_MAX_FMMUS 16 + +/****************************************************************************** + * EtherCAT protocol + *****************************************************************************/ + +/** maximum size of an EtherCAT frame (without header and CRC) */ +#define EC_MAX_FRAME_SIZE 1500 + +/** ... minimum size */ +#define EC_MIN_FRAME_SIZE 46 + +/** size of an EtherCAT frame header */ +#define EC_FRAME_HEADER_SIZE 2 + +/** size of an EtherCAT command header */ +#define EC_COMMAND_HEADER_SIZE 10 + +/** size of an EtherCAT command footer */ +#define EC_COMMAND_FOOTER_SIZE 2 + +/** size of a sync manager configuration page */ +#define EC_SYNC_SIZE 8 + +/** size of an FMMU configuration page */ +#define EC_FMMU_SIZE 16 -// EtherCAT-Protokoll -#define EC_MAX_FRAME_SIZE 1500 /**< maximum size of an EtherCAT frame (without - header and CRC) */ -#define EC_MIN_FRAME_SIZE 46 /** ... minimum size */ -#define EC_FRAME_HEADER_SIZE 2 /**< size of an EtherCAT frame header */ -#define EC_COMMAND_HEADER_SIZE 10 /**< size of an EtherCAT command header */ -#define EC_COMMAND_FOOTER_SIZE 2 /**< size of an EtherCAT command footer */ -#define EC_SYNC_SIZE 8 /**< size of a sync manager configuration page */ -#define EC_FMMU_SIZE 16 /**< size of an FMMU configuration page */ -#define EC_MAX_FMMUS 16 /**< maximum number of FMMUs per slave */ -#define EC_MAX_DATA_SIZE (EC_MAX_FRAME_SIZE \ - - EC_FRAME_HEADER_SIZE \ - - EC_COMMAND_HEADER_SIZE \ - - EC_COMMAND_FOOTER_SIZE) /**< maximum data size of a - single command */ +/** resulting maximum data size of a single command in a frame */ +#define EC_MAX_DATA_SIZE (EC_MAX_FRAME_SIZE - EC_FRAME_HEADER_SIZE \ + - EC_COMMAND_HEADER_SIZE - EC_COMMAND_FOOTER_SIZE) /*****************************************************************************/ diff --git a/master/module.c b/master/module.c index 0fe646f29dc4d22993f3b78bb4c9c8af1e8db691..ce8d28dba64df12c87fbc71448126895a302dbd8 100644 --- a/master/module.c +++ b/master/module.c @@ -33,7 +33,10 @@ void __exit ec_cleanup_module(void); /*****************************************************************************/ -#define COMPILE_INFO "Revision " EC_STR(SVNREV) \ +#define COMPILE_INFO EC_STR(EC_MASTER_VERSION_MAIN) \ + "." EC_STR(EC_MASTER_VERSION_SUB) \ + " (" EC_MASTER_VERSION_EXTRA ")" \ + " - rev. " EC_STR(SVNREV) \ ", compiled by " EC_STR(USER) \ " at " __DATE__ " " __TIME__ @@ -149,6 +152,54 @@ ec_master_t *ec_find_master(unsigned int master_index /**< master index */) return NULL; } +/*****************************************************************************/ + +/** + Outputs frame contents for debugging purposes. +*/ + +void ec_print_data(const uint8_t *data, /**< pointer to data */ + size_t size /**< number of bytes to output */ + ) +{ + unsigned int i; + + EC_DBG(""); + for (i = 0; i < size; i++) { + printk("%02X ", data[i]); + if ((i + 1) % 16 == 0) { + printk("\n"); + EC_DBG(""); + } + } + printk("\n"); +} + +/*****************************************************************************/ + +/** + Outputs frame contents and differences for debugging purposes. +*/ + +void ec_print_data_diff(const uint8_t *d1, /**< first data */ + const uint8_t *d2, /**< second data */ + size_t size /** number of bytes to output */ + ) +{ + unsigned int i; + + EC_DBG(""); + for (i = 0; i < size; i++) { + if (d1[i] == d2[i]) printk(".. "); + else printk("%02X ", d2[i]); + if ((i + 1) % 16 == 0) { + printk("\n"); + EC_DBG(""); + } + } + printk("\n"); +} + /****************************************************************************** * Device interface *****************************************************************************/ @@ -354,54 +405,6 @@ void ecrt_release_master(ec_master_t *master /**< EtherCAT master */) /*****************************************************************************/ -/** - Outputs frame contents for debugging purposes. -*/ - -void ec_print_data(const uint8_t *data, /**< pointer to data */ - size_t size /**< number of bytes to output */ - ) -{ - unsigned int i; - - EC_DBG(""); - for (i = 0; i < size; i++) { - printk("%02X ", data[i]); - if ((i + 1) % 16 == 0) { - printk("\n"); - EC_DBG(""); - } - } - printk("\n"); -} - -/*****************************************************************************/ - -/** - Outputs frame contents and differences for debugging purposes. -*/ - -void ec_print_data_diff(const uint8_t *d1, /**< first data */ - const uint8_t *d2, /**< second data */ - size_t size /** number of bytes to output */ - ) -{ - unsigned int i; - - EC_DBG(""); - for (i = 0; i < size; i++) { - if (d1[i] == d2[i]) printk(".. "); - else printk("%02X ", d2[i]); - if ((i + 1) % 16 == 0) { - printk("\n"); - EC_DBG(""); - } - } - printk("\n"); -} - -/*****************************************************************************/ - module_init(ec_init_module); module_exit(ec_cleanup_module);