]> rtime.felk.cvut.cz Git - arc.git/blobdiff - communication/Com/Com.c
more work on dynamic signals
[arc.git] / communication / Com / Com.c
index e68fbe2d1966f28fd762e775db092e798ead34ee..c0c057b1aa86bce60088de40273dd59bf01ad88c 100644 (file)
@@ -248,6 +248,17 @@ BufReq_ReturnType Com_CopyRxData(PduIdType PduId, const PduInfoType* PduInfoPtr,
        return r;\r
        Irq_Restore(state);\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
 BufReq_ReturnType Com_StartOfReception(PduIdType ComRxPduId, PduLengthType TpSduLength, PduLengthType* RxBufferSizePtr) {\r
        PduLengthType ComIPduSize;\r
        imask_t state;\r
@@ -261,7 +272,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