Skip to content

Commit b9954e6

Browse files
author
fpr
committed
Fix issue #4: init sequence must be done only one time
Signed-off-by: fpr <[email protected]>
1 parent 2490c0f commit b9954e6

File tree

1 file changed

+45
-37
lines changed

1 file changed

+45
-37
lines changed

src/utility/stm32_eth.c

+45-37
Original file line numberDiff line numberDiff line change
@@ -161,52 +161,60 @@ static void TIM_scheduler_Config(void)
161161

162162
void stm32_eth_init(const uint8_t *mac, const uint8_t *ip, const uint8_t *gw, const uint8_t *netmask)
163163
{
164-
/* Initialize the LwIP stack */
165-
lwip_init();
164+
static uint8_t initDone = 0;
165+
166+
if(!initDone) {
167+
/* Initialize the LwIP stack */
168+
lwip_init();
169+
170+
if(mac != NULL) {
171+
ethernetif_set_mac_addr(mac);
172+
} // else default value is used: MAC_ADDR0 ... MAC_ADDR5
173+
174+
if(ip != NULL) {
175+
IP_ADDR4(&(gconfig.ipaddr),ip[0],ip[1],ip[2],ip[3]);
176+
} else {
177+
#if LWIP_DHCP
178+
ip_addr_set_zero_ip4(&(gconfig.ipaddr));
179+
#else
180+
IP_ADDR4(&(gconfig.ipaddr),IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3);
181+
#endif /* LWIP_DHCP */
182+
}
166183

167-
if(mac != NULL) {
168-
ethernetif_set_mac_addr(mac);
169-
} // else default value is used: MAC_ADDR0 ... MAC_ADDR5
184+
if(gw != NULL) {
185+
IP_ADDR4(&(gconfig.gw),gw[0],gw[1],gw[2],gw[3]);
186+
} else {
187+
#if LWIP_DHCP
188+
ip_addr_set_zero_ip4(&(gconfig.gw));
189+
#else
190+
IP_ADDR4(&(gconfig.gw),GW_ADDR0,GW_ADDR1,GW_ADDR2,GW_ADDR3);
191+
#endif /* LWIP_DHCP */
192+
}
170193

171-
if(ip != NULL) {
172-
IP_ADDR4(&(gconfig.ipaddr),ip[0],ip[1],ip[2],ip[3]);
173-
} else {
174-
#if LWIP_DHCP
175-
ip_addr_set_zero_ip4(&(gconfig.ipaddr));
176-
#else
177-
IP_ADDR4(&(gconfig.ipaddr),IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3);
178-
#endif /* LWIP_DHCP */
179-
}
194+
if(netmask != NULL) {
195+
IP_ADDR4(&(gconfig.netmask),netmask[0],netmask[1],netmask[2],netmask[3]);
196+
} else {
197+
#if LWIP_DHCP
198+
ip_addr_set_zero_ip4(&(gconfig.netmask));
199+
#else
200+
IP_ADDR4(&(gconfig.netmask),NETMASK_ADDR0,NETMASK_ADDR1,NETMASK_ADDR2,NETMASK_ADDR3);
201+
#endif /* LWIP_DHCP */
202+
}
180203

181-
if(gw != NULL) {
182-
IP_ADDR4(&(gconfig.gw),gw[0],gw[1],gw[2],gw[3]);
183-
} else {
184-
#if LWIP_DHCP
185-
ip_addr_set_zero_ip4(&(gconfig.gw));
186-
#else
187-
IP_ADDR4(&(gconfig.gw),GW_ADDR0,GW_ADDR1,GW_ADDR2,GW_ADDR3);
188-
#endif /* LWIP_DHCP */
189-
}
204+
/* Configure the Network interface */
205+
Netif_Config();
190206

191-
if(netmask != NULL) {
192-
IP_ADDR4(&(gconfig.netmask),netmask[0],netmask[1],netmask[2],netmask[3]);
193-
} else {
194-
#if LWIP_DHCP
195-
ip_addr_set_zero_ip4(&(gconfig.netmask));
196-
#else
197-
IP_ADDR4(&(gconfig.netmask),NETMASK_ADDR0,NETMASK_ADDR1,NETMASK_ADDR2,NETMASK_ADDR3);
198-
#endif /* LWIP_DHCP */
199-
}
207+
// stm32_eth_scheduler() will be called every 1ms.
208+
TIM_scheduler_Config();
200209

201-
/* Configure the Network interface */
202-
Netif_Config();
210+
initDone = 1;
211+
}
203212

213+
/* Reset DHCP if used */
204214
User_notification(&gnetif);
205215

216+
/* Update LwIP stack */
206217
stm32_eth_scheduler();
207-
208-
// stm32_eth_scheduler() will be called every 1ms.
209-
TIM_scheduler_Config();
210218
}
211219

212220
/**

0 commit comments

Comments
 (0)