return E_OK;\r
}\r
\r
-uint8 Com_ReceiveDynSignal(ComSignalIdType SignalId, void* SignalDataPtr, uint16* Length) {\r
+uint8 Com_ReceiveDynSignal(Com_SignalIdType SignalId, void* SignalDataPtr, uint16* Length) {\r
+ const ComSignal_type * Signal = GET_Signal(SignalId);\r
+ Com_Arc_Signal_type * Arc_Signal = GET_ArcSignal(Signal->ComHandleId);\r
+ Com_Arc_IPdu_type *Arc_IPdu = GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
+ const ComIPdu_type *IPdu = GET_IPdu(Arc_Signal->ComIPduHandleId);\r
\r
+ Com_SignalType signalType = Signal->ComSignalType;\r
+ if (signalType != UINT8_DYN || isPduBufferLocked(getPduId(IPdu))) {\r
+ return COM_SERVICE_NOT_AVAILABLE;\r
+ }\r
+\r
+ if (*Length > Arc_IPdu->Com_Arc_DynSignalLength) {\r
+ *Length = Arc_IPdu->Com_Arc_DynSignalLength;\r
+ }\r
+ uint8 startFromPduByte = (Signal->ComBitPosition) / 8;\r
+ memcpy(SignalDataPtr, Arc_IPdu->ComIPduDataPtr + startFromPduByte, *Length);\r
+ return E_OK;\r
}\r
-uint8 Com_SendDynSignal(ComSignalIdType SignalId, const void* SignalDataPtr, uint16 Length) {\r
- Com_Arc_Signal_type * Arc_Signal = GET_ArcSignal(Signal->ComHandleId);\r
+\r
+uint8 Com_SendDynSignal(Com_SignalIdType SignalId, const void* SignalDataPtr, uint16 Length) {\r
const ComSignal_type * Signal = GET_Signal(SignalId);\r
+ Com_Arc_Signal_type * Arc_Signal = GET_ArcSignal(Signal->ComHandleId);\r
Com_Arc_IPdu_type *Arc_IPdu = GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
const ComIPdu_type *IPdu = GET_IPdu(Arc_Signal->ComIPduHandleId);\r
\r
Com_SignalType signalType = Signal->ComSignalType;\r
if (signalType != UINT8_DYN) {\r
- return E_NOT_OK;\r
+ return COM_SERVICE_NOT_AVAILABLE;\r
+ }\r
+ if (isPduBufferLocked(getPduId(IPdu))) {\r
+ return COM_BUSY;\r
}\r
- Com_Arc_IPdu* Arc_IPdu = GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
uint8 signalLength = Signal->ComBitSize / 8;\r
Com_BitPositionType bitPosition = Signal->ComBitPosition;\r
- uint8 bitSize = Signal->ComBitSize;\r
if (signalLength < Length) {\r
return E_NOT_OK;\r
}\r
Arc_IPdu->Com_Arc_TxIPduTimers.ComTxIPduNumberOfRepetitionsLeft = IPdu->ComTxIPdu.ComTxModeTrue.ComTxModeNumberOfRepetitions + 1;\r
}\r
return E_OK;\r
-\r
-\r
}\r
\r
Std_ReturnType Com_TriggerTransmit(PduIdType ComTxPduId, PduInfoType *PduInfoPtr) {\r