FLEX-FORD-OBC-BM/Source/bsw/WrapNv/WrapNv.h

242 lines
12 KiB
C
Raw Normal View History

2026-03-19 11:49:16 +01:00
/**********************************************************************************************************************
* 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
**********************************************************************************************************************/