]> rtime.felk.cvut.cz Git - arc.git/blobdiff - diagnostic/Dcm/Dcm_Dsp.c
Dem, Changed types to match tool output.
[arc.git] / diagnostic / Dcm / Dcm_Dsp.c
index c4c436ded7641def70d958e48ee47e85eeb1e481..c852abf47761dc5a215446a78eb4a1bc2a103649 100644 (file)
@@ -190,6 +190,8 @@ void DspMemoryMainFunction(void)
 void DspPeriodicDIDMainFunction()\r
 {\r
        uint8 i;\r
+       boolean sentResponseThisLoop = FALSE;\r
+\r
        for(i = 0;i < dspPDidRef.PDidNr; i++)\r
        {\r
                if(dspPDidRef.dspPDid[i].PDidTxCounterNumber > dspPDidRef.dspPDid[i].PDidTxCounter)\r
@@ -198,9 +200,16 @@ void DspPeriodicDIDMainFunction()
                }\r
                else\r
                {\r
-                       dspPDidRef.dspPDid[i].PDidTxCounter = 0;\r
-                       /*AutoSar  DCM  8.10.5 */\r
-                       DslInternal_ResponseOnOneDataByPeriodicId(dspPDidRef.dspPDid[i].PeriodicDid);\r
+                       if( sentResponseThisLoop  == FALSE ) {\r
+                               if (E_OK == DslInternal_ResponseOnOneDataByPeriodicId(dspPDidRef.dspPDid[i].PeriodicDid)){\r
+                                       dspPDidRef.dspPDid[i].PDidTxCounter = 0;\r
+                                       /*AutoSar  DCM  8.10.5 */\r
+                                       sentResponseThisLoop = TRUE;\r
+                               }\r
+                       }\r
+                       else {\r
+                               /* Don't do anything - PDid will be sent next loop */\r
+                       }\r
                }       \r
        }\r
 }\r
@@ -474,7 +483,7 @@ static Dcm_NegativeResponseCodeType udsReadDtcInfoSub_0x02_0x0A_0x0F_0x13_0x15(c
                uint8                                   SID;\r
                uint8                                   reportType;\r
                uint8                                   dtcStatusAvailabilityMask;\r
-               dtcAndStatusRecordType  *dtcAndStatusRecord;\r
+               dtcAndStatusRecordType  dtcAndStatusRecord[];\r
        } TxDataType;\r
 \r
        // Setup the DTC filter\r
@@ -680,11 +689,97 @@ static Dcm_NegativeResponseCodeType udsReadDtcInfoSub_0x03(const PduInfoType *pd
 //lint -e{715, 838, 818}               Symbol not referenced, responseCode not used, txData should be const\r
 static Dcm_NegativeResponseCodeType udsReadDtcInfoSub_0x04(const PduInfoType *pduRxData, PduInfoType *pduTxData)\r
 {\r
+       // 1. Only consider Negative Response 0x10\r
+\r
        Dcm_NegativeResponseCodeType responseCode = DCM_E_POSITIVERESPONSE;\r
+       Dem_DTCKindType DtcType = 0;\r
+       Dem_DTCOriginType  DtcOrigin = 0;\r
+       uint32 DtcNumber = 0;\r
+       uint8 RecordNumber = 0;\r
+       uint8 SizeOfTxBuf = pduTxData->SduLength;\r
+       uint8 AvailableBufSize = 0;\r
+       uint8 RecNumOffset = 0;\r
+       uint16 index = 0;\r
+       uint16 EventIndex =0;\r
+       uint16 FFIdNumber = 0;\r
+       Dem_ReturnGetFreezeFrameDataByDTCType GetFFbyDtcReturnCode = DEM_GET_FFDATABYDTC_OK;\r
+       Dem_ReturnGetStatusOfDTCType GetStatusOfDtc = DEM_STATUS_OK;\r
+       Dem_EventStatusExtendedType DtcStatus = 0;\r
+       Dem_EventParameterType *pEventParaTemp = NULL;\r
+\r
+       // Now let's assume DTC has 3 bytes.\r
+       DtcNumber = (((uint32)pduRxData->SduDataPtr[2])<<16) +\r
+                               (((uint32)pduRxData->SduDataPtr[3])<<8) +\r
+                               ((uint32)pduRxData->SduDataPtr[4]);\r
+\r
+       RecordNumber = pduRxData->SduDataPtr[5];\r
+\r
+       for (EventIndex = 0; DEM_Config.ConfigSet->EventParameter[EventIndex].Arc_EOL != TRUE; EventIndex++){\r
+               // search each event linked to this DTC\r
+               if (DEM_Config.ConfigSet->EventParameter[EventIndex].DTCClassRef->DTC == DtcNumber){\r
+                       pEventParaTemp = (Dem_EventParameterType *)(&DEM_Config.ConfigSet->EventParameter[EventIndex]);\r
+               }\r
+               else {\r
+                       pEventParaTemp = NULL;\r
+               }\r
+\r
+               if (pEventParaTemp != NULL) {\r
+                       DtcType = pEventParaTemp->DTCClassRef->DTCKind;\r
+                       //DtcOrigin = pEventParaTemp->EventClass->EventDestination[?];\r
+                       // now use DEM_DTC_ORIGIN_PRIMARY_MEMORY as default.\r
+                       DtcOrigin = DEM_DTC_ORIGIN_PRIMARY_MEMORY;\r
+                       pduTxData->SduDataPtr[6 + RecNumOffset] = RecordNumber;\r
+\r
+                       // get Dids' number\r
+                       for (index = 0; pEventParaTemp->FreezeFrameClassRef[index] != NULL; index++){\r
+                               if (pEventParaTemp->FreezeFrameClassRef[index]->FFRecordNumber == RecordNumber) {\r
+                                       // Calculate the Number of Dids in FF\r
+                                       for (FFIdNumber = 0; pEventParaTemp->FreezeFrameClassRef[index]->FFIdClassRef[FFIdNumber]->Arc_EOL != FALSE; FFIdNumber++) {\r
+                                               ;\r
+                                       }\r
+                               }\r
+                       }\r
+                       pduTxData->SduDataPtr[7 + RecNumOffset] = FFIdNumber;\r
 \r
-       // TODO: Not supported yet\r
-       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+                       // get FF data\r
+                       AvailableBufSize = SizeOfTxBuf - 7 - RecNumOffset;\r
+                       GetFFbyDtcReturnCode = Dem_GetFreezeFrameDataByDTC(DtcNumber, DtcType, DtcOrigin,\r
+                                       RecordNumber, &pduTxData->SduDataPtr[8 + RecNumOffset], &AvailableBufSize);\r
+                       if (GetFFbyDtcReturnCode != DEM_GET_FFDATABYDTC_OK){\r
+                               break;\r
+                       }\r
+                       RecNumOffset = RecNumOffset + AvailableBufSize;\r
+                       pduTxData->SduLength = 8 + RecNumOffset;\r
+               }\r
+       }\r
 \r
+       // Negative response\r
+       switch (GetFFbyDtcReturnCode) {\r
+               case DEM_GET_FFDATABYDTC_OK:\r
+                       break;\r
+               default:\r
+                       responseCode = DCM_E_GENERALREJECT;\r
+                       return responseCode;\r
+       }\r
+\r
+       GetStatusOfDtc = Dem_GetStatusOfDTC(DtcNumber, DtcType, DtcOrigin, &DtcStatus); /** @req DEM212 */\r
+       switch (GetStatusOfDtc) {\r
+               case DEM_STATUS_OK:\r
+                       break;\r
+               default:\r
+                       responseCode = DCM_E_GENERALREJECT;\r
+                       return responseCode;\r
+       }\r
+\r
+\r
+       // Positive response\r
+       // See ISO 14229(2006) Table 254\r
+       pduTxData->SduDataPtr[0] = 0x59;        // positive response\r
+       pduTxData->SduDataPtr[1] = 0x04;        // subid\r
+       pduTxData->SduDataPtr[2] = pduRxData->SduDataPtr[2];    // DTC\r
+       pduTxData->SduDataPtr[3] = pduRxData->SduDataPtr[3];\r
+       pduTxData->SduDataPtr[4] = pduRxData->SduDataPtr[4];\r
+       pduTxData->SduDataPtr[5] = (uint8)DtcStatus;    //status\r
        return responseCode;\r
 }\r
 \r
@@ -850,7 +945,7 @@ static boolean lookupDid(uint16 didNr, const Dcm_DspDidType **didPtr)
                dspDid++;\r
        }\r
 \r
-       if (!dspDid->Arc_EOL) {\r
+       if (!dspDid->Arc_EOL && (!dspDid->DspDidInfoRef->DspDidDynamicllyDefined)) {\r
                didFound = TRUE;\r
                *didPtr = dspDid;\r
        }\r
@@ -1051,7 +1146,7 @@ void DspUdsReadDataByIdentifier(const PduInfoType *pduRxData, PduInfoType *pduTx
                                responseCode = readDidData(didPtr, pduTxData, &txPos);\r
                        }\r
 \r
-                       else if(LookupDDD(didNr,&DDidPtr) == TRUE)\r
+                       else if(LookupDDD(didNr,(const Dcm_DspDDDType **)&DDidPtr) == TRUE)\r
                        {\r
                                /*DCM 651,DCM 652*/\r
                                pduTxData->SduDataPtr[txPos] = (DDidPtr->DynamicallyDid>>8) & 0xFF;\r
@@ -1169,8 +1264,8 @@ static Dcm_NegativeResponseCodeType writeDidData(const Dcm_DspDidType *didPtr, c
 \r
                                        if (result == E_OK) {\r
                                                if (didLen == writeDidLen) {    /** @req DCM473 */\r
-                                                       result = didPtr->DspDidWriteDataFnc(&pduRxData->SduDataPtr[3], (uint8)didLen, &errorCode);      /** @req DCM395 */\r
-                                                       if ((result != E_OK) || (errorCode != DCM_E_POSITIVERESPONSE)) {\r
+                                                       result = didPtr->DspDidWriteDataFnc(&pduRxData->SduDataPtr[3], (uint8)didLen, &responseCode);   /** @req DCM395 */\r
+                                                       if( result != E_OK && responseCode == DCM_E_POSITIVERESPONSE ) {\r
                                                                responseCode = DCM_E_CONDITIONSNOTCORRECT;\r
                                                        }\r
                                                }\r
@@ -1591,7 +1686,6 @@ void DspDcmConfirmation(PduIdType confirmPduId)
 }\r
 \r
 \r
-/* REVIEW JB 2012-06-05: Removed iSoft function header - please don't add iSoft specific headers in the future */\r
 static boolean CheckReadMemoryByAddress( boolean useId,uint32 memoryAddress,\r
                                                                                uint8 memoryAddressFormat,\r
                                                                                uint32 memorySize,\r
@@ -1644,7 +1738,7 @@ static boolean lookupReadMemory(uint32 memoryAddress,
                }\r
                else\r
                {\r
-                       (Dcm_DspMemoryIdInfo *)dspMemoryInfo++;\r
+                       dspMemoryInfo++;\r
                }\r
        }\r
        if (memoryFound == TRUE)\r
@@ -1795,7 +1889,6 @@ static boolean checkWriteMemoryByAddress(boolean useId,uint32 memoryAddress,
        else\r
        {\r
                MemoryId = (uint8)(memoryAddress >> ((memoryAddressFormat - 1)*8));\r
-               /* REVIEW JB 2012-06-05: See comment for corresponding read function */\r
                memoryAddress = memoryAddress & DCM_MEMORY_ADDRESS_MASK;\r
 \r
                if((MemoryId == dspMemory->MemoryIdValue) &&\r
@@ -1978,7 +2071,6 @@ static boolean checkPeriodicIdentifierBuffer(uint8 PeriodicDid,uint8 Length,uint
        return ret;\r
 }\r
 \r
-/* REVIEW JB 2012-06-05: Please describe the buffer algorithm because it is not obvious when looking at this function. */\r
 static void ClearPeriodicIdentifierBuffer(uint8 BufferEnd,uint8 postion)\r
 {\r
        dspPDidRef.dspPDid[postion].PeriodicDid = dspPDidRef.dspPDid[BufferEnd ].PeriodicDid;\r
@@ -2095,7 +2187,7 @@ static Dcm_NegativeResponseCodeType DspSavePeriodicData(uint16 didNr, uint32 per
                        responseCode = DCM_E_REQUESTOUTOFRANGE;\r
                }\r
        }\r
-       else if(LookupDDD(didNr,&DDidPtr) == TRUE)\r
+       else if(LookupDDD(didNr, (const Dcm_DspDDDType **)&DDidPtr) == TRUE)\r
        {\r
                responseCode = DCM_E_POSITIVERESPONSE;\r
        }\r
@@ -2106,9 +2198,7 @@ static Dcm_NegativeResponseCodeType DspSavePeriodicData(uint16 didNr, uint32 per
        if(responseCode == DCM_E_POSITIVERESPONSE)\r
        {\r
                dspPDidRef.dspPDid[PdidBufferNr].PeriodicDid = (uint8)didNr & DCM_DID_LOW_MASK;\r
-                       /* REVIEW JB 2012-06-05: Why is TxCounter set to PdidBufferNr - it seems wrong. */\r
-               dspPDidRef.dspPDid[PdidBufferNr].PDidTxCounter = PdidBufferNr*3;\r
-\r
+               dspPDidRef.dspPDid[PdidBufferNr].PDidTxCounter = 0;\r
                dspPDidRef.dspPDid[PdidBufferNr].PDidTxCounterNumber = periodicTransmitCounter;\r
        }\r
        return responseCode;\r
@@ -2117,7 +2207,6 @@ static void ClearPeriodicIdentifier(const PduInfoType *pduRxData,PduInfoType *pd
 {\r
        uint16 PdidNumber;\r
        uint8 PDidLowByte;\r
-       uint8 PdidBufferNr;\r
        uint8 PdidPostion;\r
        uint8 i;\r
        if( pduRxData->SduDataPtr[1] == DCM_PERIODICTRANSMIT_STOPSENDING_MODE )\r
@@ -2178,7 +2267,7 @@ void DspReadDataByPeriodicIdentifier(const PduInfoType *pduRxData,PduInfoType *p
                                responseCode = DCM_E_REQUESTOUTOFRANGE;\r
                                break;\r
                }\r
-               if(pduRxData->SduDataPtr[1] != DCM_PERIODICTRANSMIT_STOPSENDING_MODE)\r
+               if((pduRxData->SduDataPtr[1] != DCM_PERIODICTRANSMIT_STOPSENDING_MODE) && responseCode == DCM_E_POSITIVERESPONSE)\r
                {\r
                        PdidNumber = pduRxData->SduLength - 2;\r
                        if(1 == PdidNumber)\r
@@ -2194,7 +2283,7 @@ void DspReadDataByPeriodicIdentifier(const PduInfoType *pduRxData,PduInfoType *p
                                                        responseCode = readPeriodDidData(PDidPtr,&pduTxData->SduDataPtr[2],&DataLength);\r
                                                        pduTxData->SduLength = DataLength + 2;\r
                                                }\r
-                                               else if(TRUE == LookupDDD((0xF200 + (uint16)PDidLowByte),&DDidPtr))\r
+                                               else if(TRUE == LookupDDD((0xF200 + (uint16)PDidLowByte), (const Dcm_DspDDDType **)&DDidPtr))\r
                                                {\r
                                                        pduTxData->SduDataPtr[1] = PDidLowByte;\r
                                                        responseCode = readDDDData(DDidPtr,&pduTxData->SduDataPtr[2],&DataLength);\r
@@ -2223,7 +2312,7 @@ void DspReadDataByPeriodicIdentifier(const PduInfoType *pduRxData,PduInfoType *p
                                        pduTxData->SduLength = 1;\r
                                }\r
                        }\r
-                       else if((PdidNumber + PdidBufferNr) <= DCM_LIMITNUMBER_PERIODDATA)      /*UDS_REQ_0x2A_6*/\r
+                       else if(((PdidNumber + PdidBufferNr) <= DCM_LIMITNUMBER_PERIODDATA) && (responseCode == DCM_E_POSITIVERESPONSE))        /*UDS_REQ_0x2A_6*/\r
                        {       \r
                                for(i = 0;(i < PdidNumber)&&(responseCode == DCM_E_POSITIVERESPONSE);i++)\r
                                {\r
@@ -2277,7 +2366,7 @@ static Dcm_NegativeResponseCodeType dynamicallyDefineDataIdentifierbyDid(uint16
        uint8 Num = 0;\r
        Dcm_NegativeResponseCodeType responseCode = DCM_E_POSITIVERESPONSE;\r
 \r
-       if(FALSE == LookupDDD(DDIdentifier, &DDid))\r
+       if(FALSE == LookupDDD(DDIdentifier, (const Dcm_DspDDDType **)&DDid))\r
        {\r
                while((Num < DCM_MAX_DDD_NUMBER) && (dspDDD[Num].DynamicallyDid != 0 ))\r
                {\r
@@ -2412,7 +2501,7 @@ static Dcm_NegativeResponseCodeType dynamicallyDefineDataIdentifierbyAddress(uin
        uint8 Num = 0;\r
        Dcm_NegativeResponseCodeType responseCode = DCM_E_POSITIVERESPONSE;\r
        \r
-       if(FALSE == LookupDDD(DDIdentifier,&DDid))\r
+       if(FALSE == LookupDDD(DDIdentifier, (const Dcm_DspDDDType **)&DDid))\r
        {\r
                while((Num < DCM_MAX_DDD_NUMBER) && (dspDDD[Num].DynamicallyDid != 0 ))\r
                {\r
@@ -2450,7 +2539,6 @@ static Dcm_NegativeResponseCodeType dynamicallyDefineDataIdentifierbyAddress(uin
                {\r
                        if((Length != 0)&&( Length * (AddressFormat + MemorySizeFormat) == (pduRxData->SduLength - 5) ))\r
                        {\r
-                               /* REVIEW JB 2012-06-05: Use better names than i and j to increase readability */\r
                                for(LengthCount = 0; (LengthCount < Length) && (responseCode == DCM_E_POSITIVERESPONSE); LengthCount++)\r
                                {\r
                                        MemoryAddress = 0;\r
@@ -2523,7 +2611,7 @@ static Dcm_NegativeResponseCodeType dynamicallyDefineDataIdentifierbyAddress(uin
 static Dcm_NegativeResponseCodeType CleardynamicallyDid(uint16 DDIdentifier,const PduInfoType *pduRxData, PduInfoType * pduTxData)\r
 {\r
        /*UDS_REQ_0x2C_5*/\r
-       uint8 i;\r
+       sint8 i, j;\r
        uint8 ClearCount;\r
        uint8 position;\r
        uint8 ClearNum = 0;\r
@@ -2532,7 +2620,7 @@ static Dcm_NegativeResponseCodeType CleardynamicallyDid(uint16 DDIdentifier,cons
        \r
        if(pduRxData->SduLength == 4)\r
        {\r
-               if(TRUE == LookupDDD(DDIdentifier,&DDid))\r
+               if(TRUE == LookupDDD(DDIdentifier, (const Dcm_DspDDDType **)&DDid))\r
                {\r
                        \r
                        if((checkPeriodicIdentifierBuffer(pduRxData->SduDataPtr[3], dspPDidRef.PDidNr, &position) == TRUE)&&(pduRxData->SduDataPtr[2] == 0xF2))\r
@@ -2542,29 +2630,32 @@ static Dcm_NegativeResponseCodeType CleardynamicallyDid(uint16 DDIdentifier,cons
                        }\r
                        else\r
                        {\r
-                               for(i = 1;i < DCM_MAX_DDD_NUMBER;i++)\r
-                               {\r
-                                       if(0 == dspDDD[i].DynamicallyDid)\r
-                                       {\r
-                                               ClearNum = i - 1;\r
-                                               DDid->DynamicallyDid = dspDDD[ClearNum].DynamicallyDid;\r
-                                               dspDDD[ClearNum].DynamicallyDid = 0;\r
-                                               for(ClearCount = 0;ClearCount < DCM_MAX_DDDSOURCE_NUMBER;ClearCount++)\r
-                                               {\r
-                                                       /*DCM647*/\r
-                                                       DDid->DDDSource[ClearCount].DDDTpyeID = dspDDD[ClearNum].DDDSource[ClearCount].DDDTpyeID;\r
-                                                       DDid->DDDSource[ClearCount].formatOrPosition = dspDDD[ClearNum].DDDSource[ClearCount].formatOrPosition;\r
-                                                       DDid->DDDSource[ClearCount].SourceAddressOrDid = dspDDD[ClearNum].DDDSource[ClearCount].SourceAddressOrDid;\r
-                                                       DDid->DDDSource[ClearCount].Size = dspDDD[ClearNum].DDDSource[ClearCount].Size;\r
-                                                       dspDDD[ClearNum].DDDSource[ClearCount].DDDTpyeID = 0;\r
-                                                       dspDDD[ClearNum].DDDSource[ClearCount].formatOrPosition = 0;\r
-                                                       dspDDD[ClearNum].DDDSource[ClearCount].SourceAddressOrDid = 0;\r
-                                                       dspDDD[ClearNum].DDDSource[ClearCount].Size = 0;\r
-                                               }       \r
-                                       }       \r
+                               memset(DDid, 0, sizeof(Dcm_DspDDDType));\r
+                               for(i = DCM_MAX_DDD_NUMBER - 1;i >= 0 ;i--) {   /* find the first DDDid from bottom */\r
+                                       if (0 != dspDDD[i].DynamicallyDid) {\r
+                                               for (j = 0; j <DCM_MAX_DDD_NUMBER; j++) { /* find the first empty slot from top */\r
+                                                       if (j >= i) {\r
+                                                               /* Rearrange finished */\r
+                                                               pduTxData->SduDataPtr[1] = DCM_DDD_SUBFUNCTION_CLEAR;\r
+                                                               pduTxData->SduLength = 2;\r
+                                                               return responseCode;\r
+                                                       }\r
+                                                       else if (0 == dspDDD[j].DynamicallyDid) {       /* find, exchange */\r
+                                                               memcpy(&dspDDD[j], &dspDDD[i], sizeof(Dcm_DspDDDType));\r
+                                                               memset(&dspDDD[i], 0, sizeof(Dcm_DspDDDType));\r
+                                                       }\r
+                                               }\r
+                                       }\r
                                }\r
                        }\r
-               }               \r
+               }\r
+               else{\r
+                       responseCode = DCM_E_REQUESTOUTOFRANGE; /* DDDid not found */\r
+               }\r
+       }\r
+       else if (pduRxData->SduDataPtr[1] == 0x03 && pduRxData->SduLength == 2){\r
+               /* clear all */\r
+               memset(dspDDD, 0, (sizeof(Dcm_DspDDDType) * DCM_MAX_DDD_NUMBER));\r
        }\r
        else\r
        {\r
@@ -2589,7 +2680,7 @@ void DspDynamicallyDefineDataIdentifier(const PduInfoType *pduRxData,PduInfoType
        uint16 DDIdentifier = ((((uint16)pduRxData->SduDataPtr[2]) << 8) & DCM_DID_HIGH_MASK) + (pduRxData->SduDataPtr[3] & DCM_DID_LOW_MASK);\r
        if(pduRxData->SduLength > 2)\r
        {\r
-               /* REVIEW JB 2012-06-05: Clarify that F2 and F3 is included by comment */\r
+               /* Check if DDID equals 0xF2 or 0xF3 */\r
                if((pduRxData->SduDataPtr[2] & 0xF2) == 0xF2)\r
                {\r
                        switch(pduRxData->SduDataPtr[1])        /*UDS_REQ_0x2C_2,DCM 646*/\r
@@ -2652,23 +2743,16 @@ void DspDynamicallyDefineDataIdentifier(const PduInfoType *pduRxData,PduInfoType
 static Dcm_NegativeResponseCodeType DspIOControlReturnControlToECU(const Dcm_DspDidType *DidPtr,const PduInfoType *pduRxData,PduInfoType *pduTxData)\r
 {\r
        Dcm_NegativeResponseCodeType responseCode = DCM_E_POSITIVERESPONSE;\r
-       if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidReturnControlToEcu == TRUE)\r
+       if(pduRxData->SduLength > 4)\r
        {\r
-               if(pduRxData->SduLength > 4)\r
+               if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl != NULL)\r
                {\r
-                       if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl != NULL)\r
+                       if(((DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidReturnControlToEcu->DspDidControlOptionRecordSize + 7) >> 3) == (pduRxData->SduLength - 4))\r
                        {\r
-                               if(((DidPtr->DspDidControlRecordSize->DspDidControlRecordSize + 7) >> 3) == (pduRxData->SduLength - 4))\r
+                               if(DidPtr->DspDidReturnControlToEcuFnc != NULL)\r
                                {\r
-                                       if(DidPtr->DspDidReturnControlToEcuFnc != NULL)\r
-                                       {\r
-                                               DidPtr->DspDidReturnControlToEcuFnc(NULL,&pduRxData->SduDataPtr[4],&pduTxData->SduDataPtr[4],&responseCode);\r
-                                               \r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               responseCode = DCM_E_REQUESTOUTOFRANGE;\r
-                                       }\r
+                                       DidPtr->DspDidReturnControlToEcuFnc(NULL,&pduRxData->SduDataPtr[4],&pduTxData->SduDataPtr[4],&responseCode);\r
+\r
                                }\r
                                else\r
                                {\r
@@ -2682,32 +2766,32 @@ static Dcm_NegativeResponseCodeType DspIOControlReturnControlToECU(const Dcm_Dsp
                }\r
                else\r
                {\r
-                       if(DidPtr->DspDidReturnControlToEcuFnc != NULL)\r
-                       {\r
+                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               if(DidPtr->DspDidReturnControlToEcuFnc != NULL)\r
+               {\r
 \r
-                               if(DidPtr->DspDidControlRecordSize != NULL)\r
-                               {\r
-                                       DidPtr->DspDidReturnControlToEcuFnc(NULL,NULL,&pduTxData->SduDataPtr[4],&responseCode);\r
-                                       pduTxData->SduLength = DidPtr->DspDidControlRecordSize->DspDidControlStatusRecordSize + 4;\r
-                               }\r
-                               else\r
-                               {\r
-                                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
-                               }\r
+                       if(DidPtr->DspDidControlRecordSize != NULL)\r
+                       {\r
+                               DidPtr->DspDidReturnControlToEcuFnc(NULL,NULL,&pduTxData->SduDataPtr[4],&responseCode);\r
+                               pduTxData->SduLength = DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidReturnControlToEcu->DspDidControlStatusRecordSize + 4;\r
                        }\r
                        else\r
                        {\r
                                responseCode = DCM_E_REQUESTOUTOFRANGE;\r
                        }\r
                }\r
-       }\r
-       else\r
-       {\r
-               responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+               else\r
+               {\r
+                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+               }\r
        }\r
        if(responseCode == DCM_E_POSITIVERESPONSE)\r
        {\r
-               pduTxData->SduLength = DidPtr->DspDidControlRecordSize->DspDidControlStatusRecordSize + 4;\r
+               pduTxData->SduLength = DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidReturnControlToEcu->DspDidControlStatusRecordSize + 4;\r
                pduTxData->SduDataPtr[3] = DCM_RETURN_CONTROL_TO_ECU;\r
        }\r
        \r
@@ -2717,22 +2801,15 @@ static Dcm_NegativeResponseCodeType DspIOControlReturnControlToECU(const Dcm_Dsp
 static Dcm_NegativeResponseCodeType DspIOControlResetToDefault(const Dcm_DspDidType *DidPtr,const PduInfoType *pduRxData,PduInfoType *pduTxData)\r
 {\r
        Dcm_NegativeResponseCodeType responseCode = DCM_E_POSITIVERESPONSE;\r
-       if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidResetToDefault == TRUE)\r
+       if(pduRxData->SduLength > 4)\r
        {\r
-               if(pduRxData->SduLength > 4)\r
+               if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl != NULL)\r
                {\r
-                       if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl != NULL)\r
+                       if(((DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidResetToDefault->DspDidControlOptionRecordSize + 7) >> 3) == (pduRxData->SduLength - 4))\r
                        {\r
-                               if(((DidPtr->DspDidControlRecordSize->DspDidControlRecordSize + 7) >> 3) == (pduRxData->SduLength - 4))\r
+                               if(DidPtr->DspDidReturnControlToEcuFnc != NULL)\r
                                {\r
-                                       if(DidPtr->DspDidReturnControlToEcuFnc != NULL)\r
-                                       {\r
-                                               DidPtr->DspDidResetToDeaultFnc(NULL,&pduRxData->SduDataPtr[4],&pduTxData->SduDataPtr[4],&responseCode);\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               responseCode = DCM_E_REQUESTOUTOFRANGE;\r
-                                       }\r
+                                       DidPtr->DspDidResetToDefaultFnc(NULL,&pduRxData->SduDataPtr[4],&pduTxData->SduDataPtr[4],&responseCode);\r
                                }\r
                                else\r
                                {\r
@@ -2746,32 +2823,32 @@ static Dcm_NegativeResponseCodeType DspIOControlResetToDefault(const Dcm_DspDidT
                }\r
                else\r
                {\r
-                       if(DidPtr->DspDidResetToDeaultFnc != NULL)\r
-                       {\r
+                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               if(DidPtr->DspDidResetToDefaultFnc != NULL)\r
+               {\r
 \r
-                               if(DidPtr->DspDidControlRecordSize != NULL)\r
-                               {\r
-                                       DidPtr->DspDidResetToDeaultFnc(NULL,NULL,&pduTxData->SduDataPtr[4],&responseCode);\r
-                                       pduTxData->SduLength = DidPtr->DspDidControlRecordSize->DspDidControlStatusRecordSize + 4;\r
-                               }\r
-                               else\r
-                               {\r
-                                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
-                               }\r
+                       if(DidPtr->DspDidControlRecordSize != NULL)\r
+                       {\r
+                               DidPtr->DspDidResetToDefaultFnc(NULL,NULL,&pduTxData->SduDataPtr[4],&responseCode);\r
+                               pduTxData->SduLength = DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidResetToDefault->DspDidControlStatusRecordSize + 4;\r
                        }\r
                        else\r
                        {\r
                                responseCode = DCM_E_REQUESTOUTOFRANGE;\r
                        }\r
                }\r
-       }\r
-       else\r
-       {\r
-               responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+               else\r
+               {\r
+                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+               }\r
        }\r
        if(responseCode == DCM_E_POSITIVERESPONSE)\r
        {\r
-               pduTxData->SduLength = DidPtr->DspDidControlRecordSize->DspDidControlStatusRecordSize+4;\r
+               pduTxData->SduLength = DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidResetToDefault->DspDidControlStatusRecordSize+4;\r
                pduTxData->SduDataPtr[3] = DCM_RESET_TO_DEFAULT;\r
        }\r
        return responseCode;\r
@@ -2783,22 +2860,15 @@ static Dcm_NegativeResponseCodeType DspIOControlResetToDefault(const Dcm_DspDidT
 static Dcm_NegativeResponseCodeType DspIOControlFreezeCurrentState(const Dcm_DspDidType *DidPtr,const PduInfoType *pduRxData,PduInfoType *pduTxData)\r
 {\r
        Dcm_NegativeResponseCodeType responseCode = DCM_E_POSITIVERESPONSE;\r
-       if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidFreezeCurrentState == TRUE)\r
+       if(pduRxData->SduLength > 4)\r
        {\r
-               if(pduRxData->SduLength > 4)\r
+               if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl != NULL)\r
                {\r
-                       if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl != NULL)\r
+                       if(((DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidFreezeCurrentState->DspDidControlOptionRecordSize + 7) >> 3) == (pduRxData->SduLength - 4))\r
                        {\r
-                               if(((DidPtr->DspDidControlRecordSize->DspDidControlRecordSize + 7) >> 3) == (pduRxData->SduLength - 4))\r
+                               if(DidPtr->DspDidFreezeCurrentStateFnc != NULL)\r
                                {\r
-                                       if(DidPtr->DspDidFreezeCurrentStateFnc != NULL)\r
-                                       {\r
-                                               DidPtr->DspDidFreezeCurrentStateFnc(NULL,&pduRxData->SduDataPtr[4],&pduTxData->SduDataPtr[4],&responseCode);\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               responseCode = DCM_E_REQUESTOUTOFRANGE;\r
-                                       }\r
+                                       DidPtr->DspDidFreezeCurrentStateFnc(NULL,&pduRxData->SduDataPtr[4],&pduTxData->SduDataPtr[4],&responseCode);\r
                                }\r
                                else\r
                                {\r
@@ -2812,32 +2882,32 @@ static Dcm_NegativeResponseCodeType DspIOControlFreezeCurrentState(const Dcm_Dsp
                }\r
                else\r
                {\r
-                       if(DidPtr->DspDidFreezeCurrentStateFnc != NULL)\r
-                       {\r
+                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               if(DidPtr->DspDidFreezeCurrentStateFnc != NULL)\r
+               {\r
 \r
-                               if(DidPtr->DspDidControlRecordSize != 0)\r
-                               {\r
-                                       DidPtr->DspDidFreezeCurrentStateFnc(NULL,NULL,&pduTxData->SduDataPtr[4],&responseCode);\r
-                                       pduTxData->SduLength = DidPtr->DspDidControlRecordSize->DspDidControlStatusRecordSize + 4;\r
-                               }\r
-                               else\r
-                               {\r
-                                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
-                               }\r
+                       if(DidPtr->DspDidControlRecordSize != 0)\r
+                       {\r
+                               DidPtr->DspDidFreezeCurrentStateFnc(NULL,NULL,&pduTxData->SduDataPtr[4],&responseCode);\r
+                               pduTxData->SduLength = DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidFreezeCurrentState->DspDidControlStatusRecordSize + 4;\r
                        }\r
                        else\r
                        {\r
                                responseCode = DCM_E_REQUESTOUTOFRANGE;\r
                        }\r
                }\r
-       }\r
-       else\r
-       {\r
-               responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+               else\r
+               {\r
+                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+               }\r
        }\r
        if(responseCode == DCM_E_POSITIVERESPONSE)\r
        {\r
-               pduTxData->SduLength = DidPtr->DspDidControlRecordSize->DspDidControlStatusRecordSize + 4;\r
+               pduTxData->SduLength = DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidFreezeCurrentState->DspDidControlStatusRecordSize + 4;\r
                pduTxData->SduDataPtr[3] = DCM_FREEZE_CURRENT_STATE;\r
        }\r
        \r
@@ -2847,41 +2917,34 @@ static Dcm_NegativeResponseCodeType DspIOControlFreezeCurrentState(const Dcm_Dsp
 static Dcm_NegativeResponseCodeType DspIOControlShortTeamAdjustment(const Dcm_DspDidType *DidPtr,const PduInfoType *pduRxData,PduInfoType *pduTxData)\r
 {\r
        Dcm_NegativeResponseCodeType responseCode = DCM_E_POSITIVERESPONSE;\r
-       uint8 didControlOptionRecordSize = DidPtr->DspDidControlRecordSize->DspDidControlOptionRecordSize;\r
-       if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidShortTermAdjustment == TRUE)\r
+       uint8 didControlOptionRecordSize = DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidShortTermAdjustment->DspDidControlOptionRecordSize;\r
+       if(pduRxData->SduLength > 4)\r
        {\r
-               if(pduRxData->SduLength > 4)\r
+               if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl != NULL)\r
                {\r
-                       if(DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl != NULL)\r
+                       if(((((DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidShortTermAdjustment->DspDidControlEnableMaskRecordSize + 7)) >> 3) + (didControlOptionRecordSize)) == (pduRxData->SduLength - 4))\r
                        {\r
-                               if(((((DidPtr->DspDidControlRecordSize->DspDidControlRecordSize + 7)) >> 3) + (didControlOptionRecordSize)) == (pduRxData->SduLength - 4))\r
+                               if(DidPtr->DspDidShortTermAdjustmentFnc != NULL)\r
                                {\r
-                                       if(DidPtr->DspDidShortTermAdjustmentFnc != NULL)\r
-                                       {\r
-                                               DidPtr->DspDidShortTermAdjustmentFnc(&pduRxData->SduDataPtr[4],&pduRxData->SduDataPtr[4 + didControlOptionRecordSize],&pduTxData->SduDataPtr[4],&responseCode);\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               responseCode = DCM_E_REQUESTOUTOFRANGE;\r
-                                       }\r
+                                       DidPtr->DspDidShortTermAdjustmentFnc(&pduRxData->SduDataPtr[4],&pduRxData->SduDataPtr[4 + didControlOptionRecordSize],&pduTxData->SduDataPtr[4],&responseCode);\r
                                }\r
-                               else if((didControlOptionRecordSize) == (pduRxData->SduLength - 4))\r
+                               else\r
                                {\r
-                                       if(DidPtr->DspDidShortTermAdjustmentFnc != NULL)\r
-                                       {\r
-                                               DidPtr->DspDidShortTermAdjustmentFnc(&pduRxData->SduDataPtr[4],NULL,&pduTxData->SduDataPtr[4],&responseCode);\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               responseCode = DCM_E_REQUESTOUTOFRANGE;\r
-                                       }\r
+                                       responseCode = DCM_E_REQUESTOUTOFRANGE;\r
+                               }\r
+                       }\r
+                       else if((didControlOptionRecordSize) == (pduRxData->SduLength - 4))\r
+                       {\r
+                               if(DidPtr->DspDidShortTermAdjustmentFnc != NULL)\r
+                               {\r
+                                       DidPtr->DspDidShortTermAdjustmentFnc(&pduRxData->SduDataPtr[4],NULL,&pduTxData->SduDataPtr[4],&responseCode);\r
                                }\r
                                else\r
                                {\r
                                        responseCode = DCM_E_REQUESTOUTOFRANGE;\r
                                }\r
                        }\r
-                       else \r
+                       else\r
                        {\r
                                responseCode = DCM_E_REQUESTOUTOFRANGE;\r
                        }\r
@@ -2897,7 +2960,7 @@ static Dcm_NegativeResponseCodeType DspIOControlShortTeamAdjustment(const Dcm_Ds
        }\r
        if(responseCode == DCM_E_POSITIVERESPONSE)\r
        {\r
-               pduTxData->SduLength = DidPtr->DspDidControlRecordSize->DspDidControlStatusRecordSize + 4;\r
+               pduTxData->SduLength = DidPtr->DspDidInfoRef->DspDidAccess.DspDidControl->DspDidShortTermAdjustment->DspDidControlStatusRecordSize + 4;\r
                pduTxData->SduDataPtr[3] = DCM_SHORT_TERM_ADJUSTMENT;\r
        }\r
        \r