Neue ASCII-Adressierung und Code-Dokumantation.
--- a/TODO Tue Feb 14 14:40:47 2006 +0000
+++ b/TODO Tue Feb 14 14:50:20 2006 +0000
@@ -6,3 +6,5 @@
- Konfiguration SSI-/Inkrementalgeberklemmen (CoE)
- Ethernet over EtherCAT (EoE)
- eepro100-Kartentreiber
+- Proc/SysFS-Interface mit Baumdarstellung des Busses
+
--- a/include/EtherCAT_rt.h Tue Feb 14 14:40:47 2006 +0000
+++ b/include/EtherCAT_rt.h Tue Feb 14 14:50:20 2006 +0000
@@ -30,7 +30,7 @@
void EtherCAT_rt_release_master(ec_master_t *master);
ec_slave_t *EtherCAT_rt_register_slave(ec_master_t *master,
- unsigned int slave_index,
+ const char *address,
const char *vendor_name,
const char *product_name,
int domain);
@@ -106,9 +106,10 @@
struct ec_slave_init
{
- ec_slave_t **slave_ptr; /**< Zeiger auf den Slave-Zeiger, der mit der
- Adresse des Slaves belegt werden soll. */
- unsigned int bus_index; /**< Bus-Index des zu registrierenden Slaves */
+ ec_slave_t **slave_ptr; /**< Zeiger auf den Slave-Zeiger, der später auf
+ die Slave-Struktur zeigen soll. */
+ const char *address; /**< ASCII-kodierte Bus-Adresse des zu
+ registrierenden Slaves \sa ec_address */
const char *vendor_name; /**< Name des Herstellers */
const char *product_name; /**< Name des Slaves-Typs */
unsigned int domain; /**< Domäne, in der registriert werden soll. */
--- a/master/Doxyfile Tue Feb 14 14:40:47 2006 +0000
+++ b/master/Doxyfile Tue Feb 14 14:50:20 2006 +0000
@@ -1,15 +1,12 @@
-################################################################
+#---------------------------------------------------------------------------
#
-# Doxyfile
+# Doxyfile 1.4.4
#
-# IgH EtherCAT-Treiber
+# IgH EtherCAT-Treiber
#
-# $LastChangedDate$
-# $Author$
+# $Id$
#
-#################################################################
-
-# Doxyfile 1.2.18
+#---------------------------------------------------------------------------
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
@@ -22,7 +19,7 @@
# Values that contain spaces should be placed between quotes (" ")
#---------------------------------------------------------------------------
-# General configuration options
+# Project related configuration options
#---------------------------------------------------------------------------
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
@@ -43,16 +40,187 @@
OUTPUT_DIRECTORY = doc
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# The default language is English, other supported languages are:
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
-# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
-# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese,
-# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian.
-
-OUTPUT_LANGUAGE =
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = German
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = YES
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 3
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available.
@@ -77,17 +245,24 @@
EXTRACT_LOCAL_CLASSES = YES
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
# undocumented members of documented classes, files or namespaces.
# If set to NO (the default) these members will be included in the
# various overviews, but no documentation section is generated.
# This option has no effect if EXTRACT_ALL is enabled.
-HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_MEMBERS = YES
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these class will be included in the various
+# If set to NO (the default) these classes will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_CLASSES = YES
@@ -99,45 +274,12 @@
HIDE_FRIEND_COMPOUNDS = NO
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF = YES
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
-# members of a class in the documentation of that class as if those members were
-# ordinary class members. Constructors, destructors and assignment operators of
-# the base classes will not be shown.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. It is allowed to use relative paths in the argument list.
-
-STRIP_FROM_PATH =
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
# The INTERNAL_DOCS tag determines if documentation
# that is typed after a \internal command is included. If the tag is set
@@ -146,73 +288,26 @@
INTERNAL_DOCS = NO
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS = YES
-
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower case letters. If set to YES upper case letters are also
+# file names in lower-case letters. If set to YES upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
-# users are adviced to set this option to NO.
+# and Mac users are advised to set this option to NO.
CASE_SENSE_NAMES = YES
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
# will show members with their full class and namespace scopes in the
# documentation. If set to YES the scope will be hidden.
HIDE_SCOPE_NAMES = NO
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = YES
-
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put list of the files that are included by a file in the documentation
+# will put a list of the files that are included by a file in the documentation
# of that file.
SHOW_INCLUDE_FILES = NO
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explict @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF = YES
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = YES
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP = YES
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# reimplements.
-
-INHERIT_DOCS = YES
-
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
# is inserted in the documentation for inline members.
@@ -225,17 +320,22 @@
SORT_MEMBER_DOCS = NO
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE = 3
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
@@ -256,26 +356,18 @@
GENERATE_BUGLIST = NO
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting \deprecated commands in the documentation.
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
GENERATE_DEPRECATEDLIST= NO
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES =
-
# The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consist of for it to appear in
+# the initial value of a variable or define consists of for it to appear in
# the documentation. If the initializer consists of more lines than specified
# here it will be hidden. Use a value of 0 to hide initializers completely.
# The appearance of the initializer of individual variables and defines in the
@@ -284,26 +376,28 @@
MAX_INITIALIZER_LINES = 30
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C.
-# For instance some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
-# only. Doxygen will then generate output that is more tailored for Java.
-# For instance namespaces will be presented as packages, qualified scopes
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
# at the bottom of the documentation of classes and structs. If set to YES the
# list will mention the files that were used to generate the documentation.
SHOW_USED_FILES = NO
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is YES.
+
+SHOW_DIRECTORIES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the progam writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
@@ -325,10 +419,27 @@
WARN_IF_UNDOCUMENTED = YES
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
# The WARN_FORMAT tag determines the format of the warning messages that
# doxygen can produce. The string should contain the $file, $line, and $text
# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text.
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
WARN_FORMAT = "$file:$line: $text"
@@ -347,14 +458,15 @@
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = . ../include
+INPUT = . \
+ ../include
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
-# *.h++ *.idl *.odl
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
FILE_PATTERNS =
@@ -368,16 +480,19 @@
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
-EXCLUDE =
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
-# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
EXCLUDE_SYMLINKS = NO
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
EXCLUDE_PATTERNS = *.mod.c
@@ -412,10 +527,20 @@
# by executing (via popen()) the command <filter> <input-file>, where <filter>
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
# input file. Doxygen will then use the output that the filter program writes
-# to standard output.
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
INPUT_FILTER =
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will be used to filter the input files when producing source
# files to browse (i.e. when SOURCE_BROWSER is set to YES).
@@ -427,7 +552,9 @@
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
SOURCE_BROWSER = YES
@@ -436,17 +563,37 @@
INLINE_SOURCES = NO
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
# If the REFERENCED_BY_RELATION tag is set to YES (the default)
# then for each documented function all documented
# functions referencing it will be listed.
-REFERENCED_BY_RELATION = YES
+REFERENCED_BY_RELATION = NO
# If the REFERENCES_RELATION tag is set to YES (the default)
# then for each documented function all documented entities
# called/used by that function will be listed.
-REFERENCES_RELATION = YES
+REFERENCES_RELATION = NO
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
@@ -504,10 +651,12 @@
HTML_FOOTER =
-# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
# style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
HTML_STYLESHEET =
@@ -527,14 +676,14 @@
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
# be used to specify the file name of the resulting .chm file. You
# can add a path in front of the file if the result should not be
-# written to the html output dir.
+# written to the html output directory.
CHM_FILE =
# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non empty doxygen will try to run
-# the html help compiler on the generated index.hhp.
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
HHC_LOCATION =
@@ -551,7 +700,7 @@
BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the Html help documentation and to the tree view.
+# to the contents of the HTML help documentation and to the tree view.
TOC_EXPAND = NO
@@ -569,10 +718,9 @@
# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
# generated containing a tree-like index structure (just like the one that
# is generated for HTML Help). For this to work a browser that supports
-# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+,
-# or Internet explorer 4.0+). Note that for large projects the tree generation
-# can take a very long time. In such cases it is better to disable this feature.
-# Windows users are probably better off using the HTML help feature.
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
GENERATE_TREEVIEW = YES
@@ -597,7 +745,8 @@
LATEX_OUTPUT = latex
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name.
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
LATEX_CMD_NAME = latex
@@ -651,12 +800,18 @@
LATEX_BATCHMODE = NO
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimised for Word 97 and may not look very pretty with
+# The RTF output is optimized for Word 97 and may not look very pretty with
# other RTF readers or editors.
GENERATE_RTF = NO
@@ -683,7 +838,7 @@
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assigments. You only have to provide
+# config file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value.
RTF_STYLESHEET_FILE =
@@ -727,12 +882,16 @@
# If the GENERATE_XML tag is set to YES Doxygen will
# generate an XML file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
+# the code including all documentation.
GENERATE_XML = NO
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
# The XML_SCHEMA tag can be used to specify an XML schema,
# which can be used by a validating XML parser to check the
# syntax of the XML files.
@@ -745,6 +904,13 @@
XML_DTD =
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
@@ -758,6 +924,39 @@
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
@@ -802,11 +1001,13 @@
# are defined before the preprocessor is started (similar to the -D option of
# gcc). The argument of the tag is a list of macros of the form: name
# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed.
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
PREDEFINED =
-# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used.
# Use the PREDEFINED tag if you want to use a different macro definition.
@@ -816,16 +1017,29 @@
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
# doxygen's preprocessor will remove all function-like macros that are alone
# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse the
-# parser if not removed.
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::addtions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tagfiles.
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
TAGFILES =
@@ -856,10 +1070,11 @@
#---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or
-# super classes. Setting the tag to NO turns the diagrams off. Note that this
-# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
-# recommended to install and use dot, since it yield more powerful graphs.
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
CLASS_DIAGRAMS = YES
@@ -890,6 +1105,17 @@
COLLABORATION_GRAPH = YES
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
# If set to YES, the inheritance and collaboration graphs will show the
# relations between templates and their instances.
@@ -909,11 +1135,26 @@
INCLUDED_BY_GRAPH = YES
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
# will graphical hierarchy of all classes instead of a textual one.
GRAPHICAL_HIERARCHY = YES
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. Possible values are png, jpg, or gif
# If left blank png will be used.
@@ -921,7 +1162,7 @@
DOT_IMAGE_FORMAT = png
# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found on the path.
+# found. If left blank, it is assumed the dot tool can be found in the path.
DOT_PATH =
@@ -947,6 +1188,33 @@
MAX_DOT_GRAPH_HEIGHT = 1024
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that a graph may be further truncated if the graph's
+# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH
+# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default),
+# the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
# generate a legend page explaining the meaning of the various boxes and
# arrows in the dot generated graphs.
@@ -954,51 +1222,16 @@
GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermedate dot files that are used to generate
+# remove the intermediate dot files that are used to generate
# the various graphs.
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine
+# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
# The SEARCHENGINE tag specifies whether or not a search engine should be
# used. If set to NO the values of all tags below this one will be ignored.
SEARCHENGINE = NO
-
-# The CGI_NAME tag should be the name of the CGI script that
-# starts the search engine (doxysearch) with the correct parameters.
-# A script with this name will be generated by doxygen.
-
-CGI_NAME = search.cgi
-
-# The CGI_URL tag should be the absolute URL to the directory where the
-# cgi binaries are located. See the documentation of your http daemon for
-# details.
-
-CGI_URL =
-
-# The DOC_URL tag should be the absolute URL to the directory where the
-# documentation is located. If left blank the absolute path to the
-# documentation, with file:// prepended to it, will be used.
-
-DOC_URL =
-
-# The DOC_ABSPATH tag should be the absolute path to the directory where the
-# documentation is located. If left blank the directory on the local machine
-# will be used.
-
-DOC_ABSPATH =
-
-# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
-# is installed.
-
-BIN_ABSPATH = /usr/local/bin/
-
-# The EXT_DOC_PATHS tag can be used to specify one or more paths to
-# documentation generated for other projects. This allows doxysearch to search
-# the documentation for these projects as well.
-
-EXT_DOC_PATHS =
--- a/master/Makefile Tue Feb 14 14:40:47 2006 +0000
+++ b/master/Makefile Tue Feb 14 14:50:20 2006 +0000
@@ -48,6 +48,8 @@
cleandoc:
@rm -rf doc
+.PHONY: doc
+
#------------------------------------------------------------------------------
endif
--- a/master/command.h Tue Feb 14 14:40:47 2006 +0000
+++ b/master/command.h Tue Feb 14 14:50:20 2006 +0000
@@ -30,13 +30,12 @@
/**
EtherCAT-Adresse.
- Im EtherCAT-Rahmen sind 4 Bytes für die Adresse reserviert, die
- ja nach Kommandoty eine andere bedeutung haben: Bei Autoinkrement-
- befehlen sind die ersten zwei Bytes die (negative)
- Autoinkrement-Adresse, bei Knoten-adressierten Befehlen entsprechen
- sie der Knotenadresse. Das dritte und vierte Byte entspricht in
- diesen Fällen der physikalischen Speicheradresse auf dem Slave.
- Bei einer logischen Adressierung entsprechen alle vier Bytes
+ Im EtherCAT-Rahmen sind 4 Bytes für die Adresse reserviert, die je nach
+ Kommandotyp, eine andere Bedeutung haben können: Bei Autoinkrementbefehlen
+ sind die ersten zwei Bytes die (negative) Autoinkrement-Adresse, bei Knoten-
+ adressierten Befehlen entsprechen sie der Knotenadresse. Das dritte und
+ vierte Byte entspricht in diesen Fällen der physikalischen Speicheradresse
+ auf dem Slave. Bei einer logischen Adressierung entsprechen alle vier Bytes
der logischen Adresse.
*/
@@ -53,7 +52,7 @@
unsigned short mem; /**< Physikalische Speicheradresse im Slave */
}
- phy;
+ phy; /**< Physikalische Adresse */
unsigned long logical; /**< Logische Adresse */
unsigned char raw[4]; /**< Rohdaten für die Generierung des Frames */
@@ -68,12 +67,12 @@
typedef struct ec_command
{
- ec_command_type_t type; /**< Typ des Kommandos (APRD, NPWR, etc...) */
+ ec_command_type_t type; /**< Typ des Kommandos (APRD, NPWR, etc) */
ec_address_t address; /**< Adresse des/der Empfänger */
unsigned int data_length; /**< Länge der zu sendenden und/oder
empfangenen Daten */
ec_command_state_t state; /**< Zustand des Kommandos
- (bereit, gesendet, etc...) */
+ (bereit, gesendet, etc) */
unsigned char index; /**< Kommando-Index, mit der das Kommando gesendet
wurde (wird vom Master beim Senden gesetzt. */
unsigned int working_counter; /**< Working-Counter bei Empfang (wird
--- a/master/master.c Tue Feb 14 14:40:47 2006 +0000
+++ b/master/master.c Tue Feb 14 14:50:20 2006 +0000
@@ -36,11 +36,11 @@
/**
Konstruktor des EtherCAT-Masters.
-
- @param master Zeiger auf den zu initialisierenden EtherCAT-Master
-*/
-
-void ec_master_init(ec_master_t *master)
+*/
+
+void ec_master_init(ec_master_t *master
+ /**< Zeiger auf den zu initialisierenden EtherCAT-Master */
+ )
{
master->bus_slaves = NULL;
master->bus_slaves_count = 0;
@@ -62,11 +62,11 @@
Entfernt alle Kommandos aus der Liste, löscht den Zeiger
auf das Slave-Array und gibt die Prozessdaten frei.
-
- @param master Zeiger auf den zu löschenden Master
-*/
-
-void ec_master_clear(ec_master_t *master)
+*/
+
+void ec_master_clear(ec_master_t *master
+ /**< Zeiger auf den zu löschenden Master */
+ )
{
if (master->bus_slaves) {
kfree(master->bus_slaves);
@@ -85,11 +85,11 @@
Bei einem "release" sollte immer diese Funktion aufgerufen werden,
da sonst Slave-Liste, Domains, etc. weiter existieren.
-
- @param master Zeiger auf den zurückzusetzenden Master
-*/
-
-void ec_master_reset(ec_master_t *master)
+*/
+
+void ec_master_reset(ec_master_t *master
+ /**< Zeiger auf den zurückzusetzenden Master */
+ )
{
if (master->bus_slaves) {
kfree(master->bus_slaves);
@@ -112,13 +112,11 @@
/**
Öffnet das EtherCAT-Geraet des Masters.
- @param master Der EtherCAT-Master
-
- @return 0, wenn alles o.k., < 0, wenn das Geraet nicht geoeffnet werden
- konnte.
-*/
-
-int ec_master_open(ec_master_t *master)
+ \return 0, wenn alles o.k., < 0, wenn kein Gerät registriert wurde oder
+ es nicht geoeffnet werden konnte.
+*/
+
+int ec_master_open(ec_master_t *master /**< Der EtherCAT-Master */)
{
if (!master->device_registered) {
printk(KERN_ERR "EtherCAT: No device registered!\n");
@@ -137,11 +135,9 @@
/**
Schliesst das EtherCAT-Geraet, auf dem der Master arbeitet.
-
- @param master Der EtherCAT-Master
-*/
-
-void ec_master_close(ec_master_t *master)
+*/
+
+void ec_master_close(ec_master_t *master /**< EtherCAT-Master */)
{
if (!master->device_registered) {
printk(KERN_WARNING "EtherCAT: Warning -"
@@ -160,13 +156,14 @@
Sendet ein einzelnes Kommando in einem Frame und
wartet auf dessen Empfang.
- @param master EtherCAT-Master
- @param cmd Kommando zum Senden/Empfangen
-
- @return 0 bei Erfolg, sonst < 0
-*/
-
-int ec_simple_send_receive(ec_master_t *master, ec_command_t *cmd)
+ \return 0 bei Erfolg, sonst < 0
+*/
+
+int ec_simple_send_receive(ec_master_t *master,
+ /**< EtherCAT-Master */
+ ec_command_t *cmd
+ /**< Kommando zum Senden/Empfangen */
+ )
{
unsigned int tries_left;
@@ -194,13 +191,12 @@
/**
Sendet ein einzelnes Kommando in einem Frame.
- @param master EtherCAT-Master
- @param cmd Kommando zum Senden
-
- @return 0 bei Erfolg, sonst < 0
-*/
-
-int ec_simple_send(ec_master_t *master, ec_command_t *cmd)
+ \return 0 bei Erfolg, sonst < 0
+*/
+
+int ec_simple_send(ec_master_t *master, /**< EtherCAT-Master */
+ ec_command_t *cmd /**< Kommando zum Senden */
+ )
{
unsigned int length, framelength, i;
@@ -294,13 +290,12 @@
Wartet auf den Empfang eines einzeln gesendeten
Kommandos.
- @param master EtherCAT-Master
- @param cmd Gesendetes Kommando
-
- @return 0 bei Erfolg, sonst < 0
-*/
-
-int ec_simple_receive(ec_master_t *master, ec_command_t *cmd)
+ \return 0 bei Erfolg, sonst < 0
+*/
+
+int ec_simple_receive(ec_master_t *master, /**< EtherCAT-Master */
+ ec_command_t *cmd /**< Gesendetes Kommando */
+ )
{
unsigned int length;
int ret;
@@ -377,12 +372,10 @@
/**
Durchsucht den Bus nach Slaves.
- @param master Der EtherCAT-Master
-
@return 0 bei Erfolg, sonst < 0
*/
-int ec_scan_for_slaves(ec_master_t *master)
+int ec_scan_for_slaves(ec_master_t *master /**< EtherCAT-Master */)
{
ec_command_t cmd;
ec_slave_t *slave;
@@ -510,17 +503,19 @@
Liest Daten aus dem Slave-Information-Interface
eines EtherCAT-Slaves.
- @param master EtherCAT-Master
- @param node_address Knotenadresse des Slaves
- @param offset Adresse des zu lesenden SII-Registers
- @param target Zeiger auf einen 4 Byte großen Speicher
- zum Ablegen der Daten
-
- @return 0 bei Erfolg, sonst < 0
-*/
-
-int ec_sii_read(ec_master_t *master, unsigned short int node_address,
- unsigned short int offset, unsigned int *target)
+ \return 0 bei Erfolg, sonst < 0
+*/
+
+int ec_sii_read(ec_master_t *master,
+ /**< EtherCAT-Master */
+ unsigned short int node_address,
+ /**< Knotenadresse des Slaves */
+ unsigned short int offset,
+ /**< Adresse des zu lesenden SII-Registers */
+ unsigned int *target
+ /**< Zeiger auf einen 4 Byte großen Speicher zum Ablegen der
+ Daten */
+ )
{
ec_command_t cmd;
unsigned char data[10];
@@ -586,20 +581,18 @@
/*****************************************************************************/
/**
- Ändert den Zustand eines Slaves (asynchron).
-
- Führt eine (asynchrone) Zustandsänderung bei einem Slave durch.
-
- @param master EtherCAT-Master
- @param slave Slave, dessen Zustand geändert werden soll
- @param state_and_ack Neuer Zustand, evtl. mit gesetztem
- Acknowledge-Flag
-
- @return 0 bei Erfolg, sonst < 0
-*/
-
-int ec_state_change(ec_master_t *master, ec_slave_t *slave,
- unsigned char state_and_ack)
+ Ändert den Zustand eines Slaves.
+
+ \return 0 bei Erfolg, sonst < 0
+*/
+
+int ec_state_change(ec_master_t *master,
+ /**<EtherCAT-Master */
+ ec_slave_t *slave,
+ /**< Slave, dessen Zustand geändert werden soll */
+ unsigned char state_and_ack
+ /**< Neuer Zustand, evtl. mit gesetztem Acknowledge-Flag */
+ )
{
ec_command_t cmd;
unsigned char data[2];
@@ -670,11 +663,9 @@
/**
Gibt Frame-Inhalte zwecks Debugging aus.
-
- @param master EtherCAT-Master
-*/
-
-void ec_output_debug_data(const ec_master_t *master)
+*/
+
+void ec_output_debug_data(const ec_master_t *master /**< EtherCAT-Master */)
{
unsigned int i;
@@ -705,11 +696,9 @@
/**
Gibt von Zeit zu Zeit die Anzahl verlorener Frames aus.
-
- @param master EtherCAT-Master
-*/
-
-void ec_output_lost_frames(ec_master_t *master)
+*/
+
+void ec_output_lost_frames(ec_master_t *master /**< EtherCAT-Master */)
{
unsigned long int t;
@@ -723,6 +712,92 @@
}
}
+/*****************************************************************************/
+
+/**
+ Wandelt eine ASCII-kodierte Bus-Adresse in einen Slave-Zeiger.
+
+ Gültige Adress-Strings sind Folgende:
+
+ - \a "X" = der X. Slave im Bus,
+ - \a "X:Y" = der Y. Slave hinter dem X. Buskoppler,
+ - \a "#X" = der Slave mit der SSID X,
+ - \a "#X:Y" = der Y. Slave hinter dem Buskoppler mit der SSID X.
+
+ \return Zeiger auf Slave bei Erfolg, sonst NULL
+*/
+
+ec_slave_t *ec_address(const ec_master_t *master,
+ /**< EtherCAT-Master */
+ const char *address
+ /**< Address-String */
+ )
+{
+ unsigned long first, second;
+ char *remainder, *remainder2;
+ unsigned int i;
+ int coupler_idx, slave_idx;
+ ec_slave_t *slave;
+
+ if (!address || address[0] == 0) return NULL;
+
+ if (address[0] == '#') {
+ printk(KERN_ERR "EtherCAT: Bus ID - #<SSID> not implemented yet!\n");
+ return NULL;
+ }
+
+ first = simple_strtoul(address, &remainder, 0);
+ if (remainder == address) {
+ printk(KERN_ERR "EtherCAT: Bus ID - First number empty!\n");
+ return NULL;
+ }
+
+ if (!remainder[0]) { // absolute position
+ if (first < master->bus_slaves_count) {
+ return master->bus_slaves + first;
+ }
+
+ printk(KERN_ERR "EtherCAT: Bus ID - Absolute position illegal!\n");
+ }
+
+ else if (remainder[0] == ':') { // field position
+
+ remainder++;
+ second = simple_strtoul(remainder, &remainder2, 0);
+
+ if (remainder2 == remainder) {
+ printk(KERN_ERR "EtherCAT: Bus ID - Sencond number empty!\n");
+ return NULL;
+ }
+
+ if (remainder2[0]) {
+ printk(KERN_ERR "EtherCAT: Bus ID - Illegal trailer (2)!\n");
+ return NULL;
+ }
+
+ coupler_idx = -1;
+ slave_idx = 0;
+ for (i = 0; i < master->bus_slaves_count; i++, slave_idx++) {
+ slave = master->bus_slaves + i;
+ if (!slave->type) continue;
+
+ if (strcmp(slave->type->vendor_name, "Beckhoff") == 0 &&
+ strcmp(slave->type->product_name, "EK1100") == 0) {
+ coupler_idx++;
+ slave_idx = 0;
+ }
+
+ if (coupler_idx == first && slave_idx == second) return slave;
+ }
+ }
+
+ else {
+ printk(KERN_ERR "EtherCAT: Bus ID - Illegal trailer!\n");
+ }
+
+ return NULL;
+}
+
/******************************************************************************
*
* Echtzeitschnittstelle
@@ -732,20 +807,21 @@
/**
Registriert einen Slave beim Master.
- @param master Der EtherCAT-Master
- @param bus_index Index des Slaves im EtherCAT-Bus
- @param vendor_name String mit dem Herstellernamen
- @param product_name String mit dem Produktnamen
- @param domain Domäne, in der der Slave sein soll
-
- @return Zeiger auf den Slave bei Erfolg, sonst NULL
+ \return Zeiger auf den Slave bei Erfolg, sonst NULL
*/
ec_slave_t *EtherCAT_rt_register_slave(ec_master_t *master,
- unsigned int bus_index,
+ /**< EtherCAT-Master */
+ const char *address,
+ /**< ASCII-Addresse des Slaves, siehe
+ auch ec_address() */
const char *vendor_name,
+ /**< Herstellername */
const char *product_name,
- int domain)
+ /**< Produktname */
+ int domain
+ /**< Domäne */
+ )
{
ec_slave_t *slave;
const ec_slave_type_t *type;
@@ -757,21 +833,20 @@
return NULL;
}
- if (bus_index >= master->bus_slaves_count) {
- printk(KERN_ERR "EtherCAT: Illegal bus index! (%i / %i)\n", bus_index,
- master->bus_slaves_count);
+ if ((slave = ec_address(master, address)) == NULL) {
+ printk(KERN_ERR "EtherCAT: Illegal address: \"%s\"\n", address);
return NULL;
}
- slave = master->bus_slaves + bus_index;
-
if (slave->registered) {
- printk(KERN_ERR "EtherCAT: Slave %i is already registered!\n", bus_index);
+ printk(KERN_ERR "EtherCAT: Slave \"%s\" (position %i) has already been"
+ " registered!\n", address, slave->ring_position * (-1));
return NULL;
}
if (!slave->type) {
- printk(KERN_ERR "EtherCAT: Unknown slave at position %i!\n", bus_index);
+ printk(KERN_ERR "EtherCAT: Slave \"%s\" (position %i) has unknown type!\n",
+ address, slave->ring_position * (-1));
return NULL;
}
@@ -829,23 +904,24 @@
/**
Registriert eine ganze Liste von Slaves beim Master.
- @param master Der EtherCAT-Master
- @param slaves Array von Slave-Initialisierungsstrukturen
- @param count Anzahl der Strukturen in "slaves"
-
- @return 0 bei Erfolg, sonst < 0
+ \return 0 bei Erfolg, sonst < 0
*/
int EtherCAT_rt_register_slave_list(ec_master_t *master,
+ /**< EtherCAT-Master */
const ec_slave_init_t *slaves,
- unsigned int count)
+ /**< Array von Slave-Initialisierungs-
+ strukturen */
+ unsigned int count
+ /**< Anzahl der Strukturen in \a slaves */
+ )
{
unsigned int i;
for (i = 0; i < count; i++)
{
if ((*(slaves[i].slave_ptr) =
- EtherCAT_rt_register_slave(master, slaves[i].bus_index,
+ EtherCAT_rt_register_slave(master, slaves[i].address,
slaves[i].vendor_name,
slaves[i].product_name,
slaves[i].domain)) == NULL)
@@ -864,12 +940,10 @@
Slaves durch. Setzt Sync-Manager und FMMU's, führt die entsprechenden
Zustandsübergänge durch, bis der Slave betriebsbereit ist.
- @param master EtherCAT-Master
-
- @return 0 bei Erfolg, sonst < 0
-*/
-
-int EtherCAT_rt_activate_slaves(ec_master_t *master)
+ \return 0 bei Erfolg, sonst < 0
+*/
+
+int EtherCAT_rt_activate_slaves(ec_master_t *master /**< EtherCAT-Master */)
{
unsigned int i;
ec_slave_t *slave;
@@ -1072,12 +1146,10 @@
/**
Setzt alle Slaves zurück in den Init-Zustand.
- @param master EtherCAT-Master
-
- @return 0 bei Erfolg, sonst < 0
-*/
-
-int EtherCAT_rt_deactivate_slaves(ec_master_t *master)
+ \return 0 bei Erfolg, sonst < 0
+*/
+
+int EtherCAT_rt_deactivate_slaves(ec_master_t *master /**< EtherCAT-Master */)
{
ec_slave_t *slave;
unsigned int i;
@@ -1098,15 +1170,16 @@
/**
Sendet und empfängt Prozessdaten der angegebenen Domäne
- @param master EtherCAT-Master
- @param domain Domäne
- @param timeout_us Timeout in Mikrosekunden
-
- @return 0 bei Erfolg, sonst < 0
-*/
-
-int EtherCAT_rt_domain_xio(ec_master_t *master, unsigned int domain,
- unsigned int timeout_us)
+ \return 0 bei Erfolg, sonst < 0
+*/
+
+int EtherCAT_rt_domain_xio(ec_master_t *master,
+ /**< EtherCAT-Master */
+ unsigned int domain,
+ /**< Domäne */
+ unsigned int timeout_us
+ /**< Timeout in Mikrosekunden */
+ )
{
unsigned int i;
ec_domain_t *dom;
@@ -1183,9 +1256,18 @@
/**
Setzt die Debug-Ebene des Masters.
-*/
-
-void EtherCAT_rt_debug_level(ec_master_t *master, int level)
+
+ Folgende Debug-level sind definiert:
+
+ - 1: Nur Positionsmarken in bestimmten Funktionen
+ - 2: Komplette Frame-Inhalte
+*/
+
+void EtherCAT_rt_debug_level(ec_master_t *master,
+ /**< EtherCAT-Master */
+ int level
+ /**< Debug-Level */
+ )
{
master->debug_level = level;
}
--- a/master/master.h Tue Feb 14 14:40:47 2006 +0000
+++ b/master/master.h Tue Feb 14 14:50:20 2006 +0000
@@ -61,6 +61,7 @@
// Slave management
int ec_scan_for_slaves(ec_master_t *);
+ec_slave_t *ec_address(const ec_master_t *, const char *);
// Data
int ec_simple_send_receive(ec_master_t *, ec_command_t *);
--- a/mini/mini.c Tue Feb 14 14:40:47 2006 +0000
+++ b/mini/mini.c Tue Feb 14 14:50:20 2006 +0000
@@ -24,9 +24,9 @@
ec_slave_init_t slaves[] = {
// Zeiger, Index, Herstellername, Produktname, Domäne
- { &s_out, 2, "Beckhoff", "EL2004", 1 },
- { &s_in, 1, "Beckhoff", "EL3102", 1 },
- { &s_ssi, 7, "Beckhoff", "EL5001", 1 }
+ { &s_in, "1", "Beckhoff", "EL3102", 1 },
+ { &s_out, "2", "Beckhoff", "EL2004", 1 },
+ { &s_ssi, "3", "Beckhoff", "EL5001", 1 }
};
#define SLAVE_COUNT (sizeof(slaves) / sizeof(ec_slave_init_t))
@@ -35,12 +35,28 @@
void run(unsigned long data)
{
+ static unsigned int counter;
+
// Klemmen-IO
EC_WRITE_EL20XX(s_out, 3, EC_READ_EL31XX(s_in, 0) < 0);
+ if (!counter) {
+ EtherCAT_rt_debug_level(master, 2);
+ }
+
// Prozessdaten lesen und schreiben
EtherCAT_rt_domain_xio(master, 1, 100);
+ if (counter) {
+ counter--;
+ }
+ else {
+ EtherCAT_rt_debug_level(master, 0);
+ printk("SSI status=%X value=%u\n",
+ EC_READ_EL5001_STATE(s_ssi), EC_READ_EL5001_VALUE(s_ssi));
+ counter = 1000;
+ }
+
// Timer neu starten
timer.expires += HZ / 1000;
add_timer(&timer);
@@ -71,14 +87,15 @@
printk("Configuring EtherCAT slaves.\n");
- EtherCAT_rt_debug_level(master, 2);
-
if (EtherCAT_rt_canopen_sdo_write(master, s_ssi, 0x4067, 0, 2, 2)) {
printk(KERN_ERR "EtherCAT: Could not set SSI baud rate!\n");
goto out_release_master;
}
- EtherCAT_rt_debug_level(master, 0);
+ if (EtherCAT_rt_canopen_sdo_write(master, s_ssi, 0x4061, 4, 1, 1)) {
+ printk(KERN_ERR "EtherCAT: Could not set SSI feature bit!\n");
+ goto out_release_master;
+ }
printk("Starting cyclic sample thread.\n");
--- a/rt/msr_module.c Tue Feb 14 14:40:47 2006 +0000
+++ b/rt/msr_module.c Tue Feb 14 14:50:20 2006 +0000
@@ -52,16 +52,15 @@
// EtherCAT
ec_master_t *master = NULL;
-ec_slave_t *s_in1, *s_out1, *s_out2, *s_out3;
-
-double value;
-int dig1;
+ec_slave_t *s_in1, *s_out1, *s_ssi, *s_inc;
+
+uint16_t angle0;
ec_slave_init_t slaves[] = {
- {&s_in1, 1, "Beckhoff", "EL3102", 0},
- {&s_out1, 8, "Beckhoff", "EL2004", 0},
- {&s_out2, 9, "Beckhoff", "EL2004", 0},
- {&s_out3, 10, "Beckhoff", "EL2004", 0}
+ {&s_in1, "1", "Beckhoff", "EL3102", 0},
+ {&s_out1, "2", "Beckhoff", "EL2004", 0},
+ {&s_ssi, "3", "Beckhoff", "EL5001", 0},
+ {&s_inc, "0:4", "Beckhoff", "EL5101", 0}
};
#define SLAVE_COUNT (sizeof(slaves) / sizeof(ec_slave_init_t))
@@ -78,30 +77,29 @@
msr_jitter_run(MSR_ABTASTFREQUENZ);
+ EC_WRITE_EL20XX(s_out1, 3, EC_READ_EL31XX(s_in1, 0) < 0);
+
+ if (!counter) {
+ EtherCAT_rt_debug_level(master, 2);
+ }
+
+ // Prozessdaten lesen und schreiben
+ EtherCAT_rt_domain_xio(master, 0, 40);
+
if (counter) {
counter--;
}
else {
- // "Star Trek"-Effekte
- EC_WRITE_EL20XX(s_out1, 0, jiffies & 1);
- EC_WRITE_EL20XX(s_out1, 1, (jiffies >> 1) & 1);
- EC_WRITE_EL20XX(s_out1, 2, (jiffies >> 2) & 1);
- EC_WRITE_EL20XX(s_out1, 3, (jiffies >> 3) & 1);
- EC_WRITE_EL20XX(s_out2, 0, (jiffies >> 4) & 1);
- EC_WRITE_EL20XX(s_out2, 1, (jiffies >> 3) & 1);
- EC_WRITE_EL20XX(s_out2, 2, (jiffies >> 2) & 1);
- EC_WRITE_EL20XX(s_out2, 3, (jiffies >> 6) & 1);
- EC_WRITE_EL20XX(s_out3, 0, (jiffies >> 7) & 1);
- EC_WRITE_EL20XX(s_out3, 1, (jiffies >> 2) & 1);
- EC_WRITE_EL20XX(s_out3, 2, (jiffies >> 8) & 1);
-
- counter = MSR_ABTASTFREQUENZ / 4;
- }
-
- EC_WRITE_EL20XX(s_out3, 3, EC_READ_EL31XX(s_in1, 0) < 0);
-
- // Prozessdaten lesen und schreiben
- EtherCAT_rt_domain_xio(master, 0, 40);
+ EtherCAT_rt_debug_level(master, 0);
+ printk("SSI status=0x%X value=%u\n",
+ EC_READ_EL5001_STATE(s_ssi), EC_READ_EL5001_VALUE(s_ssi));
+ printk("INC status=0x%X value=%u\n",
+ EC_READ_EL5101_STATE(s_inc), EC_READ_EL5101_VALUE(s_inc));
+
+ counter = MSR_ABTASTFREQUENZ * 5;
+ }
+
+ angle0 = EC_READ_EL5101_VALUE(s_inc);
}
/******************************************************************************
@@ -143,7 +141,7 @@
ipipe_virtualize_irq(ipipe_current_domain,sys_info.archdep.tmirq,
&msr_run, NULL, IPIPE_HANDLE_MASK);
- ipipe_tune_timer(1000000000UL/MSR_ABTASTFREQUENZ,0);
+ ipipe_tune_timer(1000000000UL / MSR_ABTASTFREQUENZ, 0);
}
/******************************************************************************
@@ -162,8 +160,9 @@
int msr_globals_register(void)
{
- msr_reg_kanal("/value", "V", &value, TDBL);
- msr_reg_kanal("/dig1", "", &dig1, TINT);
+ //msr_reg_kanal("/value", "V", &value, TDBL);
+ //msr_reg_kanal("/dig1", "", &dig1, TINT);
+ msr_reg_kanal("/angle0", "", &angle0, TINT);
return 0;
}
@@ -201,6 +200,16 @@
goto out_release_master;
}
+ if (EtherCAT_rt_canopen_sdo_write(master, s_ssi, 0x4067, 0, 1, 2)) {
+ printk(KERN_ERR "EtherCAT: Could not set SSI baud rate!\n");
+ goto out_release_master;
+ }
+
+ if (EtherCAT_rt_canopen_sdo_write(master, s_ssi, 0x4061, 4, 1, 1)) {
+ printk(KERN_ERR "EtherCAT: Could not set SSI feature bit!\n");
+ goto out_release_master;
+ }
+
do_gettimeofday(&process_time);
msr_time_increment.tv_sec = 0;
msr_time_increment.tv_usec = (unsigned int) (1000000 / MSR_ABTASTFREQUENZ);