MQTT库例程存在问题

发布于 2023-12-12 10:34:37

mqtt收到平台下发消息,QOS等级为1 没给发PUBACK报文 导致平台一直下发消息
image.png

`static int mqtt_demo_loop(mqtt_demo_context_t *ctx)
{

int packet_length = 0;
int counter = 0;

counter++;
packet_length = mqtt_demo_recv_parse(ctx, 1, 1);
if(packet_length > 0)
{
    //wm_printf("recvd Packet Header: 0x%x...\n", mqtt_demo_packet_buffer[0]);

    if (MQTTParseMessageType(ctx->mqtt_demo_packet_buffer) == MQTT_MSG_PUBLISH)
    {
        uint8_t topic[100], *msg;
        uint16_t len;
        len = mqtt_parse_pub_topic(ctx->mqtt_demo_packet_buffer, topic);
        topic[len] = '\0'; // for printf
        len = mqtt_parse_publish_msg(ctx->mqtt_demo_packet_buffer, &msg);
        msg[len] = '\0'; // for printf
        wm_printf("recvd: %s >>> %s\n", topic, msg);

        mqtt_publish(&ctx->mqtt_demo_mqtt_broker, (const char *)MQTT_DEMO_RX_PUB_TOPIC, (const char *)msg, len, 0);
        wm_printf("pushed: %s <<< %s\n", MQTT_DEMO_RX_PUB_TOPIC, msg);
    }

    tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_LOOP, 0);
}
else if (packet_length == MQTT_DEMO_READ_TIMEOUT)
{
    tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_LOOP, 0);
}
else if(packet_length == -1)
{
    wm_printf("mqtt error:(%d), stop mqtt demo!\n", packet_length);
    tls_os_timer_stop(ctx->mqtt_demo_heartbeat_timer);
    ctx->close_mqtt(ctx);
}

return 0;

}`

查看更多

关注者
0
被浏览
1.6k
1 个回答
isme
isme 认证专家 2023-12-21
冰镇大西瓜

不懂什么意思哦

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览