diff --git a/examples/platforms/simulation/radio.c b/examples/platforms/simulation/radio.c index 45fefc4a6..a92841e43 100644 --- a/examples/platforms/simulation/radio.c +++ b/examples/platforms/simulation/radio.c @@ -679,7 +679,7 @@ void radioSendMessage(otInstance *aInstance) #endif // OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT && OPENTHREAD_CONFIG_TIME_SYNC_ENABLE #if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE - if (sCslPeriod > 0) + if (sCslPeriod > 0 && !sTransmitFrame.mInfo.mTxInfo.mIsARetx) { otMacFrameSetCslIe(&sTransmitFrame, (uint16_t)sCslPeriod, getCslPhase()); } diff --git a/tests/scripts/thread-cert/pktverify/consts.py b/tests/scripts/thread-cert/pktverify/consts.py index 31f142cc1..114440a59 100644 --- a/tests/scripts/thread-cert/pktverify/consts.py +++ b/tests/scripts/thread-cert/pktverify/consts.py @@ -352,6 +352,8 @@ CSL_DEFAULT_PERIOD = 3125 # 0.5s, 3125 in units of ten symbols CSL_DEFAULT_PERIOD_IN_SECOND = 0.5 US_PER_TEN_SYMBOLS = 160 CSL_IE_ID = 0x1a +CSL_DEFAULT_TIMEOUT = 30 +CSL_DEFAULT_CHANNEL = 12 # Thread Version TLV value THREAD_VERSION_1_2 = 3 diff --git a/tests/scripts/thread-cert/v1_2_test_csl_transmission.py b/tests/scripts/thread-cert/v1_2_test_csl_transmission.py index 1b99ef162..f0c46e4e9 100755 --- a/tests/scripts/thread-cert/v1_2_test_csl_transmission.py +++ b/tests/scripts/thread-cert/v1_2_test_csl_transmission.py @@ -31,14 +31,11 @@ import unittest import mle import thread_cert +from pktverify import consts LEADER = 1 SSED_1 = 2 -CSL_PERIOD = 500 * 6.25 # 500ms -CSL_TIMEOUT = 30 # 30s -CSL_CHANNEL = 12 - class SSED_CslTransmission(thread_cert.TestCase): TOPOLOGY = { @@ -55,8 +52,8 @@ class SSED_CslTransmission(thread_cert.TestCase): def test(self): - self.nodes[SSED_1].set_csl_period(CSL_PERIOD) - self.nodes[SSED_1].set_csl_timeout(CSL_TIMEOUT) + self.nodes[SSED_1].set_csl_period(consts.CSL_DEFAULT_PERIOD) + self.nodes[SSED_1].set_csl_timeout(consts.CSL_DEFAULT_TIMEOUT) self.nodes[SSED_1].get_csl_info() @@ -69,24 +66,26 @@ class SSED_CslTransmission(thread_cert.TestCase): self.assertEqual(self.nodes[SSED_1].get_state(), 'child') print('SSED rloc:%s' % self.nodes[SSED_1].get_rloc()) - self.assertTrue(self.nodes[LEADER].ping(self.nodes[SSED_1].get_rloc())) + # Set ping timeout as two CSL periods. + timeout = 2 * consts.CSL_DEFAULT_PERIOD_IN_SECOND + self.assertTrue(self.nodes[LEADER].ping(self.nodes[SSED_1].get_rloc(), timeout=timeout)) self.simulator.go(5) ssed_messages = self.simulator.get_messages_sent_by(SSED_1) msg = ssed_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST) msg.assertMleMessageDoesNotContainTlv(mle.CslChannel) - self.nodes[SSED_1].set_csl_channel(CSL_CHANNEL) + self.nodes[SSED_1].set_csl_channel(consts.CSL_DEFAULT_CHANNEL) self.simulator.go(1) ssed_messages = self.simulator.get_messages_sent_by(SSED_1) msg = ssed_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST) msg.assertMleMessageContainsTlv(mle.CslChannel) - self.assertTrue(self.nodes[LEADER].ping(self.nodes[SSED_1].get_rloc())) + self.assertTrue(self.nodes[LEADER].ping(self.nodes[SSED_1].get_rloc(), timeout=timeout)) self.simulator.go(5) self.nodes[SSED_1].set_csl_channel(0) self.simulator.go(1) - self.assertTrue(self.nodes[LEADER].ping(self.nodes[SSED_1].get_rloc())) + self.assertTrue(self.nodes[LEADER].ping(self.nodes[SSED_1].get_rloc(), timeout=timeout)) self.simulator.go(5) ssed_messages = self.simulator.get_messages_sent_by(SSED_1) @@ -94,7 +93,7 @@ class SSED_CslTransmission(thread_cert.TestCase): msg.assertMleMessageDoesNotContainTlv(mle.CslChannel) self.nodes[SSED_1].set_csl_period(0) - self.assertFalse(self.nodes[LEADER].ping(self.nodes[SSED_1].get_rloc())) + self.assertFalse(self.nodes[LEADER].ping(self.nodes[SSED_1].get_rloc(), timeout=timeout)) self.simulator.go(2) self.nodes[SSED_1].set_pollperiod(1000)