@@ -85,6 +85,7 @@ void tcpip_adapter_init(void)
85
85
86
86
tcpip_init (NULL , NULL );
87
87
88
+ memset (esp_ip , 0 , sizeof (tcpip_adapter_ip_info_t )* TCPIP_ADAPTER_IF_MAX );
88
89
IP4_ADDR (& esp_ip [TCPIP_ADAPTER_IF_AP ].ip , 192 , 168 , 4 , 1 );
89
90
IP4_ADDR (& esp_ip [TCPIP_ADAPTER_IF_AP ].gw , 192 , 168 , 4 , 1 );
90
91
IP4_ADDR (& esp_ip [TCPIP_ADAPTER_IF_AP ].netmask , 255 , 255 , 255 , 0 );
@@ -140,8 +141,11 @@ esp_err_t tcpip_adapter_start(tcpip_adapter_if_t tcpip_if, uint8_t *mac, tcpip_a
140
141
return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS ;
141
142
}
142
143
143
- if (esp_netif [tcpip_if ] == NULL ) {
144
- esp_netif [tcpip_if ] = calloc (1 , sizeof (* esp_netif [tcpip_if ]));
144
+ if (esp_netif [tcpip_if ] == NULL || !netif_is_up (esp_netif [tcpip_if ])) {
145
+ if (esp_netif [tcpip_if ] == NULL ) {
146
+ esp_netif [tcpip_if ] = calloc (1 , sizeof (* esp_netif [tcpip_if ]));
147
+ }
148
+
145
149
if (esp_netif [tcpip_if ] == NULL ) {
146
150
return ESP_ERR_NO_MEM ;
147
151
}
@@ -166,11 +170,11 @@ esp_err_t tcpip_adapter_start(tcpip_adapter_if_t tcpip_if, uint8_t *mac, tcpip_a
166
170
}
167
171
168
172
/* if ap is on, choose ap as default if */
169
- if (esp_netif [TCPIP_ADAPTER_IF_AP ]) {
173
+ if (netif_is_up ( esp_netif [TCPIP_ADAPTER_IF_AP ]) ) {
170
174
netif_set_default (esp_netif [TCPIP_ADAPTER_IF_AP ]);
171
- } else if (esp_netif [TCPIP_ADAPTER_IF_STA ]) {
175
+ } else if (netif_is_up ( esp_netif [TCPIP_ADAPTER_IF_STA ]) ) {
172
176
netif_set_default (esp_netif [TCPIP_ADAPTER_IF_STA ]);
173
- } else if (esp_netif [TCPIP_ADAPTER_IF_ETH ] ) {
177
+ } else if (netif_is_up ( esp_netif [TCPIP_ADAPTER_IF_ETH ]) ) {
174
178
netif_set_default (esp_netif [TCPIP_ADAPTER_IF_ETH ]);
175
179
}
176
180
@@ -194,6 +198,11 @@ esp_err_t tcpip_adapter_stop(tcpip_adapter_if_t tcpip_if)
194
198
return ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY ;
195
199
}
196
200
201
+ if (!netif_is_up (esp_netif [tcpip_if ])) {
202
+ netif_remove (esp_netif [tcpip_if ]);
203
+ return ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY ;
204
+ }
205
+
197
206
if (tcpip_if == TCPIP_ADAPTER_IF_AP ) {
198
207
dhcps_stop (esp_netif [tcpip_if ]); // TODO: dhcps checks status by its self
199
208
if (TCPIP_ADAPTER_DHCP_STOPPED != dhcps_status ) {
@@ -211,14 +220,16 @@ esp_err_t tcpip_adapter_stop(tcpip_adapter_if_t tcpip_if)
211
220
ip4_addr_set_zero (& esp_ip [tcpip_if ].netmask );
212
221
}
213
222
223
+ netif_set_down (esp_netif [tcpip_if ]);
214
224
netif_remove (esp_netif [tcpip_if ]);
215
225
216
- free (esp_netif [tcpip_if ]);
217
- esp_netif [tcpip_if ] = NULL ;
218
-
219
226
/* in ap + sta mode, if stop ap, choose sta as default if */
220
- if (esp_netif [TCPIP_ADAPTER_IF_STA ] && tcpip_if == TCPIP_ADAPTER_IF_AP ) {
221
- netif_set_default (esp_netif [TCPIP_ADAPTER_IF_STA ]);
227
+ if (tcpip_if == TCPIP_ADAPTER_IF_AP ) {
228
+ if (netif_is_up (esp_netif [TCPIP_ADAPTER_IF_STA ])) {
229
+ netif_set_default (esp_netif [TCPIP_ADAPTER_IF_STA ]);
230
+ } else if (netif_is_up (esp_netif [TCPIP_ADAPTER_IF_ETH ])) {
231
+ netif_set_default (esp_netif [TCPIP_ADAPTER_IF_ETH ]);
232
+ }
222
233
}
223
234
224
235
return ESP_OK ;
@@ -244,6 +255,14 @@ esp_err_t tcpip_adapter_up(tcpip_adapter_if_t tcpip_if)
244
255
netif_set_up (esp_netif [tcpip_if ]);
245
256
}
246
257
258
+ if (netif_is_up (esp_netif [TCPIP_ADAPTER_IF_AP ])) {
259
+ netif_set_default (esp_netif [TCPIP_ADAPTER_IF_AP ]);
260
+ } else if (netif_is_up (esp_netif [TCPIP_ADAPTER_IF_STA ])) {
261
+ netif_set_default (esp_netif [TCPIP_ADAPTER_IF_STA ]);
262
+ } else if (netif_is_up (esp_netif [TCPIP_ADAPTER_IF_ETH ])) {
263
+ netif_set_default (esp_netif [TCPIP_ADAPTER_IF_ETH ]);
264
+ }
265
+
247
266
return ESP_OK ;
248
267
}
249
268
0 commit comments