ZigBee(CC2530,ZSTACK)透傳示例
阿新 • • 發佈:2019-01-26
使用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的引數依次是串列埠號,指標和長度。