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等等



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