zigbee协议栈初使用(四)无线串口透传
zigbee協(xié)議棧初使用(四)無線串口透傳
串口透傳意思是通過Zigbee實(shí)現(xiàn)兩個(gè)PC通訊,兩個(gè)Zigbee模塊地位應(yīng)該是一樣的。
? 在void MT_UartInit(),有代碼如下:
1#if defined (ZTOOL_P1) || defined (ZTOOL_P2)
uartConfig.callBackFunc = MT_UartProcessZToolData;
2#elif defined (ZAPP_P1) || defined (ZAPP_P2)
uartConfig.callBackFunc = MT_UartProcessZAppData;
3#else
uartConfig.callBackFunc = NULL;
4#endif
加粗部分是協(xié)議棧數(shù)據(jù)串口接收處理函數(shù),進(jìn)入函數(shù)定義。
函數(shù)根據(jù)網(wǎng)蜂《zigbee實(shí)戰(zhàn)指南》進(jìn)行了更改,直接刪除原先的用改后的,代碼如下:
更改后數(shù)據(jù)串口接收處理流程為:
?1、接收數(shù)據(jù)
?2、判斷長度然后給數(shù)據(jù)包pMsg分配內(nèi)存
?3、打包發(fā)給上層OSAL處理
?4、釋放內(nèi)存
顯然這里得到的數(shù)據(jù)包由 datalen + data組成;
接下來對得到的數(shù)據(jù)包放到任務(wù)中處理,顯然應(yīng)該是在SampleApp.c,找到任務(wù)處理函數(shù)uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )前文中提起過,
中文備注下是添加部分, SampleApp_SerialCMD((mtOSALSerialData_t *)MSGpkt);為自定義的無線發(fā)送函數(shù),代碼如下:
void SampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg) //網(wǎng)蜂提供 {uint8 i,len,*str=NULL; //len有用數(shù)據(jù)長度str=cmdMsg->msg; //指向數(shù)據(jù)開頭len=*str; //msg里的第1個(gè)字節(jié)代表后面的數(shù)據(jù)長度/********打印出串口接收到的數(shù)據(jù),用于提示*********/for(i=1;i<=len;i++)HalUARTWrite(0,str+i,1 ); HalUARTWrite(0,"\n",1 );//換行 /*******發(fā)送出去,同無線數(shù)據(jù)傳輸********/if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,SAMPLEAPP_COM_CLUSTERID,//自己定義一個(gè)len+1, // 數(shù)據(jù)長度 str, //數(shù)據(jù)內(nèi)容&SampleApp_TransID, AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){}else{// Error occurred in request to send.} }1#define SAMPLEAPP_COM_CLUSTERID 3 ,數(shù)據(jù)包號自己添加
接下來打印函數(shù)
最后還要修改預(yù)編譯,注釋掉 MT 層的內(nèi)容。這里注意,選擇了協(xié)調(diào)器、路
由器、或者終端編譯時(shí)都要修改 options 的。
參考如下:
ZIGBEEPRO
NWK_AUTO_POLL(需要自動重連時(shí)加入)
ZTOOL_P1
xMT_TASK
xMT_SYS_FUNC
xMT_ZDO_FUNC
分別下載到協(xié)調(diào)器(必須),終端(或路由)。
總結(jié)
以上是生活随笔為你收集整理的zigbee协议栈初使用(四)无线串口透传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【STM32学习】(22)STM32实现
- 下一篇: 人像优化效果Lr预设