//==============================================================================
/**
\defgroup user_layer openPOWERLINK User Layer

The openPOWERLINK __user layer__ provides the upper layer of the openPOWERLINK
stack. It contains the interface to the application and the higher level modules.
*/
//==============================================================================

//-----------------------------------------------------------------------------
/**
\defgroup module_api API

\brief Application programming interface (API) module

The API module implements the application programming interface of the
openPOWERLINK stack. It provides all functions used by an application to
interact with the openPOWERLINK stack.

\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_ctrlu ctrlu

\brief User control module

The user control module is responsible for startup and shutdown
of the stack. It communicates with the kernel control module by its CAL layer.

\see module_ctrlk
\see module_ctrlucal

\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_errhndu errhndu

\brief User error handler module

The user error handler module implements the parts of the error handler located
in the user layer. The user layer parts are responsible to synchronize the
error counters and thresholds located in the kernel with the appropriate objects
in the object dictionary.

\see module_errhndk
\see module_errhnducal

\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_eventu eventu

\brief User event handler module

The user event handler module provides the interface for posting events to
other user and kernel modules. For the receiving side it contains a general
receive handler which will be executed when an event is posted to the user
layer. The event handler examines the event and calls the handler of the module
which is specified by the sink argument.

To be independent of a specific event queue implementation it uses its
communication abstraction layer (CAL) for posting and receiving events to/from
different event queues.

\see module_eventucal

\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_pdou pdou

\brief User layer PDO module

The user PDO module is responsible for exchanging process image data with the
application using the process image API. Transmit data will be encoded to the
configured PDOs and transferred to the kernel layer. Receive data will be
received from the kernel layer and transferred to the application using the
process image module.

For communication with the kernel PDO module the user PDO communication
abstraction layer (PDO CAL) is used.

\see module_pdok

\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup user_layer_sdo SDO Modules

\brief SDO modules

The SDO modules provide the Service Data Objects (SDO) stack of openPOWERLINK.

\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_sdo_udp sdo_udp

\brief SDO over PDO module

This module provide the functionality of sending SDO packets over UDP.

\ingroup user_layer_sdo
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_sdo_asnd sdo_asnd

\brief SDO over ASnd module

This module provide the functionality of sending SDO packets over ASnd protocol.

\ingroup user_layer_sdo
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_sdo_seq sdo_seq

\brief SDO sequence layer

This module implements the SDO sequence layer of the openPOWERLINK stack.

\ingroup user_layer_sdo
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_sdo_com sdo_com

\brief SDO command layer

This module implements the SDO command layer of the openPOWERLINK stack.

\ingroup user_layer_sdo
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup user_layer_nmt NMT Modules

\brief User NMT modules

The user NMT modules provide the network management functions (NMT)
of the user layer.

\ingroup user_layer
*/
//------------------------------------------------------------------------------


//------------------------------------------------------------------------------
/**
\defgroup module_nmtu nmtu

\brief User NMT module

The user NMT module provides the general network management functions (NMT)
of the user layer.

\see module_nmtmnu
\see module_nmtcnu
\see module_statusu
\see module_identu
\see module_syncu
\see module_nmtk

\ingroup user_layer_nmt
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_nmtmnu nmtmnu

\brief User NMT-MN module

The user NMT-MN module provides the network management functions (NMT) for
the Managing Node (MN).

\see module_nmucnu
\see module_nmtu

\ingroup user_layer_nmt
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_nmtcnu nmtcnu

\brief User NMT-CN module

The user NMT-CN module provides the network management functions (NMT) for
the controlled node (CN).

\see module_nmumnu
\see module_nmtu

\ingroup user_layer_nmt
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**

\defgroup module_identu identu

\brief User ident module

The user ident module provides the functions for handling
IdentRequest/IdentResponse frames.

\ingroup user_layer_nmt
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_statusu statusu

\brief User status module

The user status module provides the functions for handling
StatusRequest/StatusResponse frames.

\ingroup user_layer_nmt
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_syncu syncu

\brief User sync module

The user sync module provides the functions for handling
SyncRequest/SyncResponse frames used by poll response chaining.

\ingroup user_layer_nmt
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_cfmu cfmu

\brief Configuration manager module

The configuration file manager (CFM) module is responsible for reading the
CDC file and configuring the CNs using SDO transfers.

\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_obd obd

\brief Object dictionary module

The object dictionary module implements the POWERLINK Object Dictionary (OD).
For detailed information on the POWERLINK OD refer to \ref sect_powerlink_od

The following picture shows the structure of the openPOWERLINK OD implementation:

![](\ref structure-objectdictionary.png "Structure of object dictionary")

The index tables contain all available indexes in ascending order. Each index
entry refers to the beginning of the corresponding sub-index table and its callback
functions, which are called for each access.

Each sub index table contains all available sub-indexes for an index entry. Every
sub-index entry provides information about the object type, the access rights,
the location of the default value and the location of the actual data in RAM.

After the openPOWERLINK stack is initialized, the corresponding default values are
assigned to all object data. The above described structures are constructed via
macros. These macros are located in obdmacro.h.

The object dictionary is split into three parts:
- Generic part: 0x1000 - 0x1FFF
- Manufacturer-specific part: 0x2000 - 0x5FFF
- Device-profile-specific part: 0x6000 - 0xFFFF

The openPOWERLINK stack requires to define each of the three sections in the file
objdict.h. If a part is not used, it must be declared, but will not contain any
objects.


\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_obdal obdal

\brief Object dictionary abstraction layer module

The object dictionary abstraction layer module implements an abstraction layer
for accessing different POWERLINK Object Dictionaries (OD).
For detailed information about the POWERLINK OD refer to \ref sect_powerlink_od

As first priority, the default object dictionary will be accessed from this
module. If an object does not exist in the default object dictionary, the call
will be forwarded to a user defined implementation of the object dictionary as
a user event.

\see module_obd
\see module_eventu

\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_timeru timeru

\brief User timer module

The user timer module provides timers which can be used by the user layer
modules like the NMT module for time triggered tasks.

\ingroup user_layer
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
\defgroup module_timesyncu timesyncu

\brief User timesync module

The user timesync module is in charge of handling the time synchronization of the
application to the POWERLINK network. It is responsible for notifying the
application at the configured synchronization point by using the communication
abstraction layer module (timesync CAL).

\see module_timesynck
\see module_timesyncucal
\see module_timesynckcal

\ingroup user_layer
*/
//------------------------------------------------------------------------------
