组网问题,协调器跟终端之间,大神进来看下
时间:10-02
整理:3721RD
点击:
我的流程是这样的,协调器发一个命令给终端,终端确认命令没错之后,返回温度。但是现在确认之后,温度在终端串口显示没有返回给协调器!void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
这个函数要怎样写才能做到数据返回给协调器?因为确认的时候已经进入这个函数使用了一个case,break之后还会进来吗?我还要再使用这个void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )函数里面另外一个case的
3、你没发消息我,@也没成功;别浮躁,多查查资料,看看代码
这个函数要怎样写才能做到数据返回给协调器?因为确认的时候已经进入这个函数使用了一个case,break之后还会进来吗?我还要再使用这个void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )函数里面另外一个case的
大神还没睡醒吗
@shower.xu
都没人的啊,为什么 ZIGBEE论坛都是这样
1、break之后结束switch这个是C语言基础,肯定进不来。你可以把这个case放在你要接着查询的case上面,去掉break;但是容易出逻辑错误,不推荐。
2、在SampleApp_MessageMSGCB函数里面,你需要根据收到信息的簇号把对应的信息区别开来处理,给你一个我的SampleApp_MessageMSGCB函数作参考
- /*********************************************************************
- * LOCAL FUNCTIONS
- */
- /*********************************************************************
- * @fn SampleApp_MessageMSGCB
- *
- * @brief Data message processor callback. This function processes
- * any incoming data - probably from other devices. So, based
- * on cluster ID, perform the intended action.
- *
- * @param none
- *
- * @return none
- */
- void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
- {
- uint16 flashTime;
- uint8 temp[1+MY_COMMAND_LENTH];
- uint8 i;
- switch ( pkt->clusterId )
- {
- case SAMPLEAPP_PERIODIC_CLUSTERID:
- // #ifdef ZDO_COORDINATOR //如果是协调器
- #ifdef DEBUG_OUT_MSG
- HalUARTWrite(0,"Peri Msg\r\n",10);
- #endif
- // HalUARTWrite(0, &pkt->cmd.Data[0],MY_COMMAND_LENTH); //十六进制发给PC机
- // HalUARTWrite(0,"\r\n",2); // 回车换行
- // #else
- //终端处理函数
- // #endif
- break;
- //
- //协调器发送过来的配置信息
- case SAMPLEAPP_COOD_TO_END_CLUSTERID:
- #ifndef ZDO_COORDINATOR //如果不是协调器
- if(pkt->cmd.Data[0]!='#') return;
- if((pkt->cmd.Data[1]==CMD_SET_VALUE)||(pkt->cmd.Data[1]==CMD_QUERY_VALUE))
- {
- temp[0]=sizeof((uint8 *)&pkt->cmd.Data);
- for(i=1;i<=MY_COMMAND_LENTH;i++)
- temp[i]=pkt->cmd.Data[i-1];
- SampleApp_mySETSerialCMD((uint8 *)temp);
- }
- #endif
- break;
- //终端发过来给协调器的信息(传感器数据或应答)
- case SAMPLEAPP_END_TO_COOD_CLUSTERID:
- #ifdef ZDO_COORDINATOR //如果是协调器
- if(pkt->cmd.Data[0]!='#') return;
- if((pkt->cmd.Data[1]==CMD_RETURN_PACKET)||(pkt->cmd.Data[1]==CMD_QUERY_VALUE))
- {
- temp[0]=sizeof((uint8 *)&pkt->cmd.Data);
- for(i=1;i<=MY_COMMAND_LENTH;i++)
- temp[i]=pkt->cmd.Data[i-1];
- SampleApp_myReturnSerialCMD((uint8 *)temp);
- }
- #endif
- break;
- //协调器发送过来的配置信息
- case SAMPLEAPP_POINT_TO_POINT_CLUSTERID:
- #ifdef ZDO_COORDINATOR //如果是协调器
- #ifdef DEBUG_OUT_MSG
- HalUARTWrite(0,"Heat Msg\r\n",10);
- /*
- temp=pkt->srcAddr.addr.shortAddr; //读出数据包的 16 位短地址
- if( pkt->cmd.Data[0]==1 ) //路由器
- HalUARTWrite(0,"ROUTER ShortAddr:0x",19); //提示接收到数据
- if( pkt->cmd.Data[0]==2 ) //终端
- HalUARTWrite(0,"ENDDEVICE ShortAddr:0x",22); //提示接收到数据
- //将短地址分解,ASC 码打印
- HalUARTWrite(0,&asc_16[temp/4096],1);
- HalUARTWrite(0,&asc_16[temp%4096/256],1);
- HalUARTWrite(0,&asc_16[temp%256/16],1);
- HalUARTWrite(0,&asc_16[temp%16],1);
- HalUARTWrite(0,"\n",1); // 回车换行
- */
- #endif
- HalUARTWrite(0, &pkt->cmd.Data[0],MY_COMMAND_LENTH); //十六进制发给PC机
- HalUARTWrite(0,"\r\n",2); // 回车换行
- #else
- //终端处理函数
- #endif
- break;
- case SAMPLEAPP_FLASH_CLUSTERID:
- flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
- HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
- break;
- case SAMPLEAPP_UPDATA_CLUSTERID:
- SampleApp_myUpdataEvt(pkt->cmd.Data);
- break;
- }
- }
3、你没发消息我,@也没成功;别浮躁,多查查资料,看看代码