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.

Z-Stack Home中发送端的命令或请求是如何对应接收端的回调函数的

Other Parts Discussed in Thread: Z-STACK

我在学习Z-Stack Home1.2.1协议栈时,有如下两个问题,望各位指教,谢谢!

1. 不太明白发送端的命令或请求是如何对应接收端的回调函数的。例如:开关节点执行 zclGeneral_SendOnOff_CmdToggle函数,发送开关命令到灯节点,灯节点调用回调函数zclSampleLight_CmdCallbacks执行开关动作。我知道回调函数在zclSampleSw_Init()中都进过注册的,但是不明白这两个不同节点的函数之间是怎么对应的,两个函数之间是如何定义指向关系的?

2. 如果我要自定义两个设备之间的请求和响应的回调函数,协议栈中该如何修改?两个函数该如何关联,才能正确响应?

  • 你好,

    1, zclGeneral_SendOnOff_CmdToggle函数是给目的节点发送了一个ZCL的命令,指定目的地址 目的的End Point和cluster,cluster的操作方向,以及ON/OFF的命令号。

    那么在接收端,刚开始注册的callback函数zclGeneral_RegisterCmdCallbacks

    里面会把你ZCL的命令注册给

    // Register as a ZCL Plugin
    if ( zclGenPluginRegisted == FALSE )
    {
    zcl_registerPlugin( ZCL_CLUSTER_ID_GEN_BASIC,
    ZCL_CLUSTER_ID_GEN_MULTISTATE_VALUE_BASIC,
    zclGeneral_HdlIncoming );

    }

    当有这个命令来的时候,会去到zclGeneral_HdlIncoming函数里面做处理

    在zclGeneral_HdlInSpecificCommands会去找对应的End Point和Cluster,

    在对应的Cluster下面会去找对应的command

    zclGeneral_ProcessInOnOff( zclIncoming_t *pInMsg,
    zclGeneral_AppCallbacks_t *pCBs )

    处理命令的最终函数就是用注册的callback函数来处理的

     pCBs->pfnOnOff( pInMsg->hdr.commandID );

    2,按照上面的逻辑你可以自己去加你想实现的,或者在已有的函数上,把你自己的东西加进去就可以了

    不知道你想实现的功能是什么。

    谢谢


  • 感谢VV的回复,

    我想实现的功能是:协调器发送一个广播指令到网络中所有的灯节点(设备类型为路由器)。灯节点收到这个广播指令后,将自身的短地址和灯的开关状态发送给协调器,这样协调器就可以采集到当前网络中所有灯的状态,同时也可以根据采集到的灯节点的短地址发送指令控制任何一个灯。我想实现这个功能所以就有了上述提问。

    请问在Z-Stack Home 1.2.1中有相同或者类似的功能吗?

    谢谢!

  • 用ZCL Foundation中的Read attributes命令广播来读light的ONOFF Cluster attributes是不是可以实现你要的功能啊

  • 具体该调用哪些函数和指令,流程是怎样的啊?

  • extern ZStatus_t zcl_SendRead( uint8 srcEP, afAddrType_t *dstAddr,
    uint16 realClusterID, zclReadCmd_t *readCmd,
    uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );

x 出现错误。请重试或与管理员联系。