- 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_