zcl_SampleSw_event_loop
{
case ZDO_CB_MSG ZDO层数据
case:ZCL_INCOMING_MSG 协调器发送ZCL_CMD_READ/WRITE终端接收到不是应该进这个case吗?现在不进是什么原因呢?
case:KEY_CHANE 按键处理是会进的
}
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.
zcl_SampleSw_event_loop
{
case ZDO_CB_MSG ZDO层数据
case:ZCL_INCOMING_MSG 协调器发送ZCL_CMD_READ/WRITE终端接收到不是应该进这个case吗?现在不进是什么原因呢?
case:KEY_CHANE 按键处理是会进的
}
是的。zcl层通过在static CONST zclCmdItems_t zclCmdTable[] 中都处理掉了。
那zha的例程中为什么在app中还在这个函数中判断在zcl_HandleExternal中给app发送消息呢,在zclSampleSw_ProcessIncomingMsg中主要是一些rsp的处理。
我要用这个功能的原因是通过协调器给终端发送一些私有簇和私有属性后,zcl底层会自动更新属性表。但在终端中希望属性更新后立刻执行相应的动作,所以希望在写属性之后的函数中处理执行。难道只能在app中轮询这些属性是否变化再处理吗?
此外zha规定的一些簇的属性和server received command 不是一一对应的(例如开关簇的cmd (0,1,2)和开关属性id(0000)是对应存在,但多数不是对应的),只有server received command 才能在对应的回调函数中处理(只有存在cmd的才能通过zclGeneral_RegisterCmdCallbacks注册回调函数),那么属性更新后要执行动作应该在哪里处理呢?
static void zclSampleSw_ProcessIncomingMsg( zclIncomingMsg_t *pInMsg )
{
switch ( pInMsg->zclHdr.commandID )
{
#ifdef ZCL_READ
case ZCL_CMD_READ_RSP:
zclSampleSw_ProcessInReadRspCmd( pInMsg );
break;
#endif
#ifdef ZCL_WRITE
case ZCL_CMD_WRITE_RSP:
zclSampleSw_ProcessInWriteRspCmd( pInMsg );