]> rtime.felk.cvut.cz Git - arc.git/blobdiff - communication/Com/Com.c
Merge with 55ab039c2569c5946bde91fa87dbd94dac4aed51
[arc.git] / communication / Com / Com.c
index 1847b1697814efe187deca097510b651285276d5..6a7b684f335b1ebeacf24ccebbbbdec8d489ddb9 100644 (file)
@@ -68,6 +68,7 @@ void Com_Init(const Com_ConfigType *config ) {
 \r
                const ComIPdu_type *IPdu = GET_IPdu(i);\r
                Com_Arc_IPdu_type *Arc_IPdu = GET_ArcIPdu(i);\r
+               Arc_IPdu->Com_Arc_DynSignalLength = 0;\r
 \r
                if (i >= COM_N_IPDUS) {\r
                        DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, 0x01, COM_E_TOO_MANY_IPDU);\r
@@ -224,9 +225,21 @@ BufReq_ReturnType Com_CopyRxData(PduIdType PduId, const PduInfoType* PduInfoPtr,
        } else {\r
                r = BUFREQ_NOT_OK;\r
        }\r
-       return r;\r
        Irq_Restore(state);\r
+       return r;\r
+}\r
+\r
+static void Com_SetDynSignalLength(PduIdType ComRxPduId,PduLengthType TpSduLength) {\r
+       const ComIPdu_type *IPdu = GET_IPdu(ComRxPduId);\r
+       if (IPdu->ComIPduDynSignalRef == 0) {\r
+               return;\r
+       }\r
+       const ComSignal_type * const dynSignal = IPdu->ComIPduDynSignalRef;\r
+       Com_Arc_IPdu_type *Arc_IPdu = GET_ArcIPdu(ComRxPduId);\r
+       Arc_IPdu->Com_Arc_DynSignalLength = TpSduLength - (dynSignal->ComBitPosition/8);\r
+       return;\r
 }\r
+\r
 BufReq_ReturnType Com_StartOfReception(PduIdType ComRxPduId, PduLengthType TpSduLength, PduLengthType* RxBufferSizePtr) {\r
        PduLengthType ComIPduSize;\r
        imask_t state;\r
@@ -240,7 +253,7 @@ BufReq_ReturnType Com_StartOfReception(PduIdType ComRxPduId, PduLengthType TpSdu
                                if (ComIPduSize >= TpSduLength) {\r
                                        Com_BufferPduState[ComRxPduId].locked = true;\r
                                        *RxBufferSizePtr = ComIPduSize;\r
-                                       Com_BufferPduState[ComRxPduId].locked = true;\r
+                                       Com_SetDynSignalLength(ComRxPduId,TpSduLength);\r
                                } else {\r
                                        r = BUFREQ_OVFL;\r
                                }\r