日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用示例

更新時(shí)間:

本文以C Link SDK中的demos/mqtt_rrpc_demo.c為例,介紹如何調(diào)用Link SDK的API,展示設(shè)備的RRPC功能。

背景信息

  • RRPC功能的更多信息,請(qǐng)參見概述

  • RRPC功能基于MQTT接入,開發(fā)過程中涉及MQTT接入的代碼說明,請(qǐng)參見MQTT接入

配置流程

  1. 初始化。

    詳細(xì)內(nèi)容,請(qǐng)參見MQTT接入的初始化

  2. 配置功能。

    詳細(xì)內(nèi)容,請(qǐng)參見MQTT接入的配置功能。

  3. 請(qǐng)求連接。

    詳細(xì)內(nèi)容,請(qǐng)參見MQTT接入的請(qǐng)求連接。

  4. 接收RRPC消息。

    1. 設(shè)備與物聯(lián)網(wǎng)平臺(tái)建立連接后,您可以調(diào)用物聯(lián)網(wǎng)平臺(tái)云端API RRpc,通過以下類型的Topic,向設(shè)備發(fā)送RRPC指令。

    2. 設(shè)備端調(diào)用aiot_mqtt_recv,接收到信息。RRPC的消息觸發(fā)回調(diào)函數(shù),設(shè)備執(zhí)行對(duì)應(yīng)處理。

      本文示例代碼中,回調(diào)函數(shù)為demo_mqtt_default_recv_handler

    3. 定義RRPC消息的回調(diào)函數(shù),編寫處理邏輯。

      重要

      接收同步服務(wù)消息后,請(qǐng)?jiān)?秒內(nèi)做出應(yīng)答。否則,即使設(shè)備端已收到消息,也視其失敗。

      您可以參考以下內(nèi)容,編寫回調(diào)函數(shù)的處理邏輯:

      • 通過收到消息的Topic格式,辨別消息是否為RRPC消息。

        • 如果使用RRPC通信相關(guān)Topic,無需訂閱Topic。

          其格式為:/sys/${YourProductKey}/${YourDeviceName}/rrpc/request/${messageId}。更多信息,請(qǐng)參見調(diào)用RRPC通信相關(guān)Topic

        • 如果使用自定義Topic,發(fā)送RRPC前,您需訂閱該Topic。訂閱Topic的具體操作,請(qǐng)參見MQTT接入的訂閱Topic

          通過該Topic發(fā)送消息后,消息經(jīng)由RRPC請(qǐng)求的Topic,發(fā)送至設(shè)備。RRPC請(qǐng)求的Topic格式為:/ext/rrpc/${messageId}/${topic}。更多信息,請(qǐng)參見調(diào)用自定義Topic(推薦)

      • 回調(diào)函數(shù)的處理邏輯建議:設(shè)備接收RRPC消息后,根據(jù)業(yè)務(wù)需要,執(zhí)行消息指令,然后向物聯(lián)網(wǎng)平臺(tái)發(fā)回應(yīng)答報(bào)文。

      • 示例代碼中回調(diào)函數(shù)的處理邏輯:打印了RRPC消息,并同步向物聯(lián)網(wǎng)平臺(tái)返回了一條payload的值為pong的應(yīng)答消息。

      void demo_mqtt_default_recv_handler(void *handle, const aiot_mqtt_recv_t *packet, void *userdata)
      {
          switch (packet->type) {
              ……
              ……
              case AIOT_MQTTRECV_PUB: {
                  printf("pub, qos: %d, topic: %.*s\n", packet->data.pub.qos, packet->data.pub.topic_len, packet->data.pub.topic);
                  printf("pub, payload: %.*s\n", packet->data.pub.payload_len, packet->data.pub.payload);
      
                  /* TODO: 處理服務(wù)器下發(fā)的業(yè)務(wù)報(bào)文。 */
                  /* 下面是一個(gè)RRPC的應(yīng)答示例 */        
                  {
                      char *payload = "pong";
                      char resp_topic[256];
                      if(packet->data.pub.topic_len > 256) {
                          break;
                      }
      
                      memset(resp_topic, 0, sizeof(resp_topic));
                      memcpy(resp_topic, packet->data.pub.topic, packet->data.pub.topic_len);
      
                      aiot_mqtt_pub(handle, resp_topic, (uint8_t *)payload, (uint32_t)strlen(payload), 0);
                  } 
              }
              break;
      
              ……
              ……       
      
              default: {
      
              }
          }
      }
  5. 斷開連接。

    詳細(xì)內(nèi)容,請(qǐng)參見MQTT的斷開連接

  6. 退出程序。

    詳細(xì)內(nèi)容,請(qǐng)參見MQTT的退出程序

后續(xù)步驟

  • 例程文件配置完成后,需進(jìn)行編譯,生成可執(zhí)行文件./output/mqtt-rrpc-demo

    更多信息,請(qǐng)參見編譯與運(yùn)行

  • 關(guān)于運(yùn)行結(jié)果的詳細(xì)說明,請(qǐng)參見運(yùn)行日志