This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Changing zstack's rxOnWhenIdle at run time

Hello,


In zStack, is it possible to change the value of rxOnWhenIdle while an end-device is running? I would like to be able to set rxOnWhenIdle to true temporarily to establish a high speed communications channel then change it back to resume regular operation.


Thanks

  • You can use the following to enable or disable the rxOnWhenIdle,

    tmp = true;
    ZMacSetReq( ZMacRxOnIdle, &tmp ); // Set receiver always on
    or,
    tmp = false;
    ZMacSetReq( ZMacRxOnIdle, &tmp ); // Set rxOnWhenIdle=FALSE
    note that when the rxOnWhenIdle is set to true, the end device will not enter sleep mode.

    But changing the setting for rxOnWhenIdle this will not change how the parent of the child sends the message to the end device. The parent of a sleepy end device (i.e. it was joined as rxOnWhenIdle = FALSE device when it associated to the network) will still buffer the message and the end device will need to send a poll message to retrieve the message. You can change the poll rate using the API NLME_SetPollRate() to increase/decrease the poll rate of the end device.

    Hope this helps.

  • Suyash Jain said:
    The parent of a sleepy end device (i.e. it was joined as rxOnWhenIdle = FALSE device when it associated to the network) will still buffer the message and the end device will need to send a poll message to retrieve the message.


    So, just to be clear, there is no way to then make the parent recognize that it can now send messages directly to the end-device?

    Thanks

  • Yes, there is no way to then make the parent recognize that it can now send messages directly to the end-device.
  • i wish TI can develop this function that parent can recognize the change of end-device, it will be very useful.