Skip to content

Is it better to split the configuration part and the definition part in par_cfg.h into two separate files? #38

@wdfk-prog

Description

@wdfk-prog
  • Is it better to split the configuration part and the definition part in par_cfg.h into two separate files? For example, par_cfg.h is used for configuration, while par_def.h is used for defining enumerations, etc.
#ifndef _PAR_CFG_H_
#define _PAR_CFG_H_

#include <stdint.h>
#include <rtthread.h>
#include "par_def.h"

#ifdef AUTOGEN_PM_USING_ULOG
#include <ulog.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif

/**
 *  Package log tag
 */
#define PAR_LOG_TAG                             "autogen.pm"

/**
 *  Enable/Disable parameter mutex wrapper
 */
#if defined(PKG_USING_AUTOGEN_PARAMETER_MANAGER)
    #if defined(AUTOGEN_PM_USING_MUTEX)
        #define PAR_CFG_MUTEX_EN                ( 1 )
    #else
        #define PAR_CFG_MUTEX_EN                ( 0 )
    #endif
#elif !defined(PAR_CFG_MUTEX_EN)
    #define PAR_CFG_MUTEX_EN                    ( 1 )
#endif

/**
 *  Parameter mutex timeout
 *
 *  Unit: ms
 */
#if defined(PKG_USING_AUTOGEN_PARAMETER_MANAGER) && defined(AUTOGEN_PM_MUTEX_TIMEOUT_MS)
    #define PAR_CFG_MUTEX_TIMEOUT_MS            ( AUTOGEN_PM_MUTEX_TIMEOUT_MS )
#elif !defined(PAR_CFG_MUTEX_TIMEOUT_MS)
    #define PAR_CFG_MUTEX_TIMEOUT_MS            ( 10 )
#endif

/**
 *  Enable/Disable storing persistent parameters to NVM
 */
#if defined(PKG_USING_AUTOGEN_PARAMETER_MANAGER)
    #if defined(AUTOGEN_PM_USING_NVM)
        #define PAR_CFG_NVM_EN                  ( 1 )
    #else
        #define PAR_CFG_NVM_EN                  ( 0 )
    #endif
#elif !defined(PAR_CFG_NVM_EN)
    #define PAR_CFG_NVM_EN                      ( 0 )
#endif

#if ( 1 == PAR_CFG_NVM_EN )

    #ifndef PAR_CFG_NVM_REGION
        #define PAR_CFG_NVM_REGION              ( eNVM_REGION_INT_FLASH_DEV_PAR )
    #endif

    #if defined(PKG_USING_AUTOGEN_PARAMETER_MANAGER)
        #if defined(AUTOGEN_PM_USING_TABLE_ID_CHECK)
            #define PAR_CFG_TABLE_ID_CHECK_EN   ( 1 )
        #elif !defined(PAR_CFG_TABLE_ID_CHECK_EN)
            #define PAR_CFG_TABLE_ID_CHECK_EN   ( 0 )
        #endif
    #elif !defined(PAR_CFG_TABLE_ID_CHECK_EN)
        #define PAR_CFG_TABLE_ID_CHECK_EN       ( 0 )
    #endif

#else
    #ifndef PAR_CFG_TABLE_ID_CHECK_EN
        #define PAR_CFG_TABLE_ID_CHECK_EN       ( 0 )
    #endif
#endif

/**
 *  Enable/Disable debug mode
 */
#if defined(PKG_USING_AUTOGEN_PARAMETER_MANAGER)
    #if defined(AUTOGEN_PM_USING_DEBUG)
        #define PAR_CFG_DEBUG_EN                ( 1 )
    #else
        #define PAR_CFG_DEBUG_EN                ( 0 )
    #endif
#elif !defined(PAR_CFG_DEBUG_EN)
    #define PAR_CFG_DEBUG_EN                    ( 0 )
#endif

/**
 *  Enable/Disable assertions
 */
#if defined(PKG_USING_AUTOGEN_PARAMETER_MANAGER)
    #if defined(AUTOGEN_PM_USING_ASSERT)
        #define PAR_CFG_ASSERT_EN               ( 1 )
    #else
        #define PAR_CFG_ASSERT_EN               ( 0 )
    #endif
#elif !defined(PAR_CFG_ASSERT_EN)
    #define PAR_CFG_ASSERT_EN                   ( 0 )
#endif

/**
 *  Debug communication port macros
 */
#if ( 1 == PAR_CFG_DEBUG_EN )
    #ifdef AUTOGEN_PM_USING_ULOG
        #define PAR_DBG_PRINT(...)              ulog_i(PAR_LOG_TAG, __VA_ARGS__)
    #else
        #define PAR_DBG_PRINT(...)              \
            do {                                \
                rt_kprintf("[%s] ", PAR_LOG_TAG); \
                rt_kprintf(__VA_ARGS__);        \
                rt_kprintf("\n");               \
            } while (0)
    #endif
#else
    #define PAR_DBG_PRINT(...)                  do { } while (0)
#endif

/**
 *  Assertion macros
 */
#if ( 1 == PAR_CFG_ASSERT_EN )
    #define PAR_ASSERT(x)                       RT_ASSERT(x)
#else
    #define PAR_ASSERT(x)                       do { } while (0)
#endif

/**
 *  Invalid configuration catcher
 */
#if ( 0 == PAR_CFG_NVM_EN ) && ( 1 == PAR_CFG_TABLE_ID_CHECK_EN )
    #error "Parameter settings invalid: Disable table ID checking (PAR_CFG_TABLE_ID_CHECK_EN)!"
#endif

////////////////////////////////////////////////////////////////////////////////
// Functions Prototypes
////////////////////////////////////////////////////////////////////////////////
const void * par_cfg_get_table(void);
const void * par_cfg_get(const par_num_t par_num);
uint32_t     par_cfg_get_table_size(void);

#ifdef __cplusplus
}
#endif

#endif // _PAR_CFG_H_

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions