From a5be8054c7a971be940a45607284d58e9f98ee9d Mon Sep 17 00:00:00 2001 From: Hans-Erik Floryd Date: Wed, 6 Mar 2024 18:16:18 +0100 Subject: [PATCH] Add test for RPDO deadline monitoring --- test/test_pdo.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/test/test_pdo.cpp b/test/test_pdo.cpp index b123a35..552365f 100644 --- a/test/test_pdo.cpp +++ b/test/test_pdo.cpp @@ -857,3 +857,53 @@ TEST_F (PdoTest, SparsePdo) EXPECT_EQ (0u, result); EXPECT_EQ (0x1234u, value); } + +TEST_F (PdoTest, RPDOMonitoring) +{ + uint8_t pdo[][4] = { + {0x11, 0x22, 0x33, 0x44}, + }; + + net.state = STATE_OP; + + net.pdo_rx[0].cobid = 0x201; + net.pdo_rx[0].event_timer = 100; + + // Arm RPDO deadline monitoring + co_pdo_rx (&net, 0x201, pdo[0], sizeof (pdo[0])); + EXPECT_TRUE (net.pdo_rx[0].rpdo_monitoring); + + // Receive PDO, timer has not expired. Rearm timer. + mock_os_tick_current_result = 50 * 1000; + co_pdo_rx (&net, 0x201, pdo[0], sizeof (pdo[0])); + EXPECT_EQ (0u, mock_co_emcy_tx_calls); + + // Timer has not expired + mock_os_tick_current_result = 149 * 1000; + co_pdo_timer (&net, mock_os_tick_current_result); + EXPECT_EQ (0u, mock_co_emcy_tx_calls); + + // Timer has expired, should generate EMCY + mock_os_tick_current_result = 150 * 1000; + co_pdo_timer (&net, mock_os_tick_current_result); + EXPECT_EQ (1u, mock_co_emcy_tx_calls); + EXPECT_EQ (0x8250, mock_co_emcy_tx_code); + EXPECT_FALSE (net.pdo_rx[0].rpdo_monitoring); + + // Timer still expired, should not generate EMCY + mock_os_tick_current_result = 151 * 1000; + co_pdo_timer (&net, mock_os_tick_current_result); + EXPECT_EQ (1u, mock_co_emcy_tx_calls); + EXPECT_EQ (0x8250, mock_co_emcy_tx_code); + EXPECT_FALSE (net.pdo_rx[0].rpdo_monitoring); + + // Receive PDO. Rearm timer. + mock_os_tick_current_result = 160 * 1000; + co_pdo_rx (&net, 0x201, pdo[0], sizeof (pdo[0])); + EXPECT_EQ (1u, mock_co_emcy_tx_calls); + + // Receive PDO, timer has not expired + mock_os_tick_current_result = 259 * 1000; + co_pdo_rx (&net, 0x201, pdo[0], sizeof (pdo[0])); + EXPECT_EQ (1u, mock_co_emcy_tx_calls); +}