242 lines
12 KiB
C
242 lines
12 KiB
C
/**********************************************************************************************************************
|
|
* FILE DESCRIPTION
|
|
* -----------------------------------------------------------------------------------------------------------------*/
|
|
/** \file WrapNv.h
|
|
* \brief Wrapper for NV-memory access
|
|
* -------------------------------------------------------------------------------------------------------------------
|
|
* COPYRIGHT
|
|
* -------------------------------------------------------------------------------------------------------------------
|
|
* \par Copyright
|
|
* \verbatim
|
|
* Copyright (c) 2024 by Vector Informatik GmbH. All rights reserved.
|
|
*
|
|
* This software is copyright protected and proprietary to Vector Informatik GmbH.
|
|
* Vector Informatik GmbH grants to you only those rights as set out in the license conditions.
|
|
* All other rights remain with Vector Informatik GmbH.
|
|
* \endverbatim
|
|
*/
|
|
/*********************************************************************************************************************/
|
|
|
|
/**********************************************************************************************************************
|
|
* REVISION HISTORY
|
|
* -------------------------------------------------------------------------------------------------------------------
|
|
* Version Date Author Change Id Description
|
|
* -------------------------------------------------------------------------------------------------------------------
|
|
* 02.00.00 2016-02-22 visrie ESCAN00088726 Added support for Fee/NvM
|
|
* Removed unused code
|
|
* 02.01.00 2016-03-09 visrie ESCAN00088817 Removed function call NvM_Errorhook
|
|
* ESCAN00088819 Abstraction of Fls interface
|
|
* 02.02.00 2016-07-05 visrie ESCAN00090830 Added support for no NV driver use-case
|
|
* 02.02.01 2016-09-06 visrie ESCAN00091757 Fixed MISRA findings
|
|
* 02.02.02 2016-10-17 visrie ESCAN00092351 Configure used FEE functions
|
|
* 02.03.00 2017-09-19 visrie ESCAN00094172 Fixed compiler warning undefined preprocessor define
|
|
* ESCAN00095574 Added support for EA
|
|
* 02.04.00 2017-11-29 visrie ESCAN00096851 Updated APIs for MSR-Release 18
|
|
* ESCAN00097590 Added error code for Record ID check
|
|
* ESCAN00097591 Added support for sequential queue handling of asynchronous access
|
|
* 02.04.01 2018-01-11 visrie ESCAN00097944 Fixed state handling
|
|
* ESCAN00097953 Fixed endless loop
|
|
* 02.05.00 2018-02-08 visrie ESCAN00097770 Consider main function call cycle
|
|
* 02.06.00 2018-03-21 visrie ESCAN00098860 Added support for EEL
|
|
* 02.06.01 2018-04-06 visrie ESCAN00099015 No changes
|
|
* 02.06.02 2018-12-07 visrie ESCAN00099155 No changes
|
|
* ESCAN00101194 Reworked include structure
|
|
* 03.00.00 2020-04-02 visrie FBL-1331 Support of new generator
|
|
* 04.00.00 2020-05-26 visrie FBL-1016 Support EcuM_Init() mechanism
|
|
* 04.00.01 2020-07-16 visrie FBL-2160 Removed use case filtering
|
|
* 04.00.02 2021-04-01 visrcn FBL-3009 Make polling function configurable
|
|
* FBL-3095 Add support for DET usage
|
|
* 04.01.00 2022-07-11 vistmo FBL-5336 Adding support for block access
|
|
* 04.01.01 2024-07-08 visrie ESCAN00117458 WrapNv doesn't accept further requests
|
|
* ESCAN00115730 Compiler warning: no 'break' or comment before case label
|
|
* 04.02.00 2024-10-23 visjns FBL-9560 Introduce handling of NvM access by MSR modules
|
|
* ESCAN00114856 Compiler warning: zero used for undefined preprocessing identifier
|
|
*********************************************************************************************************************/
|
|
|
|
#ifndef WRAPNV_H
|
|
#define WRAPNV_H
|
|
|
|
/***********************************************************************************************************************
|
|
* VERSION
|
|
**********************************************************************************************************************/
|
|
|
|
/* ##V_CFG_MANAGEMENT ##CQProject : SysService_WrapperNv CQComponent : Implementation */
|
|
# define SYSSERVICE_WRAPPERNV_VERSION 0x0402u
|
|
# define SYSSERVICE_WRAPPERNV_RELEASE_VERSION 0x00u
|
|
|
|
/***********************************************************************************************************************
|
|
* INCLUDES
|
|
**********************************************************************************************************************/
|
|
|
|
# include "WrapNv_Cfg.h"
|
|
# if defined( WRAPNV_USECASE_FEE ) || \
|
|
defined( WRAPNV_USECASE_EA ) || \
|
|
defined( WRAPNV_USECASE_NVM )
|
|
# include "Std_Types.h"
|
|
# if defined( WRAPNV_USECASE_NVM )
|
|
# include "NvM.h"
|
|
# endif /* WRAPNV_USECASE_NVM */
|
|
# endif /* WRAPNV_USECASE_* */
|
|
|
|
/***********************************************************************************************************************
|
|
* DEFINES
|
|
**********************************************************************************************************************/
|
|
# if defined( WRAPNV_USECASE_FEE ) || \
|
|
defined( WRAPNV_USECASE_EA ) || \
|
|
defined( WRAPNV_USECASE_NVM )
|
|
/* Vendor and module identification */
|
|
# define WRAPNV_VENDOR_ID 30u
|
|
# define WRAPNV_MODULE_ID 255u
|
|
# define WRAPNV_INSTANCE_ID 0u
|
|
|
|
/* Service IDs */
|
|
# define WRAPNV_APIID_INIT 0x00u
|
|
# define WRAPNV_APIID_READ 0x01u
|
|
# define WRAPNV_APIID_READPARTIAL 0x02u
|
|
# define WRAPNV_APIID_WRITE 0x03u
|
|
# define WRAPNV_APIID_DELETE 0x04u
|
|
|
|
/* Development errors */
|
|
# define WRAPNV_E_NO_ERROR 0x10u
|
|
# define WRAPNV_E_NOT_IDLE 0x11u
|
|
# define WRAPNV_E_PARAM_DATASET 0x12u
|
|
# define WRAPNV_E_PARAM_READ 0x13u
|
|
# define WRAPNV_E_PARAM_ID 0x14u
|
|
# elif defined( WRAPNV_USECASE_EEPM )
|
|
/* PRQA S 3453 3 */ /* MD_MSR_FctLikeMacro */
|
|
# define NV_MK_STRUCT_ID(structure, id) ((((vuint32)(structure)) << 24uL) | (id))
|
|
# define NV_GET_STRUCT_ID(id) ((id) & 0x00FFFFFFuL)
|
|
# define NV_GET_STRUCT_HANDLE(id) (((id) & 0xFF000000uL) >> 24uL)
|
|
# endif /* WRAPNV_USECASE_* */
|
|
|
|
/** Positive return value of NV-Wrapper */
|
|
# if defined( kFblOk )
|
|
# define WRAPNV_E_OK kFblOk
|
|
# elif defined( kEepMgrOk )
|
|
# define WRAPNV_E_OK kEepMgrOk
|
|
# elif defined( E_OK )
|
|
# define WRAPNV_E_OK E_OK
|
|
# else
|
|
# define WRAPNV_E_OK 0u
|
|
# endif
|
|
|
|
/** Negative return value of NV-Wrapper */
|
|
# if defined( kFblFailed )
|
|
# define WRAPNV_E_NOT_OK kFblFailed
|
|
# elif defined( kEepMgrFailed )
|
|
# define WRAPNV_E_NOT_OK kEepMgrFailed
|
|
# elif defined( E_NOT_OK )
|
|
# define WRAPNV_E_NOT_OK E_NOT_OK
|
|
# else
|
|
# define WRAPNV_E_NOT_OK 1u
|
|
# endif
|
|
|
|
/** Pending return value of NV-Wrapper */
|
|
# if defined( kEepMgrBusy )
|
|
# define WRAPNV_E_PENDING kEepMgrBusy
|
|
# elif defined( E_PENDING )
|
|
# define WRAPNV_E_PENDING E_PENDING
|
|
# else
|
|
# define WRAPNV_E_PENDING 2u
|
|
# endif
|
|
|
|
/** Return type of NV-Wrapper */
|
|
# if defined( kFblOk )
|
|
# define WrapNv_ReturnType tFblResult
|
|
# elif defined( kEepMgrOk )
|
|
# define WrapNv_ReturnType vuint8
|
|
# elif defined( E_OK )
|
|
# define WrapNv_ReturnType Std_ReturnType
|
|
# else
|
|
# define WrapNv_ReturnType WrapNv_DefaultReturntype
|
|
# endif
|
|
|
|
/* Compatibility define for non MSR projects */
|
|
# if !defined( FUNC )
|
|
# define FUNC(rettype, memclass) rettype
|
|
# endif
|
|
|
|
/**********************************************************************************************************************
|
|
* TYPEDEFS
|
|
*********************************************************************************************************************/
|
|
|
|
/** Operation status for asynchronous access */
|
|
typedef enum
|
|
{
|
|
WRAPNV_OPSTATUS_INIT = 0u, /**< Operation has been initialized */
|
|
WRAPNV_OPSTATUS_PENDING, /**< Operation is currently pending */
|
|
WRAPNV_OPSTATUS_CANCEL, /**< Operation has been canceled */
|
|
WRAPNV_OPSTATUS_IDLE /**< Internal: Currently no operation is active */
|
|
} tWrapNvOpStatus;
|
|
|
|
/** Type of data access */
|
|
typedef enum
|
|
{
|
|
WRAPNV_ACCESS_DATAELEMENT = 0u, /**< Access is performed at element level */
|
|
WRAPNV_ACCESS_BLOCKELEMENT /**< Access is performed at block level */
|
|
} tWrapNvAccessType;
|
|
|
|
# if defined( WRAPNV_USECASE_FEE ) || \
|
|
defined( WRAPNV_USECASE_EA ) || \
|
|
defined( WRAPNV_USECASE_NVM )
|
|
typedef P2VAR(uint8, AUTOMATIC, WRAPNV_DATA) tWrapNvRamData;
|
|
typedef P2CONST(uint8, AUTOMATIC, WRAPNV_DATA) tWrapNvConstData;
|
|
typedef P2VAR(void, AUTOMATIC, WRAPNV_NVM_APPL_DATA) tWrapNvNvMRamData;
|
|
typedef P2CONST(void, AUTOMATIC, WRAPNV_NVM_APPL_DATA) tWrapNvNvMConstData;
|
|
# endif /* WRAPNV_USECASE_* */
|
|
|
|
typedef unsigned char WrapNv_DefaultReturntype;
|
|
|
|
/**********************************************************************************************************************
|
|
* GLOBAL FUNCTION PROTOTYPES
|
|
*********************************************************************************************************************/
|
|
|
|
# define WRAPNV_START_SEC_CODE
|
|
# include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */
|
|
|
|
FUNC(void, WRAPNV_CODE) WrapNv_Init( void );
|
|
FUNC(void, WRAPNV_CODE) WrapNv_Deinit( void );
|
|
|
|
# if defined( WRAPNV_USECASE_FEE ) || \
|
|
defined( WRAPNV_USECASE_EA ) || \
|
|
defined( WRAPNV_USECASE_NVM )
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_ReadSync( uint16 id, uint16 idx, tWrapNvRamData buffer );
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_ReadBlockSync(uint16 id, uint16 idx, tWrapNvRamData buffer);
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_ReadPartialSync( uint16 id, uint16 idx, tWrapNvRamData buffer, uint16 offset, uint16 length );
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_ReadPartialBlockSync(uint16 id, uint16 idx, tWrapNvRamData buffer, uint16 offset, uint16 length);
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_DeleteSync( uint16 id, uint16 idx );
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_WriteSync( uint16 id, uint16 idx, tWrapNvConstData buffer );
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_WriteBlockSync( uint16 id, uint16 idx, tWrapNvConstData buffer );
|
|
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_ReadAsync( uint16 id, uint16 idx, tWrapNvRamData buffer, tWrapNvOpStatus opStatus );
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_ReadBlockAsync(uint16 id, uint16 idx, tWrapNvRamData buffer, tWrapNvOpStatus opStatus);
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_ReadPartialAsync( uint16 id, uint16 idx, tWrapNvRamData buffer, uint16 offset, uint16 length, tWrapNvOpStatus opStatus );
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_ReadPartialBlockAsync( uint16 id, uint16 idx, tWrapNvRamData buffer, uint16 offset, uint16 length, tWrapNvOpStatus opStatus );
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_DeleteAsync( uint16 id, uint16 idx, tWrapNvOpStatus opStatus );
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_WriteAsync( uint16 id, uint16 idx, tWrapNvConstData buffer, tWrapNvOpStatus opStatus );
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_WriteBlockAsync(uint16 id, uint16 idx, tWrapNvConstData buffer, tWrapNvOpStatus opStatus);
|
|
# if defined( WRAPNV_USECASE_NVM )
|
|
# if defined( WRAPNV_ENABLE_NVMAPIS_HANDLING )
|
|
FUNC(Std_ReturnType, WRAPNV_CODE) WrapNv_NvM_WriteBlockSync( NvM_BlockIdType blockId, tWrapNvNvMConstData buffer );
|
|
FUNC(Std_ReturnType, WRAPNV_CODE) WrapNv_NvM_ReadBlockSync( NvM_BlockIdType blockId, tWrapNvNvMRamData buffer );
|
|
# endif /* WRAPNV_ENABLE_NVMAPIS_HANDLING */
|
|
# if defined( WRAPNV_ENABLE_NVM_MULTIBLOCK_HANDLING )
|
|
FUNC(Std_ReturnType, WRAPNV_CODE) WrapNv_NvM_WriteAllSync( void );
|
|
FUNC(Std_ReturnType, WRAPNV_CODE) WrapNv_NvM_ReadAllSync( void );
|
|
# endif /* WRAPNV_ENABLE_NVM_MULTIBLOCK_HANDLING */
|
|
# endif /* WRAPNV_USECASE_NVM */
|
|
# endif /* WRAPNV_USECASE_* */
|
|
|
|
# if (WRAPNV_MAINFUNCTION_POLLING == STD_ON)
|
|
FUNC(WrapNv_ReturnType, WRAPNV_CODE) WrapNv_TriggerFct_Callout( void );
|
|
# endif
|
|
|
|
# define WRAPNV_STOP_SEC_CODE
|
|
# include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */
|
|
|
|
#endif /* WRAPNV_H */
|
|
|
|
/***********************************************************************************************************************
|
|
* END OF FILE: WRAPNV.H
|
|
**********************************************************************************************************************/
|