微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 组网问题,协调器跟终端之间,大神进来看下

组网问题,协调器跟终端之间,大神进来看下

时间:10-02 整理:3721RD 点击:
我的流程是这样的,协调器发一个命令给终端,终端确认命令没错之后,返回温度。但是现在确认之后,温度在终端串口显示没有返回给协调器!void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
这个函数要怎样写才能做到数据返回给协调器?因为确认的时候已经进入这个函数使用了一个case,break之后还会进来吗?我还要再使用这个void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )函数里面另外一个case的

大神还没睡醒吗

@shower.xu

都没人的啊,为什么 ZIGBEE论坛都是这样

1、break之后结束switch这个是C语言基础,肯定进不来。你可以把这个case放在你要接着查询的case上面,去掉break;但是容易出逻辑错误,不推荐。
2、在SampleApp_MessageMSGCB函数里面,你需要根据收到信息的簇号把对应的信息区别开来处理,给你一个我的SampleApp_MessageMSGCB函数作参考

  1. /*********************************************************************
  2. * LOCAL FUNCTIONS
  3. */

  4. /*********************************************************************
  5. * @fn SampleApp_MessageMSGCB
  6. *
  7. * @brief Data message processor callback. This function processes
  8. * any incoming data - probably from other devices. So, based
  9. * on cluster ID, perform the intended action.
  10. *
  11. * @param none
  12. *
  13. * @return none
  14. */
  15. void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
  16. {

  17. uint16 flashTime;
  18. uint8 temp[1+MY_COMMAND_LENTH];
  19. uint8 i;
  20. switch ( pkt->clusterId )
  21. {
  22. case SAMPLEAPP_PERIODIC_CLUSTERID:
  23. // #ifdef ZDO_COORDINATOR //如果是协调器
  24. #ifdef DEBUG_OUT_MSG
  25. HalUARTWrite(0,"Peri Msg\r\n",10);
  26. #endif
  27. // HalUARTWrite(0, &pkt->cmd.Data[0],MY_COMMAND_LENTH); //十六进制发给PC机
  28. // HalUARTWrite(0,"\r\n",2); // 回车换行
  29. // #else
  30. //终端处理函数
  31. // #endif
  32. break;
  33. //
  34. //协调器发送过来的配置信息
  35. case SAMPLEAPP_COOD_TO_END_CLUSTERID:
  36. #ifndef ZDO_COORDINATOR //如果不是协调器
  37. if(pkt->cmd.Data[0]!='#') return;
  38. if((pkt->cmd.Data[1]==CMD_SET_VALUE)||(pkt->cmd.Data[1]==CMD_QUERY_VALUE))
  39. {
  40. temp[0]=sizeof((uint8 *)&pkt->cmd.Data);
  41. for(i=1;i<=MY_COMMAND_LENTH;i++)
  42. temp[i]=pkt->cmd.Data[i-1];
  43. SampleApp_mySETSerialCMD((uint8 *)temp);
  44. }
  45. #endif
  46. break;
  47. //终端发过来给协调器的信息(传感器数据或应答)
  48. case SAMPLEAPP_END_TO_COOD_CLUSTERID:
  49. #ifdef ZDO_COORDINATOR //如果是协调器
  50. if(pkt->cmd.Data[0]!='#') return;
  51. if((pkt->cmd.Data[1]==CMD_RETURN_PACKET)||(pkt->cmd.Data[1]==CMD_QUERY_VALUE))
  52. {
  53. temp[0]=sizeof((uint8 *)&pkt->cmd.Data);
  54. for(i=1;i<=MY_COMMAND_LENTH;i++)
  55. temp[i]=pkt->cmd.Data[i-1];
  56. SampleApp_myReturnSerialCMD((uint8 *)temp);
  57. }
  58. #endif
  59. break;
  60. //协调器发送过来的配置信息
  61. case SAMPLEAPP_POINT_TO_POINT_CLUSTERID:
  62. #ifdef ZDO_COORDINATOR //如果是协调器
  63. #ifdef DEBUG_OUT_MSG
  64. HalUARTWrite(0,"Heat Msg\r\n",10);
  65. /*
  66. temp=pkt->srcAddr.addr.shortAddr; //读出数据包的 16 位短地址
  67. if( pkt->cmd.Data[0]==1 ) //路由器
  68. HalUARTWrite(0,"ROUTER ShortAddr:0x",19); //提示接收到数据
  69. if( pkt->cmd.Data[0]==2 ) //终端
  70. HalUARTWrite(0,"ENDDEVICE ShortAddr:0x",22); //提示接收到数据
  71. //将短地址分解,ASC 码打印
  72. HalUARTWrite(0,&asc_16[temp/4096],1);
  73. HalUARTWrite(0,&asc_16[temp%4096/256],1);
  74. HalUARTWrite(0,&asc_16[temp%256/16],1);
  75. HalUARTWrite(0,&asc_16[temp%16],1);
  76. HalUARTWrite(0,"\n",1); // 回车换行
  77. */
  78. #endif
  79. HalUARTWrite(0, &pkt->cmd.Data[0],MY_COMMAND_LENTH); //十六进制发给PC机
  80. HalUARTWrite(0,"\r\n",2); // 回车换行
  81. #else
  82. //终端处理函数
  83. #endif
  84. break;
  85. case SAMPLEAPP_FLASH_CLUSTERID:
  86. flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
  87. HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
  88. break;
  89. case SAMPLEAPP_UPDATA_CLUSTERID:
  90. SampleApp_myUpdataEvt(pkt->cmd.Data);
  91. break;
  92. }
  93. }

复制代码


3、你没发消息我,@也没成功;别浮躁,多查查资料,看看代码

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top