diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c index 9a706d4..b101b8e 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c @@ -32,6 +32,7 @@ extern uint8_t g_report_active; // from tcp_json_srv.c, 0=inactive 1=active +extern uint8_t SocketId_TCP; // from net_srv.c, MQTT socket created by WCHNET_CreateTcpMqttSocket uint8_t g_iot_socket = 0xFF; // MQTT TCP socket ID IotMqttState g_iot_state = IOT_STATE_DISCONNECTED; uint8_t g_iot_msg_id = 0; // MQTT packet identifier @@ -477,46 +478,9 @@ static void iot_send_heartbeat(void) { * 连接管理 *===========================================================================*/ -/* 连接到 MQTT Broker */ +/* 连接到 MQTT Broker — 复用 SocketId_TCP(已由 WCHNET_CreateTcpMqttSocket 创建并连接) */ static void iot_connect_broker(void) { - uint8_t broker_ip[4]; - SOCK_INF sock_inf; - uint8_t ret; - - // 解析 broker 地址 - if (get_ipstr_to_array((char *)iot_net_info.remote_addr, broker_ip) == 0) { - // 是 IP 地址 — get_ipstr_to_array 已将结果写入 broker_ip,无需 memcpy - PRINT("IOT: broker IP %d.%d.%d.%d:%d\n", - broker_ip[0], broker_ip[1], broker_ip[2], broker_ip[3], - iot_net_info.mqtt_port); - } else { - PRINT("IOT: broker hostname=%s (DNS not implemented yet)\n", - iot_net_info.remote_addr); - return; - } - - memset(&sock_inf, 0, sizeof(SOCK_INF)); - sock_inf.DesPort = iot_net_info.mqtt_port; - sock_inf.SourPort = local_net_cfg.port_dev_udp + 1; // 参考 WCHNET_CreateTcpMqttSocket - sock_inf.ProtoType = PROTO_TYPE_TCP; - sock_inf.RecvBufLen = RECE_BUF_LEN; - memcpy(sock_inf.IPAddr, broker_ip, 4); - - ret = WCHNET_SocketCreat(&g_iot_socket, &sock_inf); - if (ret != WCHNET_ERR_SUCCESS) { - PRINT("IOT: SocketCreat failed: 0x%02X\n", ret); - g_iot_socket = 0xFF; - return; - } - - ret = WCHNET_SocketConnect(g_iot_socket); - if (ret != WCHNET_ERR_SUCCESS) { - PRINT("IOT: SocketConnect failed: 0x%02X\n", ret); - WCHNET_SocketClose(g_iot_socket, TCP_CLOSE_NORMAL); - g_iot_socket = 0xFF; - return; - } - + g_iot_socket = SocketId_TCP; // 复用已创建的 MQTT socket g_iot_state = IOT_STATE_TCP_CONNECTING; _iot_connect_start = mstick(); PRINT("IOT: TCP connecting to broker (sock=%d)...\n", g_iot_socket); diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c index c9f49a4..2e85877 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c @@ -238,9 +238,15 @@ void Main_Circulation(void) if(g_net_state.flag == 2) { if(g_sub_code_enable.iot_enable){ - // IoT MQTT 模式由 iot_connect_broker() 自行管理 socket, - // 不要在此重复创建,直接推进状态 - g_net_state.flag = 3; + if(iot_net_info.mode == IOT_Addr_IP_Mode){ + if(get_ipstr_to_array(iot_net_info.remote_addr, RemoteIP) == 0){ + WCHNET_CreateTcpMqttSocket(); + } + } + else{ + //DNS + } + } else {