久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: zstack(zibee2006)數(shù)據(jù)的發(fā)送和接收模式 [打印本頁]

作者: shaonv    時(shí)間: 2015-1-1 18:48
標(biāo)題: zstack(zibee2006)數(shù)據(jù)的發(fā)送和接收模式
數(shù)據(jù)的發(fā)送和接收
一、            數(shù)據(jù)的發(fā)送
ZStack2006的協(xié)議棧中,我們只需調(diào)用函數(shù)AF_DataRequest()即可完成數(shù)據(jù)的發(fā)送。
afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,                           uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options, uint8 radius )
而我們在使用AF_DataRequest() 函數(shù)時(shí)只需要了解其參數(shù)便可以非常靈活的以各種方式來發(fā)送數(shù)據(jù)。AF_DataRequest()函數(shù)參數(shù)說明如下:
*dstAddr---------------------發(fā)送目的地址、端點(diǎn)地址以及傳送模式
*srcEP -----------------------源端點(diǎn)
cID ---------------------------ID
len ---------------------------數(shù)據(jù)長度
*buf -------------------------數(shù)據(jù)
*transID --------------------序列號
options ----------------------發(fā)送選項(xiàng)
radius -----------------------跳數(shù)
*dstAddr決定了消息發(fā)送到那個(gè)設(shè)備及那個(gè)endpoint,而簇ID(cID)決定了設(shè)備接收到信息如何處理。簇可以理解為是一種約定,約定了信息怎么處理。
重要參數(shù)說明:
1、地址 afAddrType_t
typedef struct
{
union
{
uint16 shortAddr; //短地址
}addr;
afAddrMode_taddrMode; //傳送模式
byteendPoint; //端點(diǎn)號
}afAddrType_t;
2、端點(diǎn)描述符 endPointDesc_t
typedef struct
{
byteendPoint; //端點(diǎn)號
byte*task_id; //那一個(gè)任務(wù)的端點(diǎn)號
SimpleDescriptionFormat_t*simpleDesc;//簡單的端點(diǎn)描述
afNetworkLatencyReq_tlatencyReq;
}endPointDesc_t;
3、簡單描述符 SimpleDescriptionFormat_t
typedef struct
{
byte EndPoint; //EP
uint16 AppProfId; //應(yīng)用規(guī)范ID
uint16 AppDeviceId; //特定規(guī)范ID 的設(shè)備類型
byte AppDevVer:4; //特定規(guī)范ID 的設(shè)備的版本
byte Reserved:4; //AF_V1_SUPPORTusesforAppFlags:4.
byte AppNumInClusters; //輸入簇ID 的個(gè)數(shù)
cId_t *pAppInClusterList; //輸入簇ID 的列表
byte AppNumOutClusters; //輸出簇ID 的個(gè)數(shù)
cId_t *pAppOutClusterList; //輸出簇ID 的列表
}SimpleDescriptionFormat_t;
4、簇ID cID
ClusterID--具體應(yīng)用串ID
5、發(fā)送選項(xiàng) options
發(fā)送選項(xiàng)有如下選項(xiàng)
#defineAF_FRAGMENTED 0x01
#defineAF_ACK_REQUEST 0x10
#defineAF_DISCV_ROUTE 0x20
#defineAF_EN_SECURITY 0x40
#defineAF_SKIP_ROUTING 0x80
其中AF_ACK_REQUEST為發(fā)送后需要接收方的確認(rèn)
6、半徑、條數(shù) radius
傳輸跳數(shù)或傳輸半徑,默認(rèn)值為10
數(shù)據(jù)發(fā)送模式說明:在協(xié)議棧數(shù)據(jù)發(fā)送模式有以下幾種:單播、組播、廣播和直接發(fā)送四種模式。
廣播發(fā)送
廣播發(fā)送可以分為三種,如果想使用廣播發(fā)送,則只需將dstAddr->addrMode設(shè)為
AddrBroadcastdstAddr->addr->shortAddr設(shè)置為相應(yīng)的廣播類型即可。具體的定義如下:
NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——數(shù)據(jù)包將被傳送到網(wǎng)絡(luò)上的所有設(shè)備,包括睡眠中的設(shè)備。對于睡眠中的設(shè)備,數(shù)據(jù)包將被保留在其父親節(jié)點(diǎn)直到查詢到它,或者消息超時(shí)。
NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——數(shù)據(jù)包將被傳送到網(wǎng)絡(luò)上的所有接收機(jī)的設(shè)備(RXONWHENIDLE),也就是說,除了睡眠中的所有設(shè)備。
NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——數(shù)據(jù)包發(fā)送給所有的路由器,包括協(xié)調(diào)器。
組播發(fā)送
如果設(shè)備想傳輸數(shù)據(jù)到某一組設(shè)備,那么只需將dstAddr->addrMode設(shè)為AddrGroup
dstAddr->addr->shortAddr設(shè)置為相應(yīng)的組ID 即可。
代碼如下:
//Setupfortheflash command's destinationaddress-Group1
SampleApp_Flash_DstAddr.addrMode=(afAddrMode_t)afAddrGroup;
SampleApp_Flash_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;
SampleApp_Flash_DstAddr.addr.shortAddr=SAMPLEAPP_FLASH_GROUP;
根據(jù)上面代碼的配置,然后使用AF_DataRequest()函數(shù)來進(jìn)行組播發(fā)送。
單播發(fā)送
單播發(fā)送需要知道目標(biāo)設(shè)備的短地址,需要將 dstAddr-> addrMode 設(shè)為Addr16BitdstAddr->addr->shortAddr設(shè)置為目標(biāo)設(shè)備的短地址即可。
代碼如下:
SampleApp_Flash_DstAddr.addrMode=(afAddrMode_t)afAddr16Bit;
SampleApp_Flash_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;
SampleApp_Flash_DstAddr.addr.shortAddr=0x00;
根據(jù)上面代碼的配置,然后使用AF_DataRequest()函數(shù)來進(jìn)行點(diǎn)對點(diǎn)發(fā)送。
綁定發(fā)送
綁定發(fā)送目標(biāo)設(shè)備可以是一個(gè)設(shè)備、多個(gè)設(shè)備、或者一組設(shè)備,由綁定表中的綁定信息決定。綁定發(fā)送,需要將dstAddr->addrMode設(shè)為AddrNotPresentdstAddr->addr->shortAddr設(shè)置為無效地址0xFFFE
代碼如下:
ZDAppNwkAddr.addrMode = AddrNotPresent;
ZDAppNwkAddr.addr.shortAddr = 0xFFFE;
根據(jù)上面代碼的配置,然后使用AF_DataRequest()函數(shù)來進(jìn)行綁定發(fā)送。
二、            數(shù)據(jù)的接受
       在Zstack中,如當(dāng)接收到OTA信息后,將觸發(fā)SYS_EVENT_MSG事件下的AF_INCOMING_MSG_CMD事件。我們只需處理AF_INCOMING_MSG_CMD便可。
數(shù)據(jù)收發(fā)實(shí)例:
  SampleApp工程中Zstack要周期性的向網(wǎng)絡(luò)所有設(shè)備廣發(fā)送一個(gè)信息,其具體代碼如下:
程序代碼:
void SampleApp_SendPeriodicMessage( void )
{
  if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
                       SAMPLEAPP_PERIODIC_CLUSTERID,
                       1,
                       (uint8*)&SampleAppPeriodicCounter,
                       &SampleApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    // Error occurred in request to send.
  }
}
在這個(gè)函數(shù)中調(diào)用了函數(shù)AF_DataRequest()完成數(shù)據(jù)的發(fā)送,發(fā)送地址為SampleApp_Periodic_DstAddr,即SampleApp周期信息地址,該地址為0xFFFF,具體參見SampleApp。而簇IDSAMPLEAPP_PERIODIC_CLUSTERID
在接受端觸發(fā)了目標(biāo)設(shè)備的AF_INCOMING_MSG_CMD事件。具體程序代碼如下:
程序代碼:
uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
{
  ……
  case AF_INCOMING_MSG_CMD:
SampleApp_MessageMSGCB( MSGpkt )
break;
……
}
在對事件AF_INCOMING_MSG_CMD進(jìn)行處理時(shí),Zstack又調(diào)用了函數(shù)SampleApp_MessageMSGCB( MSGpkt ),其代碼如下:
程序代碼:
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
  uint16 flashTime;
  switch ( pkt->clusterId )
  {
    case SAMPLEAPP_PERIODIC_CLUSTERID:
      break;
     
    case SAMPLEAPP_FLASH_CLUSTERID:
      flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
      HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
      break;
  }
}
在函數(shù)SampleApp_MessageMSGCB( MSGpkt )中會根據(jù)接收到信息的簇ID的不同,進(jìn)行相關(guān)的處理,也就是上面提及的簇是一種約定,約定了信息將如何處理。這個(gè)實(shí)例中Zstack對周期信息的處理就是什么都沒有做,可以根據(jù)實(shí)際需要用戶自己添加相關(guān)代碼。
說明:在Zstack協(xié)議棧中數(shù)據(jù)的發(fā)送函數(shù)為AF_DataRequest(),但是在SimpleApp實(shí)例中,Zstack調(diào)用了函數(shù)zb_SendDataRequest ()進(jìn)行數(shù)據(jù)的發(fā)送,其實(shí)在函數(shù)zb_SendDataRequest ()中最終還是調(diào)用了AF_DataRequest()對數(shù)據(jù)進(jìn)行的發(fā)送。








歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日日操夜夜 | 欧美日韩亚洲另类 | 日韩精品网 | 999毛片| 成人深夜福利视频 | 亚洲在线视频观看 | 日韩成人在线免费观看 | 午夜成人影片 | 不卡日本 | 四虎8848 | 精品国产一区二区三区久久久蜜月 | 成人网页 | 中文字幕一区二区三区四区视频 | 欧美精品日韩 | 日韩精品视频网站 | 91啦丨九色丨刺激 | 亚洲成人精品一区 | 在线观看日韩视频 | www精品 | 中国a一片一级一片 | 四虎免费在线观看 | 天天综合av | 天天干天天操天天 | 日本在线天堂 | 亚洲黄色大片 | 国产黄a三级三级看三级 | 999在线视频 | 中文字幕麻豆 | www.久久久久| 丁香激情五月 | 一区二区三区网站 | 成人一区在线观看 | 国产综合视频在线观看 | 在线黄网| 亚洲国产91 | 视频一区二区在线 | 久久久久久久久国产精品 | 国语对白做受欧美 | 免费av一区 | 亚洲免费精品视频 | 五月天激情婷婷 |