1. 程式人生 > >ZigBee TI ZStack CC2530 4.13 單播通訊02-64位地址模式

ZigBee TI ZStack CC2530 4.13 單播通訊02-64位地址模式

(配套原始碼軟體開發板等資源,可移步部落格同名QQ群:拿破崙940911

上一節中我們詳細講述了單播通訊的第一種方式——16位地址模式。本節中,我們將講述單播通訊的第二種方式——64位地址模式。

(僅描述與16位地址方式不同之處)

上一節中實現了對16位短地址已知的ZigBee協調器(固定為0x0000)單播控制功能,即無線點燈等;下面我們來實現對16位短地址未知、但64位MAC地址已知的ZigBee裝置的單播控制功能;這邊我們為了獲得目標裝置的64位MAC地址,可以將目標裝置用模擬下載器連線到電腦,在電腦端Flash Programmer軟體中點選“Read IEEE”直接獲取,如下圖所示:


1、64位地址單播發送函式,宣告及定義如下:

......
static void ProjectApp_SendUnicast64( void );
......
static void ProjectApp_SendUnicast64( void )
{
  char theMessageData[ ] = "Unicast data 64\r\n";
  uint8 DestMac[8]={0xA1,0XBD,0X38,0X12,0X00,0X4B,0X12,0X00};//00 12 4B 00 12 38 BD A1

  ProjectApp_DstAddr.addrMode       = (afAddrMode_t)Addr64Bit;
  ProjectApp_DstAddr.endPoint       = PROJECTAPP_ENDPOINT;
  //ProjectApp_DstAddr.addr.shortAddr = NWK_PAN_COORD_ADDR;//NWK_BROADCAST_SHORTADDR_DEVALL;  
  memcpy(ProjectApp_DstAddr.addr.extAddr,DestMac,8);

  AF_DataRequest( &ProjectApp_DstAddr,
                  &ProjectApp_epDesc,
                  PROJECTAPP_CLUSTERID,
                  (byte)osal_strlen( theMessageData ) + 1,
                  (byte *)&theMessageData,
                  &ProjectApp_TransID,
                  AF_DISCV_ROUTE,
                  AF_DEFAULT_RADIUS
                );
}
相信這個函式的定義大家一眼就能看明白了~
2、實驗驗證

(1)呼叫單播發送函式

static void ProjectApp_HandleKeys( uint8 shift, uint8 keys )
{
  ......
  if ( keys & HAL_KEY_SW_2 )
  {
//    HalLedSet(HAL_LED_2,HAL_LED_MODE_TOGGLE);
    ProjectApp_SendUnicast64();
  }
  ......
}
(2)實驗現象

兩個ZigBee裝置分別上電後,會發現,無論按下哪個ZigBee裝置上的KEY2,路由器(或終端裝置)上的LED1狀態都會取反,同時協調器的串列埠每次都會打印出“Unicast data 64”;

(配套原始碼軟體開發板等資源,可移步部落格同名QQ群:拿破崙940911