<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                >[success] 導師視頻講解:[去聽課](https://www.bilibili.com/video/BV1k34y1D7Vz/) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> 前面章節講解到在應用層可以調用ZCL API 來進行數據通信,本節課講解一下在應用層調用 ZCL API 的基本模式。 <br/> 打開zcl\_samplesw.c文件中的應用層初始化函數zclSampleSw\_Init,可以找到如下代碼: ### ``` //?Register?the?ZCL?General?Cluster?Library?callback?functions?? zclGeneral_RegisterCmdCallbacks(SAMPLESW_ENDPOINT,?? &zclSampleSw_CmdCallbacks);?? zclSampleSw_ResetAttributesToDefaultValues();???? //?Register?the?application's?attribute?list???? zcl_registerAttrList(SAMPLESW_ENDPOINT,zclSampleSw_NumAttributes,???????????????????????????????????????????zclSampleSw_Attrs);?? //?Register?the?Application?to?receive?the?unprocessed?Foundation?command/response?messages???? zcl_registerForMsg(?zclSampleSw_TaskID?); ``` ### 簡單講解一下它們的工作內容。 * **zclGeneral\_RegisterCmdCallbacks** 注冊一個命令執行回調(Call Back)。這個回調中包含一個命令處理函數列表。當設備接收到命令時,就在在這個列表中找打到對應的命令處理函數,處理該命令。 ### * **zclSampleSw\_ResetAttributesToDefaultValues** 把一些屬性設置為默認值 ### * **zcl\_registerAttrList** 為設備注冊屬性列表。前面章節已將結果,函數參數zclSampleSw\_Attrs是一個屬性列表。可在zcl\_samplesw\_data.c文件找到其定義。 ### * **zcl\_registerForMsg** 告訴設備需要接收未處理的Foundation(基礎)命令或者響應消息。調用該函數后,在接收到例如讀命令、寫命令或上報命令等基礎命令時,就會發生系統事件ZCL\_INCOMING\_MSG,開發者在該事件處理函數中做相關處理即可。 <br/> ## **zclSampleSw\_CmdCallbacks** 可在zcl\_samplesw.c文件中找到命令執行回調的定義,代碼如下: ![](https://img.kancloud.cn/53/64/5364b5449a0e2c0afefd145d30e48e23_832x556.png =600x) ### zclSampleSw\_CmdCallbacks是一個命令處理函數列表(數組),其中的每個元素均表示某個特定命令的處理函數。可以通過注釋或者查看該函數列表的類型定義可以查看每個元素代表的是哪個命令的處理函數。如果元素值為NULL,表示該命令無處理函數,即不處理該命令。如果需要on/off Cluster的命令,那么在其對應的元素位置設置處理處理函數即可。 <br/> ## **ZCL\_INCOMING\_MSG** 在AF通信章節中,當設備接收到AF層的數據時就會產生系統事件AF\_INCOMING\_MSG\_CMD,開發者只需在對應的事件處理函數中做相應處理即可。ZCL\_INCOMING\_MSG的意義與之類似,如果發生系統事件ZCL\_INCOMING\_MSG就表示有基礎命令或消息需要處理。 ### 打開zcl\_samplesw.c文件中的zdSampleSw\_event\_loop函數,可以找到ZCL\_INCOMING\_MSG的事件處理函數zclSamplesw\_ProcessIncomingMsg: ![](https://img.kancloud.cn/f1/7e/f17ec9fbeda2a340c02479ef563a8d65_830x290.png =600x) ### zclSampleSw\_ProcessIncomingMsg函數的定義如下: ### ``` 1.static?void?zclSampleSw_ProcessIncomingMsg(zclIncomingMsg_t?*pInMsg)??? 2.{???? 3.??switch?(?pInMsg->zclHdr.commandID?)//根據不同的commandID做相應的處理 4.??{???? 5.#ifdef?ZCL_READ???? 6.????case?ZCL_CMD_READ_RSP:??//?讀命令響應? 7.??????zclSampleSw_ProcessInReadRspCmd(?pInMsg?);???? 8.??????break;???? 9.#endif 10.#ifdef?ZCL_WRITE???? 11.????case?ZCL_CMD_WRITE_RSP:??//?寫命令響應?? 12.??????zclSampleSw_ProcessInWriteRspCmd(?pInMsg?);???? 13.??????break;???? 14.#endif 15.#ifdef?ZCL_REPORT??//?上報命令?? 16.????case?ZCL_CMD_CONFIG_REPORT:???? 17.??????//zclSampleSw_ProcessInConfigReportCmd(?pInMsg?);???? 18.??????break;???? 19.????case?ZCL_CMD_CONFIG_REPORT_RSP:???? 20.??????//zclSampleSw_ProcessInConfigReportRspCmd(?pInMsg?);???? 21.??????break;???? 22.????case?ZCL_CMD_READ_REPORT_CFG:???? 23.??????//zclSampleSw_ProcessInReadReportCfgCmd(?pInMsg?);???? 24.??????break;???? 25.????case?ZCL_CMD_READ_REPORT_CFG_RSP:???? 26.??????//zclSampleSw_ProcessInReadReportCfgRspCmd(?pInMsg?); 27.??????break;???? 28.????case?ZCL_CMD_REPORT:???? 29.??????//zclSampleSw_ProcessInReportCmd(?pInMsg?);???? 30.??????break;???? 31.#endif 32.???? case?ZCL_CMD_DEFAULT_RSP:?//默認響應 33.??????zclSampleSw_ProcessInDefaultRspCmd(?pInMsg?);???? 34.??????break; 35.#ifdef?ZCL_DISCOVER??//?掃描命令?? 36.????...?...?//?不展開?? 37.#endif 38.????default:???? 39.??????break;???? 40.??} 41.??if?(?pInMsg->attrCmd?)???? 42.????osal_mem_free(?pInMsg->attrCmd?);???? 43.} ``` ### 該函數的內容還是挺好理解的,大致就是根據不同的commandID做相應的處理。 >[warning] 讀者暫時只需大致了解該函數的內容即可,無需深入了解每一行代碼 ### 需要注意的是,使用ZCL的基礎命令前,需要開啟相應的宏的,例如使用“讀”命令需要開啟ZCL\_READ?。其開啟方式與HAL宏的開啟方式是相同的,如圖所示。 ![](https://img.kancloud.cn/91/2e/912e5ca361562e340346bce95a731557_680x776.png =500x) <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>

                              哎呀哎呀视频在线观看