zStack學習筆記(原創,絕對不是抄的……)


我之前寫的文章都沒寫上面那句,但是這篇寫了,主要是因為zStack文章抄襲太嚴重……故此聲明

因為涉及到數據的雙向交互問題,所以在這里我考慮使用協議棧來實現數據的收發。
首先說下如何在Zstack中添加自己的任務。
首先要利用已有的SampleApp工程,在其中添加自己的任務。
添加任務流程如下:

1 首先定義任務函數,函數聲明如下:
UINT16 FunctionName(byte task_id, UINT16 events);
2 定義好了函數后再定義一個用於指定任務ID的函數,很簡單:
void Function_Init( byte task_id );

然后在OSAL_GenericApp.c文件的tasksArr數組中添加自己的任務函數地址。因為這個數組是一個函數指針數組。
然后在void osalInitTasks( void )函數中調用Function_Init函數,用於獲取任務ID。不過我現在沒發現這一步到底有什么用。

這樣就實現了自己的任務函數的添加,等待消息相應即可。

在發送數據上,使用AF_DataRequest函數實現數據發送。這個函數的參數比較多,有點麻煩。
數據的接受上,在GenericApp_ProcessEvent回調函數中響應AF_INCOMING_MSG_CMD消息。這里zstack會默認調用一個函數,是GenericApp_MessageMSGCB。在這里處理根據afIncomingMSGPacket_t參數來進行數據的處理。
這個結構體的聲明如下:
typedef struct
{
osal_event_hdr_t hdr;
uint16 groupId;
uint16 clusterId;
afAddrType_t srcAddr;
byte endPoint;
byte wasBroadcast;
byte LinkQuality;
byte SecurityUse;
uint32 timestamp;
afMSGCommandFormat_t cmd;
} afIncomingMSGPacket_t;
真正的數據其實是在成員變量cmd中,afMSGCommandFormat_t結構體的聲明如下:
typedef struct
{
byte TransSeqNumber;
uint16 DataLength; // Number of bytes in TransData
byte *Data;
} afMSGCommandFormat_t;
就這樣,可以通過這種方式獲取你所想要的數據。

zStack的串口通信使用協議棧的函數來實現串口功能的開啟和關閉。
另外就是zStack的波特率設置其實很有意思,有這么一串宏定義:
#define HAL_UART_BR_1200 0x00
#define HAL_UART_BR_2400 0x01
#define HAL_UART_BR_4800 0x02
#define HAL_UART_BR_9600 0x03
#define HAL_UART_BR_19200 0x04
#define HAL_UART_BR_31250 0x05
#define HAL_UART_BR_38400 0x06
#define HAL_UART_BR_57600 0x07
#define HAL_UART_BR_115200 0x08
我想說的就是,實在是太可愛了~
另外就是在波特率的具體設定上,還是參看代碼比較好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM