]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Ticket #1138 com should not check if buffers are locked if pdu is deferred
authornier <devnull@localhost>
Mon, 12 Dec 2011 15:34:18 +0000 (16:34 +0100)
committernier <devnull@localhost>
Mon, 12 Dec 2011 15:34:18 +0000 (16:34 +0100)
communication/Com/Com_Com.c

index 03c1dbfd13bfb7940e9e048bdbd9a0b09a0ebe4d..cd5f862e4b1dc6c654ca3494396d66c0137f3deb 100644 (file)
@@ -73,13 +73,15 @@ uint8 Com_ReceiveSignal(Com_SignalIdType SignalId, void* SignalDataPtr) {
 \r
        const ComSignal_type * Signal = GET_Signal(SignalId);\r
        const ComIPdu_type *IPdu = GET_IPdu(Signal->ComIPduHandleId);\r
-       if (isPduBufferLocked(getPduId(IPdu))) {\r
-               return COM_BUSY;\r
-       }\r
+\r
+       uint8 r = E_OK;\r
        const void* pduDataPtr = 0;\r
        if (IPdu->ComIPduSignalProcessing == DEFERRED && IPdu->ComIPduDirection == RECEIVE) {\r
                pduDataPtr = IPdu->ComIPduDeferredDataPtr;\r
        } else {\r
+               if (isPduBufferLocked(getPduId(IPdu))) {\r
+                       r = COM_BUSY;\r
+               }\r
                pduDataPtr = IPdu->ComIPduDataPtr;\r
        }\r
        Com_ReadSignalDataFromPduBuffer(\r
@@ -89,7 +91,7 @@ uint8 Com_ReceiveSignal(Com_SignalIdType SignalId, void* SignalDataPtr) {
                        pduDataPtr,\r
                        IPdu->ComIPduSize);\r
 \r
-       return E_OK;\r
+       return r;\r
 }\r
 \r
 uint8 Com_ReceiveDynSignal(Com_SignalIdType SignalId, void* SignalDataPtr, uint16* Length) {\r
@@ -99,7 +101,7 @@ uint8 Com_ReceiveDynSignal(Com_SignalIdType SignalId, void* SignalDataPtr, uint1
     imask_t state;\r
 \r
        Com_SignalType signalType = Signal->ComSignalType;\r
-       if (signalType != UINT8_DYN || isPduBufferLocked(getPduId(IPdu))) {\r
+       if (signalType != UINT8_DYN) {\r
                return COM_SERVICE_NOT_AVAILABLE;\r
        }\r
 \r
@@ -109,18 +111,21 @@ uint8 Com_ReceiveDynSignal(Com_SignalIdType SignalId, void* SignalDataPtr, uint1
                *Length = Arc_IPdu->Com_Arc_DynSignalLength;\r
        }\r
        uint8 startFromPduByte = (Signal->ComBitPosition) / 8;\r
-\r
+       uint8 r = E_OK;\r
        const void* pduDataPtr = 0;\r
        if (IPdu->ComIPduSignalProcessing == DEFERRED && IPdu->ComIPduDirection == RECEIVE) {\r
                pduDataPtr = IPdu->ComIPduDeferredDataPtr;\r
        } else {\r
+               if (isPduBufferLocked(getPduId(IPdu))) {\r
+                       r = COM_BUSY;\r
+               }\r
                pduDataPtr = IPdu->ComIPduDataPtr;\r
        }\r
        memcpy(SignalDataPtr, pduDataPtr + startFromPduByte, *Length);\r
 \r
     Irq_Restore(state);\r
 \r
-       return E_OK;\r
+       return r;\r
 }\r
 \r
 uint8 Com_SendDynSignal(Com_SignalIdType SignalId, const void* SignalDataPtr, uint16 Length) {\r