]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Optimization of Dcm.
authorpete <devnull@localhost>
Wed, 14 Apr 2010 15:29:15 +0000 (17:29 +0200)
committerpete <devnull@localhost>
Wed, 14 Apr 2010 15:29:15 +0000 (17:29 +0200)
diagnostic/Dcm/Dcm_Dsd.c
diagnostic/Dcm/Dcm_Dsp.c

index ec8a67eadf358c2927006cd9ab1dc1a1043764af..e44efbd8ff50b2a63d4c3456d18b3dafe4ab4b72 100644 (file)
@@ -52,15 +52,17 @@ void DsdMain(void)
 }\r
 \r
 \r
-boolean DsdLookupSid(uint8 sid, Dcm_DsdServiceType **sidPtr)\r
+boolean DsdLookupSid(uint8 sid, const Dcm_DsdServiceType **sidPtr)\r
 {\r
        boolean returnStatus = TRUE;\r
-       uint16 i;\r
+       const Dcm_DsdServiceType *service = msgData.serviceTable->DsdService;\r
 \r
-       for (i = 0; (msgData.serviceTable->DsdService[i].DsdSidTabServiceId != sid) && !msgData.serviceTable->DsdService[i].Arc_EOL; i++);\r
+       while ((service->DsdSidTabServiceId != sid) && !service->Arc_EOL) {\r
+               service++;\r
+       }\r
 \r
-       if (!msgData.serviceTable->DsdService[i].Arc_EOL) {\r
-               *sidPtr = (Dcm_DsdServiceType*)&msgData.serviceTable->DsdService[i];\r
+       if (!service->Arc_EOL) {\r
+               *sidPtr = service;\r
        }\r
        else {\r
                returnStatus = FALSE;\r
@@ -74,15 +76,16 @@ boolean DsdLookupSid(uint8 sid, Dcm_DsdServiceType **sidPtr)
 boolean DsdAskApplicationForServicePermission(uint8 *requestData, uint16 dataSize)\r
 {\r
        Std_ReturnType returnCode = E_OK;\r
+       const Dcm_DslServiceRequestIndicationType *serviceRequestIndication = DCM_Config.Dsl->DslServiceRequestIndication;\r
        Std_ReturnType result;\r
-       uint16 i;\r
 \r
-       for (i = 0; !DCM_Config.Dsl->DslServiceRequestIndication[i].Arc_EOL && returnCode != E_REQUEST_NOT_ACCEPTED; i++) {\r
-               if (DCM_Config.Dsl->DslServiceRequestIndication[i].Indication != NULL) {\r
-                       result = DCM_Config.Dsl->DslServiceRequestIndication[i].Indication(requestData, dataSize);\r
+       while (!serviceRequestIndication->Arc_EOL && (returnCode != E_REQUEST_NOT_ACCEPTED)) {\r
+               if (serviceRequestIndication->Indication != NULL) {\r
+                       result = serviceRequestIndication->Indication(requestData, dataSize);\r
                        if (result != E_OK)\r
                                returnCode = result;\r
                }\r
+               serviceRequestIndication++;\r
        }\r
 \r
        return returnCode;\r
@@ -170,7 +173,7 @@ void DsdCreateAndSendNcr(Dcm_NegativeResponseCodeType responseCode)
 void DsdHandleRequest(void)\r
 {\r
        Std_ReturnType result;\r
-       Dcm_DsdServiceType *sidConfPtr = NULL;\r
+       const Dcm_DsdServiceType *sidConfPtr = NULL;\r
 \r
        /** @req DCM178 **/\r
        if (DCM_RESPOND_ALL_REQUEST || ((msgData.pduRxData->SduDataPtr[0] & 0x7F) < 0x40)) {            /** @req DCM084 **/\r
index 9d239e323db114558df9899557c30fb51d1c6981..187f9f92f5f5eb22e83a16d6160a132d241440dc 100644 (file)
@@ -69,11 +69,13 @@ boolean DspCheckSessionLevel(const Dcm_DspSessionRowType **sessionLevelRefTable)
 {\r
        boolean returnStatus = TRUE;\r
        Dcm_SesCtrlType currentSession;\r
-       uint16 i;\r
 \r
        DslGetSesCtrlType(&currentSession);\r
-       for (i = 0; (sessionLevelRefTable[i]->DspSessionLevel != currentSession) && !sessionLevelRefTable[i]->Arc_EOL; i++);\r
-       if (sessionLevelRefTable[i]->Arc_EOL) {\r
+       while (((*sessionLevelRefTable)->DspSessionLevel != currentSession) && !(*sessionLevelRefTable)->Arc_EOL) {\r
+               sessionLevelRefTable++;\r
+       }\r
+\r
+       if ((*sessionLevelRefTable)->Arc_EOL) {\r
                returnStatus = FALSE;\r
        }\r
 \r
@@ -85,11 +87,12 @@ boolean DspCheckSecurityLevel(const Dcm_DspSecurityRowType  **securityLevelRefTab
 {\r
        boolean returnStatus = TRUE;\r
        Dcm_SecLevelType currentSecurityLevel;\r
-       uint16 i;\r
 \r
        DslGetSecurityLevel(&currentSecurityLevel);\r
-       for (i = 0; (securityLevelRefTable[i]->DspSecurityLevel != currentSecurityLevel) && !securityLevelRefTable[i]->Arc_EOL; i++);\r
-       if (securityLevelRefTable[i]->Arc_EOL) {\r
+       while (((*securityLevelRefTable)->DspSecurityLevel != currentSecurityLevel) && !(*securityLevelRefTable)->Arc_EOL) {\r
+               securityLevelRefTable++;\r
+       }\r
+       if ((*securityLevelRefTable)->Arc_EOL) {\r
                returnStatus = FALSE;\r
        }\r
 \r
@@ -100,18 +103,19 @@ boolean DspCheckSecurityLevel(const Dcm_DspSecurityRowType        **securityLevelRefTab
 Std_ReturnType AskApplicationForSessionPermission(Dcm_SesCtrlType newSessionLevel)\r
 {\r
        Std_ReturnType returnCode = E_OK;\r
+       const Dcm_DslSessionControlType *sesControl = DCM_Config.Dsl->DslSessionControl;\r
        Dcm_SesCtrlType currentSessionLevel;\r
        Std_ReturnType result;\r
-       uint16 i;\r
 \r
-       for (i = 0; !DCM_Config.Dsl->DslSessionControl[i].Arc_EOL && (returnCode != E_SESSION_NOT_ALLOWED); i++) {\r
-               if (DCM_Config.Dsl->DslSessionControl[i].GetSesChgPermission != NULL) {\r
+       while (!sesControl->Arc_EOL && (returnCode != E_SESSION_NOT_ALLOWED)) {\r
+               if (sesControl->GetSesChgPermission != NULL) {\r
                        Dcm_GetSesCtrlType(&currentSessionLevel);\r
-                       result = DCM_Config.Dsl->DslSessionControl[i].GetSesChgPermission(currentSessionLevel ,newSessionLevel);\r
+                       result = sesControl->GetSesChgPermission(currentSessionLevel ,newSessionLevel);\r
                        if (result != E_OK) {\r
                                returnCode = result;\r
                        }\r
                }\r
+               sesControl++;\r
        }\r
 \r
        return returnCode;\r
@@ -121,16 +125,18 @@ Std_ReturnType AskApplicationForSessionPermission(Dcm_SesCtrlType newSessionLeve
 void DspUdsDiagnosticSessionControl(const PduInfoType *pduRxData, PduInfoType *pduTxData)\r
 {\r
        // @req DCM250 **/\r
+       const Dcm_DspSessionRowType *sessionRow = DCM_Config.Dsp->DspSession->DspSessionRow;\r
        Dcm_SesCtrlType reqSessionType;\r
        Std_ReturnType result;\r
-       uint16  i;\r
 \r
        if (pduRxData->SduLength == 2) {\r
                reqSessionType = pduRxData->SduDataPtr[1];\r
                // Check if type exist in session table\r
-               for (i = 0; (DCM_Config.Dsp->DspSession->DspSessionRow[i].DspSessionLevel != reqSessionType) && !DCM_Config.Dsp->DspSession->DspSessionRow[i].Arc_EOL;i++);\r
+               while ((sessionRow->DspSessionLevel != reqSessionType) && !sessionRow->Arc_EOL) {\r
+                       sessionRow++;\r
+               }\r
 \r
-               if (!DCM_Config.Dsp->DspSession->DspSessionRow[i].Arc_EOL) {\r
+               if (!sessionRow->Arc_EOL) {\r
                        result = AskApplicationForSessionPermission(reqSessionType);\r
                        if (result == E_OK) {\r
                                DslSetSesCtrlType(reqSessionType);              /** @req DCM311 **/\r
@@ -635,13 +641,16 @@ void DspUdsReadDtcInformation(const PduInfoType *pduRxData, PduInfoType *pduTxDa
 \r
 boolean DspLookupDid(uint16 didNr, const Dcm_DspDidType **didPtr)\r
 {\r
-       uint16 i;\r
+       const Dcm_DspDidType *dspDid = DCM_Config.Dsp->DspDid;\r
        boolean didFound = FALSE;\r
-       for (i = 0; (DCM_Config.Dsp->DspDid[i].DspDidIdentifier != didNr) &&  !DCM_Config.Dsp->DspDid[i].Arc_EOL; i++);\r
 \r
-       if (!DCM_Config.Dsp->DspDid[i].Arc_EOL) {\r
+       while ((dspDid->DspDidIdentifier != didNr) &&  !dspDid->Arc_EOL) {\r
+               dspDid++;\r
+       }\r
+\r
+       if (!dspDid->Arc_EOL) {\r
                didFound = TRUE;\r
-               *didPtr = &DCM_Config.Dsp->DspDid[i];\r
+               *didPtr = dspDid;\r
        }\r
 \r
        return didFound;\r