谷动谷力

标题: NXP ZigBee 3.0 软件开发 - 在 EndDevice 使用 Group 和 Scenes Server [打印本页]

作者: 鸣涧    时间: 2022-11-25 22:56
标题: NXP ZigBee 3.0 软件开发 - 在 EndDevice 使用 Group 和 Scenes Server
NXP ZigBee 3.0 软件开发 - 在 EndDevice 使用 Group 和 Scenes Server

调试原因

JN-AN-1219-Zigbee-3-0-Controller-and-Switch 例程是 ZigBee End Device 的 demo 工程,以 DimmerSwitch 为例,一般注册端点会作为 Scenes Client 和 Group Client。
但是也有将 End Device 作为 Scenes Server 和 Group Server 的情况,本文记录如何修改代码,实现这个需求。( Scenes Cluster 一般是绑定 Group Cluster 的,所以放到一起实现 )

代码修改

···
      
   /*Recommended Optional client clusters */
   #if (defined CLD_SCENES) && (defined SCENES_CLIENT)
       tsZCL_ClusterInstance sScenesClient;
   #endif

#if (defined CLD_SCENES) && (defined SCENES_SERVER)
       tsZCL_ClusterInstance sScenesServer; //add
#endif

   #if (defined CLD_GROUPS) && (defined GROUPS_CLIENT)
       tsZCL_ClusterInstance sGroupsClient;
   #endif

#if (defined CLD_GROUPS) && (defined GROUPS_SERVER)
       tsZCL_ClusterInstance sGroupsServer; //add
#endif

···

} tsZLO_DimmerSwitchDeviceClusterInstances __attribute__ ((aligned(4)));

/* Holds everything required to create an instance of a dimmer switch */
typedef struct
{
···
   
   /* Recommended Optional client clusters */
   #if (defined CLD_SCENES) && (defined SCENES_CLIENT)
       /* Scenes Cluster - Client */
       tsCLD_Scenes sScenesClientCluster;
       tsCLD_ScenesCustomDataStructure sScenesClientCustomDataStructure;
   #endif

#if (defined CLD_SCENES) && (defined SCENES_SERVER) //add
       /* Scenes Cluster - Server */
       tsCLD_Scenes sScenesServerCluster;
       tsCLD_ScenesCustomDataStructure sScenesServerCustomDataStructure;
   #endif

   #if (defined CLD_GROUPS) && (defined GROUPS_CLIENT)
       /* Groups Cluster - Client */
       tsCLD_Groups sGroupsClientCluster;
       tsCLD_GroupsCustomDataStructure sGroupsClientCustomDataStructure;
   #endif

#if (defined CLD_GROUPS) && (defined GROUPS_SERVER) //add
       /* Groups Cluster - Server */
       tsCLD_Groups sGroupsServerCluster;
       tsCLD_GroupsCustomDataStructure sGroupsServerCustomDataStructure;
#endif
   
   ···
      
} tsZLO_DimmerSwitchDevice;
App_scenes.c 和 App_scenes.h
复制 JN-AN-1218-Zigbee-3-0-Light-Bulb\Common_Light\Source\app_scenes.c 和 app_scenes.h 到 JN-AN-1219-Zigbee-3-0-Controller-and-Switch\Common\Source 目录
// 将所有 sLight 替换成 sSwitch
PDM_IDs.h
// 定义保存 scenes data 的 pdm id
#define PDM_ID_APP_SCENES_DATA      (0xA101)
App_zlo_switch_node.c
// 新增 include
#include "app_scenes.h"

PUBLIC void APP_vInitialiseNode(void)
{
    ···
        
    #ifdef CLD_OTA
        vLoadOTAPersistedData();
    #endif

    /* Restore any application data previously saved to flash */
    uint16 u16ByteRead;
    PDM_eReadDataFromRecord(PDM_ID_APP_ZLO_SWITCH,
                            &sDeviceDesc,
                            sizeof(tsDeviceDesc),
                            &u16ByteRead);

    PDM_eReadDataFromRecord(PDM_ID_APP_CONVERT,
                            &sConvertR21toR22,
                            sizeof(tsConvertR21toR22),
                            &u16ByteRead);

    vLoadScenesNVM();   // 在 APP_vInitialiseNode 中调用 vLoadScenesNVM();
   
    ···
}
makefile
# Application Source files
···
# 新增编译 app_scenes.c
APPSRC += app_scenes.c
···









欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2