1. 程式人生 > >ZigBee組播通訊原理

ZigBee組播通訊原理



組播通訊原理
組播通訊:在Zigbee網路,模組可以分組來標記,傳送的模組如果組號和網路裡面標記模組的組號相對應,那麼這些模組就可以
拿到這些無線資料包。


組播的特點:
1,分組中的編號是兩個位元組(即組號是兩個位元組)
2,組號必須和已經定義了的端點相關聯。
   即:組都是和模組裡已經定義了的端點相關聯,如果我們說一個模組標記為組0x01,那麼這個模組裡面至少有一個定義了的
   端點與這個和組(0x01)相關聯
 
3,傳送模組必須指明發送給哪個組,哪個端點,簇編號,原則上,只要當接收模組的這三個引數匹配上了,才能拿到和處理這樣
一個無線資料包。

4,組標記中,同一個模組下的定義的一個組,可以關聯多個可用的端點,同一個端點也可以關聯多個組。

程式碼示例:

#define SAMPLEAPP_FLASH_CLUSTERID    2        //簇編號
#define SAMPLEAPP_FLASH_GROUP                 0x0001 //組編號


afAddrType_t  SampleApp_Flash_DstAddr;    //組播
// Setup for the flash command's destination address - Group 1
SampleApp_Flash_DstAddr.addrMode          = (afAddrMode_t)afAddrGroup;//注意這裡傳送模式為組播
SampleApp_Flash_DstAddr.endPoint          = SAMPLEAPP_ENDPOINT;
SampleApp_Flash_DstAddr.addr.shortAddr    = SAMPLEAPP_FLASH_GROUP;//注意這裡是接收模組的組編號


endPointDesc_t SampleApp_epDesc;
SampleApp_epDesc.endPoint   = SAMPLEAPP_ENDPOINT;//模組的端點
SampleApp_epDesc.task_id    = &SampleApp_TaskID;//指明資料由接收方的哪一個任務來處理
SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;
SampleApp_epDesc.latencyReq = noLatencyReqs;
afRegister( &SampleApp_epDesc );//繫結

aps_Group_t   SampleApp_Group;
SampleApp_Group.ID = 0x0001; //接收模組的組編號
osal_memcpy( SampleApp_Group.name, "Group 1", 7 );
aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );//把組跟端點關聯,一定要端點關聯

uint8         SampleApp_TransID = 0; //傳送成功的幀條數,由底層負責更新

uint8 buffer[3];
uint16 flashTime = 856;//組播的資料
buffer[0] = (uint8)(SampleAppFlashCounter++);
buffer[1] = LO_UINT16( flashTime );
buffer[2] = HI_UINT16( flashTime );
if ( AF_DataRequest( &SampleApp_Flash_DstAddr,
                     &SampleApp_epDesc,
                     SAMPLEAPP_FLASH_CLUSTERID,
                     3,
                     buffer,
                     &SampleApp_TransID,
                     AF_DISCV_ROUTE,
                     AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{

}




程式碼很簡單,有以下幾點需要說明一下:

1,在使用上廣播沒有什麼區別,僅僅是地址模式、地址內容不一樣
2,可以呼叫aps_RemoveGroup方法解除關聯。
2,協調器用到了組,要引入#include "aps_groups.h" 標頭檔案。