//#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
}\r
}\r
faultCounterAfterDebounce = eventStatusRecPtr->faultDetectionCounter;\r
- \r
+\r
eventStatusRecPtr->errorStatusChanged = FALSE;\r
\r
if (eventStatus == DEM_EVENT_STATUS_FAILED) {\r
//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
* 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
if(freezeFrameFound == TRUE){\r
*freezeFrame = &freezeFrameBuf[i];\r
}\r
- } \r
+ }\r
}\r
\r
return freezeFrameFound;\r
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
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
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
}\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
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
//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
* 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
}\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
}\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
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
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
freezeFrame->eventId = DEM_EVENT_ID_NULL;\r
freezeFrame->dataSize = storeIndex;\r
freezeFrame->checksum = 0;\r
- } \r
+ }\r
}\r
\r
\r
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
preInitFreezeFrameBuffer[i].occurrence += EventBuffer->occurrence;\r
}\r
}\r
- \r
+\r
}\r
/*\r
* Procedure: initCurrentFreezeFrameTimeStamp\r
\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
preInitFreezeFrameBuffer[i].timeStamp += temp;\r
}\r
}\r
- *timeStampPtr += temp; \r
+ *timeStampPtr += temp;\r
Irq_Restore(state);\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
+#if (DEM_USE_NVM == STD_ON && DEM_UNIT_TEST == STD_OFF)\r
Std_ReturnType blockReadStatus = E_NOT_OK;\r
NvM_RequestResultType requestResult;\r
\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
+#if (DEM_USE_NVM == STD_ON && DEM_UNIT_TEST == STD_OFF)\r
Std_ReturnType blockWriteStatus = E_NOT_OK;\r
NvM_RequestResultType requestResult;\r
\r
\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
Irq_Restore(state);\r
}\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
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
}\r
}\r
\r
- \r
+\r
}\r
else {\r
// Operation cycle not started\r
else{\r
// do nothing\r
}\r
- } \r
+ }\r
}\r
}\r
else {\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
}\r
\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
* Interface for basic software scheduler\r
*/\r
void Dem_MainFunction(void)/** @req DEM125 */\r
-{ \r
+{\r
if (FFIsModified) {\r
storeFreezeFrameDataPerMem(FreezeFrameBlockId);\r
}\r
* 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
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
* 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
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
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
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
* 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
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
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
\r
}\r
\r
-#define DEM_UNIT_TEST\r
-#ifdef DEM_UNIT_TEST\r
+#if (DEM_UNIT_TEST == STD_ON)\r
void getFFDataPreInit(FreezeFrameRecType **buf)\r
{\r
*buf = &preInitFreezeFrameBuffer[0];\r
/***********************************\r
* OBD-specific Interfaces (8.3.6) *\r
***********************************/\r
+\r
+\r
+\r