Z-Stack Home中发送端的命令或请求是如何对应接收端的回调函数的
我在学习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 );