X-Git-Url: http://rtime.felk.cvut.cz/gitweb/arc.git/blobdiff_plain/faddc5dc4a8423729a4f58bc34e0f73e13309077..8eb64b39f99ce6625711a23eb965a44f0b963ff5:/diagnostic/Dem/Dem.c diff --git a/diagnostic/Dem/Dem.c b/diagnostic/Dem/Dem.c index 61f35e25..df05bae0 100644 --- a/diagnostic/Dem/Dem.c +++ b/diagnostic/Dem/Dem.c @@ -54,8 +54,8 @@ //#include "SchM_Dem.h" #include "MemMap.h" #include "Cpu.h" -#include "DEM_Types.h" -#include "DEM_Lcfg.h" +#include "Dem_Types.h" +#include "Dem_Lcfg.h" #define USE_DEBUG_PRINTF #include "debug.h" @@ -103,6 +103,10 @@ /* * Local types */ +#if !defined(USE_DCM) +typedef uint8 Dcm_NegativeResponseCodeType; +#define DCM_E_POSITIVERESPONSE ((Dcm_NegativeResponseCodeType)0x00) +#endif // DtcFilterType typedef struct { @@ -572,7 +576,7 @@ static void updateEventStatusRec(const Dem_EventParameterType *eventParam, Dem_E } } faultCounterAfterDebounce = eventStatusRecPtr->faultDetectionCounter; - + eventStatusRecPtr->errorStatusChanged = FALSE; if (eventStatus == DEM_EVENT_STATUS_FAILED) { @@ -769,7 +773,7 @@ static void bubbleSort(FreezeFrameRecType *freezeFrameBuf, uint16 length) //exchange buffer data memcpy(&temp,&freezeFrameBuf[i],sizeof(FreezeFrameRecType)); memcpy(&freezeFrameBuf[i],&freezeFrameBuf[j],sizeof(FreezeFrameRecType)); - memcpy(&freezeFrameBuf[j],&temp,sizeof(FreezeFrameRecType)); + memcpy(&freezeFrameBuf[j],&temp,sizeof(FreezeFrameRecType)); } } } @@ -780,9 +784,9 @@ static void bubbleSort(FreezeFrameRecType *freezeFrameBuf, uint16 length) * Procedure: retrieveEventStatusBit * Description: retrieve Event Status Bit */ -static boolean retrieveEventStatusBit(FreezeFrameRecType *freezeFrameBuf, - uint16 length , - Dem_EventStatusExtendedType nBit, +static boolean retrieveEventStatusBit(FreezeFrameRecType *freezeFrameBuf, + uint16 length , + Dem_EventStatusExtendedType nBit, FreezeFrameRecType **freezeFrame) { boolean freezeFrameFound = FALSE; @@ -796,7 +800,7 @@ static boolean retrieveEventStatusBit(FreezeFrameRecType *freezeFrameBuf, if(freezeFrameFound == TRUE){ *freezeFrame = &freezeFrameBuf[i]; } - } + } } return freezeFrameFound; @@ -812,7 +816,7 @@ static boolean retrieveEventStatusBit(FreezeFrameRecType *freezeFrameBuf, static boolean lookupFreezeFrameForDisplacementPreInit(FreezeFrameRecType **freezeFrame) { boolean freezeFrameFound = FALSE; - + /* Bubble sort:rearrange priMemFreezeFrameBuffer from little to big */ bubbleSort(preInitFreezeFrameBuffer, DEM_MAX_NUMBER_FF_DATA_PRE_INIT); @@ -823,12 +827,12 @@ static boolean lookupFreezeFrameForDisplacementPreInit(FreezeFrameRecType **free if(freezeFrameFound == FALSE){ freezeFrameFound = retrieveEventStatusBit(preInitFreezeFrameBuffer, DEM_MAX_NUMBER_FF_DATA_PRE_INIT, DEM_TEST_FAILED, freezeFrame); } - + /* if all confirmed,lookup the oldest active dtc */ if(freezeFrameFound == FALSE){ *freezeFrame = &preInitFreezeFrameBuffer[0]; freezeFrameFound = TRUE; - } + } return freezeFrameFound; } @@ -842,7 +846,7 @@ static boolean lookupFreezeFrameForDisplacementPreInit(FreezeFrameRecType **free static boolean lookupFreezeFrameForDisplacement(FreezeFrameRecType **freezeFrame) { boolean freezeFrameFound = FALSE; - + bubbleSort(priMemFreezeFrameBuffer, DEM_MAX_NUMBER_FF_DATA_PRI_MEM); /* Find out the oldest not confirmed dtc */ @@ -854,9 +858,9 @@ static boolean lookupFreezeFrameForDisplacement(FreezeFrameRecType **freezeFrame } /* If all confirmed,lookup the oldest active dtc */ - if(freezeFrameFound == FALSE){ + if(freezeFrameFound == FALSE){ *freezeFrame = &priMemFreezeFrameBuffer[0]; - freezeFrameFound = TRUE; + freezeFrameFound = TRUE; } return freezeFrameFound; @@ -871,7 +875,7 @@ static void rearrangeFreezeFrameTimeStamp(uint32 *timeStamp) uint32 i = 0; uint32 j = 0; uint32 k = 0; - + /* Bubble sort:rearrange priMemFreezeFrameBuffer from little to big */ for(i=0;i DEM_MAX_TIMESTAMP_FOR_REARRANGEMENT){ rearrangeFreezeFrameTimeStamp(&FF_TimeStamp); } - + freezeFrame->timeStamp = FF_TimeStamp; FF_TimeStamp++; @@ -1035,7 +1039,7 @@ static void getFreezeFrameData(const Dem_EventParameterType *eventParam, freezeFrame->eventId = DEM_EVENT_ID_NULL; freezeFrame->dataSize = storeIndex; freezeFrame->checksum = 0; - } + } } @@ -1073,7 +1077,7 @@ static void storeFreezeFrameDataPreInit(const Dem_EventParameterType *eventParam if (eventIdFreePositionFound) { memcpy(&preInitFreezeFrameBuffer[i-1], freezeFrame, sizeof(FreezeFrameRecType)); } - else { + else { /* do displacement */ if(lookupFreezeFrameForDisplacementPreInit(&freezeFrameLocal)){ memcpy(freezeFrameLocal, freezeFrame, sizeof(FreezeFrameRecType)); @@ -1101,7 +1105,7 @@ static void updateFreezeFrameOccurrencePreInit(const EventRecType *EventBuffer) preInitFreezeFrameBuffer[i].occurrence += EventBuffer->occurrence; } } - + } /* * Procedure: initCurrentFreezeFrameTimeStamp @@ -1117,7 +1121,7 @@ static void initCurrentFreezeFrameTimeStamp(uint32 *timeStampPtr) /* Find out the biggest timestamp in the last power on */ for (i = 0; i temp)){ temp = priMemFreezeFrameBuffer[i].timeStamp; } @@ -1128,7 +1132,7 @@ static void initCurrentFreezeFrameTimeStamp(uint32 *timeStampPtr) preInitFreezeFrameBuffer[i].timeStamp += temp; } } - *timeStampPtr += temp; + *timeStampPtr += temp; Irq_Restore(state); } @@ -1591,7 +1595,7 @@ static void storeFreezeFrameDataPriMem(const Dem_EventParameterType *eventParam, } else{ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_STORE_FF_DATA_PRI_MEM_ID, DEM_E_PRI_MEM_FF_DATA_BUFF_FULL); - } + } } } @@ -1703,17 +1707,17 @@ static boolean lookupFreezeFrameDataSize(uint8 recordNumber, Dem_FreezeFrameClas uint16 i; if (*freezeFrameClassPtr != NULL) { - for (i = 0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && ((*freezeFrameClassPtr)->FFIdClassRef[i].Arc_EOL != TRUE); i++) { + for (i = 0; (i < DEM_MAX_NR_OF_RECORDS_IN_FREEZEFRAME_DATA) && ((*freezeFrameClassPtr)->FFIdClassRef[i].Arc_EOL != TRUE); i++) { if((*freezeFrameClassPtr)->FFIdClassRef[i].DidReadDataLengthFnc != NULL){ callbackReturnCode = (*freezeFrameClassPtr)->FFIdClassRef[i].DidReadDataLengthFnc(&dataSizeLocal); if(callbackReturnCode != E_OK){ - return (dataSizeFound = FALSE); + return (dataSizeFound = FALSE); } } else{ dataSizeLocal = (*freezeFrameClassPtr)->FFIdClassRef[i].PidOrDidSize; } - + *dataSize += dataSizeLocal + DEM_DID_IDENTIFIER_SIZE_OF_BYTES; } @@ -1778,7 +1782,7 @@ static void handlePreInitEvent(Dem_EventIdType eventId, Dem_EventStatusType even } } - + } else { // Operation cycle not started @@ -1837,7 +1841,7 @@ static Std_ReturnType handleEvent(Dem_EventIdType eventId, Dem_EventStatusType e else{ // do nothing } - } + } } } else { @@ -2046,7 +2050,7 @@ static boolean lookupAgingRecPriMem(Dem_EventIdType eventId, const HealingRecTyp { uint16 i; boolean agingRecFound = FALSE; - + for (i = 0; i < DEM_MAX_NUMBER_AGING_PRI_MEM && (!agingRecFound); i++) { if(priMemAgingBuffer[i].eventId == eventId){ agingRecFound = TRUE; @@ -2371,6 +2375,7 @@ void Dem_Init(void) } + // Validate extended data records stored in primary memory for (i = 0; i < DEM_MAX_NUMBER_EXT_DATA_PRI_MEM; i++) { entryValid = checkEntryValid(priMemExtDataBuffer[i].eventId); @@ -2464,7 +2469,7 @@ void Dem_Shutdown(void) * Interface for basic software scheduler */ void Dem_MainFunction(void)/** @req DEM125 */ -{ +{ if (FFIsModified) { storeFreezeFrameDataPerMem(FreezeFrameBlockId); } @@ -2927,12 +2932,12 @@ Dem_ReturnClearDTCType Dem_ClearDTC(uint32 dtc, Dem_DTCKindType dtcKind, Dem_DTC resetEventStatusRec(eventParam); storeFreezeFrameDataPerMem(); break; - + case DEM_DTC_ORIGIN_PERMANENT_MEMORY: - + break; - - case DEM_DTC_ORIGIN_SECONDARY_MEMORY: + + case DEM_DTC_ORIGIN_SECONDARY_MEMORY: case DEM_DTC_ORIGIN_MIRROR_MEMORY: // Not yet supported returnCode = DEM_CLEAR_WRONG_DTCORIGIN; @@ -3128,7 +3133,7 @@ Dem_ReturnGetSizeOfExtendedDataRecordByDTCType Dem_GetSizeOfExtendedDataRecordBy * Procedure: Dem_GetFreezeFrameDataByDTC * Reentrant: No */ -/** @req DEM236 */ +/** @req DEM236 */ Dem_ReturnGetFreezeFrameDataByDTCType Dem_GetFreezeFrameDataByDTC(uint32 dtc,Dem_DTCKindType dtcKind,Dem_DTCOriginType dtcOrigin,uint8 recordNumber,uint8* destBuffer,uint8* bufSize) { Dem_ReturnGetFreezeFrameDataByDTCType returnCode = DEM_GET_FFDATABYDTC_WRONG_DTC; @@ -3237,7 +3242,7 @@ Dem_GetFreezeFameDataIdentifierByDTCType Dem_GetFreezeFrameDataIdentifierByDTC(u } *arraySize = didNum; } - + } else{ returnCode = DEM_GET_ID_WRONG_FF_TYPE; @@ -3254,8 +3259,8 @@ Dem_GetFreezeFameDataIdentifierByDTCType Dem_GetFreezeFrameDataIdentifierByDTC(u else{ returnCode = DEM_GET_ID_WRONG_DTC; } - - } + + } else{ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFREEZEFRAMEDATAIDENTIFIERBYDTC_ID, DEM_E_UNINIT); } @@ -3269,7 +3274,7 @@ Dem_GetFreezeFameDataIdentifierByDTCType Dem_GetFreezeFrameDataIdentifierByDTC(u * Reentrant: No */ /** @req DEM238 */ -Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32 dtc,Dem_DTCKindType dtcKind,Dem_DTCOriginType dtcOrigin,uint8 recordNumber,uint16* sizeOfFreezeFrame) +Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32 dtc,Dem_DTCKindType dtcKind,Dem_DTCOriginType dtcOrigin,uint8 recordNumber,uint16* sizeOfFreezeFrame) { Dem_ReturnGetSizeOfFreezeFrameType returnCode = DEM_GET_SIZEOFFF_PENDING; Dem_FreezeFrameClassType const *FFDataRecordClass = NULL; @@ -3277,7 +3282,7 @@ Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32 dtc,Dem_DTCK EventStatusRecType *eventRec; uint16 dataSize = 0; uint16 i = 0; - + if (demState == DEM_INITIALIZED) { if (lookupDtcEvent(dtc, &eventRec)) { if (checkDtcKind(dtcKind, eventRec->eventParamRef)) { @@ -3296,8 +3301,8 @@ Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32 dtc,Dem_DTCK dataSize = FFDataRecordClass->FFIdClassRef[i].PidOrDidSize; } *sizeOfFreezeFrame += dataSize+DEM_DID_IDENTIFIER_SIZE_OF_BYTES;/** @req DEM074 */ - returnCode = DEM_GET_SIZEOFFF_OK; - } + returnCode = DEM_GET_SIZEOFFF_OK; + } } } else{ @@ -3315,8 +3320,8 @@ Dem_ReturnGetSizeOfFreezeFrameType Dem_GetSizeOfFreezeFrame(uint32 dtc,Dem_DTCK else{ returnCode = DEM_GET_SIZEOFFF_WRONG_DTC; } - - } + + } else{ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFREEZEFRAMEDATAIDENTIFIERBYDTC_ID, DEM_E_UNINIT); returnCode = DEM_GET_SIZEOFFF_PENDING; @@ -3365,3 +3370,6 @@ void getPriMemAgingBufPtr(HealingRecType **buf) /*********************************** * OBD-specific Interfaces (8.3.6) * ***********************************/ + + +