數據發送函數原型:
afStatus_t AF_DataRequest( afAddrType_t *dstAddr, //指向發送目的地址指針
endPointDesc_t *srcEP, //指向目的端點的端點描述符指針
uint16 cID, //發送端點的輸出簇ID
uint16 len, //發送字節數
uint8 *buf, //指向發送數據緩存的指針
uint8 *transID, //發送序列號指針,如果消息緩存發送,這個序列號將增加1
uint8 options, //發送選項 路由發現
uint8 radius //最大條數半徑 路由域
)
一般配置模式:
afAddrType_t my_DstAddr;
my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; //尋址方式
my_DstAddr.endPoint = GENERICAPP_ENDPOINT; //設置端口號
my_DstAddr.addr.shortAddr = 0x0000; //協調器的短地址
AF_DataRequest( &my_DstAddr, &GenericApp_epDesc, //發送目的地址、發送的端點描述符
GENERICAPP_CLUSTERID, //簇 ID
sizeof(data_buffer), //發送的字節長度
(uint8 *)&data_buffer, //發送的數據
&GenericApp_TransID, //發送的數據ID序號
AF_DISCV_ROUTE, //可選一項或幾項 路由發現
AF_DEFAULT_RADIUS ); //路由域
路由發現選項:
#define AF_ACK_REQUEST 0x10 //APS層應答確認請求,只使用在單播模式中
#define AF_DISCV_ROUTE 0x20 // 如果要使設備發現路由,將一直使用此選項
#define AF_EN_SECURITY 0x40 //如果使用這個選項將導致設備跳過路由直接發送消息
#define AF_SKIP_ROUTING 0x80 //保留
發送數據的目的地址:
typedef struct
{
union
{
uint16 shortAddr; //目的地址,短地址或長地址
ZLongAddr_t extAddr;
} addr;
afAddrMode_t addrMode; //地址模式,枚舉類型,有四種模式
uint8 endPoint; //端點信息
uint16 panId; //網絡PANID
} afAddrType_t;
地址模式中的四種尋址方式:
typedef enum
{
afAddrNotPresent = AddrNotPresent, //間接尋址 多用於綁定,當不知道目標地址時,從綁定表中查找
afAddr16Bit = Addr16Bit, //單點尋址,指定短地址 用於點對點通信
afAddr64Bit = Addr64Bit, //單點尋址,指定長地址 用於點對點通信
afAddrGroup = AddrGroup, //組播尋址 使用前必須定義組
afAddrBroadcast = AddrBroadcast //廣播尋址
} afAddrMode_t;
廣播尋址四種模式:
0xFFFF:數據包將被傳送到網絡上的所有設備,包括睡眠中的設備。對於睡眠中的設備,數據包將被保留在其父節點,直到它甦醒後主動到父節點查詢,或者直到消息超時丟失數據包(此爲默認值)
0xFFFD:除了睡眠中的任何設備
0xFFFC:發送給所有的路由器,包括協調器
0xFFFE :不指定目標地址,而是通過協議棧讀取綁定表獲得相應額度的目標設備的短地址
關於發送函數長度的問題:
osal_strlen(theMessageData)+1, 如果不在發送函數中加入這一句,會出現速率倍增問題
廣播與單播通信實驗!!!!