@@ -92,6 +92,7 @@ static void sc_ack_send_task(void *pvParameters)
92
92
port_bit = 0 ;
93
93
}
94
94
remote_port = SC_ACK_TOUCH_V2_SERVER_PORT (port_bit );
95
+ memset (remote_ip , 0xFF , sizeof (remote_ip ));
95
96
} else {
96
97
remote_port = SC_ACK_AIRKISS_SERVER_PORT ;
97
98
}
@@ -165,15 +166,24 @@ static void sc_ack_send_task(void *pvParameters)
165
166
memcpy (remote_ip , & from .sin_addr , 4 );
166
167
server_addr .sin_addr .s_addr = from .sin_addr .s_addr ;
167
168
} else {
168
- goto _end ;
169
+ server_addr . sin_addr . s_addr = INADDR_BROADCAST ;
169
170
}
170
171
}
171
172
173
+ uint32_t ip_addr = server_addr .sin_addr .s_addr ;
172
174
while (s_sc_ack_send ) {
173
175
/* Send smartconfig ACK every 100ms. */
174
176
vTaskDelay (100 / portTICK_RATE_MS );
175
177
176
- sendlen = sendto (send_sock , & ack -> ctx , ack_len , 0 , (struct sockaddr * ) & server_addr , sin_size );
178
+ if (ip_addr != INADDR_BROADCAST ) {
179
+ sendto (send_sock , & ack -> ctx , ack_len , 0 , (struct sockaddr * ) & server_addr , sin_size );
180
+ server_addr .sin_addr .s_addr = INADDR_BROADCAST ;
181
+ sendlen = sendto (send_sock , & ack -> ctx , ack_len , 0 , (struct sockaddr * ) & server_addr , sin_size );
182
+ server_addr .sin_addr .s_addr = ip_addr ;
183
+ } else {
184
+ sendlen = sendto (send_sock , & ack -> ctx , ack_len , 0 , (struct sockaddr * ) & server_addr , sin_size );
185
+ }
186
+
177
187
if (sendlen <= 0 ) {
178
188
err = sc_ack_send_get_errno (send_sock );
179
189
ESP_LOGD (TAG , "send failed, errno %d" , err );
0 commit comments