Irq_Restore(state);\r
}\r
\r
-\r
-/*\r
- * Procedure: deleteEventStatusRec\r
- * Description: Delete the status record of "eventParam->eventId" from "eventStatusBuffer".\r
- */\r
-static void deleteEventStatusRec(const Dem_EventParameterType *eventParam)\r
-{\r
- EventStatusRecType *eventStatusRecPtr;\r
- imask_t state;\r
- Irq_Save(state);\r
-\r
- lookupEventStatusRec(eventParam->EventID, &eventStatusRecPtr);\r
-\r
- if (eventStatusRecPtr != NULL) {\r
- memset(eventStatusRecPtr, 0, sizeof(EventStatusRecType));\r
- }\r
-\r
- Irq_Restore(state);\r
-}\r
-\r
/*\r
* Procedure: resetEventStatusRec\r
* Description: Reset the status record of "eventParam->eventId" from "eventStatusBuffer".\r
\r
return eventIdFound;\r
}\r
+/*\r
+ * Procedure: copyNvmMirror\r
+ * Description: Copies Nvram to buffer\r
+ */\r
+\r
+Std_ReturnType copyNvmMirror(const NvM_BlockIdType BlockId, uint8 *dstPtr, const uint8 *srcPtr, uint8 len)\r
+{\r
+\r
+#if (DEM_USE_NVM == STD_ON)\r
+ Std_ReturnType blockReadStatus = E_NOT_OK;\r
+ NvM_RequestResultType requestResult;\r
+\r
+ if( BlockId != 0 ) {\r
+ NvM_GetErrorStatus(BlockId, &requestResult);\r
+ if(requestResult != NVM_REQ_PENDING ) {\r
+ memcpy(dstPtr, srcPtr, len);\r
+ blockReadStatus = E_OK;\r
+ }\r
+ }\r
+\r
+ return blockReadStatus;\r
+#else\r
+ return E_OK;\r
+#endif\r
+}\r
+/*\r
+ * Procedure: writeNvmMirror\r
+ * Description: store data in NVRam\r
+ */\r
+Std_ReturnType writeNvmMirror(const NvM_BlockIdType BlockId, uint8 *dstPtr, const uint8 *srcPtr, uint8 len)\r
+{\r
+#if (DEM_USE_NVM == STD_ON)\r
+ Std_ReturnType blockWriteStatus = E_NOT_OK;\r
+ NvM_RequestResultType requestResult;\r
+\r
+ if( BlockId != 0 ) {\r
+ NvM_GetErrorStatus(BlockId, &requestResult);\r
+ if(requestResult != NVM_REQ_PENDING ) {\r
+ memcpy(dstPtr, srcPtr, len);\r
+ (void)NvM_WriteBlock(BlockId, (const uint8*)dstPtr);\r
+ blockWriteStatus = E_OK;\r
+ }\r
+ }\r
+\r
+ return blockWriteStatus;\r
+#else\r
+ return E_OK;\r
+#endif\r
+}\r
+\r
/*\r
* Procedure: storeAgingRecPerMem\r
* Description: store aging records in NVRam\r
*/\r
static void storeAgingRecPerMem(const NvM_BlockIdType AgingBlockId)\r
{\r
- NvM_RequestResultType requestResult = NVM_REQ_OK;\r
imask_t state;\r
\r
Irq_Save(state);\r
\r
- if (AgingBlockId != 0){\r
- /* check the status,whether it's busy or not? */\r
- NvM_GetErrorStatus(AgingBlockId, &requestResult);\r
- /* if writing is not busy,copy priMemFreezeFrameBuffer to NVRam permanent RAM*/\r
- if (requestResult != NVM_REQ_PENDING){\r
- memcpy(HealingMirrorBuffer, priMemAgingBuffer, sizeof(priMemAgingBuffer));\r
- (void)NvM_WriteBlock(AgingBlockId, (const uint8 *)HealingMirrorBuffer);\r
- AgingIsModified = FALSE; \r
- }\r
- else{\r
- AgingIsModified = TRUE;\r
- }\r
- }\r
- else{\r
- //TODO:report error or doing nothing,assume that doing nothing\r
-\r
+ if( E_NOT_OK == writeNvmMirror(AgingBlockId, (uint8 *)HealingMirrorBuffer, (const uint8 *)priMemAgingBuffer, sizeof(priMemAgingBuffer)) ){\r
+ AgingIsModified = TRUE;\r
}\r
\r
Irq_Restore(state);\r
*/\r
static void storeFreezeFrameDataPerMem()\r
{\r
- NvM_RequestResultType requestResult = NVM_REQ_OK;\r
- uint16 i = 0;\r
- boolean FFIsModifiedLocal = FALSE;\r
imask_t state;\r
\r
Irq_Save(state);\r
\r
- for(i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
+ for(uint16 i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
if(memcmp(&priMemFreezeFrameBuffer[i], FreezeFrameMirrorBuffer[i], sizeof(FreezeFrameRecType))){\r
- if(FreezeFrameBlockId[i] != 0){\r
- NvM_GetErrorStatus(FreezeFrameBlockId[i], &requestResult);\r
-\r
- if(requestResult != NVM_REQ_PENDING ){\r
- memcpy(FreezeFrameMirrorBuffer[i], &priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType));\r
- (void)NvM_WriteBlock(FreezeFrameBlockId[i], (const uint8 *)(FreezeFrameMirrorBuffer[i]));\r
- FFIsModifiedLocal = FALSE;\r
- }\r
- else{\r
- FFIsModifiedLocal = TRUE;\r
- }\r
-\r
- FFIsModified |= FFIsModifiedLocal;\r
- }\r
- else{\r
- //TODO:report error or doing nothing,assume that doing nothing\r
+ if( E_NOT_OK == writeNvmMirror(FreezeFrameBlockId[i], (uint8 *)FreezeFrameMirrorBuffer[i], (const uint8 *)&priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType)) ) {\r
+ FFIsModified = TRUE;\r
}\r
}\r
}\r
Irq_Restore(state);\r
}\r
\r
-/*\r
- * Procedure: deleteFreezeFrameDataPerMem\r
- * Description: delete the freeze frame data in event memory according to\r
- * "FFBlockId" destination option,it must be used after deleteFreezeFrameDataPriMem()\r
- */\r
-static void deleteFreezeFrameDataPerMem()\r
-{\r
- NvM_RequestResultType requestResult = NVM_REQ_OK;\r
- uint16 i = 0;\r
- boolean FFIsModifiedLocal = FALSE;\r
- imask_t state;\r
-\r
- Irq_Save(state);\r
-\r
- for(i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
- if(memcmp(&priMemFreezeFrameBuffer[i], FreezeFrameMirrorBuffer[i], sizeof(FreezeFrameRecType))){\r
- if(FreezeFrameBlockId[i] != 0){\r
- NvM_GetErrorStatus(FreezeFrameBlockId[i], &requestResult);\r
- if(requestResult != NVM_REQ_PENDING){\r
- memcpy(FreezeFrameMirrorBuffer[i], &priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType));\r
- (void)NvM_WriteBlock(FreezeFrameBlockId[i], (const uint8 *)(FreezeFrameMirrorBuffer[i]));\r
- FFIsModifiedLocal = FALSE;\r
- }\r
- else{\r
- FFIsModifiedLocal = TRUE;\r
- }\r
- FFIsModified |= FFIsModifiedLocal;\r
-\r
- }\r
- else{\r
- //TODO:report error or doing nothing,assume that doing nothing\r
- }\r
- }\r
-\r
- }\r
-\r
- Irq_Restore(state);\r
-}\r
-\r
-\r
/*\r
* Procedure: storeFreezeFrameDataEvtMem\r
* Description: Store the freeze frame data in event memory according to\r
}\r
}\r
\r
- if (eventStatusTemp == DEM_EVENT_STATUS_PREFAILED\r
- || eventStatusLocal.eventStatusExtended & DEM_TEST_FAILED){\r
+ if ((eventStatusTemp == DEM_EVENT_STATUS_PREFAILED)\r
+ || (eventStatusLocal.eventStatusExtended & DEM_TEST_FAILED)){\r
getFreezeFrameData(eventParam, &freezeFrameLocal,eventStatus,&eventStatusLocal);\r
if (freezeFrameLocal.eventId != DEM_EVENT_ID_NULL) {\r
storeFreezeFrameDataEvtMem(eventParam, &freezeFrameLocal); /** @req DEM190 */\r
deleteEventPriMem(eventParam);\r
deleteFreezeFrameDataPriMem(eventParam);\r
deleteExtendedDataPriMem(eventParam);\r
- deleteFreezeFrameDataPerMem();\r
+ storeFreezeFrameDataPerMem();\r
break;\r
\r
case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
uint16 i;\r
ChecksumType cSum;\r
const Dem_EventParameterType *eventParam;\r
- NvM_RequestResultType requestResult = NVM_REQ_OK;\r
+\r
if(DEM_PREINITIALIZED != demState){\r
/*\r
* Dem_PreInit was has not been called since last time Dem_Shutdown was called.\r
} else {\r
\r
for(i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
- if(FreezeFrameBlockId[i] != 0){\r
- NvM_GetErrorStatus(FreezeFrameBlockId[i], &requestResult);\r
- if(requestResult != NVM_REQ_PENDING){\r
- memcpy(&priMemFreezeFrameBuffer[i], FreezeFrameMirrorBuffer[i], sizeof(FreezeFrameRecType));\r
- }\r
- else{\r
- //TODO:NVM is busy,report error or what?\r
- }\r
+ if( E_NOT_OK == copyNvmMirror(FreezeFrameBlockId[i], (uint8 *)&priMemFreezeFrameBuffer[i], (const uint8 *)&FreezeFrameMirrorBuffer[i], sizeof(FreezeFrameRecType)) ){\r
+ //TODO:NVM is busy or block id is 0,report error or what?\r
}\r
}\r
//recover Aging from NVRam to RAM\r
- if(AgingBlockId != 0)\r
- {\r
- //check the status\r
- NvM_GetErrorStatus(AgingBlockId,&requestResult);\r
+ if(E_OK == copyNvmMirror(AgingBlockId, (uint8*)priMemAgingBuffer, (const uint8*)HealingMirrorBuffer, sizeof(priMemAgingBuffer)) ){\r
\r
- //recover Aging from NVRam to RAM\r
- if(AgingBlockId != 0){//check the status\r
- NvM_GetErrorStatus(AgingBlockId, &requestResult);\r
-\r
- //judge whether NVM is busy\r
- if(!(requestResult & NVM_REQ_PENDING)){\r
- //copy the permanent RAM to priMemAgingBuffer\r
- memcpy(priMemAgingBuffer, HealingMirrorBuffer, sizeof(priMemAgingBuffer));\r
- }\r
- else{\r
-\r
- }\r
-\r
- }\r
}\r
+\r
// Validate aging records stored in primary memory\r
for (i = 0; i < DEM_MAX_NUMBER_AGING_PRI_MEM; i++){\r
cSum = calcChecksum(&priMemAgingBuffer[i], sizeof(AgingRecType) - sizeof(ChecksumType));\r
deleteFreezeFrameDataPriMem(eventParam);\r
deleteExtendedDataPriMem(eventParam);\r
resetEventStatusRec(eventParam);\r
- deleteFreezeFrameDataPerMem(FreezeFrameBlockId);\r
+ storeFreezeFrameDataPerMem();\r
break;\r
\r
case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r