]> rtime.felk.cvut.cz Git - arc.git/commitdiff
starting on a solution to make com and pdur to work with j1939tp
authornier <devnull@localhost>
Sat, 8 Oct 2011 16:43:19 +0000 (18:43 +0200)
committernier <devnull@localhost>
Sat, 8 Oct 2011 16:43:19 +0000 (18:43 +0200)
communication/Com/Com.c
communication/Com/Com_Com.c
communication/Com/Com_Internal.h
communication/PduR/PduR_J1939Tp.c
include/Com_Com.h
include/PduR_J1939Tp.h

index d8af8c90f7f632b96590c1761b91390d346e48bd..50b06735c358a89438da33c3b6380cfc7d9ce1e2 100644 (file)
 #include "debug.h"\r
 \r
 \r
+\r
+\r
+extern Com_BufferPduStateType Com_BufferPduState[];\r
+\r
 /* TODO: Better way to get endianness across all compilers? */\r
 static const uint32_t endianness_test = 0xdeadbeefU;\r
 ComSignalEndianess_type Com_SystemEndianness;\r
@@ -165,7 +169,9 @@ void Com_Init(const Com_ConfigType *config ) {
                        }\r
                }\r
        }\r
-\r
+       for (uint16 i = 0; i < COM_N_IPDUS; i++) {\r
+               Com_BufferPduState[i].currentPosition = 0;\r
+       }\r
 \r
        // An error occurred.\r
        if (failure) {\r
@@ -197,3 +203,25 @@ void Com_IpduGroupStop(Com_PduGroupIdType IpduGroupId) {
                }\r
        }\r
 }\r
+\r
+/**\r
+ *
+ * @param PduId
+ * @param PduInfoPtr
+ * @param RetryInfoPtr not supported
+ * @param TxDataCntPtr
+ * @return
+ */\r
+BufReq_ReturnType Com_CopyTxData(PduIdType PduId, PduInfoType* PduInfoPtr, RetryInfoType* RetryInfoPtr, PduLengthType* TxDataCntPtr) {\r
+       imask_t state;\r
+       Irq_Save(state);\r
+       if (PduInfoPtr->SduLength != 0) {\r
+               Com_BufferPduState[PduId].locked = true;\r
+       }\r
+       memcpy(PduInfoPtr->SduDataPtr,Com_Arc_Config.ComIPdu[PduId].ComIPduDataPtr + Com_BufferPduState[PduId].currentPosition, PduInfoPtr->SduLength);\r
+       Com_BufferPduState[PduId].currentPosition += PduInfoPtr->SduLength;\r
+       const ComIPdu_type *IPdu = GET_IPdu(PduId);\r
+       *TxDataCntPtr = IPdu->ComIPduSize - Com_BufferPduState[PduId].currentPosition;\r
+       Irq_Restore(state);\r
+       return BUFREQ_OK;\r
+}\r
index 770c7b012a5a73ecd506b1031d938b2fb7cd73f3..2b1736549e2b7693efb10da6ccaf33d7f513ff43 100644 (file)
@@ -31,6 +31,7 @@
 #include "Det.h"\r
 #include "Cpu.h"\r
 \r
+Com_BufferPduStateType Com_BufferPduState[COM_N_IPDUS];\r
 \r
 uint8 Com_SendSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {\r
        VALIDATE_SIGNAL(SignalId, 0x0a, E_NOT_OK);\r
@@ -200,8 +201,13 @@ void Com_RxIndication(PduIdType ComRxPduId, const PduInfoType* PduInfoPtr) {
 }\r
 \r
 void Com_TxConfirmation(PduIdType ComTxPduId) {\r
+       imask_t state;\r
+       Irq_Save(state);\r
        PDU_ID_CHECK(ComTxPduId, 0x15);\r
+       Com_BufferPduState[ComTxPduId].locked = false;\r
+       Com_BufferPduState[ComTxPduId].currentPosition = 0;\r
        (void)ComTxPduId; // Nothing to be done. This is just to avoid Lint warning.\r
+       Irq_Restore(state);\r
 }\r
 \r
 \r
@@ -270,3 +276,6 @@ void Com_ReceiveShadowSignal(Com_SignalIdType SignalId, void *SignalDataPtr) {
        // Com_CopyData(SignalDataPtr, Arc_GroupSignal->Com_Arc_ShadowBuffer, GroupSignal->ComBitSize, 0, GroupSignal->ComBitPosition);\r
        Com_ReadSignalDataFromPduBuffer(SignalId, TRUE, SignalDataPtr, (void *)Arc_GroupSignal->Com_Arc_ShadowBuffer);\r
 }\r
+\r
+\r
+\r
index 147ab348be7a030686665a00ee3814af4ab84356..36b213da107771d3256f06ea110dfd4047bd4d64 100644 (file)
 \r
 #include "Com_Arc_Types.h"\r
 \r
+typedef struct {\r
+       PduLengthType currentPosition;\r
+       boolean locked;\r
+} Com_BufferPduStateType;\r
+\r
 extern const Com_ConfigType *ComConfig;\r
 extern Com_Arc_Config_type Com_Arc_Config;\r
 \r
index e2d12cece71bccae6664d5d05c3a17724c03720c..b99fb6dcce16ad453c2bf3f84d4c312c225dba80 100644 (file)
@@ -42,5 +42,13 @@ void PduR_J1939TpTxConfirmation(PduIdType J1939TpTxId, NotifResultType Result) {
        PduR_ARC_TxConfirmation(J1939TpTxId, Result, 0x0f);
 }
 
+/* autosar 4 api */
+BufReq_ReturnType PduR_J1939TpCopyTxData(PduIdType id, PduInfoType* info, RetryInfoType* retry, PduLengthType* availableDataPtr) {
+#if PDUR_COM_SUPPORT == STD_OFF
+       return BUFREQ_NOT_OK;
+#endif
+       const PduRRoutingPath_type *route = PduRConfig->RoutingPaths[id];
+       return Com_CopyTxData(route->SrcModule, info,0 ,availableDataPtr);
+}
 
 #endif
index dc42a87498e783c67f393d5608c1135646b1904f..d18411a7c6b7bc3c988b0099dad8e414d3b7ce46 100644 (file)
@@ -36,7 +36,6 @@ void Com_TriggerIPduSend(PduIdType ComTxPduId);
 void Com_RxIndication(PduIdType ComRxPduId, const PduInfoType* PduInfoPtr);\r
 void Com_TxConfirmation(PduIdType ComTxPduId);\r
 \r
-\r
 /* Signal Groups */\r
 \r
 Std_ReturnType Com_SendSignalGroup(Com_SignalGroupIdType SignalGroupId);\r
@@ -46,4 +45,7 @@ void Com_UpdateShadowSignal(Com_SignalIdType SignalId, const void *SignalDataPtr
 void Com_ReceiveShadowSignal(Com_SignalIdType SignalId, void *SignalDataPtr);\r
 \r
 \r
+/* Autosar 4 Api */\r
+BufReq_ReturnType Com_CopyTxData(PduIdType PduId, PduInfoType* PduInfoPtr, RetryInfoType* RetryInfoPtr, PduLengthType* TxDataCntPtr);\r
+\r
 #endif /* COM_COM_H_ */\r
index 5bf5ad151759ca1962cc6461364afd33faacf0bd..e0b1deb61f4446acc653fccfa7a6c3a133d9aa71 100644 (file)
@@ -27,6 +27,9 @@ void PduR_J1939TpTxConfirmation(PduIdType CanTpTxPduId, NotifResultType Result);
 BufReq_ReturnType PduR_J1939TpStartOfReception(PduIdType id, PduLengthType TpSduLength, PduLengthType* bufferSizePtr);\r
 void PduR_J1939TpRxIndication(PduIdType id, NotifResultType Result);\r
 \r
+/* autosar 4 api */\r
+BufReq_ReturnType PduR_J1939TpCopyTxData(PduIdType id, PduInfoType* info, RetryInfoType* retry, PduLengthType* availableDataPtr);\r
+\r
 #endif\r
 \r
 #endif /* PDUR_CANTP_H_ */\r