Added dummy module for simulation purposes.

This commit is contained in:
Florian Pose 2007-06-06 17:02:38 +00:00
parent c9c595f94e
commit d12427a22e
10 changed files with 651 additions and 3 deletions

2
Kbuild
View File

@ -31,6 +31,6 @@
#
#------------------------------------------------------------------------------
obj-m := master/ devices/
obj-m := master/ devices/ dummy/
#------------------------------------------------------------------------------

View File

@ -31,9 +31,9 @@
#
#------------------------------------------------------------------------------
SUBDIRS = master devices script include
SUBDIRS = master devices script include dummy
DIST_SUBDIRS = master devices script include examples
DIST_SUBDIRS = master devices script include examples dummy
EXTRA_DIST = \
Doxyfile \
@ -47,6 +47,7 @@ modules:
modules_install:
$(MAKE) -C master modules_install
$(MAKE) -C devices modules_install
$(MAKE) -C dummy modules_install
clean-local:
$(MAKE) -C "$(LINUX_SOURCE_DIR)" M="@abs_srcdir@" clean

1
NEWS
View File

@ -43,6 +43,7 @@ Changes in version 1.3.0:
state machine.
* Master state machine scheduled with timeout if idle, otherwise is executed
as fast as possible (with schedule()).
* Added dummy module for simulation purpuses.
* Removed EtherCAT line comments from 8139too drivers.
-------------------------------------------------------------------------------

View File

@ -347,6 +347,7 @@ AC_CONFIG_FILES([
examples/mini/Makefile
examples/rtai/Makefile
examples/msr/Makefile
dummy/Makefile
])
AC_OUTPUT

48
dummy/Kbuild Normal file
View File

@ -0,0 +1,48 @@
#------------------------------------------------------------------------------
#
# $Id: Kbuild 844 2007-03-08 18:15:25Z fp $
#
# Copyright (C) 2006 Florian Pose, Ingenieurgemeinschaft IgH
#
# This file is part of the IgH EtherCAT Master.
#
# The IgH EtherCAT Master is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# The IgH EtherCAT Master is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the IgH EtherCAT Master; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The right to use EtherCAT Technology is granted and comes free of
# charge under condition of compatibility of product made by
# Licensee. People intending to distribute/sell products based on the
# code, have to sign an agreement to guarantee that products using
# software based on IgH EtherCAT master stay compatible with the actual
# EtherCAT specification (which are released themselves as an open
# standard) as the (only) precondition to have the right to use EtherCAT
# Technology, IP and trade marks.
#
#------------------------------------------------------------------------------
include $(src)/../config.kbuild
obj-m := ec_dummy.o
ec_dummy-objs := module.o master.o slave.o domain.o
REV := $(shell if test -s $(src)/../svnrevision; then \
cat $(src)/../svnrevision; \
else \
svnversion $(src) 2>/dev/null || echo "unknown"; \
fi)
CFLAGS_dummy.o := -DSVNREV=$(REV)
#------------------------------------------------------------------------------

51
dummy/Makefile.am Normal file
View File

@ -0,0 +1,51 @@
#------------------------------------------------------------------------------
#
# $Id$
#
# Copyright (C) 2006 Florian Pose, Ingenieurgemeinschaft IgH
#
# This file is part of the IgH EtherCAT Master.
#
# The IgH EtherCAT Master is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# The IgH EtherCAT Master is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the IgH EtherCAT Master; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The right to use EtherCAT Technology is granted and comes free of
# charge under condition of compatibility of product made by
# Licensee. People intending to distribute/sell products based on the
# code, have to sign an agreement to guarantee that products using
# software based on IgH EtherCAT master stay compatible with the actual
# EtherCAT specification (which are released themselves as an open
# standard) as the (only) precondition to have the right to use EtherCAT
# Technology, IP and trade marks.
#
#------------------------------------------------------------------------------
EXTRA_DIST = \
Kbuild \
module.c \
master.c \
slave.c \
domain.c
modules:
$(MAKE) -C "$(LINUX_SOURCE_DIR)" M="@abs_top_srcdir@" modules
modules_install:
mkdir -p $(DESTDIR)$(LINUX_MOD_PATH)
cp $(srcdir)/ec_dummy.ko $(DESTDIR)$(LINUX_MOD_PATH)
clean-local:
$(MAKE) -C "$(LINUX_SOURCE_DIR)" M="@abs_srcdir@" clean
#------------------------------------------------------------------------------

157
dummy/domain.c Normal file
View File

@ -0,0 +1,157 @@
/******************************************************************************
*
* $Id$
*
* Copyright (C) 2006 Florian Pose, Ingenieurgemeinschaft IgH
*
* This file is part of the IgH EtherCAT Master.
*
* The IgH EtherCAT Master is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* The IgH EtherCAT Master is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the IgH EtherCAT Master; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* The right to use EtherCAT Technology is granted and comes free of
* charge under condition of compatibility of product made by
* Licensee. People intending to distribute/sell products based on the
* code, have to sign an agreement to guarantee that products using
* software based on IgH EtherCAT master stay compatible with the actual
* EtherCAT specification (which are released themselves as an open
* standard) as the (only) precondition to have the right to use EtherCAT
* Technology, IP and trade marks.
*
*****************************************************************************/
/**
\file
EtherCAT DUMMY domain methods.
*/
/*****************************************************************************/
#include "../master/globals.h"
#include "../master/domain.h"
#include "../master/master.h"
/*****************************************************************************/
uint8_t dummy_data[PAGE_SIZE];
/*****************************************************************************/
/** \cond */
int ecrt_domain_register_pdo(
ec_domain_t *domain, /**< EtherCAT domain */
ec_slave_t *slave, /**< EtherCAT slave */
uint16_t pdo_entry_index, /**< PDO entry index */
uint8_t pdo_entry_subindex, /**< PDO entry subindex */
void **data_ptr /**< address of the process data pointer */
)
{
*data_ptr = dummy_data;
return 0;
}
/*****************************************************************************/
/**
* Registers a bunch of data fields.
* \attention The list has to be terminated with a NULL structure ({})!
* \return 0 in case of success, else < 0
* \ingroup RealtimeInterface
*/
int ecrt_domain_register_pdo_list(
ec_domain_t *domain, /**< EtherCAT domain */
const ec_pdo_reg_t *pdo_regs /**< array of PDO registrations */
)
{
const ec_pdo_reg_t *reg;
for (reg = pdo_regs; reg->slave_address; reg++) {
*(reg->data_ptr) = dummy_data;
}
return 0;
}
/*****************************************************************************/
/**
* Registers a PDO range in a domain.
* \return 0 on success, else non-zero
* \ingroup RealtimeInterface
*/
int ecrt_domain_register_pdo_range(
ec_domain_t *domain, /**< EtherCAT domain */
ec_slave_t *slave, /**< EtherCAT slave */
ec_direction_t dir, /**< data direction */
uint16_t offset, /**< offset in slave's PDO range */
uint16_t length, /**< length of this range */
void **data_ptr /**< address of the process data pointer */
)
{
*data_ptr = dummy_data;
return 0;
}
/*****************************************************************************/
/**
Processes received process data and requeues the domain datagram(s).
\ingroup RealtimeInterface
*/
void ecrt_domain_process(ec_domain_t *domain /**< EtherCAT domain */)
{
}
/*****************************************************************************/
/**
Places all process data datagrams in the masters datagram queue.
\ingroup RealtimeInterface
*/
void ecrt_domain_queue(ec_domain_t *domain /**< EtherCAT domain */)
{
}
/*****************************************************************************/
/**
Returns the state of a domain.
\return 0 if all datagrams were received, else -1.
\ingroup RealtimeInterface
*/
int ecrt_domain_state(const ec_domain_t *domain /**< EtherCAT domain */)
{
return 0;
}
/*****************************************************************************/
/** \cond */
EXPORT_SYMBOL(ecrt_domain_register_pdo);
EXPORT_SYMBOL(ecrt_domain_register_pdo_list);
EXPORT_SYMBOL(ecrt_domain_register_pdo_range);
EXPORT_SYMBOL(ecrt_domain_process);
EXPORT_SYMBOL(ecrt_domain_queue);
EXPORT_SYMBOL(ecrt_domain_state);
/** \endcond */
/*****************************************************************************/

119
dummy/master.c Normal file
View File

@ -0,0 +1,119 @@
/******************************************************************************
*
* $Id$
*
* Copyright (C) 2006 Florian Pose, Ingenieurgemeinschaft IgH
*
* This file is part of the IgH EtherCAT Master.
*
* The IgH EtherCAT Master is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* The IgH EtherCAT Master is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the IgH EtherCAT Master; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* The right to use EtherCAT Technology is granted and comes free of
* charge under condition of compatibility of product made by
* Licensee. People intending to distribute/sell products based on the
* code, have to sign an agreement to guarantee that products using
* software based on IgH EtherCAT master stay compatible with the actual
* EtherCAT specification (which are released themselves as an open
* standard) as the (only) precondition to have the right to use EtherCAT
* Technology, IP and trade marks.
*
*****************************************************************************/
/**
\file
EtherCAT DUMMY master methods.
*/
/*****************************************************************************/
#include "../include/ecrt.h"
#include "../master/master.h"
/******************************************************************************
* Realtime interface
*****************************************************************************/
/** \cond */
ec_domain_t *ecrt_master_create_domain(ec_master_t *master)
{
return (ec_domain_t *) 1;
}
/*****************************************************************************/
int ecrt_master_activate(ec_master_t *master)
{
return 0;
}
/*****************************************************************************/
void ecrt_master_send(ec_master_t *master)
{
}
/*****************************************************************************/
void ecrt_master_receive(ec_master_t *master)
{
}
/*****************************************************************************/
ec_slave_t *ecrt_master_get_slave(
const ec_master_t *master,
const char *address,
uint32_t v,
uint32_t p
)
{
return (ec_slave_t *) 1;
}
/*****************************************************************************/
void ecrt_master_callbacks(ec_master_t *m,
int (*q)(void *),
void (*l)(void *),
void *u
)
{
}
/*****************************************************************************/
void ecrt_master_get_status(const ec_master_t *master, /**< EtherCAT master */
ec_master_status_t *status /**< target status object */
)
{
status->bus_status = EC_BUS_OK;
status->bus_tainted = 0;
status->slaves_responding = 999;
}
/*****************************************************************************/
EXPORT_SYMBOL(ecrt_master_create_domain);
EXPORT_SYMBOL(ecrt_master_activate);
EXPORT_SYMBOL(ecrt_master_send);
EXPORT_SYMBOL(ecrt_master_receive);
EXPORT_SYMBOL(ecrt_master_callbacks);
EXPORT_SYMBOL(ecrt_master_get_slave);
EXPORT_SYMBOL(ecrt_master_get_status);
/** \endcond */
/*****************************************************************************/

136
dummy/module.c Normal file
View File

@ -0,0 +1,136 @@
/******************************************************************************
*
* $Id$
*
* Copyright (C) 2006 Florian Pose, Ingenieurgemeinschaft IgH
*
* This file is part of the IgH EtherCAT Master.
*
* The IgH EtherCAT Master is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* The IgH EtherCAT Master is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the IgH EtherCAT Master; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* The right to use EtherCAT Technology is granted and comes free of
* charge under condition of compatibility of product made by
* Licensee. People intending to distribute/sell products based on the
* code, have to sign an agreement to guarantee that products using
* software based on IgH EtherCAT master stay compatible with the actual
* EtherCAT specification (which are released themselves as an open
* standard) as the (only) precondition to have the right to use EtherCAT
* Technology, IP and trade marks.
*
*****************************************************************************/
/**
\file
Dummy EtherCAT master driver module.
*/
/*****************************************************************************/
#include <linux/module.h>
//#include <linux/kernel.h>
//#include <linux/init.h>
#include "../master/globals.h"
#include "../include/ecrt.h"
/*****************************************************************************/
int __init ec_init_module(void);
void __exit ec_cleanup_module(void);
char *ec_master_version_str = EC_MASTER_VERSION;
/*****************************************************************************/
/** \cond */
MODULE_AUTHOR("Florian Pose <fp@igh-essen.com>");
MODULE_DESCRIPTION("DUMMY EtherCAT master driver module");
MODULE_LICENSE("GPL");
MODULE_VERSION(EC_MASTER_VERSION);
/** \endcond */
/*****************************************************************************/
/**
* Module initialization.
* Initializes \a ec_master_count masters.
* \return 0 on success, else < 0
*/
int __init ec_init_module(void)
{
EC_INFO("Master DUMMY driver %s\n", EC_MASTER_VERSION);
return 0;
}
/*****************************************************************************/
/**
Module cleanup.
Clears all master instances.
*/
void __exit ec_cleanup_module(void)
{
EC_INFO("Master DUMMY module cleaned up.\n");
}
/******************************************************************************
* Realtime interface
*****************************************************************************/
unsigned int ecrt_version_magic(void)
{
return ECRT_VERSION_MAGIC;
}
/*****************************************************************************/
ec_master_t *ecrt_request_master(unsigned int master_index
/**< master index */
)
{
EC_INFO("Requesting DUMMY master %u...\n", master_index);
return (void *) master_index + 1;
}
/*****************************************************************************/
/**
Releases a reserved EtherCAT master.
\ingroup RealtimeInterface
*/
void ecrt_release_master(ec_master_t *master /**< EtherCAT master */)
{
EC_INFO("Released DUMMY master %u.\n", (unsigned int) master - 1);
}
/*****************************************************************************/
/** \cond */
module_init(ec_init_module);
module_exit(ec_cleanup_module);
EXPORT_SYMBOL(ecrt_request_master);
EXPORT_SYMBOL(ecrt_release_master);
EXPORT_SYMBOL(ecrt_version_magic);
/** \endcond */
/*****************************************************************************/

134
dummy/slave.c Normal file
View File

@ -0,0 +1,134 @@
/******************************************************************************
*
* $Id$
*
* Copyright (C) 2006 Florian Pose, Ingenieurgemeinschaft IgH
*
* This file is part of the IgH EtherCAT Master.
*
* The IgH EtherCAT Master is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* The IgH EtherCAT Master is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the IgH EtherCAT Master; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* The right to use EtherCAT Technology is granted and comes free of
* charge under condition of compatibility of product made by
* Licensee. People intending to distribute/sell products based on the
* code, have to sign an agreement to guarantee that products using
* software based on IgH EtherCAT master stay compatible with the actual
* EtherCAT specification (which are released themselves as an open
* standard) as the (only) precondition to have the right to use EtherCAT
* Technology, IP and trade marks.
*
*****************************************************************************/
/**
\file
EtherCAT DUMMY slave methods.
*/
/*****************************************************************************/
#include "../include/ecrt.h"
#include "../master/master.h"
#include "../master/slave.h"
/*****************************************************************************/
/** \cond */
int ecrt_slave_conf_sdo8(ec_slave_t *slave, /**< EtherCAT slave */
uint16_t sdo_index, /**< SDO index */
uint8_t sdo_subindex, /**< SDO subindex */
uint8_t value /**< new SDO value */
)
{
return 0;
}
/*****************************************************************************/
/**
\return 0 in case of success, else < 0
\ingroup RealtimeInterface
*/
int ecrt_slave_conf_sdo16(ec_slave_t *slave, /**< EtherCAT slave */
uint16_t sdo_index, /**< SDO index */
uint8_t sdo_subindex, /**< SDO subindex */
uint16_t value /**< new SDO value */
)
{
return 0;
}
/*****************************************************************************/
/**
\return 0 in case of success, else < 0
\ingroup RealtimeInterface
*/
int ecrt_slave_conf_sdo32(ec_slave_t *slave, /**< EtherCAT slave */
uint16_t sdo_index, /**< SDO index */
uint8_t sdo_subindex, /**< SDO subindex */
uint32_t value /**< new SDO value */
)
{
return 0;
}
/*****************************************************************************/
void ecrt_slave_pdo_mapping_clear(
ec_slave_t *slave, /**< EtherCAT slave */
ec_direction_t dir /**< output/input */
)
{
}
/*****************************************************************************/
int ecrt_slave_pdo_mapping_add(
ec_slave_t *slave, /**< EtherCAT slave */
ec_direction_t dir, /**< input/output */
uint16_t pdo_index /**< Index of PDO mapping list */)
{
return 0;
}
/*****************************************************************************/
int ecrt_slave_pdo_mapping(ec_slave_t *slave, /**< EtherCAT slave */
ec_direction_t dir, /**< input/output */
unsigned int num_args, /**< Number of following arguments */
... /**< PDO indices to map */
)
{
return 0;
}
/*****************************************************************************/
/** \cond */
EXPORT_SYMBOL(ecrt_slave_conf_sdo8);
EXPORT_SYMBOL(ecrt_slave_conf_sdo16);
EXPORT_SYMBOL(ecrt_slave_conf_sdo32);
EXPORT_SYMBOL(ecrt_slave_pdo_mapping_clear);
EXPORT_SYMBOL(ecrt_slave_pdo_mapping_add);
EXPORT_SYMBOL(ecrt_slave_pdo_mapping);
/** \endcond */
/*****************************************************************************/