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.

[参考译文] CC2651P3:无法修改 NWK_INDIRECTIVE_MSG_TIMEOUT

Guru**** 2463330 points
Other Parts Discussed in Thread: SYSCONFIG, Z-STACK, CC2651P3

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1218844/cc2651p3-unable-to-modify-nwk_indirect_msg_timeout

器件型号:CC2651P3
Thread 中讨论的其他器件:SysConfigZ-stack

我正在尝试将 NWK_INDIRECTIVE_MSG_TIMEOUT 从默认值7秒更改为30秒。

首先、我更改了 SysConfig Z-Stack -> Advanced -> Routing 设置中的值。 这更改了 ti_ZStack_config.h 中这一行的内容:
#define NWK_INDIRECT MSG_TIMEOUT 30.

NWK_INDIRECT _MSG_TIMEOUT 被 zglobals.c 中的以下初始化代码引用:
uint8_t zgIndirectMsgTimeout = NWK_INDIRT_MSG_TIMEOUT;

我可以看到 zgIndirectMsgTimeout 在这里初始化为(30)、但后来一些库代码将它改回(7)。

经过一些研究,我发现 zgIndirectMsgTimeout 被系统配置变量(Zstackapi_sysConfigReadReq ()/ Zstackapi_sysConfigWriteReq ())覆盖。 因此,我添加了一些代码来使用 Zstackapi_sysConfigWriteReq ()将 indirectMsgTimeout 变量设置为(30)。 现在、zgIndirectMsgTimeout 被初始化为(30)并在操作期间保持为(30)。

但是、即使 zgIndirectMsgTimeout 为(30)、器件(协调器)的行为就像此值为(7)一样。 例如、如果我为休眠终端设备排队等待消息、则消息将在消息排队5秒后发送 DataRequest 时发送至设备、而如果终端设备在消息排队10秒后发送 DataRequest、则消息将被丢弃。

请告知如何更改间接消息超时。

我正在使用 zc_SampleApp_LP_CC2651P3_tirtos7_ticlang (simplelink_cc13xx_cc26xx_SDK_6_41_00_17)。

谢谢。
Andy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Andy、您好!

    您可以在编译时通过 SysConfig -> Z-Stack -> Advanced -> Routing -> Network Indirect Message Timeout 更改 NWK_INDIRECT _MSG_TIMEOUT。  另外、您是否将 ZStack_sysConfigWriteREQ_t 的 has_indirtMsgTimeout 设置 为真?  可以  在 zstacktask.c 中调试 processSysConfigWriteReq 的是否(pPtr->pREQ->has_indirectMsgTimeout),以确认 Zstackapi_sysConfigWriteReq 按预期工作。  NWK 间接消息超时也存在于 _NIB.TransactionPersistenceTime 和 ZCD_NV_INDIRTE_MSG_TIMEOUT 中。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    我将说明您的回答的每个部分。

    您可以在编译时通过 SysConfig -> Z-Stack -> Advanced -> Routing -> Network Indirect Message Timeout 更改 NWK_INDIRECT _MSG_TIMEOUT。

    实际上不,正如我在原来的帖子中解释的,你不能。 我将引用我在下面的帖子:

    ——

    首先、我更改了 SysConfig Z-Stack -> Advanced -> Routing 设置中的值。 这更改了 ti_ZStack_config.h 中这一行的内容:
    #define NWK_INDIRECT MSG_TIMEOUT 30.

    NWK_INDIRECT _MSG_TIMEOUT 被 zglobals.c 中的以下初始化代码引用:
    uint8_t zgIndirectMsgTimeout = NWK_INDIRT_MSG_TIMEOUT;

    我可以看到 zgIndirectMsgTimeout 在这里初始化为(30)、但后来一些库代码将它改回(7)。

    经过一些研究,我发现 zgIndirectMsgTimeout 被系统配置变量(Zstackapi_sysConfigReadReq ()/ Zstackapi_sysConfigWriteReq ())覆盖。 因此,我添加了一些代码来使用 Zstackapi_sysConfigWriteReq ()将 indirectMsgTimeout 变量设置为(30)。 现在、zgIndirectMsgTimeout 被初始化为(30)并在操作期间保持为(30)。

    ——

    另外、您是否将 ZStack_sysConfigWriteREQ_t 的 has_indirectMsgTimeout 设置 为真?  可以  在 zstacktask.c 中调试 processSysConfigWriteReq 的是否(pPtr->pREQ->has_indirectMsgTimeout),以确认 Zstackapi_sysConfigWriteReq 按预期工作。

    是的、当然我将  ZStack_sysConfigWriteREQ_t 的 Has_indirtMsgTimeout 设置 为 true。 如果我没有、那么我就不会读回我写入的同一个值、并且 zgIndirectMsgTimeout 将被库代码覆盖到(7)。  查看我上面引用的文本。 由于我正在读回我写入的值(30)、因此我的写入必须已成功。

     NWK 间接消息超时也存在于 _NIB.TransactionPersistenceTime 和 ZCD_NV_INDIRECT_MSG_TIMEOUT 中 。

    在我的系统 _NIB.TransactionPersistenceTime 是(7)和 zgIndirectMsgTimeout 是(30)。 因此、我假设这意味着 未使用 System Config 变量 indirectMsgTimeout、也可能 使用_NIB.TransactionPersistenceTime。 在我看来、我可以  使用修改 TransactionPersistenceTime  

    uint16_t 值= 30;
    NLME_SetRequest (nwkTransactionPersistenceTime、0、&value);

    不过、我是从读取值开始的

    NLME_GetRequest (nwkTransactionPersistenceTime、0、&value);

    读取的值为0xbe1e (_NIB.TransactionPersistenceTime 为16位值)。

    因此、我需要读取7、而是读取0xbe1e。 因此、我不确定如何从这里继续。

    谢谢。
    Andy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    _NIB 是一个全局变量,因此可以 在应用程序内设置_NIB.TransactionPersistenceTime = 30。

    此致、
    Ryan