本文以C Link SDK中的Demo文件demos/mqtt_rrpc_demo.c为例,介绍如何调用Link SDK的API,展示设备的RRPC功能。
背景信息
- RRPC功能的更多信息,请参见概述。
- RRPC功能基于MQTT接入,开发过程中涉及MQTT接入的代码说明,请参见MQTT接入。
配置流程
- 初始化。
- 配置功能。
- 请求连接。
- 接收RRPC消息。
- 设备与物联网平台建立连接后,您可以调用物联网平台云端API RRpc,通过以下类型的Topic,向设备发送RRPC指令。
- 设备端调用aiot_mqtt_recv,接收到信息。RRPC的消息触发回调函数,设备执行对应处理。
本文示例代码中,回调函数为demo_mqtt_default_recv_handler
。
- 定义RRPC消息的回调函数,编写处理逻辑。
注意 接收同步服务消息后,请在8秒内做出应答。否则,即使设备端已收到消息,也视其失败。
您可以参考以下内容,编写回调函数的处理逻辑:
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: 处理服务器下发的业务报文。 */
/* 下面是一个RRPC的应答示例 */
{
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: {
}
}
}
- 断开连接。
- 退出程序。