|
@@ -28,7 +28,7 @@
|
|
|
/**
|
|
|
* @brief Network interface structure
|
|
|
*/
|
|
|
-struct netif xnetif;
|
|
|
+struct netif xnetif;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -49,33 +49,34 @@ extern SETTINGS_t sSettings;
|
|
|
|
|
|
void LwIP_Init(void)
|
|
|
{
|
|
|
- struct ip4_addr ipaddr;
|
|
|
- struct ip4_addr netmask;
|
|
|
- struct ip4_addr gw;
|
|
|
- uint16_t reg = 0;
|
|
|
-
|
|
|
- tcpip_init( NULL, NULL );
|
|
|
-
|
|
|
- ipaddr.addr = 0;
|
|
|
- netmask.addr = 0;
|
|
|
- gw.addr = 0;
|
|
|
-
|
|
|
- netif_add(&xnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
|
|
|
- netif_set_default(&xnetif);
|
|
|
- netif_set_link_up(&xnetif);
|
|
|
- netif_set_up(&xnetif);
|
|
|
-
|
|
|
- /* Проверяем наличие линка */
|
|
|
- // reg = ETH_ReadPHYRegister(0, 1);
|
|
|
-
|
|
|
-// if (reg & 4)
|
|
|
+ struct ip4_addr ipaddr;
|
|
|
+ struct ip4_addr netmask;
|
|
|
+ struct ip4_addr gw;
|
|
|
+ uint16_t reg = 0;
|
|
|
+
|
|
|
+ tcpip_init( NULL, NULL );
|
|
|
+
|
|
|
+ ipaddr.addr = 0;
|
|
|
+ netmask.addr = 0;
|
|
|
+ gw.addr = 0;
|
|
|
+
|
|
|
+ netif_add(&xnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
|
|
|
+ netif_set_default(&xnetif);
|
|
|
+ netif_set_link_up(&xnetif);
|
|
|
+ netif_set_up(&xnetif);
|
|
|
+
|
|
|
+ /* Проверяем наличие линка */
|
|
|
+ // reg = ETH_ReadPHYRegister(0, 1);
|
|
|
+
|
|
|
+ // if (reg & 4)
|
|
|
xTaskCreate(LwIP_DHCP_task, "DHCPClient", configMINIMAL_STACK_SIZE * 2, NULL,
|
|
|
- tskIDLE_PRIORITY + 2, &xHandleDHCP);
|
|
|
+ tskIDLE_PRIORITY + 2, &xHandleDHCP);
|
|
|
}
|
|
|
|
|
|
-void init_get_ip_address_controller(void){
|
|
|
- xTaskCreate(LwIP_DHCP_task, "DHCPClient", configMINIMAL_STACK_SIZE * 2, NULL,
|
|
|
- tskIDLE_PRIORITY + 2, &xHandleDHCP);
|
|
|
+void init_get_ip_address_controller(void)
|
|
|
+{
|
|
|
+ xTaskCreate(LwIP_DHCP_task, "DHCPClient", configMINIMAL_STACK_SIZE * 2, NULL,
|
|
|
+ tskIDLE_PRIORITY + 2, &xHandleDHCP);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -83,111 +84,100 @@ void init_get_ip_address_controller(void){
|
|
|
* @param None
|
|
|
* @retval None
|
|
|
*/
|
|
|
-void LwIP_DHCP_task(void * pvParameters)
|
|
|
+void LwIP_DHCP_task(void *pvParameters)
|
|
|
{
|
|
|
- struct ip4_addr ipaddr;
|
|
|
- struct ip4_addr netmask;
|
|
|
- struct ip4_addr gw;
|
|
|
- uint8_t DHCP_state;
|
|
|
- DHCP_state = DHCP_START;
|
|
|
-
|
|
|
-
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- struct dhcp *dhcp = netif_dhcp_data(&xnetif);
|
|
|
- switch (DHCP_state)
|
|
|
- {
|
|
|
- case DHCP_START:
|
|
|
- {
|
|
|
- dhcp_start(&xnetif);
|
|
|
- DHCP_state = DHCP_WAIT_ADDRESS;
|
|
|
- //PRINT_USART("\n\rLooking for DHCP server please wait...\n\r");
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case DHCP_WAIT_ADDRESS:
|
|
|
- {
|
|
|
- /* Read the new IP address */
|
|
|
- ipaddr = xnetif.ip_addr;
|
|
|
- netmask = xnetif.netmask;
|
|
|
- gw = xnetif.gw;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- if (ipaddr.addr != 0)
|
|
|
- {
|
|
|
- DHCP_state = DHCP_ADDRESS_ASSIGNED;
|
|
|
- dhcp_stop(&xnetif);
|
|
|
-
|
|
|
- PRINT_USART("Parameters assigned by a DHCP server:\n\r IP: ");
|
|
|
- PRINT_USART(ipaddr_ntoa(&ipaddr));
|
|
|
-
|
|
|
- PRINT_USART("\n\r");
|
|
|
-
|
|
|
- PRINT_USART("Netmask: ");
|
|
|
- PRINT_USART(ipaddr_ntoa(&netmask));
|
|
|
- PRINT_USART("\n\r");
|
|
|
-
|
|
|
- PRINT_USART("Gateway: ");
|
|
|
- PRINT_USART(ipaddr_ntoa(&gw));
|
|
|
- PRINT_USART("\n\r");
|
|
|
-
|
|
|
- printf("ETH OK\r\n");
|
|
|
-
|
|
|
- /* Установлен динамический IP. *
|
|
|
- * Ждем инициализацию интерфейса и выставляем флаг готовности. */
|
|
|
- vTaskDelay(2000);
|
|
|
- eth_ready_flag = 1;
|
|
|
-
|
|
|
- vTaskDelete(xHandleDHCP);
|
|
|
+ struct ip4_addr ipaddr;
|
|
|
+ struct ip4_addr netmask;
|
|
|
+ struct ip4_addr gw;
|
|
|
+ uint8_t DHCP_state;
|
|
|
+ DHCP_state = DHCP_START;
|
|
|
+
|
|
|
+
|
|
|
+ for (;;) {
|
|
|
+ struct dhcp *dhcp = netif_dhcp_data(&xnetif);
|
|
|
+ switch (DHCP_state) {
|
|
|
+ case DHCP_START: {
|
|
|
+ dhcp_start(&xnetif);
|
|
|
+ DHCP_state = DHCP_WAIT_ADDRESS;
|
|
|
+ //PRINT_USART("\n\rLooking for DHCP server please wait...\n\r");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case DHCP_WAIT_ADDRESS: {
|
|
|
+ /* Read the new IP address */
|
|
|
+ ipaddr = xnetif.ip_addr;
|
|
|
+ netmask = xnetif.netmask;
|
|
|
+ gw = xnetif.gw;
|
|
|
+
|
|
|
+ if (ipaddr.addr != 0) {
|
|
|
+ DHCP_state = DHCP_ADDRESS_ASSIGNED;
|
|
|
+
|
|
|
+ PRINT_USART("Parameters assigned by a DHCP server:\n\r IP: ");
|
|
|
+ PRINT_USART(ipaddr_ntoa(&ipaddr));
|
|
|
+
|
|
|
+ PRINT_USART("\n\r");
|
|
|
+
|
|
|
+ PRINT_USART("Netmask: ");
|
|
|
+ PRINT_USART(ipaddr_ntoa(&netmask));
|
|
|
+ PRINT_USART("\n\r");
|
|
|
+
|
|
|
+ PRINT_USART("Gateway: ");
|
|
|
+ PRINT_USART(ipaddr_ntoa(&gw));
|
|
|
+ PRINT_USART("\n\r");
|
|
|
+
|
|
|
+ printf("ETH OK\r\n");
|
|
|
+
|
|
|
+ /* Установлен динамический IP. *
|
|
|
+ * Ждем инициализацию интерфейса и выставляем флаг готовности. */
|
|
|
+ vTaskDelay(2000);
|
|
|
+ eth_ready_flag = 1;
|
|
|
+
|
|
|
+ vTaskDelete(xHandleDHCP);
|
|
|
+ } else {
|
|
|
+ /* DHCP timeout */
|
|
|
+ if (dhcp->tries > MAX_DHCP_TRIES) {
|
|
|
+ DHCP_state = DHCP_TIMEOUT;
|
|
|
+
|
|
|
+ /* Stop DHCP */
|
|
|
+ dhcp_stop(&xnetif);
|
|
|
+
|
|
|
+ /* if (sSettings.sFlags.netsettingsChanged == true)
|
|
|
+ {
|
|
|
+ ipaddr.addr = ipaddr_addr(sSettings.sWebTempParams.ip);
|
|
|
+ netmask.addr = ipaddr_addr(sSettings.sWebTempParams.mask);
|
|
|
+ gw.addr = ipaddr_addr(sSettings.sWebTempParams.gate);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ipaddr.addr = ipaddr_addr(sSettings.sWebParams.ip);
|
|
|
+ netmask.addr = ipaddr_addr(sSettings.sWebParams.mask);
|
|
|
+ gw.addr = ipaddr_addr(sSettings.sWebParams.gate);
|
|
|
+ }
|
|
|
+
|
|
|
+ //Static address used
|
|
|
+ netif_set_addr(&xnetif, &ipaddr , &netmask, &gw);
|
|
|
+
|
|
|
+ printf("DHCP timeout\n\r");
|
|
|
+ printf("\n\rStatic IP address\n\r");
|
|
|
+ printf(ipaddr_ntoa(&ipaddr));
|
|
|
+ printf("\n\r");*/
|
|
|
+
|
|
|
+ /* Установлен динамический IP. *
|
|
|
+ * Ждем инициализацию интерфейса и выставляем флаг готовности. */
|
|
|
+ vTaskDelay(2000);
|
|
|
+ eth_ready_flag = 0;
|
|
|
+
|
|
|
+ vTaskDelete(xHandleDHCP);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ default: break;
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- /* DHCP timeout */
|
|
|
- if (dhcp->tries > MAX_DHCP_TRIES)
|
|
|
- {
|
|
|
- DHCP_state = DHCP_TIMEOUT;
|
|
|
-
|
|
|
- /* Stop DHCP */
|
|
|
- dhcp_stop(&xnetif);
|
|
|
-
|
|
|
- /* if (sSettings.sFlags.netsettingsChanged == true)
|
|
|
- {
|
|
|
- ipaddr.addr = ipaddr_addr(sSettings.sWebTempParams.ip);
|
|
|
- netmask.addr = ipaddr_addr(sSettings.sWebTempParams.mask);
|
|
|
- gw.addr = ipaddr_addr(sSettings.sWebTempParams.gate);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ipaddr.addr = ipaddr_addr(sSettings.sWebParams.ip);
|
|
|
- netmask.addr = ipaddr_addr(sSettings.sWebParams.mask);
|
|
|
- gw.addr = ipaddr_addr(sSettings.sWebParams.gate);
|
|
|
- }
|
|
|
-
|
|
|
- //Static address used
|
|
|
- netif_set_addr(&xnetif, &ipaddr , &netmask, &gw);
|
|
|
-
|
|
|
- printf("DHCP timeout\n\r");
|
|
|
- printf("\n\rStatic IP address\n\r");
|
|
|
- printf(ipaddr_ntoa(&ipaddr));
|
|
|
- printf("\n\r");*/
|
|
|
-
|
|
|
- /* Установлен динамический IP. *
|
|
|
- * Ждем инициализацию интерфейса и выставляем флаг готовности. */
|
|
|
- vTaskDelay(2000);
|
|
|
- eth_ready_flag = 0;
|
|
|
-
|
|
|
- vTaskDelete(xHandleDHCP);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
|
|
|
- default: break;
|
|
|
+ vTaskDelay(250);
|
|
|
}
|
|
|
-
|
|
|
- vTaskDelay(250);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/*********** Portions COPYRIGHT 2012 Embest Tech. Co., Ltd.*****END OF FILE****/
|