netconf.c 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #include "lwip/mem.h"
  2. #include "lwip/memp.h"
  3. #include "lwip/dhcp.h"
  4. #include "ethernetif.h"
  5. #include "common_config.h"
  6. #include "netconf.h"
  7. #include "tcpip.h"
  8. #include "main.h"
  9. #include "settings_api.h"
  10. #include "parameters.h"
  11. #include "stm32f4x7_eth.h"
  12. #ifdef PRINTF_STDLIB
  13. #include <stdio.h>
  14. #endif
  15. #ifdef PRINTF_CUSTOM
  16. #include "tinystdio.h"
  17. #endif
  18. #include <string.h>
  19. #define MAX_DHCP_TRIES 10
  20. #define TIME_COUNTER_10_MIN 600
  21. #define TIME_COUNTER_1_MIN 60
  22. /**
  23. * @brief Network interface structure
  24. */
  25. struct netif xnetif;
  26. /**
  27. * @brief Флаг ининциализации Eth интерфейса
  28. */
  29. unsigned char eth_ready_flag = 0;
  30. /**
  31. * @brief Задача получения сетевый параметров по DHCP протоколу
  32. */
  33. TaskHandle_t xHandleDHCP = NULL;
  34. /**
  35. * @brief Общая структура настроек
  36. */
  37. extern SETTINGS_t sSettings;
  38. void LwIP_Init(void)
  39. {
  40. struct ip4_addr ipaddr;
  41. struct ip4_addr netmask;
  42. struct ip4_addr gw;
  43. uint16_t reg = 0;
  44. tcpip_init( NULL, NULL );
  45. ipaddr.addr = 0;
  46. netmask.addr = 0;
  47. gw.addr = 0;
  48. netif_add(&xnetif, &ipaddr, &netmask, &gw, NULL, &ethernetif_init, &tcpip_input);
  49. netif_set_default(&xnetif);
  50. netif_set_link_up(&xnetif);
  51. netif_set_up(&xnetif);
  52. /* Проверяем наличие линка */
  53. // reg = ETH_ReadPHYRegister(0, 1);
  54. // if (reg & 4)
  55. xTaskCreate(LwIP_DHCP_task, "DHCPClient", configMINIMAL_STACK_SIZE * 2, NULL,
  56. tskIDLE_PRIORITY + 2, &xHandleDHCP);
  57. }
  58. void init_get_ip_address_controller(void){
  59. xTaskCreate(LwIP_DHCP_task, "DHCPClient", configMINIMAL_STACK_SIZE * 2, NULL,
  60. tskIDLE_PRIORITY + 2, &xHandleDHCP);
  61. }
  62. /**
  63. * @brief LwIP_DHCP_Process_Handle
  64. * @param None
  65. * @retval None
  66. */
  67. void LwIP_DHCP_task(void * pvParameters)
  68. {
  69. struct ip4_addr ipaddr;
  70. struct ip4_addr netmask;
  71. struct ip4_addr gw;
  72. uint8_t DHCP_state;
  73. DHCP_state = DHCP_START;
  74. static uint8_t dhcpTry = 0;
  75. for (;;)
  76. {
  77. switch (DHCP_state)
  78. {
  79. case DHCP_START:
  80. {
  81. dhcp_start(&xnetif);
  82. DHCP_state = DHCP_WAIT_ADDRESS;
  83. //PRINT_USART("\n\rLooking for DHCP server please wait...\n\r");
  84. }
  85. break;
  86. case DHCP_WAIT_ADDRESS:
  87. {
  88. /* Read the new IP address */
  89. ipaddr = xnetif.ip_addr;
  90. netmask = xnetif.netmask;
  91. gw = xnetif.gw;
  92. if (ipaddr.addr != 0)
  93. {
  94. DHCP_state = DHCP_ADDRESS_ASSIGNED;
  95. dhcp_stop(&xnetif);
  96. PRINT_USART("Parameters assigned by a DHCP server:\n\r IP: ");
  97. PRINT_USART(ipaddr_ntoa(&ipaddr));
  98. PRINT_USART("\n\r");
  99. PRINT_USART("Netmask: ");
  100. PRINT_USART(ipaddr_ntoa(&netmask));
  101. PRINT_USART("\n\r");
  102. PRINT_USART("Gateway: ");
  103. PRINT_USART(ipaddr_ntoa(&gw));
  104. PRINT_USART("\n\r");
  105. printf("ETH OK\r\n");
  106. /* Установлен динамический IP. *
  107. * Ждем инициализацию интерфейса и выставляем флаг готовности. */
  108. vTaskDelay(2000);
  109. eth_ready_flag = 1;
  110. vTaskDelete(xHandleDHCP);
  111. }
  112. else
  113. {
  114. /* DHCP timeout */
  115. if (dhcpTry++ > MAX_DHCP_TRIES)
  116. {
  117. DHCP_state = DHCP_TIMEOUT;
  118. /* Stop DHCP */
  119. dhcp_stop(&xnetif);
  120. /* if (sSettings.sFlags.netsettingsChanged == true)
  121. {
  122. ipaddr.addr = ipaddr_addr(sSettings.sWebTempParams.ip);
  123. netmask.addr = ipaddr_addr(sSettings.sWebTempParams.mask);
  124. gw.addr = ipaddr_addr(sSettings.sWebTempParams.gate);
  125. }
  126. else
  127. {
  128. ipaddr.addr = ipaddr_addr(sSettings.sWebParams.ip);
  129. netmask.addr = ipaddr_addr(sSettings.sWebParams.mask);
  130. gw.addr = ipaddr_addr(sSettings.sWebParams.gate);
  131. }
  132. //Static address used
  133. netif_set_addr(&xnetif, &ipaddr , &netmask, &gw);
  134. printf("DHCP timeout\n\r");
  135. printf("\n\rStatic IP address\n\r");
  136. printf(ipaddr_ntoa(&ipaddr));
  137. printf("\n\r");*/
  138. /* Установлен динамический IP. *
  139. * Ждем инициализацию интерфейса и выставляем флаг готовности. */
  140. vTaskDelay(2000);
  141. eth_ready_flag = 0;
  142. vTaskDelete(xHandleDHCP);
  143. }
  144. }
  145. }
  146. break;
  147. default: break;
  148. }
  149. vTaskDelay(1250);
  150. }
  151. }
  152. /*********** Portions COPYRIGHT 2012 Embest Tech. Co., Ltd.*****END OF FILE****/