zigbee网蜂cc2530组播实验,基于SampleApp例程

1.在文件全局建立对象,定义传输编号:

afAddrType_t Group_DstAddr;//网蜂组播通信定义
aps_Group_t WEBEE_Group;//分组内容
#define WEBEE_GROUP_CLUSTERID  4 //组播传输编号

2.注册端点描述符 (TI demo程序自带)

在void SampleApp_Init( uint8 task_id );

  SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;
  SampleApp_epDesc.task_id = &SampleApp_TaskID;
  SampleApp_epDesc.simpleDesc
            = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;
  SampleApp_epDesc.latencyReq = noLatencyReqs;


3.通讯组定义,即对Group_DstAddr对象赋值

  Group_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;
  Group_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
  Group_DstAddr.addr.shortAddr = WEBEE_GROUP;


4.定义通讯组地址、名称,将节点加入组,即对WEBEE_Group对象赋值

WEBEE_Group.ID = 0x0003;
  osal_memcpy( WEBEE_Group.name, "Group 3", 7 );
  aps_AddGroup( SAMPLEAPP_ENDPOINT, &WEBEE_Group );//将节点加入组

5.定义发送函数

/*********************************************************************
 *  组播通讯实验发送函数
 *  传入参数:无
 *  返回值:无
 */
void SampleApp_SendGroupMessage( void )
{
  char data[] = "abcdefghi";
  if( AF_DataRequest( &Group_DstAddr,
                      &SampleApp_epDesc,
                      WEBEE_GROUP_CLUSTERID,//<span style="color:#ff0000;">传输编号,发送和接收必须一致,否则无法响应事件</span>
                      10, //发送10个数据
                      (uint8 *)data,
                      &SampleApp_TransID,
                      AF_DISCV_ROUTE,//带路由功能
                      AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    // Error occurred in request to send.
  }
                     
}
6.发送部分

让发送函数生效,定位到事件处理函数,uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events );

if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )//定期发送事件,demo已定义
  {
    // Send the periodic message
    //SampleApp_SendPeriodicMessage();

    
    //组播发送
   <span style="color:#ff0000;"> SampleApp_SendGroupMessage();//将刚才定义的函数加入到这里</span>
    
    // Setup to send message again in normal period (+ a little jitter)
    osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
        (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) );

    // return unprocessed events
    return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);
  }
7.接收部分,定位到消息接收函数 void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt );

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
  uint16 flashTime;

  switch ( pkt->clusterId )//路由反射器
  {
    case <span style="color:#ff0000;">WEBEE_GROUP_CLUSTERID</span>://自己定义的传输编号,在头文件定义
      HalUARTWrite(0, "I get data\n", 11); //提示收到数据
      HalUARTWrite(0, (char *)(pkt->cmd.Data), pkt->cmd.DataLength);//将收到的数据通过串口发送到计算机,
      HalUARTWrite(0, "\n", 1);    //  回车换行
      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;
  }
}
8.将修改后的程序烧录到节点、路由器、协调器,必须要程序和板子对应,路由器对应RouterEB-Pro等等



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章