/** ****************************************************************************** * @file LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/app_ethernet.c * @author MCD Application Team * @brief Ethernet specefic module ****************************************************************************** * @attention * *

© Copyright (c) 2017 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under Ultimate Liberty license * SLA0044, the "License"; You may not use this file except in compliance with * the License. You may obtain a copy of the License at: * www.st.com/SLA0044 * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "lwip/opt.h" #include "main.h" #if LWIP_DHCP #include "lwip/dhcp.h" #endif #include "app_ethernet.h" #include "ethernetif.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ #if LWIP_DHCP #define MAX_DHCP_TRIES 8 __IO uint8_t DHCP_state = DHCP_OFF; #endif /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /** * @brief Notify the User about the nework interface config status * @param netif: the network interface * @retval None */ void ethernet_link_status_updated(struct netif *netif) { if (netif_is_up(netif)) { #if LWIP_DHCP /* Update DHCP state machine */ DHCP_state = DHCP_START; #else BSP_LED_On(LED2); BSP_LED_Off(LED3); #endif /* LWIP_DHCP */ } else { #if LWIP_DHCP /* Update DHCP state machine */ DHCP_state = DHCP_LINK_DOWN; #else BSP_LED_Off(LED2); BSP_LED_On(LED3); #endif /* LWIP_DHCP */ } } #if LWIP_DHCP /** * @brief DHCP Process * @param argument: network interface * @retval None */ void DHCP_Thread(void const *argument) { struct netif *netif = (struct netif*) argument; ip_addr_t ipaddr; ip_addr_t netmask; ip_addr_t gw; struct dhcp *dhcp; /* Static address used */ // IP_ADDR4(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); // IP_ADDR4(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, // NETMASK_ADDR3); // IP_ADDR4(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); // netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); for (;;) { switch (DHCP_state) { case DHCP_START : { ip_addr_set_zero_ip4(&netif->ip_addr); ip_addr_set_zero_ip4(&netif->netmask); ip_addr_set_zero_ip4(&netif->gw); DHCP_state = DHCP_WAIT_ADDRESS; BSP_LED_Off(LED2); BSP_LED_Off(LED3); dhcp_start(netif); } break; case DHCP_WAIT_ADDRESS : { if (dhcp_supplied_address(netif)) { DHCP_state = DHCP_ADDRESS_ASSIGNED; BSP_LED_On(LED2); BSP_LED_Off(LED3); } else { dhcp = (struct dhcp*) netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP); /* DHCP timeout */ if (dhcp->tries > MAX_DHCP_TRIES) { DHCP_state = DHCP_TIMEOUT; /* Static address used */ IP_ADDR4(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); IP_ADDR4(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); IP_ADDR4(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); BSP_LED_On(LED2); BSP_LED_Off(LED3); } } } break; case DHCP_LINK_DOWN : { dhcp_release_and_stop(netif); BSP_LED_Off(LED2); BSP_LED_On(LED3); ip_addr_set_zero_ip4(&netif->ip_addr); ip_addr_set_zero_ip4(&netif->netmask); ip_addr_set_zero_ip4(&netif->gw); DHCP_state = DHCP_WAIT_LINK_UP; } break; case DHCP_WAIT_LINK_UP : { if (netif_is_link_up((netif))) { DHCP_state = DHCP_START; } } break; default: break; } /* wait 500 ms */ osDelay(500); } } #endif /* LWIP_DHCP */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/