<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[success] 導師視頻講解:[**去聽課**](https://www.bilibili.com/video/BV1k34y1D7Vz?p=38) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> 在學習完通信原理之后,本節課講解AF層的數據發送API。 <br/> ## **數據發送API** 打開配套的工程,可以在Profile中找到一個AF.h文件,如圖所示。 ![](https://img.kancloud.cn/36/97/3697f7bdfb4d83cf89843ee8a8fb1cdd_1247x2560.png =250x) ### 在這個文件中可以找到一個名為AF\_DataRequest()的數據發送API,如圖所示。 ![](https://img.kancloud.cn/8e/ef/8eef2a96e381d48e25e6feb115275a58_1680x1010.png =500x) 這就是AF層的數據發送API,它的參數說明如下: ``` /* * @param dstAddr 目標設備地址,包含網絡地址和端點號 * @param srcEP 發送設備的簡單描述符 * @param cID Cluster ID,后續章節將會詳細講解 * @param len 待發送數據的長度 * @param buf 待發送的數據 * @param transID 傳輸ID,可以用來給每一次發送的數據包編一個號 * @param options 附加選項,可以用來給這次數據發送添加一些說明 * @param radius 最大的路由跳轉級數 */ afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP, uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options, uint8 radius ); ``` 協議棧里面的SampleSwitch這個例程基于這個API封裝出了點對點通信API、廣播通信API和組播通信API。 <br/> ## **點對點通信API** 在zcl\_samplesw.c文件中可以找到一個點對點通信API,代碼如下: ``` /* * @param destNwkAddr 目標設備的網絡地址 * @param cid Cluster ID,后續課程將會詳細講解 * @param len 數據長度 * @param data 數據內容 */ static?void?zclSampleSw_AF_P2P( uint16?destNwkAddr,? uint16?cid, uint8?len,? uint8?*data) {???? afAddrType_t?dstAddr;?//尋址信息配置? static?uint8?transferId?=?0;//傳輸ID,是數據包的標識符 /*?Destination?*/???? dstAddr.addrMode?=?afAddr16Bit;//?設置目標地址模式為16位網絡地址,表示使用P2P的通信方式 dstAddr.addr.shortAddr?=?destNwkAddr;//目標設備的網絡地址?? dstAddr.endPoint?=?SAMPLESW_ENDPOINT;//目標設備的端點號 ?transferId++;???? AF_DataRequest(&dstAddr,? &sampleSw_TestEp,//已經創建好的簡單描述符 cid,???? len,? data,???? &transferId, AF_DISCV_ROUTE,//進行路由掃描操作,用于建立發送數據報文的通信路徑。關于這個參數,暫時保持例程默認的代碼就可以了 AF_DEFAULT_RADIUS);//指定最大的路由跳轉級數 } ``` ### 這個API中使用了一個afAddrType\_t類型變量,用于配置尋址信息。這個變量定義如下: ![](https://img.kancloud.cn/98/0a/980aa5900ebe4a9e54d84472c93b39d3_1680x1010.png) ### 這個API中也使用了一個afAddrMode\_t變量,表示地址模式(類型),用于說明使用的是點對點、廣播還是組播的通信方式。同樣地,可以查看其定義,代碼如下: ![](https://img.kancloud.cn/bd/e2/bde2cee833df5074f317123ee1a79be9_1680x1009.png =500x) 可以看到,afAddrMode\_t是一個枚舉類型變量。 ### 在zclSampleSw\_AF\_P2P()函數的的最后,可以看到最終就是調用AF\_DataRequest()來發送數據的。開發者也可以基于AF\_DataRequest()來編寫自己的點對點通信API,而不使用這個工程中的默認的這個zclSampleSw\_AF\_P2P()。 <br/> ## **廣播通信API** 在zcl\_samplesw.c文件中可以找到廣播通信API,代碼如下: ``` /* * @param cid Cluster ID * @param len 待發送數據的長度 * @param *data 待發送數據的內容 */ static?void?zclSampleSw_AF_Broadcast( uint16?cid, uint8?len, uint8?*data) { afAddrType_t?dstAddr;?? static?uint8?transferId?=?0;?? /*?Destination?*/?? dstAddr.addrMode?=?afAddrBroadcast;?? // 使用廣播模式 dstAddr.addr.shortAddr?=?0xFFFF;?// 廣播地址 dstAddr.endPoint?=?SAMPLESW_ENDPOINT; //?目標設備的端點號 ?/*?Transfer?id?*/?? transferId++;?? /*?Send?*/?? AF_DataRequest( &dstAddr,? &sampleSw_TestEp,//已經創建好的簡單描述符 cid,?? len,? data,?? &transferId, AF_TX_OPTIONS_NONE, AF_DEFAULT_RADIUS?);//指定了最大的路由跳轉級數 } ``` ### 從廣播通信API的定義可以發現,它和點對點通信API是相似的。廣播通信API中使用了網絡地址0xFFFF,這表示把數據發送到該網絡上的所有設備中。但其實ZigBee的廣播地址一共有3個,如下所示: ``` 0xFFFF:廣播給該網絡中的所有設備 0xFFFD:只廣播給該網絡中打開收聽功能的設備 0xFFFC:只廣播給該網絡中的協調器和路由設備 ``` ### 同樣地,開發者也可以基于AF\_DataRequest()來編寫自己的廣播通信API,而不使用這個工程中的默認的這個zclSampleSw\_AF\_Broadcast()。 <br/> ## **組播通信API** 使用組播通信API,可以只給指定的一組設備發送數據。在zcl\_samplesw.c文件中可以找到組播通信API,代碼如下: ``` /* * @param groupId 組ID * @param cid ClusterID,后續章節將會詳細講解 * @param len 待發送數據的長度 * @param data 待發送數據的內容 */ static?void?zclSampleSw_AF_Groupcast( uint16?groupId, uint16?cid, uint8?len, uint8?*data) {???? afAddrType_t?dstAddr;???? static?uint8?transferId?=?0;???? /*?Destination?*/???? dstAddr.addrMode?=?afAddrGroup;//使用組播通信模式 dstAddr.addr.shortAddr?=?groupId; dstAddr.endPoint?=?SAMPLESW_ENDPOINT;//組中的設備的端點號 /*?Transfer?id?*/???? transferId++;??? ? /*?Send?*/???? AF_DataRequest(&dstAddr,? &sampleSw_TestEp,//已經創建好的簡單描述符 cid,? len,? data,???? &transferId,? AF_TX_OPTIONS_NONE, AF_DEFAULT_RADIUS?);//指定最大的路由跳轉級數,暫時可忽略 } ``` 上述代碼還是比較簡單的,就是給指定的組ID發送數據。后續章節將會以實驗的方式講解如何讓設備加入到指定的組中。 <br/> <br/> ## **項目定制** * 如需項目定制開發,可掃碼添加項目經理好友(注明“**項目定制**”) * 定制范圍:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等IoT技術方案 * 善學坊官網:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =200x) * 非項目定制**勿擾**,此處**非**技術支持
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看