diff --git a/src/cli/README.md b/src/cli/README.md index dd58aa4f4..d990b5465 100644 --- a/src/cli/README.md +++ b/src/cli/README.md @@ -567,20 +567,20 @@ Send an ICMPv6 Echo Request. ### pollperiod -Get the data poll period of sleepy end device +Get the customized data poll period of sleepy end device (seconds). Only for certification test ```bash > pollperiod -240 +0 Done ``` ### pollperiod \\ -Set the data poll period for sleepy end device +Set the customized data poll period for sleepy end device (seconds). Only for certification test ```bash -> pollperiod 240 +> pollperiod 10 Done ``` diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index 1ba605312..cca3cb1a8 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -1040,12 +1040,12 @@ void Interpreter::ProcessPollPeriod(int argc, char *argv[]) if (argc == 0) { - sServer->OutputFormat("%d\r\n", otGetPollPeriod()); + sServer->OutputFormat("%d\r\n", (otGetPollPeriod() / 1000)); // ms->s } else { SuccessOrExit(error = ParseLong(argv[0], value)); - otSetPollPeriod(static_cast(value)); + otSetPollPeriod(static_cast(value * 1000)); // s->ms } exit: diff --git a/src/core/openthread.cpp b/src/core/openthread.cpp index 1773b1bfb..5d81e95f0 100644 --- a/src/core/openthread.cpp +++ b/src/core/openthread.cpp @@ -793,12 +793,12 @@ const char *otGetVersionString(void) uint32_t otGetPollPeriod() { - return sThreadNetif->GetMeshForwarder().GetPollPeriod(); + return sThreadNetif->GetMeshForwarder().GetAssignPollPeriod(); } void otSetPollPeriod(uint32_t aPollPeriod) { - sThreadNetif->GetMeshForwarder().SetPollPeriod(aPollPeriod); + sThreadNetif->GetMeshForwarder().SetAssignPollPeriod(aPollPeriod); } ThreadError otEnable(void) diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 49d24a0d0..d9a58a9a5 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -66,7 +66,7 @@ MeshForwarder::MeshForwarder(ThreadNetif &aThreadNetif): { mFragTag = static_cast(otPlatRandomGet()); mPollPeriod = 0; - mPollPeriodAssigned = false; + mAssignPollPeriod = 0; mSendMessage = NULL; mSendBusy = false; mEnabled = false; @@ -573,29 +573,29 @@ void MeshForwarder::SetRxOnWhenIdle(bool aRxOnWhenIdle) } } +void MeshForwarder::SetAssignPollPeriod(uint32_t aPeriod) +{ + mAssignPollPeriod = aPeriod; +} + +uint32_t MeshForwarder::GetAssignPollPeriod() +{ + return mAssignPollPeriod; +} + void MeshForwarder::SetPollPeriod(uint32_t aPeriod) { - if (!mNetif.IsUp()) + if (mPollPeriod != aPeriod) { - mPollPeriodAssigned = true; - mPollPeriod = aPeriod; - ExitNow(); + if (mAssignPollPeriod != 0 && aPeriod != (OPENTHREAD_CONFIG_ATTACH_DATA_POLL_PERIOD)) + { + mPollPeriod = mAssignPollPeriod; + } + else + { + mPollPeriod = aPeriod; + } } - - if (mPollPeriodAssigned && mMac.GetRxOnWhenIdle() == false) - { - mPollTimer.Start(mPollPeriod); - ExitNow(); - } - else if (mMac.GetRxOnWhenIdle() == false && mPollPeriod != aPeriod) - { - mPollTimer.Start(aPeriod); - } - - mPollPeriod = aPeriod; - -exit: - return; } uint32_t MeshForwarder::GetPollPeriod() diff --git a/src/core/thread/mesh_forwarder.hpp b/src/core/thread/mesh_forwarder.hpp index f3cf6a150..3ed239c77 100644 --- a/src/core/thread/mesh_forwarder.hpp +++ b/src/core/thread/mesh_forwarder.hpp @@ -132,6 +132,22 @@ public: */ void SetRxOnWhenIdle(bool aRxOnWhenIdle); + /** + * This method sets customized Data Poll period. Only for certification test + * + * @param[in] aPeriod The Data Poll period in milliseconds. + * + */ + void SetAssignPollPeriod(uint32_t aPeriod); + + /** + * This method gets the customized Data Poll period. Only for certification test + * + * @returns The Data Poll period in milliseconds. + * + */ + uint32_t GetAssignPollPeriod(void); + /** * This method sets the Data Poll period. * @@ -217,7 +233,7 @@ private: uint16_t mFragTag; uint16_t mMessageNextOffset; uint32_t mPollPeriod; - bool mPollPeriodAssigned; + uint32_t mAssignPollPeriod; ///< only for certification test Message *mSendMessage; Mac::Address mMacSource;