Updated Doxygen documentation. stable-1.5
authorFlorian Pose <fp@igh-essen.com>
Tue, 12 Feb 2013 15:46:43 +0100
branchstable-1.5
changeset 2522 ec403cf308eb
parent 2521 3d68bb0047a1
child 2523 c5c81a52fc30
Updated Doxygen documentation.
Doxyfile.in
include/ecrt.h
master/cdev.c
master/coe_emerg_ring.c
master/coe_emerg_ring.h
master/datagram.c
master/datagram_pair.c
master/datagram_pair.h
master/debug.c
master/device.c
master/domain.c
master/ethernet.c
master/foe_request.c
master/fsm_coe.c
master/fsm_foe.c
master/fsm_master.c
master/fsm_pdo.c
master/fsm_pdo_entry.c
master/fsm_slave.c
master/ioctl.c
master/master.c
master/master.h
master/module.c
master/pdo.c
master/pdo_list.c
master/reg_request.c
master/reg_request.h
master/rtdm.c
master/rtdm.h
master/sdo_request.c
master/slave.c
master/slave.h
master/slave_config.c
master/slave_config.h
master/soe_request.c
master/sync.c
master/voe_handler.c
--- a/Doxyfile.in	Tue Feb 12 15:30:34 2013 +0100
+++ b/Doxyfile.in	Tue Feb 12 15:46:43 2013 +0100
@@ -1,29 +1,30 @@
-# Doxyfile 1.5.3
+# Doxyfile 1.8.1
 
 # This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
+# doxygen (www.doxygen.org) for a project.
 #
-# All text after a hash (#) is considered a comment and will be ignored
+# All text after a hash (#) is considered a comment and will be ignored.
 # The format is:
 #       TAG = value [value, ...]
 # For lists items can also be appended using:
 #       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
+# Values that contain spaces should be placed between quotes (" ").
 
 #---------------------------------------------------------------------------
 # Project related configuration options
 #---------------------------------------------------------------------------
 
-# This tag specifies the encoding used for all characters in the config file that
-# follow. The default is UTF-8 which is also the encoding used for all text before
-# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
-# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
-# possible encodings.
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
 
 DOXYFILE_ENCODING      = UTF-8
 
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
 
 PROJECT_NAME           = "IgH EtherCAT Master"
 
@@ -33,6 +34,19 @@
 
 PROJECT_NUMBER         = @VERSION@
 
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           =
+
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
 # base path where the generated documentation will be put.
 # If a relative path is entered, it will be relative to the location
@@ -54,10 +68,11 @@
 # information to generate all constant output in the proper language.
 # The default language is English, other supported languages are:
 # Afrikaans, Arabic, 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, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
 
 OUTPUT_LANGUAGE        = English
 
@@ -125,7 +140,7 @@
 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
+# (but less readable) file names. This can be useful if your file system
 # doesn't support long names like on DOS, Mac, or CD-ROM.
 
 SHORT_NAMES            = NO
@@ -154,13 +169,6 @@
 
 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.
@@ -187,6 +195,13 @@
 
 ALIASES                =
 
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
 # 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
@@ -195,17 +210,50 @@
 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.
+# 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
 
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
-# include (a tag file for) the STL sources as input, then you should
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this
+# tag. The format is ext=language, where ext is a file extension, and language
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
 # set this tag to YES in order to let doxygen match functions declarations and
 # definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
+# func(std::string) {}). This also makes the inheritance and collaboration
 # diagrams that involve STL classes more complete and accurate.
 
 BUILTIN_STL_SUPPORT    = NO
@@ -215,6 +263,21 @@
 
 CPP_CLI_SUPPORT        = NO
 
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = 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
@@ -230,6 +293,59 @@
 
 SUBGROUPING            = YES
 
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 0
+
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
@@ -246,6 +362,10 @@
 
 EXTRACT_PRIVATE        = YES
 
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
 # If the EXTRACT_STATIC tag is set to YES all static members of a file
 # will be included in the documentation.
 
@@ -264,10 +384,11 @@
 
 EXTRACT_LOCAL_METHODS  = YES
 
-# If this flag is set to YES, the members of anonymous namespaces will be extracted
-# and appear in the documentation as a namespace called 'anonymous_namespace{file}',
-# where file will be replaced with the base name of the file that contains the anonymous
-# namespace. By default anonymous namespace are hidden.
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
 
 EXTRACT_ANON_NSPACES   = NO
 
@@ -327,6 +448,12 @@
 
 SHOW_INCLUDE_FILES     = NO
 
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
 # is inserted in the documentation for inline members.
 
@@ -346,6 +473,22 @@
 
 SORT_BRIEF_DOCS        = NO
 
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = 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,
@@ -356,6 +499,15 @@
 
 SORT_BY_SCOPE_NAME     = NO
 
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
 # The GENERATE_TODOLIST tag can be used to enable (YES) or
 # disable (NO) the todo list. This list is created by putting \todo
 # commands in the documentation.
@@ -386,10 +538,10 @@
 ENABLED_SECTIONS       =
 
 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
+# the initial value of a variable or macro 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
+# The appearance of the initializer of individual variables and macros in the
 # documentation can be controlled using \showinitializer or \hideinitializer
 # command in the documentation regardless of this setting.
 
@@ -401,15 +553,22 @@
 
 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 NO.
-
-SHOW_DIRECTORIES       = YES
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = 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
+# 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 program writes to standard output
@@ -417,6 +576,25 @@
 
 FILE_VERSION_FILTER    =
 
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. The create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         =
+
 #---------------------------------------------------------------------------
 # configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
@@ -445,7 +623,7 @@
 
 WARN_IF_DOC_ERROR      = YES
 
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# The WARN_NO_PARAMDOC option can be enabled 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
@@ -481,10 +659,11 @@
                          include \
                          devices/ecdev.h
 
-# This tag can be used to specify the character encoding of the source files that
-# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
-# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
-# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
 
 INPUT_ENCODING         = UTF-8
 
@@ -492,8 +671,9 @@
 # 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 *.cs *.php *.php3 *.inc *.m *.mm *.py
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
 
 FILE_PATTERNS          =
 
@@ -503,14 +683,16 @@
 
 RECURSIVE              = NO
 
-# The EXCLUDE tag can be used to specify files and/or directories that should
+# The EXCLUDE tag can be used to specify files and/or directories that should be
 # 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.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
 
 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
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
 # from the input.
 
 EXCLUDE_SYMLINKS       = NO
@@ -524,9 +706,10 @@
 EXCLUDE_PATTERNS       = *.mod.c
 
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the output.
-# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
-# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
 
 EXCLUDE_SYMBOLS        =
 
@@ -561,17 +744,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.  If FILTER_PATTERNS is specified, this tag will be
+# 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:
+# 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.
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
 
 FILTER_PATTERNS        =
 
@@ -581,6 +767,14 @@
 
 FILTER_SOURCE_FILES    = NO
 
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
 #---------------------------------------------------------------------------
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
@@ -588,9 +782,7 @@
 # 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.
 # Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH
-# then you must also enable this option. If you don't then doxygen will produce
-# a warning and turn it on anyway
+# VERBATIM_HEADERS is set to NO.
 
 SOURCE_BROWSER         = YES
 
@@ -605,13 +797,13 @@
 
 STRIP_CODE_COMMENTS    = YES
 
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# If the REFERENCED_BY_RELATION tag is set to YES
 # then for each documented function all documented
 # functions referencing it will be listed.
 
 REFERENCED_BY_RELATION = NO
 
-# If the REFERENCES_RELATION tag is set to YES (the default)
+# If the REFERENCES_RELATION tag is set to YES
 # then for each documented function all documented entities
 # called/used by that function will be listed.
 
@@ -620,7 +812,8 @@
 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
+# link to the source code.
+# Otherwise they will link to the documentation.
 
 REFERENCES_LINK_SOURCE = YES
 
@@ -684,7 +877,14 @@
 
 # The HTML_HEADER tag can be used to specify a personal HTML header for
 # each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
 
 HTML_HEADER            =
 
@@ -699,31 +899,111 @@
 # fine-tune the look of the HTML output. If the tag is left blank doxygen
 # 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!
+# style sheet in the HTML output directory as well, or it will be erased!
 
 HTML_STYLESHEET        =
 
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
 
 # If the GENERATE_HTMLHELP tag is set to YES, additional index files
 # will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
 # of the generated HTML documentation.
 
 GENERATE_HTMLHELP      = NO
 
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded. For this to work a browser that supports
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS  = 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
@@ -744,6 +1024,12 @@
 
 GENERATE_CHI           = NO
 
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
 # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
 # controls whether a binary table of contents is generated (YES) or a
 # normal table of contents (NO) in the .chm file.
@@ -755,32 +1041,176 @@
 
 TOC_EXPAND             = NO
 
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
 
 DISABLE_INDEX          = NO
 
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value 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, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
 
 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, 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
-
 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
 # used to set the initial width (in pixels) of the frame in which the tree
 # is shown.
 
 TREEVIEW_WIDTH         = 250
 
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
 #---------------------------------------------------------------------------
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
@@ -798,6 +1228,9 @@
 
 # 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.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
 
 LATEX_CMD_NAME         = latex
 
@@ -814,7 +1247,7 @@
 COMPACT_LATEX          = NO
 
 # The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
+# by the printer. Possible values are: a4, letter, legal and
 # executive. If left blank a4wide will be used.
 
 PAPER_TYPE             = a4wide
@@ -831,6 +1264,13 @@
 
 LATEX_HEADER           =
 
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
 # is prepared for conversion to pdf (using ps2pdf). The pdf file will
 # contain links (just like the HTML output) instead of page references
@@ -857,6 +1297,19 @@
 
 LATEX_HIDE_INDICES     = NO
 
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
 #---------------------------------------------------------------------------
 # configuration options related to the RTF output
 #---------------------------------------------------------------------------
@@ -888,7 +1341,7 @@
 
 RTF_HYPERLINKS         = NO
 
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# Load style sheet definitions from file. Syntax is similar to doxygen's
 # config file, i.e. a series of assignments. You only have to provide
 # replacements, missing definitions are set to their default value.
 
@@ -993,8 +1446,10 @@
 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
+# 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.
 
@@ -1031,7 +1486,7 @@
 EXPAND_ONLY_PREDEF     = NO
 
 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
 
 SEARCH_INCLUDES        = YES
 
@@ -1061,15 +1516,15 @@
 # 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.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
 
 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.
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
 
 SKIP_FUNCTION_MACROS   = YES
 
@@ -1077,20 +1532,18 @@
 # 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 ...
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. 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 = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. 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               =
 
@@ -1123,17 +1576,17 @@
 # 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 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.
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
 
 CLASS_DIAGRAMS         = YES
 
 # You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
-# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
-# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
-# be found in the default search path.
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
 
 MSCGEN_PATH            =
 
@@ -1150,10 +1603,38 @@
 
 HAVE_DOT               = NO
 
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
 # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
 # will generate a graph for each documented class showing the direct and
 # indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
+# CLASS_DIAGRAMS tag to NO.
 
 CLASS_GRAPH            = YES
 
@@ -1175,6 +1656,15 @@
 
 UML_LOOK               = NO
 
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
 # If set to YES, the inheritance and collaboration graphs will show the
 # relations between templates and their instances.
 
@@ -1194,28 +1684,28 @@
 
 INCLUDED_BY_GRAPH      = YES
 
-# If the CALL_GRAPH, SOURCE_BROWSER 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.
+# If the CALL_GRAPH and HAVE_DOT options 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 CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will
-# generate a caller 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 caller graphs for selected
-# functions only using the \callergraph command.
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller 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 caller
+# graphs for selected functions only using the \callergraph command.
 
 CALLER_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.
+# will generate a 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
+# If the DIRECTORY_GRAPH 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.
@@ -1223,11 +1713,22 @@
 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.
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
 
 DOT_IMAGE_FORMAT       = png
 
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
 # 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 in the path.
 
@@ -1239,12 +1740,18 @@
 
 DOTFILE_DIRS           =
 
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
 # nodes that will be shown in the graph. If the number of nodes in a graph
 # becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen if the number
-# of direct children of the root node in a graph is already larger than
-# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
 
 DOT_GRAPH_MAX_NODES    = 50
@@ -1260,10 +1767,10 @@
 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).
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. 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
 
@@ -1285,12 +1792,3 @@
 # the various graphs.
 
 DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# 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
--- a/include/ecrt.h	Tue Feb 12 15:30:34 2013 +0100
+++ b/include/ecrt.h	Tue Feb 12 15:46:43 2013 +0100
@@ -175,15 +175,15 @@
  */
 #define EC_HAVE_REG_ACCESS
 
-/* Defined if the method ecrt_master_select_reference_clock() is available.
+/** Defined if the method ecrt_master_select_reference_clock() is available.
  */
 #define EC_HAVE_SELECT_REF_CLOCK
 
-/* Defined if the method ecrt_master_reference_clock_time() is available.
+/** Defined if the method ecrt_master_reference_clock_time() is available.
  */
 #define EC_HAVE_REF_CLOCK_TIME
 
-/* Defined if the method ecrt_slave_config_reg_pdo_entry_pos() is available.
+/** Defined if the method ecrt_slave_config_reg_pdo_entry_pos() is available.
  */
 #define EC_HAVE_REG_BY_POS
 
@@ -1449,6 +1449,8 @@
  *
  * The created SDO request object is freed automatically when the master is
  * released.
+ *
+ * \return New SDO request, or NULL on error.
  */
 ec_sdo_request_t *ecrt_slave_config_create_sdo_request(
         ec_slave_config_t *sc, /**< Slave configuration. */
@@ -1466,6 +1468,8 @@
  *
  * The created VoE handler object is freed automatically when the master is
  * released.
+ *
+ * \return New VoE handler, or NULL on error.
  */
 ec_voe_handler_t *ecrt_slave_config_create_voe_handler(
         ec_slave_config_t *sc, /**< Slave configuration. */
@@ -1480,6 +1484,8 @@
  *
  * The created register request object is freed automatically when the master
  * is released.
+ *
+ * \return New register request, or NULL on error.
  */
 ec_reg_request_t *ecrt_slave_config_create_reg_request(
         ec_slave_config_t *sc, /**< Slave configuration. */
--- a/master/cdev.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/cdev.c	Tue Feb 12 15:46:43 2013 +0100
@@ -222,6 +222,8 @@
  *
  * The actual mapping will be done in the eccdev_vma_nopage() callback of the
  * virtual memory area.
+ *
+ * \return Always zero (success).
  */
 int eccdev_mmap(
         struct file *filp,
@@ -247,6 +249,8 @@
  *
  * Called at the first access on a virtual-memory area retrieved with
  * ecdev_mmap().
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static int eccdev_vma_fault(
         struct vm_area_struct *vma, /**< Virtual memory area. */
@@ -257,12 +261,14 @@
     ec_cdev_priv_t *priv = (ec_cdev_priv_t *) vma->vm_private_data;
     struct page *page;
 
-    if (offset >= priv->ctx.process_data_size)
+    if (offset >= priv->ctx.process_data_size) {
         return VM_FAULT_SIGBUS;
+    }
 
     page = vmalloc_to_page(priv->ctx.process_data + offset);
-    if (!page)
+    if (!page) {
         return VM_FAULT_SIGBUS;
+    }
 
     get_page(page);
     vmf->page = page;
--- a/master/coe_emerg_ring.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/coe_emerg_ring.c	Tue Feb 12 15:46:43 2013 +0100
@@ -29,10 +29,9 @@
  *
  *****************************************************************************/
 
-/**
-   \file
-   EtherCAT CoE emergency ring buffer methods.
-*/
+/** \file
+ * EtherCAT CoE emergency ring buffer methods.
+ */
 
 /*****************************************************************************/
 
@@ -73,6 +72,8 @@
 /*****************************************************************************/
 
 /** Set the ring size.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_coe_emerg_ring_size(
         ec_coe_emerg_ring_t *ring, /**< Emergency ring. */
@@ -128,6 +129,8 @@
 /*****************************************************************************/
 
 /** Remove an emergency message from the ring.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_coe_emerg_ring_pop(
         ec_coe_emerg_ring_t *ring, /**< Emergency ring. */
@@ -146,6 +149,8 @@
 /*****************************************************************************/
 
 /** Clear the ring.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_coe_emerg_ring_clear_ring(
         ec_coe_emerg_ring_t *ring /**< Emergency ring. */
@@ -159,6 +164,8 @@
 /*****************************************************************************/
 
 /** Read the number of overruns.
+ *
+ * \return Number of overruns.
  */
 int ec_coe_emerg_ring_overruns(
         ec_coe_emerg_ring_t *ring /**< Emergency ring. */
--- a/master/coe_emerg_ring.h	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/coe_emerg_ring.h	Tue Feb 12 15:46:43 2013 +0100
@@ -44,7 +44,7 @@
 /** EtherCAT CoE emergency message record.
  */
 typedef struct {
-    u8 data[EC_COE_EMERGENCY_MSG_SIZE];
+    u8 data[EC_COE_EMERGENCY_MSG_SIZE]; /**< Message data. */
 } ec_coe_emerg_msg_t;
 
 /*****************************************************************************/
@@ -54,12 +54,12 @@
 typedef struct {
     ec_slave_config_t *sc; /**< Slave configuration  owning the ring. */
 
-    ec_coe_emerg_msg_t *msgs;
-    size_t size;
+    ec_coe_emerg_msg_t *msgs; /**< Message ring. */
+    size_t size; /**< Ring size. */
 
-    unsigned int read_index;
-    unsigned int write_index;
-    unsigned int overruns;
+    unsigned int read_index; /**< Read index. */
+    unsigned int write_index; /**< Write index. */
+    unsigned int overruns; /**< Number of overruns since last reset. */
 } ec_coe_emerg_ring_t;
 
 /*****************************************************************************/
--- a/master/datagram.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/datagram.c	Tue Feb 12 15:46:43 2013 +0100
@@ -636,6 +636,8 @@
 /*****************************************************************************/
 
 /** Returns a string describing the datagram type.
+ *
+ * \return Pointer on a static memory containing the requested string.
  */
 const char *ec_datagram_type_string(
         const ec_datagram_t *datagram /**< EtherCAT datagram. */
--- a/master/datagram_pair.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/datagram_pair.c	Tue Feb 12 15:46:43 2013 +0100
@@ -42,12 +42,14 @@
 /*****************************************************************************/
 
 /** Datagram pair constructor.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_datagram_pair_init(
         ec_datagram_pair_t *pair, /**< Datagram pair. */
         ec_domain_t *domain, /**< Parent domain. */
-        uint32_t logical_offset,
-        uint8_t *data,
+        uint32_t logical_offset, /**< Logical offset. */
+        uint8_t *data, /**< Data pointer. */
         size_t data_size, /**< Data size. */
         const unsigned int used[] /**< input/output use count. */
         )
@@ -168,6 +170,8 @@
 /*****************************************************************************/
 
 /** Process received data.
+ *
+ * \return Working counter sum over all devices.
  */
 uint16_t ec_datagram_pair_process(
         ec_datagram_pair_t *pair, /**< Datagram pair. */
--- a/master/datagram_pair.h	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/datagram_pair.h	Tue Feb 12 15:46:43 2013 +0100
@@ -48,7 +48,7 @@
  */
 typedef struct {
     struct list_head list; /**< List header. */
-    ec_domain_t *domain;
+    ec_domain_t *domain; /**< Parent domain. */
     ec_datagram_t datagrams[EC_MAX_NUM_DEVICES]; /**< Datagrams.  */
 #if EC_MAX_NUM_DEVICES > 1
     uint8_t *send_buffer;
--- a/master/debug.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/debug.c	Tue Feb 12 15:46:43 2013 +0100
@@ -200,6 +200,8 @@
  *****************************************************************************/
 
 /** Opens the virtual network device.
+ *
+ * \return Always zero (success).
  */
 int ec_dbgdev_open(
         struct net_device *dev /**< debug net_device */
@@ -215,6 +217,8 @@
 /*****************************************************************************/
 
 /** Stops the virtual network device.
+ *
+ * \return Always zero (success).
  */
 int ec_dbgdev_stop(
         struct net_device *dev /**< debug net_device */
@@ -230,6 +234,8 @@
 /*****************************************************************************/
 
 /** Transmits data via the virtual network device.
+ *
+ * \return Always zero (success).
  */
 int ec_dbgdev_tx(
         struct sk_buff *skb, /**< transmit socket buffer */
@@ -246,6 +252,8 @@
 /*****************************************************************************/
 
 /** Gets statistics about the virtual network device.
+ *
+ * \return Statistics.
  */
 struct net_device_stats *ec_dbgdev_stats(
         struct net_device *dev /**< debug net_device */
--- a/master/device.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/device.c	Tue Feb 12 15:46:43 2013 +0100
@@ -698,6 +698,8 @@
 /** Reads the link state.
  *
  * \ingroup DeviceInterface
+ *
+ * \return Link state.
  */
 uint8_t ecdev_get_link(
         const ec_device_t *device /**< EtherCAT device */
--- a/master/domain.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/domain.c	Tue Feb 12 15:46:43 2013 +0100
@@ -43,6 +43,8 @@
 #include "domain.h"
 #include "datagram_pair.h"
 
+/** Extra debug output for redundancy functions.
+ */
 #define DEBUG_REDUNDANCY 0
 
 /*****************************************************************************/
@@ -187,6 +189,8 @@
  *
  * Walks through the list of all FMMU configurations for the current datagram
  * and ends before the current datagram.
+ *
+ * \return Non-zero if slave connfig was already counted.
  */
 int shall_count(
         const ec_fmmu_config_t *cur_fmmu, /**< Current FMMU with direction to
@@ -340,6 +344,8 @@
 /*****************************************************************************/
 
 /** Get a certain FMMU configuration via its position in the list.
+ *
+ * \return FMMU at position \a pos, or NULL.
  */
 const ec_fmmu_config_t *ec_domain_find_fmmu(
         const ec_domain_t *domain, /**< EtherCAT domain. */
--- a/master/ethernet.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/ethernet.c	Tue Feb 12 15:46:43 2013 +0100
@@ -98,6 +98,8 @@
 /** EoE constructor.
  *
  * Initializes the EoE handler, creates a net_device and registers it.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_eoe_init(
         ec_eoe_t *eoe, /**< EoE handler */
@@ -246,6 +248,8 @@
 /*****************************************************************************/
 
 /** Sends a frame or the next fragment.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_eoe_send(ec_eoe_t *eoe /**< EoE handler */)
 {
@@ -385,7 +389,7 @@
  * Starts a new receiving sequence by queueing a datagram that checks the
  * slave's mailbox for a new EoE datagram.
  *
- * \fixme Use both devices.
+ * \todo Use both devices.
  */
 void ec_eoe_state_rx_start(ec_eoe_t *eoe /**< EoE handler */)
 {
@@ -614,7 +618,7 @@
  * Starts a new transmit sequence. If no data is available, a new receive
  * sequence is started instead.
  *
- * \fixme Use both devices.
+ * \todo Use both devices.
  */
 void ec_eoe_state_tx_start(ec_eoe_t *eoe /**< EoE handler */)
 {
@@ -754,6 +758,8 @@
  *****************************************************************************/
 
 /** Opens the virtual network device.
+ *
+ * \return Always zero (success).
  */
 int ec_eoedev_open(struct net_device *dev /**< EoE net_device */)
 {
@@ -774,6 +780,8 @@
 /*****************************************************************************/
 
 /** Stops the virtual network device.
+ *
+ * \return Always zero (success).
  */
 int ec_eoedev_stop(struct net_device *dev /**< EoE net_device */)
 {
@@ -794,6 +802,8 @@
 /*****************************************************************************/
 
 /** Transmits data via the virtual network device.
+ *
+ * \return Zero on success, non-zero on failure.
  */
 int ec_eoedev_tx(struct sk_buff *skb, /**< transmit socket buffer */
                  struct net_device *dev /**< EoE net_device */
@@ -844,6 +854,8 @@
 /*****************************************************************************/
 
 /** Gets statistics about the virtual network device.
+ *
+ * \return Statistics.
  */
 struct net_device_stats *ec_eoedev_stats(
         struct net_device *dev /**< EoE net_device */
--- a/master/foe_request.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/foe_request.c	Tue Feb 12 15:46:43 2013 +0100
@@ -103,7 +103,10 @@
 
 /** Pre-allocates the data memory.
  *
- * If the \a buffer_size is already bigger than \a size, nothing is done.
+ * If the internal \a buffer_size is already bigger than \a size, nothing is
+ * done.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_foe_request_alloc(
         ec_foe_request_t *req, /**< FoE request. */
@@ -131,6 +134,8 @@
 /** Copies FoE data from an external source.
  *
  * If the \a buffer_size is to small, new memory is allocated.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_foe_request_copy_data(
         ec_foe_request_t *req, /**< FoE request. */
--- a/master/fsm_coe.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/fsm_coe.c	Tue Feb 12 15:46:43 2013 +0100
@@ -27,7 +27,8 @@
  *
  *****************************************************************************/
 
-/** \file EtherCAT CoE state machines.
+/** \file
+ * EtherCAT CoE state machines.
  */
 
 /*****************************************************************************/
@@ -307,6 +308,10 @@
  *  CoE dictionary state machine
  *****************************************************************************/
 
+/** Prepare a dictionary request.
+ *
+ * \return Zero on success, otherwise a negative error code.
+ */
 int ec_fsm_coe_prepare_dict(
         ec_fsm_coe_t *fsm, /**< Finite state machine. */
         ec_datagram_t *datagram /**< Datagram to use. */
@@ -455,6 +460,10 @@
 
 /*****************************************************************************/
 
+/** Prepare an object description request.
+ *
+ * \return Zero on success, otherwise a negative error code.
+ */
 int ec_fsm_coe_dict_prepare_desc(
         ec_fsm_coe_t *fsm, /**< Finite state machine. */
         ec_datagram_t *datagram /**< Datagram to use. */
@@ -733,6 +742,10 @@
 
 /*****************************************************************************/
 
+/** Prepare an entry description request.
+ *
+ * \return Zero on success, otherwise a negative error code.
+ */
 int ec_fsm_coe_dict_prepare_entry(
         ec_fsm_coe_t *fsm, /**< Finite state machine */
         ec_datagram_t *datagram /**< Datagram to use. */
@@ -1172,6 +1185,10 @@
  *  CoE state machine
  *****************************************************************************/
 
+/** Prepare a donwnload request.
+ *
+ * \return Zero on success, otherwise a negative error code.
+ */
 int ec_fsm_coe_prepare_down_start(
         ec_fsm_coe_t *fsm, /**< Finite state machine. */
         ec_datagram_t *datagram /**< Datagram to use. */
@@ -1814,6 +1831,10 @@
 
 /*****************************************************************************/
 
+/** Prepare an upload request.
+ *
+ * \return Zero on success, otherwise a negative error code.
+ */
 int ec_fsm_coe_prepare_up(
         ec_fsm_coe_t *fsm, /**< Finite state machine. */
         ec_datagram_t *datagram /**< Datagram to use. */
--- a/master/fsm_foe.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/fsm_foe.c	Tue Feb 12 15:46:43 2013 +0100
@@ -230,9 +230,11 @@
 /*****************************************************************************/
 
 /** Sends a file or the next fragment.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_foe_prepare_data_send(
-        ec_fsm_foe_t *fsm,
+        ec_fsm_foe_t *fsm, /**< Finite state machine. */
         ec_datagram_t *datagram /**< Datagram to use. */
         )
 {
@@ -270,6 +272,8 @@
 /*****************************************************************************/
 
 /** Prepare a write request (WRQ) with filename
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_foe_prepare_wrq_send(
         ec_fsm_foe_t *fsm, /**< Finite state machine. */
@@ -545,6 +549,8 @@
 /*****************************************************************************/
 
 /** Prepare a read request (RRQ) with filename
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_foe_prepare_rrq_send(
         ec_fsm_foe_t *fsm, /**< Finite state machine. */
@@ -577,6 +583,8 @@
 /*****************************************************************************/
 
 /** Prepare to send an acknowledge.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_foe_prepare_send_ack(
         ec_fsm_foe_t *fsm, /**< FoE statemachine. */
--- a/master/fsm_master.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/fsm_master.c	Tue Feb 12 15:46:43 2013 +0100
@@ -959,6 +959,8 @@
 /*****************************************************************************/
 
 /** Configure 32 bit time offset.
+ *
+ * \return New offset.
  */
 u64 ec_fsm_master_dc_offset32(
         ec_fsm_master_t *fsm, /**< Master state machine. */
@@ -999,6 +1001,8 @@
 /*****************************************************************************/
 
 /** Configure 64 bit time offset.
+ *
+ * \return New offset.
  */
 u64 ec_fsm_master_dc_offset64(
         ec_fsm_master_t *fsm, /**< Master state machine. */
--- a/master/fsm_pdo.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/fsm_pdo.c	Tue Feb 12 15:46:43 2013 +0100
@@ -27,7 +27,8 @@
  *
  *****************************************************************************/
 
-/** \file EtherCAT PDO configuration state machine.
+/** \file
+ * EtherCAT PDO configuration state machine.
  */
 
 /*****************************************************************************/
@@ -396,6 +397,8 @@
 /*****************************************************************************/
 
 /** Assign next PDO.
+ *
+ * \return Next PDO, or NULL.
  */
 ec_pdo_t *ec_fsm_pdo_conf_action_next_pdo(
         const ec_fsm_pdo_t *fsm, /**< PDO configuration state machine. */
--- a/master/fsm_pdo_entry.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/fsm_pdo_entry.c	Tue Feb 12 15:46:43 2013 +0100
@@ -363,6 +363,8 @@
 /*****************************************************************************/
 
 /** Process next PDO entry.
+ *
+ * \return Next PDO entry, or NULL.
  */
 ec_pdo_entry_t *ec_fsm_pdo_entry_conf_next_entry(
         const ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */
--- a/master/fsm_slave.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/fsm_slave.c	Tue Feb 12 15:46:43 2013 +0100
@@ -158,6 +158,8 @@
 /*****************************************************************************/
 
 /** Returns, if the FSM is currently not busy and ready to execute.
+ *
+ * \return Non-zero if ready.
  */
 int ec_fsm_slave_is_ready(
         const ec_fsm_slave_t *fsm /**< Slave state machine. */
--- a/master/ioctl.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/ioctl.c	Tue Feb 12 15:46:43 2013 +0100
@@ -49,6 +49,8 @@
  */
 #define DEBUG_LATENCY 0
 
+/** Optional compiler attributes fo ioctl() functions.
+ */
 #if 0
 #define ATTRIBUTES __attribute__ ((__noinline__))
 #else
@@ -75,6 +77,8 @@
 /*****************************************************************************/
 
 /** Get module information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_module(
         void *arg /**< Userspace address to store the results. */
@@ -94,6 +98,8 @@
 /*****************************************************************************/
 
 /** Get master information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_master(
         ec_master_t *master, /**< EtherCAT master. */
@@ -187,6 +193,8 @@
 /*****************************************************************************/
 
 /** Get slave information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave(
         ec_master_t *master, /**< EtherCAT master. */
@@ -272,6 +280,8 @@
 /*****************************************************************************/
 
 /** Get slave sync manager information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_sync(
         ec_master_t *master, /**< EtherCAT master. */
@@ -323,6 +333,8 @@
 /*****************************************************************************/
 
 /** Get slave sync manager PDO information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_sync_pdo(
         ec_master_t *master, /**< EtherCAT master. */
@@ -380,6 +392,8 @@
 /*****************************************************************************/
 
 /** Get slave sync manager PDO entry information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_sync_pdo_entry(
         ec_master_t *master, /**< EtherCAT master. */
@@ -447,6 +461,8 @@
 /*****************************************************************************/
 
 /** Get domain information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_domain(
         ec_master_t *master, /**< EtherCAT master. */
@@ -490,6 +506,8 @@
 /*****************************************************************************/
 
 /** Get domain FMMU information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_domain_fmmu(
         ec_master_t *master, /**< EtherCAT master. */
@@ -540,6 +558,8 @@
 /*****************************************************************************/
 
 /** Get domain data.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_domain_data(
         ec_master_t *master, /**< EtherCAT master. */
@@ -583,6 +603,8 @@
 /*****************************************************************************/
 
 /** Set master debug level.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_master_debug(
         ec_master_t *master, /**< EtherCAT master. */
@@ -595,6 +617,8 @@
 /*****************************************************************************/
 
 /** Issue a bus scan.
+ *
+ * \return Always zero (success).
  */
 static ATTRIBUTES int ec_ioctl_master_rescan(
         ec_master_t *master, /**< EtherCAT master. */
@@ -608,6 +632,8 @@
 /*****************************************************************************/
 
 /** Set slave state.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_state(
         ec_master_t *master, /**< EtherCAT master. */
@@ -641,6 +667,8 @@
 /*****************************************************************************/
 
 /** Get slave SDO information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_sdo(
         ec_master_t *master, /**< EtherCAT master. */
@@ -688,6 +716,8 @@
 /*****************************************************************************/
 
 /** Get slave SDO entry information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_sdo_entry(
         ec_master_t *master, /**< EtherCAT master. */
@@ -766,6 +796,8 @@
 /*****************************************************************************/
 
 /** Upload SDO.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_sdo_upload(
         ec_master_t *master, /**< EtherCAT master. */
@@ -810,6 +842,8 @@
 /*****************************************************************************/
 
 /** Download SDO.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_sdo_download(
         ec_master_t *master, /**< EtherCAT master. */
@@ -856,6 +890,8 @@
 /*****************************************************************************/
 
 /** Read a slave's SII.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_sii_read(
         ec_master_t *master, /**< EtherCAT master. */
@@ -902,6 +938,8 @@
 /*****************************************************************************/
 
 /** Write a slave's SII.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_sii_write(
         ec_master_t *master, /**< EtherCAT master. */
@@ -988,6 +1026,8 @@
 /*****************************************************************************/
 
 /** Read a slave's registers.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_reg_read(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1065,6 +1105,8 @@
 /*****************************************************************************/
 
 /** Write a slave's registers.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_reg_write(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1141,6 +1183,8 @@
 /*****************************************************************************/
 
 /** Get slave configuration information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_config(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1197,6 +1241,8 @@
 /*****************************************************************************/
 
 /** Get slave configuration PDO information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_config_pdo(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1251,6 +1297,8 @@
 /*****************************************************************************/
 
 /** Get slave configuration PDO entry information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_config_pdo_entry(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1314,6 +1362,8 @@
 /*****************************************************************************/
 
 /** Get slave configuration SDO information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_config_sdo(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1376,6 +1426,8 @@
 /*****************************************************************************/
 
 /** Get slave configuration IDN information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_config_idn(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1440,6 +1492,8 @@
 #ifdef EC_EOE
 
 /** Get EoE handler information.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_eoe_handler(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1490,6 +1544,8 @@
 /*****************************************************************************/
 
 /** Request the master from userspace.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_request(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1513,6 +1569,8 @@
 /*****************************************************************************/
 
 /** Create a domain.
+ *
+ * \return Domain index on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_create_domain(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1535,6 +1593,8 @@
 /*****************************************************************************/
 
 /** Create a slave configuration.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_create_slave_config(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1579,6 +1639,8 @@
 /*****************************************************************************/
 
 /** Select the DC reference clock.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_select_ref_clock(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1618,6 +1680,8 @@
 /*****************************************************************************/
 
 /** Activates the master.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_activate(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1699,6 +1763,8 @@
 /*****************************************************************************/
 
 /** Deactivates the master.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_deactivate(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1716,6 +1782,8 @@
 /*****************************************************************************/
 
 /** Set max. number of databytes in a cycle
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_set_send_interval(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1746,6 +1814,8 @@
 /*****************************************************************************/
 
 /** Send frames.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_send(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1764,6 +1834,8 @@
 /*****************************************************************************/
 
 /** Receive frames.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_receive(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1782,6 +1854,8 @@
 /*****************************************************************************/
 
 /** Get the master state.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_master_state(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1801,7 +1875,9 @@
 
 /*****************************************************************************/
 
-/** Get the master state.
+/** Get the link state.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_master_link_state(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1831,7 +1907,9 @@
 
 /*****************************************************************************/
 
-/** Set the master dc app time.
+/** Set the master DC application time.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_app_time(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1855,6 +1933,8 @@
 /*****************************************************************************/
 
 /** Sync the reference clock.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sync_ref(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1873,6 +1953,8 @@
 /*****************************************************************************/
 
 /** Sync the slave clocks.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sync_slaves(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1891,6 +1973,8 @@
 /*****************************************************************************/
 
 /** Get the system time of the reference clock.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_ref_clock_time(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1920,6 +2004,8 @@
 /*****************************************************************************/
 
 /** Queue the sync monitoring datagram.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sync_mon_queue(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1938,6 +2024,8 @@
 /*****************************************************************************/
 
 /** Processes the sync monitoring datagram.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sync_mon_process(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1961,6 +2049,8 @@
 /*****************************************************************************/
 
 /** Reset configuration.
+ *
+ * \return Always zero (success).
  */
 static ATTRIBUTES int ec_ioctl_reset(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1977,6 +2067,8 @@
 /*****************************************************************************/
 
 /** Configure a sync manager.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_sync(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2028,6 +2120,8 @@
 /*****************************************************************************/
 
 /** Configure a slave's watchdogs.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_watchdog(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2071,6 +2165,8 @@
 /*****************************************************************************/
 
 /** Add a PDO to the assignment.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_add_pdo(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2095,7 +2191,7 @@
         return -ENOENT;
     }
 
-    up(&master->master_sem); /** \fixme sc could be invalidated */
+    up(&master->master_sem); /** \todo sc could be invalidated */
 
     return ecrt_slave_config_pdo_assign_add(sc, data.sync_index, data.index);
 }
@@ -2103,6 +2199,8 @@
 /*****************************************************************************/
 
 /** Clears the PDO assignment.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_clear_pdos(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2127,7 +2225,7 @@
         return -ENOENT;
     }
 
-    up(&master->master_sem); /** \fixme sc could be invalidated */
+    up(&master->master_sem); /** \todo sc could be invalidated */
 
     ecrt_slave_config_pdo_assign_clear(sc, data.sync_index);
     return 0;
@@ -2136,6 +2234,8 @@
 /*****************************************************************************/
 
 /** Add an entry to a PDO's mapping.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_add_entry(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2160,7 +2260,7 @@
         return -ENOENT;
     }
 
-    up(&master->master_sem); /** \fixme sc could be invalidated */
+    up(&master->master_sem); /** \todo sc could be invalidated */
 
     return ecrt_slave_config_pdo_mapping_add(sc, data.pdo_index,
             data.entry_index, data.entry_subindex, data.entry_bit_length);
@@ -2169,6 +2269,8 @@
 /*****************************************************************************/
 
 /** Clears the mapping of a PDO.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_clear_entries(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2193,7 +2295,7 @@
         return -ENOENT;
     }
 
-    up(&master->master_sem); /** \fixme sc could be invalidated */
+    up(&master->master_sem); /** \todo sc could be invalidated */
 
     ecrt_slave_config_pdo_mapping_clear(sc, data.index);
     return 0;
@@ -2202,6 +2304,8 @@
 /*****************************************************************************/
 
 /** Registers a PDO entry.
+ *
+ * \return Process data offset on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_reg_pdo_entry(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2233,7 +2337,7 @@
         return -ENOENT;
     }
 
-    up(&master->master_sem); /** \fixme sc or domain could be invalidated */
+    up(&master->master_sem); /** \todo sc or domain could be invalidated */
 
     ret = ecrt_slave_config_reg_pdo_entry(sc, data.entry_index,
             data.entry_subindex, domain, &data.bit_position);
@@ -2247,6 +2351,8 @@
 /*****************************************************************************/
 
 /** Registers a PDO entry by its position.
+ *
+ * \return Process data offset on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_reg_pdo_pos(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2281,7 +2387,7 @@
         return -ENOENT;
     }
 
-    up(&master->master_sem); /** \fixme sc or domain could be invalidated */
+    up(&master->master_sem); /** \todo sc or domain could be invalidated */
 
     ret = ecrt_slave_config_reg_pdo_entry_pos(sc, io.sync_index,
             io.pdo_pos, io.entry_pos, domain, &io.bit_position);
@@ -2295,6 +2401,8 @@
 /*****************************************************************************/
 
 /** Sets the DC AssignActivate word and the sync signal times.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_dc(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2333,6 +2441,8 @@
 /*****************************************************************************/
 
 /** Configures an SDO.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_sdo(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2374,7 +2484,7 @@
         return -ENOENT;
     }
 
-    up(&master->master_sem); /** \fixme sc could be invalidated */
+    up(&master->master_sem); /** \todo sc could be invalidated */
 
     if (data.complete_access) {
         ret = ecrt_slave_config_complete_sdo(sc,
@@ -2390,6 +2500,8 @@
 /*****************************************************************************/
 
 /** Set the emergency ring buffer size.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_emerg_size(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2426,6 +2538,8 @@
 /*****************************************************************************/
 
 /** Get an emergency message from the ring.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_emerg_pop(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2468,6 +2582,8 @@
 /*****************************************************************************/
 
 /** Clear the emergency ring.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_emerg_clear(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2499,6 +2615,8 @@
 /*****************************************************************************/
 
 /** Get the number of emergency overruns.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_emerg_overruns(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2542,6 +2660,8 @@
 /*****************************************************************************/
 
 /** Create an SDO request.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_create_sdo_request(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2575,7 +2695,7 @@
         data.request_index++;
     }
 
-    up(&master->master_sem); /** \fixme sc could be invalidated */
+    up(&master->master_sem); /** \todo sc could be invalidated */
 
     req = ecrt_slave_config_create_sdo_request_err(sc, data.sdo_index,
             data.sdo_subindex, data.size);
@@ -2591,6 +2711,8 @@
 /*****************************************************************************/
 
 /** Create a register request.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_create_reg_request(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2626,7 +2748,7 @@
         io.request_index++;
     }
 
-    up(&master->master_sem); /** \fixme sc could be invalidated */
+    up(&master->master_sem); /** \todo sc could be invalidated */
 
     reg = ecrt_slave_config_create_reg_request_err(sc, io.mem_size);
     if (IS_ERR(reg)) {
@@ -2643,6 +2765,8 @@
 /*****************************************************************************/
 
 /** Create a VoE handler.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_create_voe_handler(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2676,7 +2800,7 @@
         data.voe_index++;
     }
 
-    up(&master->master_sem); /** \fixme sc could be invalidated */
+    up(&master->master_sem); /** \todo sc could be invalidated */
 
     voe = ecrt_slave_config_create_voe_handler_err(sc, data.size);
     if (IS_ERR(voe))
@@ -2691,6 +2815,8 @@
 /*****************************************************************************/
 
 /** Get the slave configuration's state.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_state(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2727,6 +2853,8 @@
 /*****************************************************************************/
 
 /** Configures an IDN.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sc_idn(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2768,7 +2896,7 @@
         return -ENOENT;
     }
 
-    up(&master->master_sem); /** \fixme sc could be invalidated */
+    up(&master->master_sem); /** \todo sc could be invalidated */
 
     ret = ecrt_slave_config_idn(
             sc, ioctl.drive_no, ioctl.idn, ioctl.al_state, data, ioctl.size);
@@ -2779,6 +2907,8 @@
 /*****************************************************************************/
 
 /** Gets the domain's data size.
+ *
+ * \return Domain size, or a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_domain_size(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2811,6 +2941,8 @@
 /*****************************************************************************/
 
 /** Gets the domain's offset in the total process data.
+ *
+ * \return Domain offset, or a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_domain_offset(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2843,6 +2975,8 @@
 /*****************************************************************************/
 
 /** Process the domain.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_domain_process(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2869,6 +3003,8 @@
 /*****************************************************************************/
 
 /** Queue the domain.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_domain_queue(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2895,6 +3031,8 @@
 /*****************************************************************************/
 
 /** Get the domain state.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_domain_state(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2931,6 +3069,8 @@
 /*****************************************************************************/
 
 /** Sets an SDO request's SDO index and subindex.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sdo_request_index(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2966,6 +3106,8 @@
 /*****************************************************************************/
 
 /** Sets an SDO request's timeout.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sdo_request_timeout(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3001,6 +3143,8 @@
 /*****************************************************************************/
 
 /** Gets an SDO request's state.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sdo_request_state(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3044,6 +3188,8 @@
 /*****************************************************************************/
 
 /** Starts an SDO read operation.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sdo_request_read(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3079,6 +3225,8 @@
 /*****************************************************************************/
 
 /** Starts an SDO write operation.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sdo_request_write(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3128,6 +3276,8 @@
 /*****************************************************************************/
 
 /** Read SDO data.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_sdo_request_data(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3166,6 +3316,8 @@
 /*****************************************************************************/
 
 /** Read register data.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_reg_request_data(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3211,6 +3363,8 @@
 /*****************************************************************************/
 
 /** Gets an register request's state.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_reg_request_state(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3254,6 +3408,8 @@
 /*****************************************************************************/
 
 /** Starts an register write operation.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_reg_request_write(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3300,6 +3456,8 @@
 /*****************************************************************************/
 
 /** Starts an register read operation.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_reg_request_read(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3341,6 +3499,8 @@
 /*****************************************************************************/
 
 /** Sets the VoE send header.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_voe_send_header(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3384,6 +3544,8 @@
 /*****************************************************************************/
 
 /** Gets the received VoE header.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_voe_rec_header(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3430,6 +3592,8 @@
 /*****************************************************************************/
 
 /** Starts a VoE read operation.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_voe_read(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3465,6 +3629,8 @@
 /*****************************************************************************/
 
 /** Starts a VoE read operation without sending a sync message first.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_voe_read_nosync(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3500,6 +3666,8 @@
 /*****************************************************************************/
 
 /** Starts a VoE write operation.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_voe_write(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3544,6 +3712,8 @@
 /*****************************************************************************/
 
 /** Executes the VoE state machine.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_voe_exec(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3587,6 +3757,8 @@
 /*****************************************************************************/
 
 /** Reads the received VoE data.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_voe_data(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3625,6 +3797,8 @@
 /*****************************************************************************/
 
 /** Read a file from a slave via FoE.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_foe_read(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3719,6 +3893,8 @@
 /*****************************************************************************/
 
 /** Write a file to a slave via FoE
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_foe_write(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3805,6 +3981,8 @@
 /*****************************************************************************/
 
 /** Read an SoE IDN.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_soe_read(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3852,6 +4030,8 @@
 /*****************************************************************************/
 
 /** Write an IDN to a slave via SoE.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 static ATTRIBUTES int ec_ioctl_slave_soe_write(
         ec_master_t *master, /**< EtherCAT master. */
@@ -3895,6 +4075,8 @@
 
 /*****************************************************************************/
 
+/** ioctl() function to use.
+ */
 #ifdef EC_IOCTL_RTDM
 #define EC_IOCTL ec_ioctl_rtdm
 #else
@@ -3902,9 +4084,15 @@
 #endif
 
 /** Called when an ioctl() command is issued.
- */
-long EC_IOCTL(ec_master_t *master, ec_ioctl_context_t *ctx,
-        unsigned int cmd, void *arg)
+ *
+ * \return ioctl() return code.
+ */
+long EC_IOCTL(
+        ec_master_t *master, /**< EtherCAT master. */
+        ec_ioctl_context_t *ctx, /**< Device context. */
+        unsigned int cmd, /**< ioctl() command identifier. */
+        void *arg /**< ioctl() argument. */
+        )
 {
 #if DEBUG_LATENCY
     cycles_t a = get_cycles(), b;
--- a/master/master.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/master.c	Tue Feb 12 15:46:43 2013 +0100
@@ -614,6 +614,8 @@
 /*****************************************************************************/
 
 /** Transition function from ORPHANED to IDLE phase.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_master_enter_idle_phase(
         ec_master_t *master /**< EtherCAT master */
@@ -669,6 +671,8 @@
 /*****************************************************************************/
 
 /** Transition function from IDLE to OPERATION phase.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_master_enter_operation_phase(
         ec_master_t *master /**< EtherCAT master */
@@ -897,6 +901,8 @@
 /*****************************************************************************/
 
 /** Searches for a free datagram in the external datagram ring.
+ *
+ * \return Next free datagram, or NULL.
  */
 ec_datagram_t *ec_master_get_external_datagram(
         ec_master_t *master /**< EtherCAT master */
@@ -1779,6 +1785,8 @@
     } while (0)
 
 /** Finds a slave in the bus, given the alias and position.
+ *
+ * \return Search result, or NULL.
  */
 ec_slave_t *ec_master_find_slave(
         ec_master_t *master, /**< EtherCAT master. */
@@ -1793,6 +1801,8 @@
 /** Finds a slave in the bus, given the alias and position.
  *
  * Const version.
+ *
+ * \return Search result, or NULL.
  */
 const ec_slave_t *ec_master_find_slave_const(
         const ec_master_t *master, /**< EtherCAT master. */
@@ -2068,6 +2078,8 @@
 /*****************************************************************************/
 
 /** Calculates the bus topology; recursion function.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_master_calc_topology_rec(
         ec_master_t *master, /**< EtherCAT master. */
@@ -2199,6 +2211,8 @@
  *****************************************************************************/
 
 /** Same as ecrt_master_create_domain(), but with ERR_PTR() return value.
+ *
+ * \return New domain, or ERR_PTR() return value.
  */
 ec_domain_t *ecrt_master_create_domain_err(
         ec_master_t *master /**< master */
--- a/master/master.h	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/master.h	Tue Feb 12 15:46:43 2013 +0100
@@ -103,6 +103,8 @@
  * where INDEX is the master index.
  *
  * \param master EtherCAT master
+ * \param level Debug level. Master's debug level must be >= \a level for
+ * output.
  * \param fmt format string (like in printf())
  * \param args arguments (optional)
  */
@@ -318,6 +320,8 @@
         const uint8_t *, dev_t, struct class *, unsigned int);
 void ec_master_clear(ec_master_t *);
 
+/** Number of Ethernet devices.
+ */
 #if EC_MAX_NUM_DEVICES > 1
 #define ec_master_num_devices(MASTER) ((MASTER)->num_devices)
 #else
--- a/master/module.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/module.c	Tue Feb 12 15:46:43 2013 +0100
@@ -388,6 +388,8 @@
 /*****************************************************************************/
 
 /** Prints slave states in clear text.
+ *
+ * \return Size of the created string.
  */
 size_t ec_state_string(uint8_t states, /**< slave states */
                        char *buffer, /**< target buffer
@@ -522,6 +524,8 @@
 /** Request a master.
  *
  * Same as ecrt_request_master(), but with ERR_PTR() return value.
+ *
+ * \return Requested master.
  */
 ec_master_t *ecrt_request_master_err(
         unsigned int master_index /**< Master index. */
--- a/master/pdo.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/pdo.c	Tue Feb 12 15:46:43 2013 +0100
@@ -273,6 +273,8 @@
 /** Finds a PDO entry via its position in the list.
  *
  * Const version.
+ *
+ * \return Search result, or NULL.
  */
 const ec_pdo_entry_t *ec_pdo_find_entry_by_pos_const(
         const ec_pdo_t *pdo, /**< PDO. */
--- a/master/pdo_list.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/pdo_list.c	Tue Feb 12 15:46:43 2013 +0100
@@ -237,6 +237,8 @@
 /*****************************************************************************/
 
 /** Finds a PDO with the given index.
+ *
+ * \return Search result, or NULL.
  */
 ec_pdo_t *ec_pdo_list_find_pdo(
         const ec_pdo_list_t *pl, /**< PDO list. */
@@ -257,6 +259,8 @@
 /*****************************************************************************/
 
 /** Finds a PDO with the given index and returns a const pointer.
+ *
+ * \return Search result, or NULL.
  */
 const ec_pdo_t *ec_pdo_list_find_pdo_const(
         const ec_pdo_list_t *pl, /**< PDO list. */
@@ -279,6 +283,8 @@
 /** Finds a PDO via its position in the list.
  *
  * Const version.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 const ec_pdo_t *ec_pdo_list_find_pdo_by_pos_const(
         const ec_pdo_list_t *pl, /**< PDO list. */
--- a/master/reg_request.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/reg_request.c	Tue Feb 12 15:46:43 2013 +0100
@@ -42,6 +42,8 @@
 /*****************************************************************************/
 
 /** Register request constructor.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_reg_request_init(
         ec_reg_request_t *reg, /**< Register request. */
--- a/master/reg_request.h	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/reg_request.h	Tue Feb 12 15:46:43 2013 +0100
@@ -52,7 +52,7 @@
     ec_direction_t dir; /**< Direction. EC_DIR_OUTPUT means writing to the
                           slave, EC_DIR_INPUT means reading from the slave. */
     uint16_t address; /**< Register address. */
-    size_t transfer_size; /*< Size of the data to transfer. */
+    size_t transfer_size; /**< Size of the data to transfer. */
     ec_internal_request_state_t state; /**< Request state. */
 };
 
--- a/master/rtdm.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/rtdm.c	Tue Feb 12 15:46:43 2013 +0100
@@ -45,8 +45,8 @@
 /** Context structure for an open RTDM file handle.
  */
 typedef struct {
-    rtdm_user_info_t *user_info;
-    ec_ioctl_context_t ioctl_ctx;
+    rtdm_user_info_t *user_info; /**< RTDM user info. */
+    ec_ioctl_context_t ioctl_ctx; /**< Context structure. */
 } ec_rtdm_context_t;
 
 /****************************************************************************/
--- a/master/rtdm.h	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/rtdm.h	Tue Feb 12 15:46:43 2013 +0100
@@ -35,9 +35,11 @@
 
 /*****************************************************************************/
 
+/** EtherCAT RTDM device.
+ */
 typedef struct ec_rtdm_dev {
-    ec_master_t *master;
-    struct rtdm_device *dev;
+    ec_master_t *master; /**< Master pointer. */
+    struct rtdm_device *dev; /**< RTDM device. */
 } ec_rtdm_dev_t;
 
 /*****************************************************************************/
--- a/master/sdo_request.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/sdo_request.c	Tue Feb 12 15:46:43 2013 +0100
@@ -85,6 +85,8 @@
 /** Copy another SDO request.
  *
  * \attention Only the index subindex and data are copied.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_sdo_request_copy(
         ec_sdo_request_t *req, /**< SDO request. */
--- a/master/slave.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/slave.c	Tue Feb 12 15:46:43 2013 +0100
@@ -797,6 +797,8 @@
 /*****************************************************************************/
 
 /** Returns the previous connected port of a given port.
+ *
+ * \return Port index.
  */
 unsigned int ec_slave_get_previous_port(
         ec_slave_t *slave, /**< EtherCAT slave. */
@@ -825,6 +827,8 @@
 /*****************************************************************************/
 
 /** Returns the next connected port of a given port.
+ *
+ * \return Port index.
  */
 unsigned int ec_slave_get_next_port(
         ec_slave_t *slave, /**< EtherCAT slave. */
@@ -853,6 +857,8 @@
 /*****************************************************************************/
 
 /** Calculates the sum of round-trip-times of connected ports 1-3.
+ *
+ * \return Round-trip-time in ns.
  */
 uint32_t ec_slave_calc_rtt_sum(
         ec_slave_t *slave /**< EtherCAT slave. */
@@ -877,6 +883,8 @@
 /*****************************************************************************/
 
 /** Finds the next slave supporting DC delay measurement.
+ *
+ * \return Next DC slave, or NULL.
  */
 ec_slave_t *ec_slave_find_next_dc_slave(
         ec_slave_t *slave /**< EtherCAT slave. */
--- a/master/slave.h	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/slave.h	Tue Feb 12 15:46:43 2013 +0100
@@ -98,6 +98,8 @@
  * POSITION is the slave's ring position.
  *
  * \param slave EtherCAT slave
+ * \param level Debug level. Master's debug level must be >= \a level for
+ * output.
  * \param fmt format string (like in printf())
  * \param args arguments (optional)
  */
--- a/master/slave_config.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/slave_config.c	Tue Feb 12 15:46:43 2013 +0100
@@ -388,6 +388,8 @@
 /** Finds an SDO configuration via its position in the list.
  *
  * Const version.
+ *
+ * \return Search result, or NULL.
  */
 const ec_sdo_request_t *ec_slave_config_get_sdo_by_pos_const(
         const ec_slave_config_t *sc, /**< Slave configuration. */
@@ -430,6 +432,8 @@
 /** Finds an IDN configuration via its position in the list.
  *
  * Const version.
+ *
+ * \return Search result, or NULL.
  */
 const ec_soe_request_t *ec_slave_config_get_idn_by_pos_const(
         const ec_slave_config_t *sc, /**< Slave configuration. */
@@ -450,6 +454,8 @@
 /*****************************************************************************/
 
 /** Finds a CoE handler via its position in the list.
+ *
+ * \return Search result, or NULL.
  */
 ec_sdo_request_t *ec_slave_config_find_sdo_request(
         ec_slave_config_t *sc, /**< Slave configuration. */
@@ -470,6 +476,8 @@
 /*****************************************************************************/
 
 /** Finds a register handler via its position in the list.
+ *
+ * \return Search result, or NULL.
  */
 ec_reg_request_t *ec_slave_config_find_reg_request(
         ec_slave_config_t *sc, /**< Slave configuration. */
@@ -490,6 +498,8 @@
 /*****************************************************************************/
 
 /** Finds a VoE handler via its position in the list.
+ *
+ * \return Search result, or NULL.
  */
 ec_voe_handler_t *ec_slave_config_find_voe_handler(
         ec_slave_config_t *sc, /**< Slave configuration. */
--- a/master/slave_config.h	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/slave_config.h	Tue Feb 12 15:46:43 2013 +0100
@@ -98,6 +98,8 @@
  * and ALIAS and POSITION identify the configuration.
  *
  * \param sc EtherCAT slave configuration
+ * \param level Debug level. Master's debug level must be >= \a level for
+ * output.
  * \param fmt format string (like in printf())
  * \param args arguments (optional)
  */
--- a/master/soe_request.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/soe_request.c	Tue Feb 12 15:46:43 2013 +0100
@@ -84,6 +84,8 @@
 /*****************************************************************************/
 
 /** Copy another SoE request.
+ *
+ * \return Zero on success, otherwise a negative error code.
  */
 int ec_soe_request_copy(
         ec_soe_request_t *req, /**< SoE request. */
--- a/master/sync.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/sync.c	Tue Feb 12 15:46:43 2013 +0100
@@ -161,6 +161,8 @@
 /*****************************************************************************/
 
 /** Determines the default direction from the control register.
+ *
+ * \return Direction.
  */
 ec_direction_t ec_sync_default_direction(
         const ec_sync_t *sync /**< EtherCAT sync manager. */
--- a/master/voe_handler.c	Tue Feb 12 15:30:34 2013 +0100
+++ b/master/voe_handler.c	Tue Feb 12 15:46:43 2013 +0100
@@ -106,6 +106,8 @@
 /*****************************************************************************/
 
 /** Get usable memory size.
+ *
+ * \return Memory size.
  */
 size_t ec_voe_handler_mem_size(
         const ec_voe_handler_t *voe /**< VoE handler. */