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.

[参考译文] CC2652R:使用 APS_AddGroup 添加的最后一个组永远不能删除

Guru**** 2465890 points
Other Parts Discussed in Thread: SIMPLELINK-CC13X2-26X2-SDK, Z-STACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1171018/cc2652r-last-group-added-using-aps_addgroup-can-never-be-deleted

器件型号:CC2652R
主题中讨论的其他器件:SIMPLELINK-CC13X2-26X2-SDKZ-STACK

您好!

我们最近针对 ZStack 项目从 SDK 4.40更新为 SDK 6.10、最近的堆栈中也可能会发生这种情况

在测试时、我观察到使用 APS_AddGroup 添加到 APS_GroupsTable 的最后一个组在 powercycle 后始终存在、即使使用 APS_RemoveGroup 或 APS_RemoveAllGroup 删除也是如此。
事实上、使用 APS_RemoveAllGroups 会暂时删除设备、但在执行 powercycle 后组仍然存在

不确定发生这种情况的原因、SDK 4.40中没有发生这种情况

重现的步骤

1.添加组
2.获取组,验证它是否存在
3.删除组
4.获取组,验证它不再存在
5.循环通电
6.获取组,观察添加的组是否存在。 此外、请注意、无论表中的组数如何、都会发生这种情况。

任何建议都将非常有帮助。

谢谢
Akhilesh

P.S.
这些问题可能与在4.40至6.10之间发生的非易失性迁移组有关

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

    您好、Akhilesh、

    您可以参阅 SIMPLELINK-CC13X2-26X2-SDK v5.10中的 ZigBee-872:优化的 ZCL 组表 NV 实施、请参阅 Z-Stack 发行说明。  请确认您 正在使用 Zstackapi_ApsAddGroupReq() 和其他与组相关的 Z-Stack API, 《Z-Stack 用户指南》的“概述”部分提供了一个示例。  此外、请确保在重新编程之前擦除所有 NV 存储器。  如果问题仍然存在、请提供代码摘录、以重新创建问题。

    此致、
    Ryan

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

    您好、Ryan、

    我不使用 Zstackapi_ApsAddGroupReq() ,而是直接调用 APS_AddGroup 函数,这是我一直使用的函数。
    我有用于添加和删除组的自定义 zcl 命令、这些命令与 ZStackapi 的功能基本相同、因此我认为即使调用了 API、问题也会继续存在。

    这是用于添加/删除组的经过略微编辑的代码片段

    void k_addGroups(uint16_t *groupIds, uint8_t numGroups, uint8_t *addStatus)
    {
        for (uint8_t i = 0; i < numGroups; i++)
        {
            //Adding group
            aps_Group_t group = {
                groupIds[i]
                {1, 2, 3}
            };
            addStatus[i] = aps_AddGroup(15, &group, true);
        }
    }
    
    void k_removeGroups(uint16_t *groupIds, uint8_t numGroups, uint8_t *removeStatus)
    {
        for (uint8_t i = 0; i < numGroups; i++)
        {
            //Removing group
            removeStatus[i] = aps_RemoveGroup(15, groupIds[i]);
        }
    }

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

    您好、Ryan、

    这是一个更合适的片段

        Zstackapi_bdbStartCommissioningReq(appServiceTaskId,
                                           &zstack_bdbStartCommissioningReq);
    
        uint8_t existingGroupCount = aps_CountGroups(15);
        uint16_t allGroups[APS_MAX_GROUPS] = {0};
        if(existingGroupCount)
        {
            //aps_RemoveAllGroup(15);
    
            //alternatively
            aps_FindAllGroupsForEndpoint(15, allGroups);
            for(uint8_t i = 0; i < existingGroupCount; i++)
            {
                aps_RemoveGroup(15, allGroups[i]);
            }
        }
        else
        {
            //Adding group
            aps_Group_t group = {100, {1, 2, 3}};
            aps_AddGroup(15, &group, true);
        }

    请添加到 zclInit for ZigBee 任务。

    此代码应在添加和删除 ZigBee 组之间切换。 但在第一次迭代之后、代码始终流入移除组。 另外,apsGroupsTable 还会显示已删除的条目,这些条目仍然存在。

    谢谢
    Akhilesh

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

    感谢代码片段、我将 其放置在 zcl_samplelight.c 的 CONFIG_BTN_RIGHT 处理中 、以确保每次从调试器调用该过程时都能正确观察到。  我遵循了相同的复制步骤、但在移除和关闭电源后添加的组将不再存在。  每个操作的状态将成功返回。  您如何实现循环通电并观察系统中的组状态、以确保您没有错过任何操作?  请注意、进入/退出调试器可能会导致未考虑的意外电源周期。

            if(key == CONFIG_BTN_RIGHT)
            {
                uint8_t existingGroupCount = aps_CountGroups(SAMPLELIGHT_ENDPOINT);
                uint16_t allGroups[APS_MAX_GROUPS] = {0};
                uint8_t status;
                if(existingGroupCount)
                {
                    //aps_RemoveAllGroup(15);
    
                    //alternatively
                    aps_FindAllGroupsForEndpoint(SAMPLELIGHT_ENDPOINT, allGroups);
                    for(uint8_t i = 0; i < existingGroupCount; i++)
                    {
                        status = aps_RemoveGroup(SAMPLELIGHT_ENDPOINT, allGroups[i]);
                    }
                }
                else
                {
                    //Adding group
                    aps_Group_t group = {100, {1, 2, 3}};
                    status = aps_AddGroup(SAMPLELIGHT_ENDPOINT, &group, true);
                }
    
            }

    此致、
    Ryan

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

    您好、Ryan、

    我们在 launchpad 上验证了相同的代码、但仍会再次出现此问题。 这些是已执行的步骤。

    1.在项目 zcl_samplelight、c 的 config_BTN_right 中添加了代码片段。
    a.4.40、CCS 编译器->问题不可重现
    B.6.10、CCS 编译器->问题是可重现的
    C.6.30、Clang 编译器->问题可重现。

    如果器件未以任何方式配对、则这些组不会持续存在、因此我们已将此器件(路由器)与 ZigBee 集线器配对。

    实时设备中的电源循环通过 SysCtrlSystemReset()完成;
    在调试时、我使用调试器中的"Board Reset"选项。

    另一个观察结果是、当调用 aps_removeGroup (或 Zstackapi_ApsRemoveGroupReq)时、具有此问题的组将返回状态为 false、但会从 apsGroupTable 中删除。
    但是、如果我确实执行 APS_GroupsRestoreFromNV、则该组返回。 这似乎是组项目删除成功、但相同的 NV 写入失败、导致状态返回为 false。

    您能否分享 APS_removeGroup 返回 false 的可能性、因为无论组存在还是不存在、它返回 true、因此其他一些情况对我来说似乎都失败

    谢谢
    Akhilesh

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

    您好、Akhilesh、

    感谢您提供有关如何重现问题的其他信息。  我已确认这是预构建的 Z-Stack 库中的问题、并提交了错误通知单、以便 软件开发可以解决即将发布的 SDK 版本中的问题。  我将通过私人邮件与您联系、以了解后续步骤。

    此致、
    Ryan