ZigBee_數據發送函數解析

數據發送函數原型:

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, 如果不在發送函數中加入這一句,會出現速率倍增問題
廣播與單播通信實驗!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章