]> rtime.felk.cvut.cz Git - arc.git/blobdiff - diagnostic/Dem/Dem.c
Dem, Setting write flag to false when succesfully written FF to NvM.
[arc.git] / diagnostic / Dem / Dem.c
index 5802f5b0e606c69172f61ae5e0d3137911c3878b..121cf1b8c06def2cd825bc63d9521a810143937a 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
@@ -193,12 +197,12 @@ 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
-HealingRecType                         priMemAgingBuffer[DEM_MAX_NUMBER_AGING_PRI_MEM] __attribute__ ((section (".dem_eventmemory_pri")));\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
@@ -572,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
@@ -769,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
@@ -780,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
@@ -796,7 +800,7 @@ static boolean retrieveEventStatusBit(FreezeFrameRecType *freezeFrameBuf,
                        if(freezeFrameFound == TRUE){\r
                                *freezeFrame = &freezeFrameBuf[i];\r
                        }\r
-               }               \r
+               }\r
        }\r
 \r
        return freezeFrameFound;\r
@@ -812,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
@@ -823,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
@@ -842,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
@@ -854,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
@@ -871,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
@@ -881,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
@@ -899,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,19 +937,22 @@ static void getFreezeFrameData(const Dem_EventParameterType *eventParam,
        }\r
 \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]->FFStorageCondition == prefailedOrFailed){\r
-                       FreezeFrameLocal = eventParam->FreezeFrameClassRef[i];\r
-                       break;\r
+       if( eventParam->FreezeFrameClassRef != NULL ) {\r
+               for(i = 0;(i<DEM_MAX_NR_OF_CLASSES_IN_FREEZEFRAME_DATA) && (eventParam->FreezeFrameClassRef[i] != NULL);i++){\r
+                       if(eventParam->FreezeFrameClassRef[i]->FFStorageCondition == prefailedOrFailed){\r
+                               FreezeFrameLocal = eventParam->FreezeFrameClassRef[i];\r
+                               break;\r
+                       }\r
                }\r
        }\r
+\r
        /* get the dids */\r
        if(FreezeFrameLocal != NULL){\r
                if(FreezeFrameLocal->FFIdClassRef != NULL){\r
-                       for (i = 0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && (!(FreezeFrameLocal->FFIdClassRef[i].Arc_EOL)); i++) {\r
-                               if(FreezeFrameLocal->FFIdClassRef[i].PidOrDidUsePort == FALSE){\r
-                                       if(FreezeFrameLocal->FFIdClassRef[i].DidReadDataLengthFnc != NULL){\r
-                                               callbackReturnCode = FreezeFrameLocal->FFIdClassRef[i].DidReadDataLengthFnc(&recordSize);\r
+                       for (i = 0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && (!(FreezeFrameLocal->FFIdClassRef[i]->Arc_EOL)); i++) {\r
+                               if(FreezeFrameLocal->FFIdClassRef[i]->PidOrDidUsePort == FALSE){\r
+                                       if(FreezeFrameLocal->FFIdClassRef[i]->DidReadDataLengthFnc != NULL){\r
+                                               callbackReturnCode = FreezeFrameLocal->FFIdClassRef[i]->DidReadDataLengthFnc(&recordSize);\r
                                                if(callbackReturnCode != E_OK){\r
                                                        //if fail to read data length,discard the storage of FF\r
                                                        freezeFrame->eventId = DEM_EVENT_ID_NULL;\r
@@ -955,21 +962,21 @@ static void getFreezeFrameData(const Dem_EventParameterType *eventParam,
                                        }\r
                                        /* if no readDidDataLengthFunction, then try the PidOrDidSize. */\r
                                        else{\r
-                                               recordSize = FreezeFrameLocal->FFIdClassRef[i].PidOrDidSize;\r
+                                               recordSize = FreezeFrameLocal->FFIdClassRef[i]->PidOrDidSize;\r
                                        }\r
                                        /* read out the did data */\r
                                        if ((storeIndex + recordSize + DEM_DID_IDENTIFIER_SIZE_OF_BYTES) <= DEM_MAX_SIZE_FF_DATA) {\r
                                                /* store DID */\r
-                                               freezeFrame->data[storeIndex] = (FreezeFrameLocal->FFIdClassRef[i].DidIdentifier>> 8) & 0xFFu;\r
+                                               freezeFrame->data[storeIndex] = (FreezeFrameLocal->FFIdClassRef[i]->DidIdentifier>> 8) & 0xFFu;\r
                                                storeIndex++;\r
-                                               freezeFrame->data[storeIndex] = FreezeFrameLocal->FFIdClassRef[i].DidIdentifier & 0xFFu;\r
+                                               freezeFrame->data[storeIndex] = FreezeFrameLocal->FFIdClassRef[i]->DidIdentifier & 0xFFu;\r
                                                storeIndex++;\r
                                                /* store data */\r
-                                               if(FreezeFrameLocal->FFIdClassRef[i].DidConditionCheckReadFnc != NULL){\r
-                                                       callbackReturnCode = FreezeFrameLocal->FFIdClassRef[i].DidConditionCheckReadFnc(&errorCode);\r
+                                               if(FreezeFrameLocal->FFIdClassRef[i]->DidConditionCheckReadFnc != NULL){\r
+                                                       callbackReturnCode = FreezeFrameLocal->FFIdClassRef[i]->DidConditionCheckReadFnc(&errorCode);\r
                                                        if ((callbackReturnCode == E_OK) && (errorCode == DCM_E_POSITIVERESPONSE)) {\r
-                                                               if(FreezeFrameLocal->FFIdClassRef[i].DidReadFnc!= NULL){\r
-                                                                       callbackReturnCode = FreezeFrameLocal->FFIdClassRef[i].DidReadFnc(&freezeFrame->data[storeIndex]);\r
+                                                               if(FreezeFrameLocal->FFIdClassRef[i]->DidReadFnc!= NULL){\r
+                                                                       callbackReturnCode = FreezeFrameLocal->FFIdClassRef[i]->DidReadFnc(&freezeFrame->data[storeIndex]);\r
                                                                        if (callbackReturnCode != E_OK) {\r
                                                                                memset(&freezeFrame->data[storeIndex], DEM_FREEZEFRAME_DEFAULT_VALUE, recordSize);\r
                                                                        }\r
@@ -996,13 +1003,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
@@ -1022,7 +1029,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
@@ -1035,7 +1042,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
@@ -1073,7 +1080,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
@@ -1101,7 +1108,7 @@ static void updateFreezeFrameOccurrencePreInit(const EventRecType *EventBuffer)
                        preInitFreezeFrameBuffer[i].occurrence += EventBuffer->occurrence;\r
                }\r
        }\r
-       \r
+\r
 }\r
 /*\r
  * Procedure:  initCurrentFreezeFrameTimeStamp\r
@@ -1117,7 +1124,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
@@ -1128,7 +1135,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
@@ -1474,7 +1481,7 @@ static boolean lookupExtendedDataPriMem(Dem_EventIdType eventId, ExtDataRecType
 Std_ReturnType copyNvmMirror(const NvM_BlockIdType BlockId, uint8 *dstPtr, const uint8 *srcPtr, uint8 len)\r
 {\r
 \r
-#if (DEM_USE_NVM == STD_ON)\r
+#if (DEM_USE_NVM == STD_ON  && DEM_UNIT_TEST == STD_OFF)\r
        Std_ReturnType blockReadStatus = E_NOT_OK;\r
        NvM_RequestResultType requestResult;\r
 \r
@@ -1497,7 +1504,7 @@ Std_ReturnType copyNvmMirror(const NvM_BlockIdType BlockId, uint8 *dstPtr, const
  */\r
 Std_ReturnType writeNvmMirror(const NvM_BlockIdType BlockId, uint8 *dstPtr, const uint8 *srcPtr, uint8 len)\r
 {\r
-#if (DEM_USE_NVM == STD_ON)\r
+#if (DEM_USE_NVM == STD_ON && DEM_UNIT_TEST == STD_OFF)\r
        Std_ReturnType blockWriteStatus = E_NOT_OK;\r
        NvM_RequestResultType requestResult;\r
 \r
@@ -1526,7 +1533,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
@@ -1589,7 +1598,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
@@ -1608,7 +1617,11 @@ static void storeFreezeFrameDataPerMem()
 \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( E_NOT_OK == writeNvmMirror(FreezeFrameBlockId[i], (uint8 *)FreezeFrameMirrorBuffer[i], (const uint8 *)&priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType)) ) {\r
+                       if( E_OK == writeNvmMirror(FreezeFrameBlockId[i], (uint8 *)FreezeFrameMirrorBuffer[i], (const uint8 *)&priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType)) ) {\r
+                               FFIsModified = FALSE;\r
+                       }\r
+                       else\r
+                       {\r
                                FFIsModified = TRUE;\r
                        }\r
                }\r
@@ -1701,17 +1714,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
-                       if((*freezeFrameClassPtr)->FFIdClassRef[i].DidReadDataLengthFnc != NULL){\r
-                               callbackReturnCode = (*freezeFrameClassPtr)->FFIdClassRef[i].DidReadDataLengthFnc(&dataSizeLocal);\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
+                               dataSizeLocal = (*freezeFrameClassPtr)->FFIdClassRef[i]->PidOrDidSize;\r
                        }\r
-                       \r
+\r
                        *dataSize += dataSizeLocal + DEM_DID_IDENTIFIER_SIZE_OF_BYTES;\r
                }\r
 \r
@@ -1776,7 +1789,7 @@ static void handlePreInitEvent(Dem_EventIdType eventId, Dem_EventStatusType even
                                        }\r
                                }\r
 \r
-                               \r
+\r
                        }\r
                        else {\r
                                // Operation cycle not started\r
@@ -1835,7 +1848,7 @@ static Std_ReturnType handleEvent(Dem_EventIdType eventId, Dem_EventStatusType e
                                                else{\r
                                                        // do nothing\r
                                                }\r
-                                       }                                       \r
+                                       }\r
                                }\r
                        }\r
                        else {\r
@@ -2044,7 +2057,7 @@ static boolean lookupAgingRecPriMem(Dem_EventIdType eventId, const HealingRecTyp
 {\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
@@ -2315,7 +2328,7 @@ 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
@@ -2331,7 +2344,7 @@ 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
@@ -2343,8 +2356,8 @@ void Dem_Init(void)
                // Validate aging records stored in primary memory\r
                for (i = 0; i < DEM_MAX_NUMBER_AGING_PRI_MEM; i++){\r
                        entryValid = checkEntryValid(priMemAgingBuffer[i].eventId);\r
-                       cSum = calcChecksum(&priMemAgingBuffer[i], sizeof(HealingRecType) - sizeof(ChecksumType));\r
-                       if ((cSum != priMemAgingBuffer[i].checksum) || (priMemAgingBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\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(HealingRecType));\r
                                AgingIsModified = TRUE;\r
@@ -2354,8 +2367,8 @@ void Dem_Init(void)
                // Validate event records stored in primary memory\r
                for (i = 0; i < DEM_MAX_NUMBER_EVENT_PRI_MEM; i++) {\r
                        entryValid = checkEntryValid(priMemEventBuffer[i].eventId);\r
-                       cSum = calcChecksum(&priMemEventBuffer[i], sizeof(EventRecType)-sizeof(ChecksumType));\r
-                       if ((cSum != priMemEventBuffer[i].checksum) || (priMemEventBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\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
@@ -2368,14 +2381,13 @@ void Dem_Init(void)
                        }\r
                }\r
 \r
-               //initialize the current timestamp and update the timestamp in pre init\r
-               //initCurrentFreezeFrameTimeStamp(&FF_TimeStamp);\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
                        entryValid = checkEntryValid(priMemExtDataBuffer[i].eventId);\r
-                       cSum = calcChecksum(&priMemExtDataBuffer[i], sizeof(ExtDataRecType)-sizeof(ChecksumType));\r
-                       if ((cSum != priMemExtDataBuffer[i].checksum) || (priMemExtDataBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\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
@@ -2391,8 +2403,8 @@ void Dem_Init(void)
                // Validate freeze frame records stored in primary memory\r
                for (i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++) {\r
                        entryValid = checkEntryValid(priMemFreezeFrameBuffer[i].eventId);\r
-                       cSum = calcChecksum(&priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType)-sizeof(ChecksumType));\r
-                       if ((cSum != priMemFreezeFrameBuffer[i].checksum) || (priMemFreezeFrameBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\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
@@ -2464,7 +2476,7 @@ 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
@@ -2679,7 +2691,7 @@ Std_ReturnType Dem_GetDTCOfEvent(Dem_EventIdType eventId, Dem_DTCKindType dtcKin
  * Procedure:  Dem_ReportErrorStatus\r
  * Reentrant:  Yes\r
  */\r
-void Dem_ReportErrorStatus( Dem_EventIdType eventId, Dem_EventStatusType eventStatus ) /** @req DEM107 *//** @req DEM206 */\r
+void Dem_ReportErrorStatus( Dem_EventIdType eventId, Dem_EventStatusType eventStatus ) /** @req DEM206 */\r
 {\r
 \r
        switch (demState) {\r
@@ -2927,12 +2939,9 @@ Dem_ReturnClearDTCType Dem_ClearDTC(uint32 dtc, Dem_DTCKindType dtcKind, Dem_DTC
                                                                                resetEventStatusRec(eventParam);\r
                                                                                storeFreezeFrameDataPerMem();\r
                                                                                break;\r
-                                                                               \r
+\r
+                                                                       case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
                                                                        case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
-                                                                               \r
-                                                                               break;\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
@@ -3128,7 +3137,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
@@ -3142,39 +3151,35 @@ Dem_ReturnGetFreezeFrameDataByDTCType Dem_GetFreezeFrameDataByDTC(uint32  dtc,De
                        if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
                                if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
                                        if (lookupFreezeFrameDataRecNumParam(recordNumber, eventRec->eventParamRef, &FFDataRecordClass)) {\r
-                                               if(lookupFreezeFrameDataSize(recordNumber, &FFDataRecordClass, &FFDataSize)){\r
-                                                       if (*bufSize >= FFDataSize) {\r
-                                                               switch (dtcOrigin)\r
-                                                               {\r
-                                                               case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
-                                                                       if (lookupFreezeFrameDataPriMem(eventRec->eventId,recordNumber, &freezeframe)) {\r
-                                                                               memcpy(destBuffer, freezeframe->data, FFDataSize); /** @req DEM071 */\r
-                                                                               *bufSize = FFDataSize;\r
-                                                                               returnCode = DEM_GET_FFDATABYDTC_OK;\r
-                                                                       }\r
-                                                                       else {\r
-                                                                               *bufSize = 0;\r
-                                                                               returnCode = DEM_GET_FFDATABYDTC_OK;\r
-                                                                       }\r
-                                                                       break;\r
-\r
-                                                               case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
-                                                               case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
-                                                               case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
-                                                                       // Not yet supported\r
-                                                                       returnCode = DEM_GET_FFDATABYDTC_WRONG_DTCORIGIN;\r
-                                                                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFREEZEFRAMEDATARECORDBYDTC_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
-                                                                       break;\r
-                                                               default:\r
-                                                                       returnCode = DEM_GET_FFDATABYDTC_WRONG_DTCORIGIN;\r
-                                                                       break;\r
+                                               lookupFreezeFrameDataSize(recordNumber, &FFDataRecordClass, &FFDataSize);\r
+                                               if (*bufSize >= FFDataSize) {\r
+                                                       switch (dtcOrigin)\r
+                                                       {\r
+                                                       case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
+                                                               if (lookupFreezeFrameDataPriMem(eventRec->eventId,recordNumber, &freezeframe)) {\r
+                                                                       memcpy(destBuffer, freezeframe->data, FFDataSize); /** @req DEM071 */\r
+                                                                       *bufSize = FFDataSize;\r
+                                                                       returnCode = DEM_GET_FFDATABYDTC_OK;\r
                                                                }\r
-                                                       }\r
-                                                       else{\r
-                                                               returnCode = DEM_GET_FFDATABYDTC_BUFFERSIZE;\r
+                                                               else {\r
+                                                                       *bufSize = 0;\r
+                                                                       returnCode = DEM_GET_FFDATABYDTC_OK;\r
+                                                               }\r
+                                                               break;\r
+\r
+                                                       case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
+                                                       case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
+                                                       case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
+                                                               // Not yet supported\r
+                                                               returnCode = DEM_GET_FFDATABYDTC_WRONG_DTCORIGIN;\r
+                                                               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFREEZEFRAMEDATARECORDBYDTC_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
+                                                               break;\r
+                                                       default:\r
+                                                               returnCode = DEM_GET_FFDATABYDTC_WRONG_DTCORIGIN;\r
+                                                               break;\r
                                                        }\r
                                                }\r
-                                               else {\r
+                                               else{\r
                                                        returnCode = DEM_GET_FFDATABYDTC_BUFFERSIZE;\r
                                                }\r
                                        }\r
@@ -3226,18 +3231,17 @@ Dem_GetFreezeFameDataIdentifierByDTCType Dem_GetFreezeFrameDataIdentifierByDTC(u
                                if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
                                        if (lookupFreezeFrameDataRecNumParam(recordNumber, eventRec->eventParamRef, &FFDataRecordClass)) {\r
                                                if(FFDataRecordClass->FFIdClassRef != NULL){\r
-                                                       for(i=0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && (!(FFDataRecordClass->FFIdClassRef[i].Arc_EOL)); i++){\r
-                                                               if(didNum < *arraySize){\r
-                                                                       dataId[didNum] = &FFDataRecordClass->FFIdClassRef[i].DidIdentifier;/** @req DEM073 */\r
-                                                                       didNum++;\r
-                                                                       returnCode = DEM_GET_ID_OK;\r
-                                                               }else{\r
-                                                                       returnCode = DEM_GET_ID_WRONG_FF_TYPE;\r
-                                                               }\r
+                                                       for(i=0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && (!(FFDataRecordClass->FFIdClassRef[i]->Arc_EOL)); i++){\r
+                                                               dataId[didNum] = &FFDataRecordClass->FFIdClassRef[i]->DidIdentifier;/** @req DEM073 */\r
+                                                               didNum++;\r
+                                                               returnCode = DEM_GET_ID_OK;\r
+\r
                                                        }\r
                                                        *arraySize = didNum;\r
                                                }\r
-                                               \r
+                                               else {\r
+                                                       returnCode = DEM_GET_ID_WRONG_FF_TYPE;\r
+                                               }\r
                                        }\r
                                        else{\r
                                                returnCode = DEM_GET_ID_WRONG_FF_TYPE;\r
@@ -3254,8 +3258,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
@@ -3269,7 +3273,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
@@ -3277,27 +3281,31 @@ 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
                                if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
                                        if (lookupFreezeFrameDataRecNumParam(recordNumber, eventRec->eventParamRef, &FFDataRecordClass)) {\r
                                                if(FFDataRecordClass->FFIdClassRef != NULL){\r
-                                                       for(i = 0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && (!(FFDataRecordClass->FFIdClassRef[i].Arc_EOL)); i++){\r
+                                                       /* Note - there is a function called lookupFreezeFrameDataSize that can be used here */\r
+                                                       for(i = 0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && (!(FFDataRecordClass->FFIdClassRef[i]->Arc_EOL)); i++){\r
                                                                /* read out the did size */\r
-                                                               if(FFDataRecordClass->FFIdClassRef[i].DidReadDataLengthFnc != NULL){\r
-                                                                       callbackReturnCode = FFDataRecordClass->FFIdClassRef[i].DidReadDataLengthFnc(&dataSize);\r
+                                                               if(FFDataRecordClass->FFIdClassRef[i]->DidReadDataLengthFnc != NULL){\r
+                                                                       callbackReturnCode = FFDataRecordClass->FFIdClassRef[i]->DidReadDataLengthFnc(&dataSize);\r
                                                                        if(callbackReturnCode != E_OK){\r
                                                                                return (returnCode = DEM_GET_SIZEOFFF_PENDING);\r
                                                                        }\r
                                                                }\r
                                                                else{\r
-                                                                       dataSize = FFDataRecordClass->FFIdClassRef[i].PidOrDidSize;\r
+                                                                       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
+                                               else {\r
+                                                       returnCode = DEM_GET_SIZEOFFF_WRONG_RNUM;\r
                                                }\r
                                        }\r
                                        else{\r
@@ -3315,8 +3323,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
@@ -3327,8 +3335,7 @@ Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32  dtc,Dem_DTCK
 \r
 }\r
 \r
-\r
-#ifdef DEM_UNIT_TEST\r
+#if (DEM_UNIT_TEST == STD_ON)\r
 void getFFDataPreInit(FreezeFrameRecType **buf)\r
 {\r
        *buf = &preInitFreezeFrameBuffer[0];\r
@@ -3365,34 +3372,6 @@ void getPriMemAgingBufPtr(HealingRecType **buf)
 /***********************************\r
  * OBD-specific Interfaces (8.3.6) *\r
  ***********************************/\r
-#define DEM_UNIT_TEST\r
-#ifdef DEM_UNIT_TEST\r
-void getFFDataPreInit(FreezeFrameRecType **buf)\r
-{\r
-       *buf = &preInitFreezeFrameBuffer[0];\r
-       return;\r
-}\r
-void getPriMemFFBufPtr(FreezeFrameRecType **buf)\r
-{\r
-       *buf = &priMemFreezeFrameBuffer[0];\r
-       return;\r
-}\r
 \r
-uint32 getCurTimeStamp()\r
-{\r
-       return FF_TimeStamp;\r
-}\r
 \r
-void getPriMemEventRecBufPtr(EventStatusRecType **buf)\r
-{\r
-       *buf = &eventStatusBuffer[0];\r
-       return;\r
-}\r
-\r
-void getPriMemAgingBufPtr(HealingRecType **buf)\r
-{\r
-       *buf = &priMemAgingBuffer[0];\r
-       return;\r
-}\r
-#endif\r
 \r