]> rtime.felk.cvut.cz Git - arc.git/blobdiff - diagnostic/Dem/Dem.c
Merge with 3ecb6845e742978827406b7da6f77dc350e6b55b
[arc.git] / diagnostic / Dem / Dem.c
index 68034b2fbb5ae7696253dc3d0f98ce231224df37..df05bae088284651d90a42b9e4eb415ca57bdf4a 100644 (file)
@@ -54,8 +54,8 @@
 //#include "SchM_Dem.h"\r
 #include "MemMap.h"\r
 #include "Cpu.h"\r
-#include "DEM_Types.h"\r
-#include "DEM_Lcfg.h"\r
+#include "Dem_Types.h"\r
+#include "Dem_Lcfg.h"\r
 \r
 #define USE_DEBUG_PRINTF\r
 #include "debug.h"\r
 /*\r
  * Local types\r
  */\r
+#if !defined(USE_DCM)\r
+typedef uint8 Dcm_NegativeResponseCodeType;\r
+#define DCM_E_POSITIVERESPONSE ((Dcm_NegativeResponseCodeType)0x00)\r
+#endif\r
 \r
 // DtcFilterType\r
 typedef struct {\r
@@ -132,13 +136,6 @@ typedef struct {
        boolean                                         errorStatusChanged;\r
 } EventStatusRecType;\r
 \r
-// Types for storing different event aging counter\r
-typedef struct {\r
-       Dem_EventIdType         eventId;\r
-       uint8                           agingCounter;/** @req Dem019 */\r
-       ChecksumType            checksum;\r
-} AgingRecType;\r
-\r
 // Types for storing different event data on event memory\r
 typedef struct {\r
        Dem_EventIdType                         eventId;\r
@@ -200,18 +197,18 @@ static ExtDataRecType             preInitExtDataBuffer[DEM_MAX_NUMBER_EXT_DATA_PRE_INIT];
  * Allocation of primary event memory ramlog (after init) in uninitialized memory\r
  */\r
 /** @req DEM162 */\r
-EventRecType                   priMemEventBuffer[DEM_MAX_NUMBER_EVENT_PRI_MEM] __attribute__ ((section (".dem_eventmemory_pri")));\r
-static FreezeFrameRecType      priMemFreezeFrameBuffer[DEM_MAX_NUMBER_FF_DATA_PRI_MEM] __attribute__ ((section (".dem_eventmemory_pri")));\r
-//FreezeFrameRecType        FreezeFrameMirrorBuffer[DEM_MAX_NUMBER_FF_DATA_PRI_MEM] __attribute__ ((section (".dem_eventmemory_pri")));\r
+EventRecType                   priMemEventBuffer[DEM_MAX_NUMBER_EVENT_PRI_MEM];\r
+static FreezeFrameRecType      priMemFreezeFrameBuffer[DEM_MAX_NUMBER_FF_DATA_PRI_MEM];\r
+//FreezeFrameRecType        FreezeFrameMirrorBuffer[DEM_MAX_NUMBER_FF_DATA_PRI_MEM];\r
 extern FreezeFrameRecType*  FreezeFrameMirrorBuffer[];\r
-static ExtDataRecType          priMemExtDataBuffer[DEM_MAX_NUMBER_EXT_DATA_PRI_MEM] __attribute__ ((section (".dem_eventmemory_pri")));\r
-AgingRecType                   priMemAgingBuffer[DEM_MAX_NUMBER_AGING_PRI_MEM] __attribute__ ((section (".dem_eventmemory_pri")));\r
-extern AgingRecType            HealingMirrorBuffer[DEM_MAX_NUMBER_AGING_PRI_MEM];\r
+static ExtDataRecType          priMemExtDataBuffer[DEM_MAX_NUMBER_EXT_DATA_PRI_MEM];\r
+HealingRecType                         priMemAgingBuffer[DEM_MAX_NUMBER_AGING_PRI_MEM];\r
+extern HealingRecType                  HealingMirrorBuffer[DEM_MAX_NUMBER_AGING_PRI_MEM];\r
 \r
 /* block in NVRam, use for freezeframe */\r
 extern const NvM_BlockIdType FreezeFrameBlockId[DEM_MAX_NUMBER_FF_DATA_PRI_MEM];\r
 /* block in NVRam, use for aging */\r
-extern const NvM_BlockIdType AgingBlockId;\r
+extern const NvM_BlockIdType HealingBlockId;\r
 \r
 \r
 /*\r
@@ -407,8 +404,34 @@ static void lookupEventIdParameter(Dem_EventIdType eventId, const Dem_EventParam
                *eventIdParam = NULL;\r
        }\r
 }\r
+/*\r
+ * Procedure:  checkEntryValid\r
+ * Description:        Returns whether event id "eventId" is a valid entry in primary memory\r
+ */\r
+static boolean checkEntryValid(Dem_EventIdType eventId){\r
+       const Dem_EventParameterType *EventIdParamList = configSet->EventParameter;\r
+       boolean isValid = FALSE;\r
+       uint16 i=0;\r
+       while ((EventIdParamList[i].EventID != eventId) && (!EventIdParamList[i].Arc_EOL)) {\r
+               i++;\r
+       }\r
 \r
+       if (!EventIdParamList[i].Arc_EOL) {\r
+               // Event was found\r
+               uint16 index = 0;\r
+               for (index = 0; (index < DEM_MAX_NR_OF_EVENT_DESTINATION)\r
+                                        && (EventIdParamList[i].EventClass->EventDestination[index] != DEM_EVENT_DESTINATION_END_OF_LIST); index++) {\r
+                       if( DEM_DTC_ORIGIN_PRIMARY_MEMORY == EventIdParamList[i].EventClass->EventDestination[index]){\r
+                               // Event should be stored in primary memory.\r
+                               isValid = TRUE;\r
+                       }\r
+               }\r
 \r
+       } else {\r
+               // The event did not exist\r
+       }\r
+       return isValid;\r
+}\r
 /*\r
  * Procedure:  preDebounceNone\r
  * Description:        Returns the result of the debouncing.\r
@@ -553,7 +576,7 @@ static void updateEventStatusRec(const Dem_EventParameterType *eventParam, Dem_E
                        }\r
                }\r
                faultCounterAfterDebounce = eventStatusRecPtr->faultDetectionCounter;\r
-               \r
+\r
                eventStatusRecPtr->errorStatusChanged = FALSE;\r
 \r
                if (eventStatus == DEM_EVENT_STATUS_FAILED) {\r
@@ -567,7 +590,7 @@ static void updateEventStatusRec(const Dem_EventParameterType *eventParam, Dem_E
                }\r
 \r
                if (eventStatus == DEM_EVENT_STATUS_PASSED) {\r
-                       if (eventStatusRecPtr->eventStatusExtended & DEM_TEST_FAILED) {\r
+                       if (eventStatusRecPtr->eventStatusExtended & (DEM_TEST_FAILED | DEM_TEST_NOT_COMPLETED_THIS_OPERATION_CYCLE)) {\r
                                eventStatusRecPtr->errorStatusChanged = TRUE;\r
                        }\r
                        /** @req DEM036 */\r
@@ -619,24 +642,6 @@ static void mergeEventStatusRec(const EventRecType *eventRec)
                eventStatusRecPtr->eventStatusExtended |= (Dem_EventStatusExtendedType)(eventRec->eventStatusExtended & (DEM_PENDING_DTC | DEM_CONFIRMED_DTC));\r
 \r
        }\r
-       else {\r
-               // Search for free position\r
-               lookupEventStatusRec(DEM_EVENT_ID_NULL, &eventStatusRecPtr);\r
-\r
-               if (eventStatusRecPtr != NULL) {\r
-                       // Create new event, from stored event\r
-                       eventStatusRecPtr->eventId = eventRec->eventId;\r
-                       lookupEventIdParameter(eventRec->eventId, &eventStatusRecPtr->eventParamRef);\r
-                       eventStatusRecPtr->faultDetectionCounter = 0;\r
-                       eventStatusRecPtr->occurrence = eventRec->occurrence;\r
-                       eventStatusRecPtr->eventStatusExtended = DEM_TEST_NOT_COMPLETED_THIS_OPERATION_CYCLE | DEM_TEST_NOT_COMPLETED_SINCE_LAST_CLEAR;\r
-                       eventStatusRecPtr->errorStatusChanged = FALSE;\r
-               }\r
-               else {\r
-                       // Error: Event status buffer full\r
-                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_MERGE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL);\r
-               }\r
-       }\r
 \r
     Irq_Restore(state);\r
 }\r
@@ -768,7 +773,7 @@ static void bubbleSort(FreezeFrameRecType *freezeFrameBuf, uint16 length)
                                //exchange buffer data\r
                                memcpy(&temp,&freezeFrameBuf[i],sizeof(FreezeFrameRecType));\r
                                memcpy(&freezeFrameBuf[i],&freezeFrameBuf[j],sizeof(FreezeFrameRecType));\r
-                               memcpy(&freezeFrameBuf[j],&temp,sizeof(FreezeFrameRecType));            \r
+                               memcpy(&freezeFrameBuf[j],&temp,sizeof(FreezeFrameRecType));\r
                        }\r
                }\r
        }\r
@@ -779,9 +784,9 @@ static void bubbleSort(FreezeFrameRecType *freezeFrameBuf, uint16 length)
  * Procedure:  retrieveEventStatusBit\r
  * Description:        retrieve Event Status Bit\r
  */\r
-static boolean retrieveEventStatusBit(FreezeFrameRecType *freezeFrameBuf, \r
-                                                                                       uint16 length , \r
-                                                                                       Dem_EventStatusExtendedType nBit, \r
+static boolean retrieveEventStatusBit(FreezeFrameRecType *freezeFrameBuf,\r
+                                                                                       uint16 length ,\r
+                                                                                       Dem_EventStatusExtendedType nBit,\r
                                                                                        FreezeFrameRecType **freezeFrame)\r
 {\r
        boolean freezeFrameFound = FALSE;\r
@@ -795,7 +800,7 @@ static boolean retrieveEventStatusBit(FreezeFrameRecType *freezeFrameBuf,
                        if(freezeFrameFound == TRUE){\r
                                *freezeFrame = &freezeFrameBuf[i];\r
                        }\r
-               }               \r
+               }\r
        }\r
 \r
        return freezeFrameFound;\r
@@ -811,7 +816,7 @@ static boolean retrieveEventStatusBit(FreezeFrameRecType *freezeFrameBuf,
 static boolean lookupFreezeFrameForDisplacementPreInit(FreezeFrameRecType **freezeFrame)\r
 {\r
        boolean freezeFrameFound = FALSE;\r
-               \r
+\r
        /* Bubble sort:rearrange priMemFreezeFrameBuffer from little to big */\r
        bubbleSort(preInitFreezeFrameBuffer, DEM_MAX_NUMBER_FF_DATA_PRE_INIT);\r
 \r
@@ -822,12 +827,12 @@ static boolean lookupFreezeFrameForDisplacementPreInit(FreezeFrameRecType **free
        if(freezeFrameFound == FALSE){\r
                freezeFrameFound = retrieveEventStatusBit(preInitFreezeFrameBuffer, DEM_MAX_NUMBER_FF_DATA_PRE_INIT, DEM_TEST_FAILED, freezeFrame);\r
        }\r
-       \r
+\r
        /* if all confirmed,lookup the oldest active dtc */\r
        if(freezeFrameFound == FALSE){\r
                *freezeFrame = &preInitFreezeFrameBuffer[0];\r
                freezeFrameFound = TRUE;\r
-       }                       \r
+       }\r
 \r
        return freezeFrameFound;\r
 }\r
@@ -841,7 +846,7 @@ static boolean lookupFreezeFrameForDisplacementPreInit(FreezeFrameRecType **free
 static boolean lookupFreezeFrameForDisplacement(FreezeFrameRecType **freezeFrame)\r
 {\r
        boolean freezeFrameFound = FALSE;\r
-       \r
+\r
        bubbleSort(priMemFreezeFrameBuffer, DEM_MAX_NUMBER_FF_DATA_PRI_MEM);\r
 \r
        /* Find out the oldest not confirmed dtc */\r
@@ -853,9 +858,9 @@ static boolean lookupFreezeFrameForDisplacement(FreezeFrameRecType **freezeFrame
        }\r
 \r
        /* If all confirmed,lookup the oldest active dtc */\r
-       if(freezeFrameFound == FALSE){  \r
+       if(freezeFrameFound == FALSE){\r
                *freezeFrame = &priMemFreezeFrameBuffer[0];\r
-               freezeFrameFound = TRUE;        \r
+               freezeFrameFound = TRUE;\r
        }\r
 \r
        return freezeFrameFound;\r
@@ -870,7 +875,7 @@ static void rearrangeFreezeFrameTimeStamp(uint32 *timeStamp)
        uint32 i = 0;\r
        uint32 j = 0;\r
        uint32 k = 0;\r
-       \r
+\r
        /* Bubble sort:rearrange priMemFreezeFrameBuffer from little to big */\r
        for(i=0;i<DEM_MAX_NUMBER_FF_DATA_PRI_MEM;i++){\r
                if(priMemFreezeFrameBuffer[i].eventId != DEM_EVENT_ID_NULL){\r
@@ -880,15 +885,15 @@ static void rearrangeFreezeFrameTimeStamp(uint32 *timeStamp)
                                                //exchange buffer data\r
                                                memcpy(&temp,&priMemFreezeFrameBuffer[i],sizeof(FreezeFrameRecType));\r
                                                memcpy(&priMemFreezeFrameBuffer[i],&priMemFreezeFrameBuffer[j],sizeof(FreezeFrameRecType));\r
-                                               memcpy(&priMemFreezeFrameBuffer[j],&temp,sizeof(FreezeFrameRecType));           \r
+                                               memcpy(&priMemFreezeFrameBuffer[j],&temp,sizeof(FreezeFrameRecType));\r
                                        }\r
 \r
                                }\r
-                               \r
+\r
                        }\r
                        priMemFreezeFrameBuffer[i].timeStamp = k++;\r
                }\r
-               \r
+\r
        }\r
        /* update the current timeStamp */\r
        *timeStamp = k;\r
@@ -898,7 +903,7 @@ static void rearrangeFreezeFrameTimeStamp(uint32 *timeStamp)
  * Procedure:  getFreezeFrameData\r
  * Description:        get FF data according configuration                     \r
  */\r
-static void getFreezeFrameData(const Dem_EventParameterType *eventParam, \r
+static void getFreezeFrameData(const Dem_EventParameterType *eventParam,\r
                                FreezeFrameRecType *freezeFrame,\r
                                Dem_EventStatusType eventStatus,\r
                                EventStatusRecType *eventStatusRec)\r
@@ -933,7 +938,7 @@ static void getFreezeFrameData(const Dem_EventParameterType *eventParam,
 \r
        /* Find out the corresponding FF class */\r
        for(i = 0;(i<DEM_MAX_NR_OF_CLASSES_IN_FREEZEFRAME_DATA) && (eventParam->FreezeFrameClassRef[i] != NULL);i++){\r
-               if(eventParam->FreezeFrameClassRef[i]->FFStorageConditon == prefailedOrFailed){\r
+               if(eventParam->FreezeFrameClassRef[i]->FFStorageCondition == prefailedOrFailed){\r
                        FreezeFrameLocal = eventParam->FreezeFrameClassRef[i];\r
                        break;\r
                }\r
@@ -995,13 +1000,13 @@ static void getFreezeFrameData(const Dem_EventParameterType *eventParam,
                                        else{\r
                                                DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GET_FREEZEFRAME_ID, DEM_E_FF_TOO_BIG);\r
                                                break;\r
-                                       }       \r
+                                       }\r
                                }\r
                                else{\r
                                        //TODO:RTE should provide the port\r
                                        DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GET_FREEZEFRAME_ID, DEM_DSP_DID_USE_PORT_IS_TRUE);\r
                                }\r
-                       }       \r
+                       }\r
                }\r
 \r
        }\r
@@ -1021,7 +1026,7 @@ static void getFreezeFrameData(const Dem_EventParameterType *eventParam,
                if(FF_TimeStamp > DEM_MAX_TIMESTAMP_FOR_REARRANGEMENT){\r
                        rearrangeFreezeFrameTimeStamp(&FF_TimeStamp);\r
                }\r
-               \r
+\r
                freezeFrame->timeStamp = FF_TimeStamp;\r
 \r
                FF_TimeStamp++;\r
@@ -1034,7 +1039,7 @@ static void getFreezeFrameData(const Dem_EventParameterType *eventParam,
                freezeFrame->eventId = DEM_EVENT_ID_NULL;\r
                freezeFrame->dataSize = storeIndex;\r
                freezeFrame->checksum = 0;\r
-       }       \r
+       }\r
 }\r
 \r
 \r
@@ -1072,7 +1077,7 @@ static void storeFreezeFrameDataPreInit(const Dem_EventParameterType *eventParam
                if (eventIdFreePositionFound) {\r
                        memcpy(&preInitFreezeFrameBuffer[i-1], freezeFrame, sizeof(FreezeFrameRecType));\r
                }\r
-               else {                  \r
+               else {\r
                        /* do displacement */\r
                        if(lookupFreezeFrameForDisplacementPreInit(&freezeFrameLocal)){\r
                                memcpy(freezeFrameLocal, freezeFrame, sizeof(FreezeFrameRecType));\r
@@ -1100,7 +1105,7 @@ static void updateFreezeFrameOccurrencePreInit(const EventRecType *EventBuffer)
                        preInitFreezeFrameBuffer[i].occurrence += EventBuffer->occurrence;\r
                }\r
        }\r
-       \r
+\r
 }\r
 /*\r
  * Procedure:  initCurrentFreezeFrameTimeStamp\r
@@ -1116,7 +1121,7 @@ static void initCurrentFreezeFrameTimeStamp(uint32 *timeStampPtr)
 \r
        /* Find out the biggest timestamp in the last power on */\r
        for (i = 0; i<DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
-               if((priMemFreezeFrameBuffer[i].eventId != DEM_EVENT_ID_NULL) && \r
+               if((priMemFreezeFrameBuffer[i].eventId != DEM_EVENT_ID_NULL) &&\r
                  (priMemFreezeFrameBuffer[i].timeStamp > temp)){\r
                        temp = priMemFreezeFrameBuffer[i].timeStamp;\r
                }\r
@@ -1127,7 +1132,7 @@ static void initCurrentFreezeFrameTimeStamp(uint32 *timeStampPtr)
                        preInitFreezeFrameBuffer[i].timeStamp += temp;\r
                }\r
        }\r
-       *timeStampPtr += temp;  \r
+       *timeStampPtr += temp;\r
        Irq_Restore(state);\r
 }\r
 \r
@@ -1525,7 +1530,9 @@ static void storeAgingRecPerMem(const NvM_BlockIdType AgingBlockId)
 \r
        Irq_Save(state);\r
 \r
-       if( E_NOT_OK == writeNvmMirror(AgingBlockId, (uint8 *)HealingMirrorBuffer, (const uint8 *)priMemAgingBuffer, sizeof(priMemAgingBuffer)) ){\r
+       if( E_OK == writeNvmMirror(AgingBlockId, (uint8 *)HealingMirrorBuffer, (const uint8 *)priMemAgingBuffer, sizeof(priMemAgingBuffer)) ){\r
+               AgingIsModified = FALSE;\r
+       } else {\r
                AgingIsModified = TRUE;\r
        }\r
 \r
@@ -1544,7 +1551,7 @@ static void deleteAgingRecPriMem(const Dem_EventParameterType *eventParam)
 \r
        for (i = 0; i<DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
                if (priMemAgingBuffer[i].eventId == eventParam->EventID){\r
-                       memset(&priMemAgingBuffer[i], 0, sizeof(AgingRecType));\r
+                       memset(&priMemAgingBuffer[i], 0, sizeof(HealingRecType));\r
                }\r
        }\r
 \r
@@ -1588,7 +1595,7 @@ static void storeFreezeFrameDataPriMem(const Dem_EventParameterType *eventParam,
                        }\r
                        else{\r
                                DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_STORE_FF_DATA_PRI_MEM_ID, DEM_E_PRI_MEM_FF_DATA_BUFF_FULL);\r
-                       }                       \r
+                       }\r
                }\r
        }\r
 \r
@@ -1700,17 +1707,17 @@ static boolean lookupFreezeFrameDataSize(uint8 recordNumber, Dem_FreezeFrameClas
        uint16 i;\r
 \r
        if (*freezeFrameClassPtr != NULL) {\r
-               for (i = 0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && ((*freezeFrameClassPtr)->FFIdClassRef[i].Arc_EOL != TRUE); i++) { \r
+               for (i = 0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && ((*freezeFrameClassPtr)->FFIdClassRef[i].Arc_EOL != TRUE); i++) {\r
                        if((*freezeFrameClassPtr)->FFIdClassRef[i].DidReadDataLengthFnc != NULL){\r
                                callbackReturnCode = (*freezeFrameClassPtr)->FFIdClassRef[i].DidReadDataLengthFnc(&dataSizeLocal);\r
                                if(callbackReturnCode != E_OK){\r
-                                       return (dataSizeFound = FALSE); \r
+                                       return (dataSizeFound = FALSE);\r
                                }\r
                        }\r
                        else{\r
                                dataSizeLocal = (*freezeFrameClassPtr)->FFIdClassRef[i].PidOrDidSize;\r
                        }\r
-                       \r
+\r
                        *dataSize += dataSizeLocal + DEM_DID_IDENTIFIER_SIZE_OF_BYTES;\r
                }\r
 \r
@@ -1775,7 +1782,7 @@ static void handlePreInitEvent(Dem_EventIdType eventId, Dem_EventStatusType even
                                        }\r
                                }\r
 \r
-                               \r
+\r
                        }\r
                        else {\r
                                // Operation cycle not started\r
@@ -1815,8 +1822,8 @@ static Std_ReturnType handleEvent(Dem_EventIdType eventId, Dem_EventStatusType e
                                if ((!((disableDtcStorage.storageDisabled) && (checkDtcGroup(disableDtcStorage.dtcGroup, eventParam)) && (checkDtcKind(disableDtcStorage.dtcKind, eventParam)))))  {\r
                                        updateEventStatusRec(eventParam, eventStatus, TRUE, &eventStatusLocal);\r
                                        if (eventStatusLocal.errorStatusChanged) {\r
+                                               storeEventEvtMem(eventParam, &eventStatusLocal); /** @req DEM184 */\r
                                                if (eventStatusLocal.eventStatusExtended & DEM_TEST_FAILED) {\r
-                                                       storeEventEvtMem(eventParam, &eventStatusLocal); /** @req DEM184 */\r
                                                        getExtendedData(eventParam, &extendedDataLocal);\r
                                                        if (extendedDataLocal.eventId != DEM_EVENT_ID_NULL)\r
                                                        {\r
@@ -1834,7 +1841,7 @@ static Std_ReturnType handleEvent(Dem_EventIdType eventId, Dem_EventStatusType e
                                                else{\r
                                                        // do nothing\r
                                                }\r
-                                       }                                       \r
+                                       }\r
                                }\r
                        }\r
                        else {\r
@@ -2039,11 +2046,11 @@ static void deleteEventMemory(const Dem_EventParameterType *eventParam)
  * Description:        Returns the pointer to event id parameters of "eventId" in "*priMemAgingBuffer",\r
  *                             if not found NULL is returned.\r
  */\r
-static boolean lookupAgingRecPriMem(Dem_EventIdType eventId, const AgingRecType **agingRec)\r
+static boolean lookupAgingRecPriMem(Dem_EventIdType eventId, const HealingRecType **agingRec)\r
 {\r
        uint16 i;\r
        boolean agingRecFound = FALSE;\r
-       \r
+\r
        for (i = 0; i < DEM_MAX_NUMBER_AGING_PRI_MEM && (!agingRecFound); i++) {\r
                if(priMemAgingBuffer[i].eventId == eventId){\r
                        agingRecFound = TRUE;\r
@@ -2072,7 +2079,7 @@ static Std_ReturnType handleAging(Dem_OperationCycleIdType operationCycleId, Dem
 {\r
        uint16 i;\r
        Std_ReturnType returnCode = E_OK;\r
-       AgingRecType *agingRecLocal = NULL;\r
+       HealingRecType *agingRecLocal = NULL;\r
        boolean agingRecFound = FALSE;\r
 \r
        if (operationCycleId < DEM_OPERATION_CYCLE_ID_ENDMARK) {\r
@@ -2091,10 +2098,10 @@ static Std_ReturnType handleAging(Dem_OperationCycleIdType operationCycleId, Dem
                                                                if((eventStatusBuffer[i].eventStatusExtended & DEM_CONFIRMED_DTC)\\r
                                                                        && (!(eventStatusBuffer[i].eventStatusExtended & DEM_TEST_FAILED))\\r
                                                                        && (!(eventStatusBuffer[i].eventStatusExtended & DEM_TEST_NOT_COMPLETED_THIS_OPERATION_CYCLE))){\r
-                                                                       agingRecFound = lookupAgingRecPriMem(eventStatusBuffer[i].eventId, (const AgingRecType **)(&agingRecLocal));\r
+                                                                       agingRecFound = lookupAgingRecPriMem(eventStatusBuffer[i].eventId, (const HealingRecType **)(&agingRecLocal));\r
                                                                        if(agingRecFound){\r
                                                                                agingRecLocal->agingCounter++;/** @req Dem489 */\r
-                                                                               agingRecLocal->checksum = calcChecksum(agingRecLocal,sizeof(AgingRecType) - sizeof(ChecksumType));\r
+                                                                               agingRecLocal->checksum = calcChecksum(agingRecLocal,sizeof(HealingRecType) - sizeof(ChecksumType));\r
                                                                                if(agingRecLocal->agingCounter > eventStatusBuffer[i].eventParamRef->EventClass->HealingCycleCounter){\r
                                                                                        //deleteEventMemory(eventStatusBuffer[i].eventParamRef); /** @req Dem497 */\r
 \r
@@ -2109,11 +2116,11 @@ static Std_ReturnType handleAging(Dem_OperationCycleIdType operationCycleId, Dem
                                                                        }\r
                                                                        else{\r
                                                                                /* If it does exist,establish a new record for the corresponding event */\r
-                                                                               agingRecFound = lookupAgingRecPriMem(DEM_EVENT_ID_NULL, (const AgingRecType **)(&agingRecLocal));\r
+                                                                               agingRecFound = lookupAgingRecPriMem(DEM_EVENT_ID_NULL, (const HealingRecType **)(&agingRecLocal));\r
                                                                                if(agingRecFound){\r
                                                                                        agingRecLocal->eventId = eventStatusBuffer[i].eventId;\r
                                                                                        agingRecLocal->agingCounter++;\r
-                                                                                       agingRecLocal->checksum = calcChecksum(agingRecLocal,sizeof(AgingRecType) - sizeof(ChecksumType));\r
+                                                                                       agingRecLocal->checksum = calcChecksum(agingRecLocal,sizeof(HealingRecType) - sizeof(ChecksumType));\r
                                                                                        AgingIsModified = TRUE;\r
                                                                                }\r
                                                                                else{\r
@@ -2124,11 +2131,11 @@ static Std_ReturnType handleAging(Dem_OperationCycleIdType operationCycleId, Dem
                                                                else{\r
                                                                        /* If the status bit testFailed (bit 0) is set during the operation cycle, the counter shall be reset. */\r
                                                                        if(eventStatusBuffer[i].eventStatusExtended & DEM_TEST_FAILED){\r
-                                                                               agingRecFound = lookupAgingRecPriMem(eventStatusBuffer[i].eventId, (const AgingRecType **)(&agingRecLocal));\r
+                                                                               agingRecFound = lookupAgingRecPriMem(eventStatusBuffer[i].eventId, (const HealingRecType **)(&agingRecLocal));\r
                                                                                if(agingRecFound){\r
                                                                                        if(agingRecLocal->agingCounter){\r
                                                                                                agingRecLocal->agingCounter = 0;\r
-                                                                                               agingRecLocal->checksum = calcChecksum(agingRecLocal,sizeof(AgingRecType) - sizeof(ChecksumType));\r
+                                                                                               agingRecLocal->checksum = calcChecksum(agingRecLocal,sizeof(HealingRecType) - sizeof(ChecksumType));\r
                                                                                                AgingIsModified = TRUE;\r
                                                                                        }\r
                                                                                }\r
@@ -2314,7 +2321,8 @@ void Dem_PreInit(void)
 void Dem_Init(void)\r
 {\r
        uint16 i;\r
-       ChecksumType cSum;\r
+//     ChecksumType cSum;\r
+       boolean entryValid = FALSE;\r
        const Dem_EventParameterType *eventParam;\r
 \r
        if(DEM_PREINITIALIZED != demState){\r
@@ -2329,29 +2337,31 @@ void Dem_Init(void)
        } else {\r
 \r
                for(i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
-                       if( E_NOT_OK == copyNvmMirror(FreezeFrameBlockId[i], (uint8 *)&priMemFreezeFrameBuffer[i], (const uint8 *)&FreezeFrameMirrorBuffer[i], sizeof(FreezeFrameRecType)) ){\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(E_OK == copyNvmMirror(AgingBlockId, (uint8*)priMemAgingBuffer, (const uint8*)HealingMirrorBuffer, sizeof(priMemAgingBuffer)) ){\r
+               if(E_OK == copyNvmMirror(HealingBlockId, (uint8*)priMemAgingBuffer, (const uint8*)HealingMirrorBuffer, sizeof(priMemAgingBuffer)) ){\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
-                       if ((cSum != priMemAgingBuffer[i].checksum) || (priMemAgingBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+                       entryValid = checkEntryValid(priMemAgingBuffer[i].eventId);\r
+//                     cSum = calcChecksum(&priMemAgingBuffer[i], sizeof(HealingRecType) - sizeof(ChecksumType));\r
+                       if ((priMemAgingBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\r
                                // Unlegal record, clear the record\r
-                               memset(&priMemAgingBuffer[i], 0, sizeof(AgingRecType));\r
+                               memset(&priMemAgingBuffer[i], 0, sizeof(HealingRecType));\r
                                AgingIsModified = TRUE;\r
                        }\r
                }\r
 \r
                // Validate event records stored in primary memory\r
                for (i = 0; i < DEM_MAX_NUMBER_EVENT_PRI_MEM; i++) {\r
-                       cSum = calcChecksum(&priMemEventBuffer[i], sizeof(EventRecType)-sizeof(ChecksumType));\r
-                       if ((cSum != priMemEventBuffer[i].checksum) || (priMemEventBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+                       entryValid = checkEntryValid(priMemEventBuffer[i].eventId);\r
+//                     cSum = calcChecksum(&priMemEventBuffer[i], sizeof(EventRecType)-sizeof(ChecksumType));\r
+                       if ((priMemEventBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\r
                                // Unlegal record, clear the record\r
                                memset(&priMemEventBuffer[i], 0, sizeof(EventRecType));\r
                        }\r
@@ -2364,13 +2374,13 @@ void Dem_Init(void)
                        }\r
                }\r
 \r
-               //initialize the current timestamp and update the timestamp in pre init\r
-               initCurrentFreezeFrameTimeStamp(&FF_TimeStamp);//add by i-soft\r
+\r
 \r
                // Validate extended data records stored in primary memory\r
                for (i = 0; i < DEM_MAX_NUMBER_EXT_DATA_PRI_MEM; i++) {\r
-                       cSum = calcChecksum(&priMemExtDataBuffer[i], sizeof(ExtDataRecType)-sizeof(ChecksumType));\r
-                       if ((cSum != priMemExtDataBuffer[i].checksum) || (priMemExtDataBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+                       entryValid = checkEntryValid(priMemExtDataBuffer[i].eventId);\r
+//                     cSum = calcChecksum(&priMemExtDataBuffer[i], sizeof(ExtDataRecType)-sizeof(ChecksumType));\r
+                       if ((priMemExtDataBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\r
                                // Unlegal record, clear the record\r
                                memset(&priMemExtDataBuffer[i], 0, sizeof(ExtDataRecType));\r
                        }\r
@@ -2385,8 +2395,9 @@ void Dem_Init(void)
                //lint -e681 //PC-Lint exception to MISRA 14.1: Loop is not entered. This only happens when DEM_MAX_NUMBER_FF_DATA_PRE_INIT is zero. Keep as it is for less complex code.\r
                // Validate freeze frame records stored in primary memory\r
                for (i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++) {\r
-                       cSum = calcChecksum(&priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType)-sizeof(ChecksumType));\r
-                       if ((cSum != priMemFreezeFrameBuffer[i].checksum) || (priMemFreezeFrameBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+                       entryValid = checkEntryValid(priMemFreezeFrameBuffer[i].eventId);\r
+//                     cSum = calcChecksum(&priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType)-sizeof(ChecksumType));\r
+                       if ((priMemFreezeFrameBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\r
                                // Unlegal record, clear the record\r
                                memset(&priMemFreezeFrameBuffer[i], 0, sizeof(FreezeFrameRecType));\r
                        }\r
@@ -2458,13 +2469,13 @@ void Dem_Shutdown(void)
  * Interface for basic software scheduler\r
  */\r
 void Dem_MainFunction(void)/** @req DEM125 */\r
-{      \r
+{\r
        if (FFIsModified) {\r
                storeFreezeFrameDataPerMem(FreezeFrameBlockId);\r
        }\r
 \r
        if (AgingIsModified) {\r
-               storeAgingRecPerMem(AgingBlockId);\r
+               storeAgingRecPerMem(HealingBlockId);\r
        }\r
 }\r
 \r
@@ -2921,12 +2932,12 @@ Dem_ReturnClearDTCType Dem_ClearDTC(uint32 dtc, Dem_DTCKindType dtcKind, Dem_DTC
                                                                                resetEventStatusRec(eventParam);\r
                                                                                storeFreezeFrameDataPerMem();\r
                                                                                break;\r
-                                                                               \r
+\r
                                                                        case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
-                                                                               \r
+\r
                                                                                break;\r
-                                                                               \r
-                                                                       case DEM_DTC_ORIGIN_SECONDARY_MEMORY:                                                                   \r
+\r
+                                                                       case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
                                                                        case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
                                                                                // Not yet supported\r
                                                                                returnCode = DEM_CLEAR_WRONG_DTCORIGIN;\r
@@ -3122,7 +3133,7 @@ Dem_ReturnGetSizeOfExtendedDataRecordByDTCType Dem_GetSizeOfExtendedDataRecordBy
  * Procedure:  Dem_GetFreezeFrameDataByDTC\r
  * Reentrant:  No\r
  */\r
-/** @req DEM236 */ \r
+/** @req DEM236 */\r
 Dem_ReturnGetFreezeFrameDataByDTCType Dem_GetFreezeFrameDataByDTC(uint32  dtc,Dem_DTCKindType  dtcKind,Dem_DTCOriginType  dtcOrigin,uint8  recordNumber,uint8*  destBuffer,uint8*  bufSize)\r
 {\r
        Dem_ReturnGetFreezeFrameDataByDTCType returnCode = DEM_GET_FFDATABYDTC_WRONG_DTC;\r
@@ -3231,7 +3242,7 @@ Dem_GetFreezeFameDataIdentifierByDTCType Dem_GetFreezeFrameDataIdentifierByDTC(u
                                                        }\r
                                                        *arraySize = didNum;\r
                                                }\r
-                                               \r
+\r
                                        }\r
                                        else{\r
                                                returnCode = DEM_GET_ID_WRONG_FF_TYPE;\r
@@ -3248,8 +3259,8 @@ Dem_GetFreezeFameDataIdentifierByDTCType Dem_GetFreezeFrameDataIdentifierByDTC(u
                else{\r
                        returnCode = DEM_GET_ID_WRONG_DTC;\r
                }\r
-               \r
-       } \r
+\r
+       }\r
        else{\r
                DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFREEZEFRAMEDATAIDENTIFIERBYDTC_ID, DEM_E_UNINIT);\r
        }\r
@@ -3263,7 +3274,7 @@ Dem_GetFreezeFameDataIdentifierByDTCType Dem_GetFreezeFrameDataIdentifierByDTC(u
  * Reentrant:  No\r
  */\r
  /** @req DEM238 */\r
-Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32  dtc,Dem_DTCKindType  dtcKind,Dem_DTCOriginType  dtcOrigin,uint8  recordNumber,uint16*  sizeOfFreezeFrame)  \r
+Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32  dtc,Dem_DTCKindType  dtcKind,Dem_DTCOriginType  dtcOrigin,uint8  recordNumber,uint16*  sizeOfFreezeFrame)\r
 {\r
        Dem_ReturnGetSizeOfFreezeFrameType returnCode = DEM_GET_SIZEOFFF_PENDING;\r
        Dem_FreezeFrameClassType const *FFDataRecordClass = NULL;\r
@@ -3271,7 +3282,7 @@ Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32  dtc,Dem_DTCK
        EventStatusRecType *eventRec;\r
        uint16 dataSize = 0;\r
        uint16 i = 0;\r
-       \r
+\r
        if (demState == DEM_INITIALIZED) {\r
                if (lookupDtcEvent(dtc, &eventRec)) {\r
                        if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
@@ -3290,8 +3301,8 @@ Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32  dtc,Dem_DTCK
                                                                        dataSize = FFDataRecordClass->FFIdClassRef[i].PidOrDidSize;\r
                                                                }\r
                                                                *sizeOfFreezeFrame += dataSize+DEM_DID_IDENTIFIER_SIZE_OF_BYTES;/** @req DEM074 */\r
-                                                               returnCode = DEM_GET_SIZEOFFF_OK;               \r
-                                                       }                               \r
+                                                               returnCode = DEM_GET_SIZEOFFF_OK;\r
+                                                       }\r
                                                }\r
                                        }\r
                                        else{\r
@@ -3309,8 +3320,8 @@ Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32  dtc,Dem_DTCK
                else{\r
                        returnCode = DEM_GET_SIZEOFFF_WRONG_DTC;\r
                }\r
-               \r
-       } \r
+\r
+       }\r
        else{\r
                        DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFREEZEFRAMEDATAIDENTIFIERBYDTC_ID, DEM_E_UNINIT);\r
                        returnCode = DEM_GET_SIZEOFFF_PENDING;\r
@@ -3321,7 +3332,7 @@ Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32  dtc,Dem_DTCK
 \r
 }\r
 \r
-\r
+#define DEM_UNIT_TEST\r
 #ifdef DEM_UNIT_TEST\r
 void getFFDataPreInit(FreezeFrameRecType **buf)\r
 {\r
@@ -3345,7 +3356,7 @@ void getPriMemEventRecBufPtr(EventStatusRecType **buf)
        return;\r
 }\r
 \r
-void getPriMemAgingBufPtr(AgingRecType **buf)\r
+void getPriMemAgingBufPtr(HealingRecType **buf)\r
 {\r
        *buf = &priMemAgingBuffer[0];\r
        return;\r