]> rtime.felk.cvut.cz Git - arc.git/commitdiff
timing constraints for cmdt
authornier <devnull@localhost>
Fri, 16 Sep 2011 16:53:45 +0000 (18:53 +0200)
committernier <devnull@localhost>
Fri, 16 Sep 2011 16:53:45 +0000 (18:53 +0200)
communication/J1939Tp/J1939Tp.c
communication/J1939Tp/J1939Tp_Internal.h
communication/J1939Tp/J1939Tp_Internal_Packets.h [new file with mode: 0644]
include/CanIf_ConfigTypes.h
include/J1939Tp_Cbk.h

index 92f4e91277807cf1e93808606dd7fc194db22d21..7db791cd0a8bcf7f976710e455284d62e019ae04 100644 (file)
@@ -4,6 +4,10 @@
 #include "PduR.h"\r
 #include <string.h>\r
 \r
+/* Globally fulfilled requirements */\r
+/** @req J1939TP0123 */\r
+/** @req J1939TP0165 */\r
+/** @req J1939TP0097 */\r
 /** @req J1939TP0019 */\r
 static J1939Tp_Internal_GlobalStateInfoType globalState = {\r
                .State = J1939TP_OFF,\r
@@ -46,29 +50,49 @@ void J1939Tp_RxIndication(PduIdType RxPduId, PduInfoType* PduInfoPtr) {
        switch (PgState->PgConfPtr->Channel->Direction) {\r
                case J1939TP_TX:\r
                        J1939Tp_Internal_RxIndication_TxChannel(RxPduId,PduInfoPtr);\r
+                       break;\r
                case J1939TP_RX:\r
                        J1939Tp_Internal_RxIndication_RxChannel(RxPduId,PduInfoPtr);\r
+                       break;\r
                default:\r
                        break;\r
        }\r
 }\r
+static inline boolean J1939Tp_Internal_IsDtPacketAlreadySent(uint8 nextPacket, uint8 totalPacketsSent) {\r
+       return nextPacket < totalPacketsSent;\r
+}\r
 static void inline J1939Tp_Internal_RxIndication_TxChannel(PduIdType RxPduId, PduInfoType* PduInfoPtr) {\r
        J1939Tp_Internal_PgStateInfoType* PgState = J1939Tp_Internal_GetPg(RxPduId);\r
        uint8 NumPacketsToSend = 0;\r
+       uint8 NextPacket = 0;\r
+\r
        switch (PgState->Tx->State) {\r
                case J1939TP_TX_WAITING_FOR_CTS:\r
-                       if (J1939Tp_Internal_CheckValidCts(PduInfoPtr,&NumPacketsToSend)) {\r
-                               PgState->Tx->DtToSendBeforeCtsCount = NumPacketsToSend;\r
-                               PgState->Tx->SentDtCount = 0;\r
-                               J1939Tp_Internal_TxSetStatePg(RxPduId, J1939TP_TX_WAIT_DT_CANIF_CONFIRM);\r
-                               J1939Tp_Internal_SendDt(RxPduId, PgState);\r
+                       if (J1939Tp_Internal_CheckValidCts(PduInfoPtr,&NumPacketsToSend,&NextPacket)) {\r
+                               if (NumPacketsToSend == 0) {\r
+                                       // Receiver wants to keep the connection open but cant receive packets\r
+                                       /** @req J1939TP0195 */\r
+                                       J1939Tp_Internal_TxSessionStartTimer(PgState->Tx,J1939TP_T4_TIMEOUT_MS);\r
+                               } else if(J1939Tp_Internal_IsDtPacketAlreadySent(NextPacket,PgState->Tx->TotalSentDtCount)) {\r
+                                       /** @req J1939TP0194 */\r
+                                       PduR_J1939TpTxConfirmation(PgState->PgConfPtr->NSdu,NTFRSLT_E_NOT_OK);\r
+                                       J1939Tp_Internal_SendConnectionAbort(PgState->PgConfPtr->Channel->CmNPdu,PgState->PgConfPtr->Pgn);\r
+                                       PgState->Tx->State = J1939TP_TX_IDLE;\r
+                               } else {\r
+                                       PgState->Tx->DtToSendBeforeCtsCount = NumPacketsToSend;\r
+                                       PgState->Tx->SentDtCount = 0;\r
+                                       PgState->Tx->State = J1939TP_TX_WAIT_DT_CANIF_CONFIRM;\r
+                                       J1939Tp_Internal_SendDt(PgState);\r
+                                       J1939Tp_Internal_TxSessionStartTimer(PgState->Tx,J1939TP_TX_CONF_TIMEOUT);\r
+                               }\r
                        }\r
                        break;\r
                case J1939TP_TX_WAITING_FOR_END_OF_MSG_ACK:\r
                        if (J1939Tp_Internal_CheckValidEndOfMsgAck(PgState,PduInfoPtr)) {\r
                                PduR_J1939TpTxConfirmation(PgState->PgConfPtr->NSdu,NTFRSLT_OK);\r
-                               J1939Tp_Internal_TxSetStatePg(RxPduId, J1939TP_TX_IDLE);\r
+                               PgState->Tx->State = J1939TP_TX_IDLE;\r
                        }\r
+                       break;\r
                default:\r
                        break;\r
        }\r
@@ -78,8 +102,9 @@ static void inline J1939Tp_Internal_RxIndication_RxChannel(PduIdType NSduId, Pdu
        switch (PgState->Rx->State) {\r
                case J1939TP_RX_IDLE:\r
                        if (J1939Tp_Internal_ReceiveRts(NSduId, PduInfoPtr) == E_OK) {\r
-                               J1939Tp_Internal_RxSetStatePg(NSduId,J1939TP_TX_WAIT_CTS_CANIF_CONFIRM);\r
-                               J1939Tp_Internal_SendCts(NSduId,PduInfoPtr);\r
+                               PgState->Rx->State = J1939TP_RX_WAIT_CTS_CANIF_CONFIRM;\r
+                               J1939Tp_Internal_SendCts(PgState,PduInfoPtr);\r
+                               J1939Tp_Internal_RxSessionStartTimer(PgState->Rx,J1939TP_TX_CONF_TIMEOUT);\r
                        }\r
                        break;\r
                case J1939TP_RX_RECEIVING_DT:\r
@@ -88,23 +113,7 @@ static void inline J1939Tp_Internal_RxIndication_RxChannel(PduIdType NSduId, Pdu
                        break;\r
        }\r
 }\r
-static void inline J1939Tp_Internal_SendEndOfMsgAck(PduIdType NSduId) {\r
-       J1939Tp_Internal_PgStateInfoType* PgState = J1939Tp_Internal_GetPg(NSduId);\r
-       PduInfoType endofmsgInfo;\r
-       uint8 endofmsgData[ENDOFMSGACK_SIZE];\r
-       endofmsgInfo.SduLength = ENDOFMSGACK_SIZE;\r
-       endofmsgInfo.SduDataPtr = endofmsgData;\r
-       endofmsgData[ENDOFMSGACK_BYTE_CONTROL] = ENDOFMSGACK_CONTROL_VALUE;\r
-       endofmsgData[ENDOFMSGACK_BYTE_TOTAL_MSG_SIZE_1] = ((uint8)(PgState->Rx->TotalMessageSize)) << 8;\r
-       endofmsgData[ENDOFMSGACK_BYTE_TOTAL_MSG_SIZE_2] = ((uint8)(PgState->Rx->TotalMessageSize));\r
-       endofmsgData[ENDOFMSGACK_BYTE_NUM_PACKETS] = PgState->Rx->TotalReceivedDtCount;\r
-       endofmsgData[ENDOFMSGACK_BYTE_SAE_ASSIGN] = 0xFF;\r
-       J1939Tp_Internal_SetPgn(&(endofmsgData[ENDOFMSGACK_BYTE_PGN_1]),PgState->PgConfPtr->Pgn);\r
-       PduIdType CmNPdu = PgState->PgConfPtr->Channel->CmNPdu;\r
-       CanIf_Transmit(CmNPdu,&endofmsgInfo);\r
-\r
 \r
-}\r
 static boolean inline J1939Tp_Internal_IsLastDt(J1939Tp_Internal_RxPgInfo* rxPgInfo) {\r
        return (rxPgInfo->TotalDtToReceiveCount == rxPgInfo->TotalReceivedDtCount);\r
 }\r
@@ -118,8 +127,8 @@ static Std_ReturnType inline J1939Tp_Internal_ReceiveDt(PduIdType NSduId, PduInf
                lastMessage = true;\r
                J1939Tp_Internal_DtPayloadSizeType receivedBytes = PgState->Rx->TotalReceivedDtCount*DT_DATA_SIZE;\r
                requestSize = PgState->Rx->TotalMessageSize - receivedBytes;\r
-               J1939Tp_Internal_RxSetStatePg(NSduId,J1939TP_TX_WAIT_ENDOFMSGACK_CANIF_CONFIRM);\r
-               J1939Tp_Internal_SendEndOfMsgAck(NSduId);\r
+               PgState->Rx->State = J1939TP_RX_IDLE;\r
+               J1939Tp_Internal_SendEndOfMsgAck(PgState);\r
        }\r
        BufReq_ReturnType r = PduR_J1939TpProvideRxBuffer(PduRSdu, requestSize, &rxPduInfo);\r
        if (r == BUFREQ_OK) {\r
@@ -127,6 +136,8 @@ static Std_ReturnType inline J1939Tp_Internal_ReceiveDt(PduIdType NSduId, PduInf
        }\r
        if (lastMessage == true) {\r
                PduR_J1939TpRxIndication(PduRSdu,NTFRSLT_OK);\r
+       } else {\r
+               J1939Tp_Internal_RxSessionStartTimer(PgState->Rx,J1939TP_T1_TIMEOUT_MS);\r
        }\r
        return E_OK;\r
 }\r
@@ -155,41 +166,46 @@ static Std_ReturnType inline J1939Tp_Internal_ReceiveRts(PduIdType NSduId, PduIn
        return E_OK;\r
 }\r
 \r
-/**\r
- * Send a response to the incoming RTS
- * @param NSduId
- * @param RtsPduInfoPtr needs to be a valid RTS message
- */\r
-static inline void J1939Tp_Internal_SendCts(PduIdType NSduId, PduInfoType* RtsPduInfoPtr) {\r
-       PduInfoType ctsInfo;\r
-       uint8 ctsData[CTS_SIZE];\r
-       ctsInfo.SduLength = CTS_SIZE;\r
-       ctsInfo.SduDataPtr = ctsData;\r
-       ctsData[CTS_BYTE_CONTROL] = CTS_CONTROL_VALUE;\r
-       ctsData[CTS_BYTE_NUM_PACKETS] = J1939TP_PACKETS_PER_BLOCK;\r
-       ctsData[CTS_BYTE_NEXT_PACKET] = CTS_START_SEQ_NUM;\r
-       ctsData[CTS_BYTE_SAE_ASSIGN_1] = 0xFF;\r
-       ctsData[CTS_BYTE_SAE_ASSIGN_2] = 0xFF;\r
-       ctsData[CTS_BYTE_PGN_1] = RtsPduInfoPtr->SduDataPtr[RTS_BYTE_PGN_1];\r
-       ctsData[CTS_BYTE_PGN_2] = RtsPduInfoPtr->SduDataPtr[RTS_BYTE_PGN_2];\r
-       ctsData[CTS_BYTE_PGN_3] = RtsPduInfoPtr->SduDataPtr[RTS_BYTE_PGN_3];\r
-       PduIdType CmNPdu = J1939Tp_Internal_GetPg(NSduId)->PgConfPtr->Channel->CmNPdu;\r
-       CanIf_Transmit(CmNPdu,&ctsInfo);\r
-\r
-}\r
 \r
 void J1939Tp_MainFunction(void) {\r
        for (int i = 0; i < J1939TP_PG_COUNT; i++) {\r
-               J1939Tp_Internal_PgStateInfoType* txPgState = J1939Tp_Internal_GetPg(i);\r
-               switch (txPgState->Tx->State) {\r
-                       case J1939TP_TX_WAITING_FOR_CTS:\r
-                               J1939Tp_Internal_IncAndCheckT3Timer(i,txPgState->Tx);\r
-                               break;\r
-                       case J1939TP_TX_WAITING_FOR_END_OF_MSG_ACK:\r
-                               J1939Tp_Internal_IncAndCheckT3Timer(i,txPgState->Tx);\r
+               J1939Tp_Internal_PgStateInfoType* PgState = J1939Tp_Internal_GetPg(i);\r
+               J1939Tp_Internal_TimerStatusType timer = J1939TP_NOT_EXPIRED;\r
+               switch (PgState->PgConfPtr->Channel->Direction) {\r
+                       case J1939TP_TX:\r
+                               switch (PgState->Tx->State) {\r
+                                       case J1939TP_TX_WAIT_DIRECT_SEND_CANIF_CONFIRM:\r
+                                       case J1939TP_TX_WAITING_FOR_CTS:\r
+                                       case J1939TP_TX_WAITING_FOR_END_OF_MSG_ACK:\r
+                                               timer = J1939Tp_Internal_IncAndCheckTimer(&(PgState->Tx->TimerInfo));\r
+                                               break;\r
+                                       default:\r
+                                               break;\r
+                               }\r
                                break;\r
+                               if (timer == J1939TP_EXPIRED) {\r
+                                       PgState->Tx->State = J1939TP_TX_IDLE;\r
+                                       J1939Tp_Internal_SendConnectionAbort(PgState->PgConfPtr->Channel->CmNPdu,PgState->PgConfPtr->Pgn);\r
+                                       PduR_J1939TpTxConfirmation(PgState->PgConfPtr->NSdu,NTFRSLT_E_NOT_OK);\r
+                               }\r
+                               return;\r
+                       case J1939TP_RX:\r
+                               switch (PgState->Rx->State) {\r
+                                       case J1939TP_RX_WAIT_CTS_CANIF_CONFIRM:\r
+                                       case J1939TP_RX_RECEIVING_DT:\r
+                                       case J1939TP_RX_WAIT_ENDOFMSGACK_CANIF_CONFIRM:\r
+                                       timer = J1939Tp_Internal_IncAndCheckTimer(&(PgState->Rx->TimerInfo));\r
+                                       default:\r
+                                               break;\r
+                               }\r
                        default:\r
                                break;\r
+                               if (timer == J1939TP_EXPIRED) {\r
+                                       PgState->Rx->State = J1939TP_TX_IDLE;\r
+                                       J1939Tp_Internal_SendConnectionAbort(PgState->PgConfPtr->Channel->FcNPdu,PgState->PgConfPtr->Pgn);\r
+                                       PduR_J1939TpRxIndication(PgState->PgConfPtr->NSdu,NTFRSLT_E_NOT_OK);\r
+                               }\r
+                               return;\r
                }\r
        }\r
 }\r
@@ -210,8 +226,9 @@ void J1939Tp_TxConfirmation(PduIdType NSduId) {
 static inline void J1939Tp_Internal_TxConfirmation_RxChannel(PduIdType NSduId) {\r
        J1939Tp_Internal_PgStateInfoType* pgState = J1939Tp_Internal_GetPg(NSduId);\r
        switch (pgState->Tx->State) {\r
-               case J1939TP_TX_WAIT_CTS_CANIF_CONFIRM:\r
-                       J1939Tp_Internal_TxSetStatePg(NSduId, J1939TP_RX_RECEIVING_DT);\r
+               case J1939TP_RX_WAIT_CTS_CANIF_CONFIRM:\r
+                       J1939Tp_Internal_TxSessionStartTimer(pgState->Tx,J1939TP_T2_TIMEOUT_MS);\r
+                       pgState->Tx->State = J1939TP_RX_RECEIVING_DT;\r
                        break;\r
                default:\r
                        break;\r
@@ -222,17 +239,23 @@ static inline void J1939Tp_Internal_TxConfirmation_TxChannel(PduIdType NSduId) {
        switch (pgState->Tx->State) {\r
                case J1939TP_TX_WAIT_DT_CANIF_CONFIRM:\r
                        if (J1939Tp_Internal_WaitForEndOfMsgAck(pgState->Tx)) {\r
-                               J1939Tp_Internal_ResetT3(pgState);\r
-                               J1939Tp_Internal_TxSetStatePg(NSduId, J1939TP_TX_WAITING_FOR_END_OF_MSG_ACK);\r
+                               J1939Tp_Internal_TxSessionStartTimer(pgState->Tx,J1939TP_T3_TIMEOUT_MS);\r
+                               pgState->Tx->State = J1939TP_TX_WAITING_FOR_END_OF_MSG_ACK;\r
                        } else if (J1939Tp_Internal_WaitForCts(pgState->Tx)) {\r
-                               J1939Tp_Internal_TxSetStatePg(NSduId, J1939TP_TX_WAITING_FOR_CTS);\r
+                               J1939Tp_Internal_TxSessionStartTimer(pgState->Tx,J1939TP_T3_TIMEOUT_MS);\r
+                               pgState->Tx->State = J1939TP_TX_WAITING_FOR_CTS;\r
                        } else {\r
-                               J1939Tp_Internal_SendDt(NSduId,pgState);\r
+                               J1939Tp_Internal_TxSessionStartTimer(pgState->Tx,J1939TP_TX_CONF_TIMEOUT);\r
+                               J1939Tp_Internal_SendDt(pgState);\r
                        }\r
                        break;\r
                case J1939TP_TX_WAIT_RTS_CANIF_CONFIRM:\r
-                       J1939Tp_Internal_TxSetStatePg(NSduId,J1939TP_TX_WAITING_FOR_CTS);\r
+                       pgState->Tx->State = J1939TP_TX_WAITING_FOR_CTS;\r
                        break;\r
+               case J1939TP_TX_WAIT_DIRECT_SEND_CANIF_CONFIRM:\r
+                       pgState->Tx->State = J1939TP_TX_IDLE;\r
+                       PduR_J1939TpTxConfirmation(pgState->PgConfPtr->NSdu, NTFRSLT_OK);\r
+\r
                default:\r
                        break;\r
        }\r
@@ -249,14 +272,13 @@ Std_ReturnType J1939Tp_Transmit(PduIdType TxSduId, const PduInfoType* TxInfoPtr)
                J1939Tp_Internal_ReportError(J1939TP_TRANSMIT_ID,J1939TP_E_UNINIT);\r
        }\r
        #endif\r
+       J1939Tp_Internal_PgStateInfoType* pgState = J1939Tp_Internal_GetPg(TxSduId);\r
        if (TxInfoPtr->SduLength <= 8) { // direct transmit\r
                PduInfoType* ToSendTxInfoPtr;\r
                PduR_J1939TpProvideTxBuffer(TxSduId, &ToSendTxInfoPtr, TxInfoPtr->SduLength);\r
-               if (CanIf_Transmit(TxSduId,ToSendTxInfoPtr) == E_OK) {\r
-                       PduR_J1939TpTxConfirmation(TxSduId, NTFRSLT_OK);\r
-               } else {\r
-                       PduR_J1939TpTxConfirmation(TxSduId, NTFRSLT_E_NOT_OK);\r
-               }\r
+               PduIdType CanIfPdu = pgState->PgConfPtr->DirectNPdu;\r
+               pgState->Tx->State = J1939TP_TX_WAIT_DIRECT_SEND_CANIF_CONFIRM;\r
+               CanIf_Transmit(CanIfPdu,ToSendTxInfoPtr);\r
        } else {\r
                J1939Tp_PgnType pgn = J1939Tp_Internal_ConfGetPg(TxSduId)->Pgn;\r
                uint8 pf = J1939Tp_Internal_GetPf(pgn);\r
@@ -265,14 +287,15 @@ Std_ReturnType J1939Tp_Transmit(PduIdType TxSduId, const PduInfoType* TxInfoPtr)
                        case J1939TP_PROTOCOL_BAM:\r
                                break;\r
                        case J1939TP_PROTOCOL_CMDT:\r
-                               J1939Tp_Internal_SendRts(TxSduId,TxInfoPtr);\r
+                               pgState->Tx->State = J1939TP_TX_WAIT_RTS_CANIF_CONFIRM;\r
+                               J1939Tp_Internal_SendRts(pgState,TxInfoPtr);\r
+                               J1939Tp_Internal_TxSessionStartTimer(pgState->Tx,J1939TP_TX_CONF_TIMEOUT);\r
                                J1939Tp_Internal_PgStateInfoType* txPgState = J1939Tp_Internal_GetPg(TxSduId);\r
-                               J1939Tp_Internal_ResetT3(txPgState);\r
+                               J1939Tp_Internal_ResetTimer(txPgState);\r
                                txPgState->Tx->TotalMessageSize = TxInfoPtr->SduLength;\r
                                txPgState->Tx->TotalBytesSent = 0;\r
                                txPgState->Tx->TotalSentDtCount = 0;\r
                                txPgState->Tx->PduRPdu = TxSduId;\r
-                               J1939Tp_Internal_TxSetStatePg(TxSduId,J1939TP_TX_WAIT_RTS_CANIF_CONFIRM);\r
                                break;\r
                }\r
        }\r
@@ -301,12 +324,7 @@ static inline boolean J1939Tp_Internal_WaitForEndOfMsgAck(J1939Tp_Internal_TxPgI
        return TxPgState->TotalMessageSize == TxPgState->TotalBytesSent;\r
 }\r
 \r
-static inline void J1939Tp_Internal_TxSetStatePg(PduIdType NSduId,J1939Tp_Internal_TxPgStateType state) {\r
-       PgStates[NSduId].Tx->State = state;\r
-}\r
-static inline void J1939Tp_Internal_RxSetStatePg(PduIdType NSduId,J1939Tp_Internal_RxPgStateType state) {\r
-       PgStates[NSduId].Rx->State = state;\r
-}\r
+\r
 static inline J1939Tp_Internal_PgStateInfoType* J1939Tp_Internal_GetPg(PduIdType NSduId) {\r
        return &(PgStates[NSduId]);\r
 }\r
@@ -325,13 +343,12 @@ static inline boolean J1939Tp_Internal_CheckValidEndOfMsgAck(J1939Tp_Internal_Pg
        }\r
        return true;\r
 }\r
-static inline void J1939Tp_Internal_IncAndCheckT3Timer(PduIdType pduId, J1939Tp_Internal_TxPgInfo* txPgState) {\r
-       txPgState->T3 += (J1939TP_MAIN_FUNCTION_PERIOD*1000);\r
-       if (txPgState->T3 > J1939TP_T3_TIMEOUT_MS) {\r
-               txPgState->State = J1939TP_TX_IDLE;\r
-               PduR_J1939TpTxConfirmation(J1939Tp_Internal_ConfGetPg(pduId)->NSdu,NTFRSLT_E_NOT_OK);\r
-               /* TODO: Call det here */\r
+static inline J1939Tp_Internal_TimerStatusType J1939Tp_Internal_IncAndCheckTimer(J1939Tp_Internal_TimerType* TimerInfo) {\r
+       TimerInfo->Timer += J1939TP_MAIN_FUNCTION_PERIOD;\r
+       if (TimerInfo->Timer >= TimerInfo->TimerExpire) {\r
+               return J1939TP_EXPIRED;\r
        }\r
+       return J1939TP_NOT_EXPIRED;\r
 }\r
 static uint8 J1939Tp_Internal_GetPf(J1939Tp_PgnType pgn) {\r
        return (pgn && 0x0000FF00) >> 8;\r
@@ -343,7 +360,7 @@ static J1939Tp_ProtocolType J1939Tp_Internal_GetProtocol(uint8 pf) {
                return J1939TP_PROTOCOL_BAM;\r
        }\r
 }\r
-static inline boolean J1939Tp_Internal_CheckValidCts(PduInfoType* PduInfoPtr,uint8* NumPackets) {\r
+static inline boolean J1939Tp_Internal_CheckValidCts(PduInfoType* PduInfoPtr,uint8* NumPackets, uint8* NextPacket) {\r
        /*\r
        if (PduInfoPtr->SduLength != CTS_SIZE) {\r
                return false;\r
@@ -352,14 +369,13 @@ static inline boolean J1939Tp_Internal_CheckValidCts(PduInfoType* PduInfoPtr,uin
        if (PduInfoPtr->SduDataPtr[CTS_BYTE_CONTROL] != CTS_CONTROL_VALUE) {\r
                return false;\r
        }\r
-       if (PduInfoPtr->SduDataPtr[CTS_BYTE_NUM_PACKETS] < 1) {\r
-               return false;\r
-       }\r
+\r
        *NumPackets = PduInfoPtr->SduDataPtr[CTS_BYTE_NUM_PACKETS];\r
+       *NextPacket = PduInfoPtr->SduDataPtr[CTS_BYTE_NEXT_PACKET];\r
        return true;\r
 }\r
 \r
-static void inline J1939Tp_Internal_SendDt(PduIdType TxPduId, J1939Tp_Internal_PgStateInfoType* PgState) {\r
+static void inline J1939Tp_Internal_SendDt(J1939Tp_Internal_PgStateInfoType* PgState) {\r
        uint8 requestLength = DT_DATA_SIZE;\r
        uint8 bytesLeftToSend = PgState->Tx->TotalMessageSize - PgState->Tx->TotalSentDtCount * DT_DATA_SIZE;\r
        if (bytesLeftToSend < DT_DATA_SIZE){\r
@@ -373,12 +389,12 @@ static void inline J1939Tp_Internal_SendDt(PduIdType TxPduId, J1939Tp_Internal_P
 \r
        BufReq_ReturnType allocateBufferRes;\r
        PduInfoType* dataPduInfoBuffer;\r
-       PduIdType Pdur_NSdu = J1939Tp_Internal_ConfGetPg(TxPduId)->NSdu;\r
+       PduIdType Pdur_NSdu = PgState->PgConfPtr->NSdu;\r
        allocateBufferRes = PduR_J1939TpProvideTxBuffer(Pdur_NSdu, &dataPduInfoBuffer, requestLength);\r
        if (allocateBufferRes == BUFREQ_OK) {\r
                dtPduInfoBuffer.SduDataPtr[DT_BYTE_SEQ_NUM] = PgState->Tx->TotalSentDtCount;\r
                memcpy(&(dtPduInfoBuffer.SduDataPtr[DT_BYTE_DATA_1]), dataPduInfoBuffer, requestLength);\r
-               PduIdType CanIf_NSdu = J1939Tp_Internal_ConfGetPg(TxPduId)->Channel->DtNPdu;\r
+               PduIdType CanIf_NSdu = PgState->PgConfPtr->Channel->DtNPdu;\r
                CanIf_Transmit(CanIf_NSdu, &dtPduInfoBuffer);\r
                PgState->Tx->TotalBytesSent += requestLength;\r
                PgState->Tx->TotalSentDtCount++;\r
@@ -388,7 +404,8 @@ static void inline J1939Tp_Internal_SendDt(PduIdType TxPduId, J1939Tp_Internal_P
        }\r
 \r
 }\r
-static void J1939Tp_Internal_SendRts(PduIdType TxSduId, const PduInfoType* TxInfoPtr) {\r
+\r
+static void J1939Tp_Internal_SendRts(J1939Tp_Internal_PgStateInfoType* PgState, const PduInfoType* TxInfoPtr) {\r
        uint8 cmRtsData[RTS_SIZE];\r
        cmRtsData[RTS_BYTE_CONTROL] = 16;\r
        cmRtsData[RTS_BYTE_LENGTH_1] = (uint8)(TxInfoPtr->SduLength & 0x00FF);\r
@@ -397,8 +414,7 @@ static void J1939Tp_Internal_SendRts(PduIdType TxSduId, const PduInfoType* TxInf
        if (TxInfoPtr->SduLength % J1939TP_PACKET_SIZE != 0) {\r
                reminder = 1;\r
        }\r
-       const J1939Tp_PgType* pg = J1939Tp_Internal_ConfGetPg(TxSduId);\r
-       J1939Tp_PgnType pgn = pg->Pgn;\r
+       J1939Tp_PgnType pgn = PgState->PgConfPtr->Pgn;\r
        cmRtsData[RTS_BYTE_NUM_PACKETS] = (TxInfoPtr->SduLength / J1939TP_PACKET_SIZE) + reminder;\r
        cmRtsData[RTS_BYTE_SAE_ASSIGN] = 0xFF;\r
        /* PGN is 18 bits, RTS message have 24 bits PGN payload, therefore we squeeze in pdu id */\r
@@ -408,15 +424,77 @@ static void J1939Tp_Internal_SendRts(PduIdType TxSduId, const PduInfoType* TxInf
        PduInfoType cmRtsPdu;\r
        cmRtsPdu.SduLength = RTS_SIZE;\r
        cmRtsPdu.SduDataPtr = cmRtsData;\r
-       CanIf_Transmit(J1939Tp_Internal_ConfGetTxChannel(TxSduId)->CmNPdu,&cmRtsPdu);\r
+\r
+       CanIf_Transmit(PgState->PgConfPtr->Channel->CmNPdu,&cmRtsPdu);\r
+}\r
+\r
+static void inline J1939Tp_Internal_SendEndOfMsgAck(J1939Tp_Internal_PgStateInfoType* PgState) {\r
+       PduInfoType endofmsgInfo;\r
+       uint8 endofmsgData[ENDOFMSGACK_SIZE];\r
+       endofmsgInfo.SduLength = ENDOFMSGACK_SIZE;\r
+       endofmsgInfo.SduDataPtr = endofmsgData;\r
+       endofmsgData[ENDOFMSGACK_BYTE_CONTROL] = ENDOFMSGACK_CONTROL_VALUE;\r
+       endofmsgData[ENDOFMSGACK_BYTE_TOTAL_MSG_SIZE_1] = ((uint8)(PgState->Rx->TotalMessageSize)) << 8;\r
+       endofmsgData[ENDOFMSGACK_BYTE_TOTAL_MSG_SIZE_2] = ((uint8)(PgState->Rx->TotalMessageSize));\r
+       endofmsgData[ENDOFMSGACK_BYTE_NUM_PACKETS] = PgState->Rx->TotalReceivedDtCount;\r
+       endofmsgData[ENDOFMSGACK_BYTE_SAE_ASSIGN] = 0xFF;\r
+       J1939Tp_Internal_SetPgn(&(endofmsgData[ENDOFMSGACK_BYTE_PGN_1]),PgState->PgConfPtr->Pgn);\r
+       PduIdType CmNPdu = PgState->PgConfPtr->Channel->CmNPdu;\r
+\r
+       CanIf_Transmit(CmNPdu,&endofmsgInfo);\r
+}\r
+\r
+/**\r
+ * Send a response to the incoming RTS\r
+ * @param NSduId\r
+ * @param RtsPduInfoPtr needs to be a valid RTS message\r
+ */\r
+static inline void J1939Tp_Internal_SendCts(J1939Tp_Internal_PgStateInfoType* PgState, PduInfoType* RtsPduInfoPtr) {\r
+       PduInfoType ctsInfo;\r
+       uint8 ctsData[CTS_SIZE];\r
+       ctsInfo.SduLength = CTS_SIZE;\r
+       ctsInfo.SduDataPtr = ctsData;\r
+       ctsData[CTS_BYTE_CONTROL] = CTS_CONTROL_VALUE;\r
+       ctsData[CTS_BYTE_NUM_PACKETS] = J1939TP_PACKETS_PER_BLOCK;\r
+       ctsData[CTS_BYTE_NEXT_PACKET] = CTS_START_SEQ_NUM;\r
+       ctsData[CTS_BYTE_SAE_ASSIGN_1] = 0xFF;\r
+       ctsData[CTS_BYTE_SAE_ASSIGN_2] = 0xFF;\r
+       ctsData[CTS_BYTE_PGN_1] = RtsPduInfoPtr->SduDataPtr[RTS_BYTE_PGN_1];\r
+       ctsData[CTS_BYTE_PGN_2] = RtsPduInfoPtr->SduDataPtr[RTS_BYTE_PGN_2];\r
+       ctsData[CTS_BYTE_PGN_3] = RtsPduInfoPtr->SduDataPtr[RTS_BYTE_PGN_3];\r
+       PduIdType CmNPdu = PgState->PgConfPtr->Channel->CmNPdu;\r
+\r
+       CanIf_Transmit(CmNPdu,&ctsInfo);\r
+\r
+}\r
+static inline void J1939Tp_Internal_SendConnectionAbort(PduIdType CmNPdu, J1939Tp_PgnType Pgn) {\r
+       PduInfoType connAbortInfo;\r
+       uint8 connAbortData[CONNABORT_SIZE];\r
+       connAbortInfo.SduLength = CONNABORT_SIZE;\r
+       connAbortInfo.SduDataPtr = connAbortData;\r
+       connAbortData[CONNABORT_BYTE_CONTROL] = CTS_CONTROL_VALUE;\r
+       connAbortData[CONNABORT_BYTE_SAE_ASSIGN_1] = 0xFF;\r
+       connAbortData[CONNABORT_BYTE_SAE_ASSIGN_2] = 0xFF;\r
+       connAbortData[CONNABORT_BYTE_SAE_ASSIGN_3] = 0xFF;\r
+       connAbortData[CONNABORT_BYTE_SAE_ASSIGN_4] = 0xFF;\r
+       J1939Tp_Internal_SetPgn(&(connAbortData[CONNABORT_BYTE_PGN_1]),Pgn);\r
+       CanIf_Transmit(CmNPdu,&connAbortInfo);\r
+}\r
+static void inline J1939Tp_Internal_TxSessionStartTimer(J1939Tp_Internal_TxPgInfo* Tx,uint16 TimerExpire) {\r
+       Tx->TimerInfo.Timer = 0;\r
+       Tx->TimerInfo.TimerExpire = TimerExpire;\r
+}\r
+static void inline J1939Tp_Internal_RxSessionStartTimer(J1939Tp_Internal_RxPgInfo* Rx,uint16 TimerExpire) {\r
+       Rx->TimerInfo.Timer = 0;\r
+       Rx->TimerInfo.TimerExpire = TimerExpire;\r
 }\r
 static inline void J1939Tp_Internal_SetPgn(uint8* PgnBytes,J1939Tp_PgnType pgn ) {\r
        PgnBytes[RTS_BYTE_PGN_1] = pgn; /* get first byte */\r
        PgnBytes[RTS_BYTE_PGN_2] = pgn >> 8; /* get next byte */\r
        PgnBytes[RTS_BYTE_PGN_3] = (pgn >> 16) & 0x3; /* get next two bits */\r
 }\r
-static inline void J1939Tp_Internal_ResetT3(J1939Tp_Internal_PgStateInfoType* pgState) {\r
-       pgState->Tx->T3 = 0;\r
+static inline void J1939Tp_Internal_ResetTimer(J1939Tp_Internal_PgStateInfoType* pgState) {\r
+       pgState->Tx->TimerInfo.Timer = 0;\r
 }\r
 \r
 static inline void J1939Tp_Internal_ReportError(uint8 ApiId, uint8 ErrorId) {\r
index 81916d3db51b5cb13109de5773cab23f8eadad4a..bca3bebe1acfd99c6df1eae019ac7c6b9f4353b7 100644 (file)
@@ -15,7 +15,7 @@
 \r
 #ifndef J1939TP_INTERNAL_H_\r
 #define J1939TP_INTERNAL_H_\r
-\r
+#include "J1939Tp_Internal_Packets.h"\r
 #define PGN_BYTE_COUNT                 3\r
 /** Service Ids */\r
 #define J1939TP_TRANSMIT_ID    0x05\r
 \r
 #define J1939TP_PACKET_SIZE 7\r
 \r
-#define CM_PGN_VALUE_1                 0x00\r
-#define CM_PGN_VALUE_2                 0xCE\r
-#define CM_PGN_VALUE_3                 0x00\r
-\r
-\r
-/* Rts message */\r
-#define RTS_SIZE                               8\r
-#define RTS_BYTE_CONTROL               0\r
-#define RTS_BYTE_LENGTH_1              1\r
-#define RTS_BYTE_LENGTH_2              2\r
-#define RTS_BYTE_NUM_PACKETS   3\r
-#define RTS_BYTE_SAE_ASSIGN            4\r
-#define RTS_BYTE_PGN_1                 5\r
-#define RTS_BYTE_PGN_2                 6\r
-#define RTS_BYTE_PGN_3                 7\r
-#define RTS_CONTROL_VALUE              16\r
-\r
-/* Cts message */\r
-#define CTS_SIZE                               8\r
-#define CTS_BYTE_CONTROL               0\r
-#define CTS_BYTE_NUM_PACKETS   1\r
-#define CTS_BYTE_NEXT_PACKET   2\r
-#define CTS_BYTE_SAE_ASSIGN_1  3\r
-#define CTS_BYTE_SAE_ASSIGN_2  4\r
-#define CTS_BYTE_PGN_1                 5\r
-#define CTS_BYTE_PGN_2                 6\r
-#define CTS_BYTE_PGN_3                 7\r
-#define CTS_START_SEQ_NUM              0\r
-#define CTS_CONTROL_VALUE              17\r
-\r
-/* Dt message */\r
-#define DT_SIZE                                8\r
-#define DT_DATA_SIZE                   7\r
-#define DT_BYTE_SEQ_NUM                        0\r
-#define DT_BYTE_DATA_1                 1\r
-#define DT_BYTE_DATA_2                 2\r
-#define DT_BYTE_DATA_3                 3\r
-#define DT_BYTE_DATA_4                 4\r
-#define DT_BYTE_DATA_5                 5\r
-#define DT_BYTE_DATA_6                 6\r
-#define DT_BYTE_DATA_7                 7\r
-\r
-#define DT_PGN_VALUE_1                 0x00\r
-#define DT_PGN_VALUE_2                 0xEB\r
-#define DT_PGN_VALUE_3                 0x00\r
-\r
-/* EndOfMsgAck message */\r
-#define ENDOFMSGACK_SIZE                                       8\r
-#define ENDOFMSGACK_BYTE_CONTROL                       0\r
-#define ENDOFMSGACK_BYTE_TOTAL_MSG_SIZE_1      1\r
-#define ENDOFMSGACK_BYTE_TOTAL_MSG_SIZE_2      2\r
-#define ENDOFMSGACK_BYTE_NUM_PACKETS           3\r
-#define ENDOFMSGACK_BYTE_SAE_ASSIGN                    4\r
-#define ENDOFMSGACK_BYTE_PGN_1                         5\r
-#define ENDOFMSGACK_BYTE_PGN_2                         6\r
-#define ENDOFMSGACK_BYTE_PGN_3                         7\r
-#define ENDOFMSGACK_CONTROL_VALUE                      19\r
-\r
-\r
-#define J1939TP_T4_TIMEOUT_MS  1050\r
-#define J1939TP_T3_TIMEOUT_MS  1250\r
-#define J1939TP_T2_TIMEOUT_MS  1250\r
-#define J1939TP_T1_TIMEOUT_MS  750\r
+\r
 \r
 /** @req J1939TP0019 */\r
 \r
@@ -98,7 +36,10 @@ typedef enum {
        J1939TP_ON,\r
        J1939TP_OFF\r
 } J1939Tp_Internal_GlobalStateType;\r
-\r
+typedef enum {\r
+       J1939TP_EXPIRED,\r
+       J1939TP_NOT_EXPIRED\r
+} J1939Tp_Internal_TimerStatusType;\r
 typedef uint8 J1939Tp_Internal_ControlByteType;\r
 typedef uint32 J1939Tp_Internal_PgnType;\r
 typedef uint32 J1939Tp_Internal_DtPayloadSizeType;\r
@@ -110,19 +51,25 @@ typedef struct {
 typedef enum {\r
        J1939TP_TX_IDLE,\r
        J1939TP_TX_WAIT_RTS_CANIF_CONFIRM,\r
+       J1939TP_TX_WAIT_DIRECT_SEND_CANIF_CONFIRM,\r
        J1939TP_TX_WAITING_FOR_CTS,\r
        J1939TP_TX_WAIT_DT_CANIF_CONFIRM,\r
        J1939TP_TX_WAITING_FOR_END_OF_MSG_ACK\r
 } J1939Tp_Internal_TxPgStateType;\r
 typedef enum {\r
        J1939TP_RX_IDLE,\r
-       J1939TP_TX_WAIT_CTS_CANIF_CONFIRM,\r
+       J1939TP_RX_WAIT_CTS_CANIF_CONFIRM,\r
        J1939TP_RX_RECEIVING_DT,\r
-       J1939TP_TX_WAIT_ENDOFMSGACK_CANIF_CONFIRM,\r
-\r
+       J1939TP_RX_WAIT_ENDOFMSGACK_CANIF_CONFIRM,\r
 } J1939Tp_Internal_RxPgStateType;\r
+typedef struct {\r
+       uint32 Timer;\r
+       uint32 TimerExpire;\r
+} J1939Tp_Internal_TimerType;\r
+\r
 typedef struct {\r
        J1939Tp_Internal_RxPgStateType State;\r
+       J1939Tp_Internal_TimerType TimerInfo;\r
        uint8 TotalReceivedDtCount;\r
        uint8 TotalDtToReceiveCount;\r
        J1939Tp_Internal_DtPayloadSizeType TotalMessageSize;\r
@@ -130,7 +77,7 @@ typedef struct {
 \r
 typedef struct {\r
        J1939Tp_Internal_TxPgStateType State;\r
-       uint32 T3;\r
+       J1939Tp_Internal_TimerType TimerInfo;\r
        uint8 SentDtCount;\r
        uint8 DtToSendBeforeCtsCount;\r
        J1939Tp_Internal_DtPayloadSizeType TotalMessageSize;\r
@@ -145,26 +92,31 @@ typedef struct {
        const J1939Tp_PgType* PgConfPtr;\r
 } J1939Tp_Internal_PgStateInfoType;\r
 \r
+static void J1939Tp_Internal_SendRts(J1939Tp_Internal_PgStateInfoType* TxPgState, const PduInfoType* TxInfoPtr);\r
+static void inline J1939Tp_Internal_SendDt(J1939Tp_Internal_PgStateInfoType* PgState);\r
+static inline void J1939Tp_Internal_SendCts(J1939Tp_Internal_PgStateInfoType* TxPgState, PduInfoType* RtsPduInfoPtr);\r
+static void inline J1939Tp_Internal_SendEndOfMsgAck(J1939Tp_Internal_PgStateInfoType* PgState);\r
+static inline void J1939Tp_Internal_SendConnectionAbort(PduIdType CmPdu, J1939Tp_PgnType Pgn);\r
+static void inline J1939Tp_Internal_TxSessionStartTimer(J1939Tp_Internal_TxPgInfo* Tx,uint16 TimerExpire);\r
+static void inline J1939Tp_Internal_RxSessionStartTimer(J1939Tp_Internal_RxPgInfo* Rx,uint16 TimerExpire);\r
 static inline const J1939Tp_PgType* J1939Tp_Internal_ConfGetPg(PduIdType pduId);\r
 static inline boolean J1939Tp_Internal_WaitForCts(J1939Tp_Internal_TxPgInfo* TxPgState);\r
 static inline boolean J1939Tp_Internal_WaitForEndOfMsgAck(J1939Tp_Internal_TxPgInfo* TxPgState);\r
-static inline void J1939Tp_Internal_TxSetStatePg(PduIdType txPduId,J1939Tp_Internal_TxPgStateType state);\r
-static inline void J1939Tp_Internal_RxSetStatePg(PduIdType NSduId,J1939Tp_Internal_RxPgStateType state);\r
+\r
 static inline J1939Tp_Internal_PgStateInfoType* J1939Tp_Internal_GetPg(PduIdType txPduId);\r
 static inline const J1939Tp_ChannelType* J1939Tp_Internal_ConfGetTxChannel(PduIdType txPduId);\r
 static inline boolean J1939Tp_Internal_CheckValidEndOfMsgAck(J1939Tp_Internal_PgStateInfoType* pgState, PduInfoType* PduInfoPtr);\r
-static inline void J1939Tp_Internal_IncAndCheckT3Timer(PduIdType pduId,J1939Tp_Internal_TxPgInfo* pgState);\r
+static inline J1939Tp_Internal_TimerStatusType J1939Tp_Internal_IncAndCheckTimer(J1939Tp_Internal_TimerType* Timer);\r
 static uint8 J1939Tp_Internal_GetPf(uint32 pgn);\r
 static J1939Tp_ProtocolType J1939Tp_Internal_GetProtocol(uint8 pf);\r
-static inline boolean J1939Tp_Internal_CheckValidCts(PduInfoType* PduInfoPtr,uint8* NumPackets);\r
-static void inline J1939Tp_Internal_SendDt(PduIdType RxPduId,J1939Tp_Internal_PgStateInfoType* PgState);\r
-static void J1939Tp_Internal_SendRts(PduIdType TxSduId, const PduInfoType* TxInfoPtr);\r
-static inline void J1939Tp_Internal_ResetT3(J1939Tp_Internal_PgStateInfoType* pgState);\r
+static inline boolean J1939Tp_Internal_CheckValidCts(PduInfoType* PduInfoPtr,uint8* NumPackets,uint8* NextPacket);\r
+\r
+static inline void J1939Tp_Internal_ResetTimer(J1939Tp_Internal_PgStateInfoType* pgState);\r
 static inline void J1939Tp_Internal_ReportError(uint8 ApiId, uint8 ErrorId);\r
 static void inline J1939Tp_Internal_RxIndication_TxChannel(PduIdType RxPduId, PduInfoType* PduInfoPtr);\r
 static void inline J1939Tp_Internal_RxIndication_RxChannel(PduIdType RxPduId, PduInfoType* PduInfoPtr);\r
 static Std_ReturnType inline J1939Tp_Internal_ReceiveRts(PduIdType NSduId, PduInfoType* PduInfoPtr);\r
-static inline void J1939Tp_Internal_SendCts(PduIdType NSduId, PduInfoType* RtsPduInfoPtr);\r
+\r
 static Std_ReturnType inline J1939Tp_Internal_ReceiveDt(PduIdType NSduId, PduInfoType* PduInfoPtr);\r
 static inline void J1939Tp_Internal_SetPgn(uint8* PgnBytes,J1939Tp_PgnType pgn );\r
 static inline uint16 J1939Tp_Internal_GetRtsMessageSize(PduInfoType* pduInfo);\r
diff --git a/communication/J1939Tp/J1939Tp_Internal_Packets.h b/communication/J1939Tp/J1939Tp_Internal_Packets.h
new file mode 100644 (file)
index 0000000..dd6f9e8
--- /dev/null
@@ -0,0 +1,79 @@
+#ifndef J1939TP_PACKETS_INTERNAL_H_\r
+#define J1939TP_PACKETS_INTERNAL_H_\r
+\r
+#define CM_PGN_VALUE_1                 0x00\r
+#define CM_PGN_VALUE_2                 0xCE\r
+#define CM_PGN_VALUE_3                 0x00\r
+\r
+\r
+/* Rts message */\r
+#define RTS_SIZE                               8\r
+#define RTS_BYTE_CONTROL               0\r
+#define RTS_BYTE_LENGTH_1              1\r
+#define RTS_BYTE_LENGTH_2              2\r
+#define RTS_BYTE_NUM_PACKETS   3\r
+#define RTS_BYTE_SAE_ASSIGN            4\r
+#define RTS_BYTE_PGN_1                 5\r
+#define RTS_BYTE_PGN_2                 6\r
+#define RTS_BYTE_PGN_3                 7\r
+#define RTS_CONTROL_VALUE              16\r
+\r
+/* Cts message */\r
+#define CTS_SIZE                               8\r
+#define CTS_BYTE_CONTROL               0\r
+#define CTS_BYTE_NUM_PACKETS   1\r
+#define CTS_BYTE_NEXT_PACKET   2\r
+#define CTS_BYTE_SAE_ASSIGN_1  3\r
+#define CTS_BYTE_SAE_ASSIGN_2  4\r
+#define CTS_BYTE_PGN_1                 5\r
+#define CTS_BYTE_PGN_2                 6\r
+#define CTS_BYTE_PGN_3                 7\r
+#define CTS_START_SEQ_NUM              0\r
+#define CTS_CONTROL_VALUE              17\r
+\r
+/* Dt message */\r
+#define DT_SIZE                                8\r
+#define DT_DATA_SIZE                   7\r
+#define DT_BYTE_SEQ_NUM                        0\r
+#define DT_BYTE_DATA_1                 1\r
+#define DT_BYTE_DATA_2                 2\r
+#define DT_BYTE_DATA_3                 3\r
+#define DT_BYTE_DATA_4                 4\r
+#define DT_BYTE_DATA_5                 5\r
+#define DT_BYTE_DATA_6                 6\r
+#define DT_BYTE_DATA_7                 7\r
+\r
+#define DT_PGN_VALUE_1                 0x00\r
+#define DT_PGN_VALUE_2                 0xEB\r
+#define DT_PGN_VALUE_3                 0x00\r
+\r
+/* EndOfMsgAck message */\r
+#define ENDOFMSGACK_SIZE                                       8\r
+#define ENDOFMSGACK_BYTE_CONTROL                       0\r
+#define ENDOFMSGACK_BYTE_TOTAL_MSG_SIZE_1      1\r
+#define ENDOFMSGACK_BYTE_TOTAL_MSG_SIZE_2      2\r
+#define ENDOFMSGACK_BYTE_NUM_PACKETS           3\r
+#define ENDOFMSGACK_BYTE_SAE_ASSIGN                    4\r
+#define ENDOFMSGACK_BYTE_PGN_1                         5\r
+#define ENDOFMSGACK_BYTE_PGN_2                         6\r
+#define ENDOFMSGACK_BYTE_PGN_3                         7\r
+#define ENDOFMSGACK_CONTROL_VALUE                      19\r
+\r
+#define CONNABORT_SIZE                         8\r
+#define CONNABORT_BYTE_CONTROL                 0\r
+#define CONNABORT_BYTE_SAE_ASSIGN_1            1\r
+#define CONNABORT_BYTE_SAE_ASSIGN_2            2\r
+#define CONNABORT_BYTE_SAE_ASSIGN_3            3\r
+#define CONNABORT_BYTE_SAE_ASSIGN_4            4\r
+#define CONNABORT_BYTE_PGN_1                   5\r
+#define CONNABORT_BYTE_PGN_2                   6\r
+#define CONNABORT_BYTE_PGN_3                   7\r
+\r
+#define CONNABORT_CONTROL_VALUE                32\r
+\r
+#define J1939TP_T4_TIMEOUT_MS  1050\r
+#define J1939TP_T3_TIMEOUT_MS  1250\r
+#define J1939TP_T2_TIMEOUT_MS  1250\r
+#define J1939TP_T1_TIMEOUT_MS  750\r
+\r
+#endif\r
index 9692b1c6fe95cee7ab28d32054477cd4fb10843b..2fb0504e259cde0ea4f4bc88e3838b94c78ebf96 100644 (file)
@@ -38,6 +38,7 @@ typedef enum {
        CANIF_USER_TYPE_CAN_NM,\r
        CANIF_USER_TYPE_CAN_TP,\r
        CANIF_USER_TYPE_CAN_PDUR,\r
+       CANIF_USER_TYPE_J1939TP,\r
        CANIF_USER_TYPE_CAN_SPECIAL\r
 } CanIf_UserTypeType;\r
 \r
index 87cf1b60b2a4b214be88d4dc1993500456c4a0e2..23b99d190f0bbabe8975f41d49523a50a93ec11b 100644 (file)
@@ -21,7 +21,7 @@
 void J1939Tp_RxIndication(PduIdType RxPduId, PduInfoType* PduInfoPtr);\r
 \r
 /** The lower layer communication module confirms the transmission of an I-PDU */\r
-void J1939Tp_TxIndication(PduIdType TxPduId);\r
+void J1939Tp_TxConfirmation(PduIdType TxPduId);\r
 \r
 \r
 #endif\r