1. 程式人生 > >ZigBee(CC2530,ZSTACK)透傳示例

ZigBee(CC2530,ZSTACK)透傳示例

  使用ZSTACK進行透傳是非常簡單的一件事,ZSTACK協議棧已經封裝好了函式,方便呼叫。
  本例的透傳是指CC2530通過串列埠接收資料,然後原封不動地通過無線資料包傳送出去。無線資料包收到的資料,從串列埠傳送。
串列埠接收(回撥)函式

static void SerialApp_CallBack(uint8 port, uint8 event)
{
  (void)port;
  if ((event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT)) &&
#if SERIAL_APP_LOOPBACK
(SerialApp_TxLen < SERIAL_APP_TX_MAX)) #else !SerialApp_TxLen) #endif { SerialApp_TxLen = HalUARTRead(SERIAL_APP_PORT, SerialApp_TxBuf, SERIAL_APP_TX_MAX); //將串列埠資料讀入buf if(SerialApp_TxLen > 0) { HalLedBlink(HAL_LED_2,2,50,200);//轉發訊息 綠燈閃2下 SerialApp_OTAData(&SerialApp_TxAddr,SERIALAPP_CLUSTERID1,SerialApp_TxBuf, SerialApp_TxLen); } SerialApp_TxLen = 0
; } }

其中最主要的就是這個函式:

SerialApp_OTAData(&SerialApp_TxAddr,SERIALAPP_CLUSTERID1,SerialApp_TxBuf, SerialApp_TxLen);

  SerialApp_TxAddr是收貨地址,SERIALAPP_CLUSTERID1是自定義的簇,與接收函式對應即可。SerialApp_TxBuf是接收陣列,uint8,長度為SERIAL_APP_TX_MAX 。SerialApp_TxLen是陣列
SerialApp_TxBuf中需要傳輸的位數。
  注意SERIAL_APP_TX_MAX 的預設值可能是20。我定義為80,基本上已經是最大值了。因為透傳的資料放應用層的載荷,而單次傳輸的資料量大概就是128位元組,前邊各層的幀頭等會佔用一些資料,所以可用的位就80幾個吧。(憑印象寫的,不嚴謹)。
  但是這不代表ZigBee一次只能穿80幾個位元組,因為ZSTACK可以進行微秒級別的分包傳送。

#if !defined( SERIAL_APP_TX_MAX )
#define SERIAL_APP_TX_MAX  80
#endif
static uint8 SerialApp_TxBuf[SERIAL_APP_TX_MAX];

收到的RF資料的處理:

void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt )  //處理接收到的RF訊息
{

  switch ( pkt->clusterId )
  {
   case SERIALAPP_CLUSTERID1:  
     HalLedBlink(HAL_LED_2,1,50,200);
     HalUARTWrite(SERIAL_APP_PORT, pkt->cmd.Data, pkt->cmd.DataLength); //通過串列埠傳送給閘道器
    break;
    。。。。。。。。。。。
    }
}

HalUARTWrite的引數依次是串列埠號,指標和長度。