]> rtime.felk.cvut.cz Git - arc.git/blobdiff - communication/CanTp/CanTp.c
Added wait for tx confirm when sending CF (#1440).
[arc.git] / communication / CanTp / CanTp.c
index 9beb5481c21659bd367cb58aea71286eaddc124a..b7a3bd18746e59c5f85b2b410445e3bd6c67d652 100644 (file)
@@ -160,7 +160,7 @@ typedef enum {
        TX_WAIT_CAN_TP_TRANSMIT_CAN_TP_PROVIDE_TX_BUFFER, /** @req CANTP226 */\r
        TX_WAIT_CAN_TP_TRANSMIT_PENDING, /* CanTP_Transmit was called but no buffer was received (BUSY). */\r
        TX_WAIT_SEND_CONSECUTIVE_FRAME, TX_WAIT_FLOW_CONTROL,\r
-       TX_WAIT_TX_CONFIRMATION\r
+       TX_WAIT_TX_CONFIRMATION, TX_WAIT_TX_CONFIRMATION_CF\r
 } ISO15765TransferStateTypes;\r
 \r
 typedef enum {\r
@@ -754,12 +754,12 @@ static INLINE void handleConsecutiveFrameSent(
                } else {\r
                        // Send next consecutive frame!\r
                        txRuntime->iso15765.stateTimeoutCount = CANTP_CONVERT_MS_TO_MAIN_CYCLES(txRuntime->iso15765.STmin);\r
-                       txRuntime->iso15765.state = TX_WAIT_SEND_CONSECUTIVE_FRAME;\r
+                       txRuntime->iso15765.state = TX_WAIT_TX_CONFIRMATION_CF;\r
                }\r
        } else {\r
                // Send next consecutive frame!\r
                txRuntime->iso15765.stateTimeoutCount = CANTP_CONVERT_MS_TO_MAIN_CYCLES(txRuntime->iso15765.STmin);\r
-               txRuntime->iso15765.state = TX_WAIT_SEND_CONSECUTIVE_FRAME;\r
+               txRuntime->iso15765.state = TX_WAIT_TX_CONFIRMATION_CF;\r
        }\r
 }\r
 \r
@@ -1458,15 +1458,22 @@ void CanTp_MainFunction(void)
                                        txRuntimeListItem->mode = CANTP_TX_WAIT;\r
                                }\r
                                break;\r
-#if (CANTP_IMMEDIATE_TX_CONFIRMATION == STD_OFF)\r
+                       case TX_WAIT_TX_CONFIRMATION_CF:\r
+                               if      (txRuntimeListItem->iso15765.txConfirmed) {\r
+                                       txRuntimeListItem->iso15765.state = TX_WAIT_SEND_CONSECUTIVE_FRAME;\r
+                               } else {\r
+                                       checkNasNarTimeout( txRuntimeListItem );\r
+                               }\r
+                               break;\r
                        case TX_WAIT_TX_CONFIRMATION:\r
                                if      (txRuntimeListItem->iso15765.txConfirmed) {\r
                                        PduR_CanTpTxConfirmation(txConfigListItem->PduR_PduId, NTFRSLT_OK); /** @req CANTP074 *//** @req CANTP09 *//** @req CANTP204 */\r
                                        txRuntimeListItem->iso15765.state = IDLE;\r
                                        txRuntimeListItem->mode = CANTP_TX_WAIT;\r
+                               } else {\r
+                                       checkNasNarTimeout( txRuntimeListItem );\r
                                }\r
                                break;\r
-#endif\r
                        default:\r
                                break;\r
                        }\r