Neue ASCII-Adressierung und Code-Dokumantation.
This commit is contained in:
parent
0e547f96aa
commit
58edfcfe3e
2
TODO
2
TODO
|
|
@ -6,3 +6,5 @@ $Id$
|
|||
- Konfiguration SSI-/Inkrementalgeberklemmen (CoE)
|
||||
- Ethernet over EtherCAT (EoE)
|
||||
- eepro100-Kartentreiber
|
||||
- Proc/SysFS-Interface mit Baumdarstellung des Busses
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ ec_master_t *EtherCAT_rt_request_master(unsigned int master_index);
|
|||
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
|
|||
|
||||
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. */
|
||||
|
|
|
|||
659
master/Doxyfile
659
master/Doxyfile
|
|
@ -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 @@ PROJECT_NUMBER = 0.1
|
|||
|
||||
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.
|
||||
# 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 =
|
||||
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_STATIC = YES
|
|||
|
||||
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_UNDOC_CLASSES = YES
|
|||
|
||||
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.
|
||||
# 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.
|
||||
|
||||
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 =
|
||||
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 @@ STRIP_FROM_PATH =
|
|||
|
||||
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 @@ INLINE_INFO = YES
|
|||
|
||||
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.
|
||||
# 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.
|
||||
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
SORT_BRIEF_DOCS = 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.
|
||||
# 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.
|
||||
|
||||
TAB_SIZE = 3
|
||||
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_TESTLIST = NO
|
|||
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 @@ ENABLED_SECTIONS =
|
|||
|
||||
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 @@ WARNINGS = YES
|
|||
|
||||
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 @@ WARN_LOGFILE =
|
|||
# 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 @@ RECURSIVE = NO
|
|||
# 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 =
|
||||
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.
|
||||
# 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 @@ IMAGE_PATH =
|
|||
# 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 @@ FILTER_SOURCE_FILES = NO
|
|||
#---------------------------------------------------------------------------
|
||||
|
||||
# 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 @@ SOURCE_BROWSER = YES
|
|||
|
||||
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_HEADER =
|
|||
|
||||
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 @@ GENERATE_HTMLHELP = NO
|
|||
# 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 @@ GENERATE_CHI = NO
|
|||
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 @@ ENUM_VALUES_PER_LINE = 4
|
|||
# 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 @@ GENERATE_LATEX = NO
|
|||
|
||||
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 @@ USE_PDFLATEX = NO
|
|||
|
||||
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 @@ COMPACT_RTF = NO
|
|||
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 @@ MAN_LINKS = NO
|
|||
|
||||
# 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_SCHEMA =
|
|||
|
||||
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
|
||||
#---------------------------------------------------------------------------
|
||||
|
|
@ -757,6 +923,39 @@ XML_DTD =
|
|||
|
||||
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 @@ INCLUDE_FILE_PATTERNS =
|
|||
# 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 @@ EXPAND_AS_DEFINED =
|
|||
# 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
|
||||
# Configuration::additions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# The TAGFILES tag can be used to specify one or more tagfiles.
|
||||
# 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 @@ PERL_PATH = /usr/bin/perl
|
|||
#---------------------------------------------------------------------------
|
||||
|
||||
# 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 @@ CLASS_GRAPH = YES
|
|||
|
||||
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 @@ INCLUDE_GRAPH = YES
|
|||
|
||||
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 @@ GRAPHICAL_HIERARCHY = YES
|
|||
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_WIDTH = 1024
|
|||
|
||||
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 @@ MAX_DOT_GRAPH_HEIGHT = 1024
|
|||
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 =
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ doc:
|
|||
cleandoc:
|
||||
@rm -rf doc
|
||||
|
||||
.PHONY: doc
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -30,13 +30,12 @@ ec_command_state_t;
|
|||
/**
|
||||
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 @@ typedef union
|
|||
|
||||
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 @@ ec_address_t;
|
|||
|
||||
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
|
||||
|
|
|
|||
282
master/master.c
282
master/master.c
|
|
@ -36,11 +36,11 @@ void ec_output_lost_frames(ec_master_t *);
|
|||
|
||||
/**
|
||||
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 @@ void ec_master_init(ec_master_t *master)
|
|||
|
||||
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 @@ void ec_master_clear(ec_master_t *master)
|
|||
|
||||
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 @@ void ec_master_reset(ec_master_t *master)
|
|||
/**
|
||||
Ö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.
|
||||
\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)
|
||||
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 @@ int ec_master_open(ec_master_t *master)
|
|||
|
||||
/**
|
||||
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 @@ void ec_master_close(ec_master_t *master)
|
|||
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
|
||||
\return 0 bei Erfolg, sonst < 0
|
||||
*/
|
||||
|
||||
int ec_simple_send_receive(ec_master_t *master, ec_command_t *cmd)
|
||||
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 @@ int ec_simple_send_receive(ec_master_t *master, ec_command_t *cmd)
|
|||
/**
|
||||
Sendet ein einzelnes Kommando in einem Frame.
|
||||
|
||||
@param master EtherCAT-Master
|
||||
@param cmd Kommando zum Senden
|
||||
|
||||
@return 0 bei Erfolg, sonst < 0
|
||||
\return 0 bei Erfolg, sonst < 0
|
||||
*/
|
||||
|
||||
int ec_simple_send(ec_master_t *master, ec_command_t *cmd)
|
||||
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 @@ int ec_simple_send(ec_master_t *master, ec_command_t *cmd)
|
|||
Wartet auf den Empfang eines einzeln gesendeten
|
||||
Kommandos.
|
||||
|
||||
@param master EtherCAT-Master
|
||||
@param cmd Gesendetes Kommando
|
||||
|
||||
@return 0 bei Erfolg, sonst < 0
|
||||
\return 0 bei Erfolg, sonst < 0
|
||||
*/
|
||||
|
||||
int ec_simple_receive(ec_master_t *master, ec_command_t *cmd)
|
||||
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 @@ int ec_simple_receive(ec_master_t *master, ec_command_t *cmd)
|
|||
/**
|
||||
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 @@ int ec_scan_for_slaves(ec_master_t *master)
|
|||
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
|
||||
\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)
|
||||
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 @@ int ec_sii_read(ec_master_t *master, unsigned short int node_address,
|
|||
/*****************************************************************************/
|
||||
|
||||
/**
|
||||
Ändert den Zustand eines Slaves (asynchron).
|
||||
Ändert den Zustand eines Slaves.
|
||||
|
||||
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
|
||||
\return 0 bei Erfolg, sonst < 0
|
||||
*/
|
||||
|
||||
int ec_state_change(ec_master_t *master, ec_slave_t *slave,
|
||||
unsigned char state_and_ack)
|
||||
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 @@ int ec_state_change(ec_master_t *master, ec_slave_t *slave,
|
|||
|
||||
/**
|
||||
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 @@ void ec_output_debug_data(const ec_master_t *master)
|
|||
|
||||
/**
|
||||
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 @@ void ec_output_lost_frames(ec_master_t *master)
|
|||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/**
|
||||
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 @@ void ec_output_lost_frames(ec_master_t *master)
|
|||
/**
|
||||
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 @@ ec_slave_t *EtherCAT_rt_register_slave(ec_master_t *master,
|
|||
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 @@ ec_slave_t *EtherCAT_rt_register_slave(ec_master_t *master,
|
|||
/**
|
||||
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 @@ int EtherCAT_rt_register_slave_list(ec_master_t *master,
|
|||
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
|
||||
\return 0 bei Erfolg, sonst < 0
|
||||
*/
|
||||
|
||||
int EtherCAT_rt_activate_slaves(ec_master_t *master)
|
||||
int EtherCAT_rt_activate_slaves(ec_master_t *master /**< EtherCAT-Master */)
|
||||
{
|
||||
unsigned int i;
|
||||
ec_slave_t *slave;
|
||||
|
|
@ -1072,12 +1146,10 @@ int EtherCAT_rt_activate_slaves(ec_master_t *master)
|
|||
/**
|
||||
Setzt alle Slaves zurück in den Init-Zustand.
|
||||
|
||||
@param master EtherCAT-Master
|
||||
|
||||
@return 0 bei Erfolg, sonst < 0
|
||||
\return 0 bei Erfolg, sonst < 0
|
||||
*/
|
||||
|
||||
int EtherCAT_rt_deactivate_slaves(ec_master_t *master)
|
||||
int EtherCAT_rt_deactivate_slaves(ec_master_t *master /**< EtherCAT-Master */)
|
||||
{
|
||||
ec_slave_t *slave;
|
||||
unsigned int i;
|
||||
|
|
@ -1098,15 +1170,16 @@ int EtherCAT_rt_deactivate_slaves(ec_master_t *master)
|
|||
/**
|
||||
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
|
||||
\return 0 bei Erfolg, sonst < 0
|
||||
*/
|
||||
|
||||
int EtherCAT_rt_domain_xio(ec_master_t *master, unsigned int domain,
|
||||
unsigned int timeout_us)
|
||||
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 @@ int EtherCAT_rt_domain_xio(ec_master_t *master, unsigned int domain,
|
|||
|
||||
/**
|
||||
Setzt die Debug-Ebene des Masters.
|
||||
|
||||
Folgende Debug-level sind definiert:
|
||||
|
||||
- 1: Nur Positionsmarken in bestimmten Funktionen
|
||||
- 2: Komplette Frame-Inhalte
|
||||
*/
|
||||
|
||||
void EtherCAT_rt_debug_level(ec_master_t *master, int level)
|
||||
void EtherCAT_rt_debug_level(ec_master_t *master,
|
||||
/**< EtherCAT-Master */
|
||||
int level
|
||||
/**< Debug-Level */
|
||||
)
|
||||
{
|
||||
master->debug_level = level;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ void ec_master_close(ec_master_t *);
|
|||
|
||||
// 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 *);
|
||||
|
|
|
|||
29
mini/mini.c
29
mini/mini.c
|
|
@ -24,9 +24,9 @@ struct timer_list timer;
|
|||
|
||||
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 @@ ec_slave_init_t slaves[] = {
|
|||
|
||||
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 @@ int __init init_mini_module(void)
|
|||
|
||||
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");
|
||||
|
||||
|
|
|
|||
|
|
@ -52,16 +52,15 @@ static struct ipipe_sysinfo sys_info;
|
|||
|
||||
// EtherCAT
|
||||
ec_master_t *master = NULL;
|
||||
ec_slave_t *s_in1, *s_out1, *s_out2, *s_out3;
|
||||
ec_slave_t *s_in1, *s_out1, *s_ssi, *s_inc;
|
||||
|
||||
double value;
|
||||
int dig1;
|
||||
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 @@ static void msr_controller_run(void)
|
|||
|
||||
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);
|
||||
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 / 4;
|
||||
counter = MSR_ABTASTFREQUENZ * 5;
|
||||
}
|
||||
|
||||
EC_WRITE_EL20XX(s_out3, 3, EC_READ_EL31XX(s_in1, 0) < 0);
|
||||
|
||||
// Prozessdaten lesen und schreiben
|
||||
EtherCAT_rt_domain_xio(master, 0, 40);
|
||||
angle0 = EC_READ_EL5101_VALUE(s_inc);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
|
|
@ -143,7 +141,7 @@ void domain_entry(void)
|
|||
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 @@ void domain_entry(void)
|
|||
|
||||
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 @@ int __init init_rt_module(void)
|
|||
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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue