@@ -79,7 +79,7 @@ static void sc_ack_send_task(void* pvParameters)
79
79
sc_ack_t * ack = (sc_ack_t * )pvParameters ;
80
80
tcpip_adapter_ip_info_t local_ip ;
81
81
uint8_t remote_ip [4 ];
82
- memset (remote_ip , 0xFF , sizeof (remote_ip ));
82
+ memcpy (remote_ip , ack -> ctx . ip , sizeof (remote_ip ));
83
83
struct sockaddr_in server_addr ;
84
84
socklen_t sin_size = sizeof (server_addr );
85
85
int send_sock = -1 ;
@@ -99,6 +99,7 @@ static void sc_ack_send_task(void* pvParameters)
99
99
port_bit = 0 ;
100
100
}
101
101
remote_port = SC_ACK_TOUCH_V2_SERVER_PORT (port_bit );
102
+ memset (remote_ip , 0xFF , sizeof (remote_ip ));
102
103
} else {
103
104
remote_port = SC_ACK_AIRKISS_SERVER_PORT ;
104
105
}
@@ -156,30 +157,32 @@ static void sc_ack_send_task(void* pvParameters)
156
157
memcpy (remote_ip , & from .sin_addr , 4 );
157
158
server_addr .sin_addr .s_addr = from .sin_addr .s_addr ;
158
159
} else {
159
- goto _end ;
160
+ server_addr . sin_addr . s_addr = INADDR_BROADCAST ;
160
161
}
161
162
}
162
163
164
+ uint32_t ip_addr = server_addr .sin_addr .s_addr ;
163
165
while (s_sc_ack_send ) {
164
166
/* Send smartconfig ACK every 100ms. */
165
167
vTaskDelay (100 / portTICK_RATE_MS );
166
- sendlen = sendto (send_sock , & ack -> ctx , ack_len , 0 , (struct sockaddr * ) & server_addr , sin_size );
167
-
168
- if (sendlen > 0 ) {
169
- /* Totally send 60 smartconfig ACKs. Then smartconfig is successful. */
170
- if (packet_count ++ >= SC_ACK_MAX_COUNT ) {
171
- esp_event_post (SC_EVENT , SC_EVENT_SEND_ACK_DONE , NULL , 0 , portMAX_DELAY );
172
- goto _end ;
173
- }
168
+ if (ip_addr != INADDR_BROADCAST ) {
169
+ sendto (send_sock , & ack -> ctx , ack_len , 0 , (struct sockaddr * ) & server_addr , sin_size );
170
+ server_addr .sin_addr .s_addr = INADDR_BROADCAST ;
171
+ sendlen = sendto (send_sock , & ack -> ctx , ack_len , 0 , (struct sockaddr * ) & server_addr , sin_size );
172
+ server_addr .sin_addr .s_addr = ip_addr ;
174
173
} else {
175
- err = sc_ack_send_get_errno (send_sock );
176
-
177
- if (err == ENOMEM || err == EAGAIN ) {
178
- ESP_LOGD (TAG , "send failed, errno %d" , err );
179
- continue ;
180
- }
174
+ sendlen = sendto (send_sock , & ack -> ctx , ack_len , 0 , (struct sockaddr * ) & server_addr , sin_size );
175
+ }
181
176
177
+ if (sendlen <= 0 ) {
178
+ err = sc_ack_send_get_errno (send_sock );
182
179
ESP_LOGE (TAG , "send failed, errno %d" , err );
180
+ vTaskDelay (200 / portTICK_RATE_MS );
181
+ }
182
+
183
+ /* Send 60 smartconfig ACKs, exit regardless of failure or success. */
184
+ if (packet_count ++ >= SC_ACK_MAX_COUNT ) {
185
+ esp_event_post (SC_EVENT , SC_EVENT_SEND_ACK_DONE , NULL , 0 , portMAX_DELAY );
183
186
goto _end ;
184
187
}
185
188
}
0 commit comments