/**
 * Description of the coding style for the source files.
 *
 * @file        codingStyle
 * @ingroup     codingStyle
 * @author      Janez Paternoster
 * @copyright   2015 Janez Paternoster
 * 
 * License.
 */


#ifndef XYZ_H
#define XYZ_H


/**
 * @defgroup codingStyle Description of coding style
 * @ingroup parentGroup
 * @{
 *
 * Contents of this file should be the base for .h source file, except function
 * body at the end.
 *
 * ###Indentation
 * Indent size is 4.
 * Spaces are used, not tabs.
 *
 * ###Doxygen
 * Documentation is generated by <http://doxygen.org>.
 * Doxygen comment starts with /**. /**< is used after member.
 * Documentation is usually in header.
 * Doxygen settings:
 *  - JAVADOC_AUTOBRIEF = YES.
 *  - See doxyfile for other settings.
 *
 * Doxygen specifics: If description of the structure member is one sentence only,
 * don't use period after the sentence.
 *
 * ###Misra C
 * Code shall follow MISRA-C:2012 standard.
 */


/**
 * Brief description of the object ends at this dot. Details follow
 * here.
 */
typedef struct {
    int8_t              member1;        /**< Short description of the member 1 */
    uint16_t            member2;        /**< Note the '/**<' sequence after the member 2 */
    /** Long description of the variable stringMember. More description. */
    char_t              stringMember[5];
} object1_t;


/**
 * Function example 1.
 *
 * This is global function. Local functions (and variables) used inside one file
 * are declared as static and not documented by Doxygen.
 *
 * @param obj Pointer to object. Function operates on this object (not on global
 * variables).
 * @param arg2 Description of the argument.
 * @param arg3 Description of the argument.
 * @param arg4 Description of the argument.
 *
 * @return Some value.
 */
int32_t foo1(
        object1_t              *obj,
        int32_t                 arg2,
        uint16_t                arg3,
        float32_t               arg4)
{
    /* Comment */

    /* Multiline
     * comment.
     */

    if(xy == yz) {   /* Comment. '//' comments are not allowed */
        ...
    }
    else {
        ...
    }

    switch(zx) {
        case 1: {
            ...
        }
    }
}

/** @} */
#endif
