From 208fc5191023efdd81f096175b4f5d281f7f40c2 Mon Sep 17 00:00:00 2001 From: Florian Pose Date: Mon, 31 Mar 2008 09:42:37 +0000 Subject: [PATCH] Introduced EC_MAP_END. --- examples/mini/mini.c | 3 ++- include/ecrt.h | 14 ++++++++++++++ master/slave_config.c | 4 ++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/examples/mini/mini.c b/examples/mini/mini.c index c6a2dc17..89dbdc57 100644 --- a/examples/mini/mini.c +++ b/examples/mini/mini.c @@ -96,6 +96,7 @@ static ec_pdo_entry_info_t el3162_channel2[] = { static ec_pdo_info_t el3162_mapping[] = { {EC_DIR_INPUT, 0x1A00, 2, el3162_channel1}, {EC_DIR_INPUT, 0x1A01, 2, el3162_channel2}, + {EC_MAP_END} }; static ec_pdo_entry_info_t el2004_channels[] = { @@ -279,7 +280,7 @@ int __init init_mini_module(void) goto out_release_master; } - if (ecrt_slave_config_mapping(sc, 2, el3162_mapping)) { + if (ecrt_slave_config_mapping(sc, EC_MAP_END, el3162_mapping)) { printk(KERN_ERR PFX "Failed to configure Pdo mapping.\n"); goto out_release_master; } diff --git a/include/ecrt.h b/include/ecrt.h index 9ba6f2cc..907f0b46 100644 --- a/include/ecrt.h +++ b/include/ecrt.h @@ -120,6 +120,14 @@ */ #define ECRT_VERSION_MAGIC ECRT_VERSION(ECRT_VER_MAJOR, ECRT_VER_MINOR) +/*****************************************************************************/ + +/** End of mapping. + * + * This is used in ecrt_slave_config_mapping(). + */ +#define EC_MAP_END ~0U + /****************************************************************************** * Data types *****************************************************************************/ @@ -467,6 +475,12 @@ int ecrt_slave_config_pdo_entry( * return -1; // error * \endcode * + * Processing of \a pdo_infos will stop, if + * - the number of processed items reaches \a n_infos, or + * - the \a dir member of an ec_pdo_info_t item is EC_MAP_END. In this case, + * \a n_infos should set to a number greater than the number of list items; + * using EC_MAP_END is recommended. + * * \return zero on success, else non-zero */ int ecrt_slave_config_mapping( diff --git a/master/slave_config.c b/master/slave_config.c index b688346e..3a62b8c7 100644 --- a/master/slave_config.c +++ b/master/slave_config.c @@ -582,6 +582,10 @@ int ecrt_slave_config_mapping(ec_slave_config_t *sc, unsigned int n_infos, for (i = 0; i < n_infos; i++) { pi = &pdo_infos[i]; + + if (pi->dir == EC_MAP_END) + break; + pm = &sc->mapping[pi->dir]; if (pm->default_mapping) {