zigbee组网几个重要函数

SampleApp_ProcessEvent 事件处理函数

while ( MSGpkt )//while循环,根据事件号来判断发生了哪些事件并执行相应的函数
    {
      switch ( MSGpkt->hdr.event )
      {......

例如:

case AF_INCOMING_MSG_CMD:
          SampleApp_MessageMSGCB( MSGpkt );
          break;
/*******************
协调器接收到传感器终端发送的信号,产生AF_INCOMING_MSG_CMD事件,协调器进入
SampleApp_MessageMSGCB( MSGpkt )函数
*********************/

void SampleApp_SendPeriodicMessage( void )(周期性发送函数)

{
  uint8 data[10]={'0','1','2','3','4','5','6','7','8','9'};//自定义数据
  if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
                       SAMPLEAPP_PERIODIC_CLUSTERID,//clusterId号,若有多个终端同时向协调器发送数据,可以设置不同的clusterId,进行区分。
                       10,//字节数
                       data,//指针头
                       &SampleApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    // Error occurred in request to send.
  }
}

SAMPLEAPP_PERIODIC_CLUSTERID :clusterId号,若有多个终端同时向协调器发送数据,可以设置不同的clusterId,进行区分。
10:发送的字节数
data//发送内容的指针头

也可以自己创建函数并定义clusterId(在sampleapp.h中定义):
for example,我们定义一个点播函数,clusterId=SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light

/****光敏传感器终端向协调器点播通信函数**********/
void SampleApp_SendPointToPointMessage( void )
{
   uint8 L;//光敏信号
   
  /***************************/
  //light
  /***************************/
  if(LIGHT==1)
  { 
    L=1;  //有光线
    HalUARTWrite(0,"no light\n",9);     //串口
    HalLcdWriteString( "No Light", HAL_LCD_LINE_3 ); //LCD
  }  
  else 
  {
    L=0;  //没有光线
    HalUARTWrite(0,"got Light\n",10);       //串口
    HalLcdWriteString( "Got Light", HAL_LCD_LINE_3 );//LCD
  }
  if ( AF_DataRequest( &Point_To_Point_DstAddr,
                       &SampleApp_epDesc,
                       SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light,
                       1,
                       &L,
                       &SampleApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    // Error occurred in request to send.
  }

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt (接收数据进行处理)

上文提到,在SampleApp_ProcessEvent函数中,若接收到事件AF_INCOMING_MSG_CMD的产生,说明协调器接收到了终端发送的信号,并进入 函数SampleApp_MessageMSGCB( MSGpkt ),进行处理

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
 uint16 flashTime;

 switch ( pkt->clusterId )
 {
   case SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light://接收到光敏传感器数据
     if(pkt->cmd.Data[0])//若第一位数据是1,即光强较弱
       HalUARTWrite(0,"no light\n",9);   //没光线
     else 
       HalUARTWrite(0,"got light\n",10); //有光线  
   break;
 }
}

同样,SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light表明是光敏传感器发送的数据,pkt->cmd.Data[]存放从终端接收到的数据,若从终端接收到了1,说明光照较弱,此时协调器向串口发送“no light”;反之,则发送“got light”

你可能感兴趣的:(zigbee组网几个重要函数)