STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
app_ethernet.c
Go to the documentation of this file.
1 
48 /* Includes ------------------------------------------------------------------*/
49 #include "lwip/opt.h"
50 #include "main.h"
51 #include "lcd_log.h"
52 #include "lwip/dhcp.h"
53 #include "app_ethernet.h"
54 #include "ethernetif.h"
55 
56 /* Private typedef -----------------------------------------------------------*/
57 /* Private define ------------------------------------------------------------*/
58 /* Private macro -------------------------------------------------------------*/
59 /* Private variables ---------------------------------------------------------*/
60 #ifdef USE_DHCP
61 #define MAX_DHCP_TRIES 4
62 __IO uint8_t DHCP_state;
63 #endif
64 
65 /* Private function prototypes -----------------------------------------------*/
66 /* Private functions ---------------------------------------------------------*/
73 {
74  if (netif_is_up(netif))
75  {
76 #ifdef USE_DHCP
77  /* Update DHCP state machine */
78  DHCP_state = DHCP_START;
79 #else
80  //actually not needed to know if we run Network Audio
81  uint8_t iptxt[20];
82  sprintf((char*)iptxt, "%d.%d.%d.%d", IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3);
83 
84  //XXXX
85  {
87  BSP_LCD_DisplayStringAt(640, 220, (uint8_t *)iptxt, LEFT_MODE);
88  }
89 
90  //LCD_UsrLog ("Static IP address: %s\n", iptxt);
91 #endif /* USE_DHCP */
92  }
93  else
94  {
95 #ifdef USE_DHCP
96  /* Update DHCP state machine */
97  DHCP_state = DHCP_LINK_DOWN;
98 #endif /* USE_DHCP */
99  //LCD_UsrLog ("The network cable is not connected \n");
100  }
101 }
102 
103 #ifdef USE_DHCP
104 
109 void DHCP_thread(void const * argument)
110 {
111  struct netif *netif = (struct netif *) argument;
112  ip_addr_t ipaddr;
113  ip_addr_t netmask;
114  ip_addr_t gw;
115  uint32_t IPaddress;
116 
117  for (;;)
118  {
119  switch (DHCP_state)
120  {
121  case DHCP_START:
122  {
123  netif->ip_addr.addr = 0;
124  netif->netmask.addr = 0;
125  netif->gw.addr = 0;
126  IPaddress = 0;
127  dhcp_start(netif);
128  DHCP_state = DHCP_WAIT_ADDRESS;
129  //LCD_UsrLog (" State: Looking for DHCP server ...\n");
130  }
131  break;
132 
133  case DHCP_WAIT_ADDRESS:
134  {
135  /* Read the new IP address */
136  IPaddress = netif->ip_addr.addr;
137 
138  if (IPaddress!=0)
139  {
140  DHCP_state = DHCP_ADDRESS_ASSIGNED;
141 
142  /* Stop DHCP */
143  dhcp_stop(netif);
144 
145  uint8_t iptab[4];
146  uint8_t iptxt[20];
147 
148  iptab[0] = (uint8_t)(IPaddress >> 24);
149  iptab[1] = (uint8_t)(IPaddress >> 16);
150  iptab[2] = (uint8_t)(IPaddress >> 8);
151  iptab[3] = (uint8_t)(IPaddress);
152 
153  sprintf((char*)iptxt, "%d.%d.%d.%d", iptab[3], iptab[2], iptab[1], iptab[0]);
154 
155  //LCD_UsrLog ("IP address assigned by a DHCP server: %s\n", iptxt);
156  //XXXX
157  {
158  char s[10];
159  sprintf(s, "%s", iptxt);
161  BSP_LCD_DisplayStringAt(640, 220, (uint8_t *)s, LEFT_MODE);
162  }
163 
164  }
165  else
166  {
167  /* DHCP timeout */
168  if (netif->dhcp->tries > MAX_DHCP_TRIES)
169  {
170  DHCP_state = DHCP_TIMEOUT;
171 
172  /* Stop DHCP */
173  dhcp_stop(netif);
174 
175  /* Static address used */
176  IP4_ADDR(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 );
178  IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3);
179  netif_set_addr(netif, &ipaddr , &netmask, &gw);
180 
181  uint8_t iptxt[20];
182 
183  sprintf((char*)iptxt, "%d.%d.%d.%d", IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3);
184  //LCD_UsrLog ("DHCP timeout !!\n");
185  //LCD_UsrLog ("Static IP address : %s\n", iptxt);
186 
187  //XXXX
188  {
189  char s[10];
190  sprintf(s, "%s", iptxt);
192  BSP_LCD_DisplayStringAt(640, 220, (uint8_t *)s, LEFT_MODE);
193  }
194  }
195  }
196  }
197  break;
198 
199  default: break;
200  }
201 
202  /* wait 250 ms */
203  osDelay(250);
204  }
205 }
206 #endif /* USE_DHCP */
207 
208 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
#define GW_ADDR0
Definition: main.h:121
#define IP_ADDR2
Definition: main.h:110
#define IP_ADDR0
Definition: main.h:108
#define LCD_COLOR_WHITE
White value in ARGB8888 format.
#define GW_ADDR2
Definition: main.h:123
#define GW_ADDR3
Definition: main.h:124
#define NETMASK_ADDR2
Definition: main.h:117
void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode)
Displays characters in currently active layer.
#define DHCP_ADDRESS_ASSIGNED
Definition: app_ethernet.h:64
#define GW_ADDR1
Definition: main.h:122
#define __IO
Definition: core_cm0.h:213
Definition: netif.h:182
void BSP_LCD_SetTextColor(uint32_t Color)
Sets the LCD text color.
#define NETMASK_ADDR0
Definition: main.h:115
header for the lcd_log.c file
#define NETMASK_ADDR3
Definition: main.h:118
#define DHCP_WAIT_ADDRESS
Definition: app_ethernet.h:63
#define DHCP_LINK_DOWN
Definition: app_ethernet.h:66
ip6_addr_t ip_addr_t
Definition: ip_addr.h:194
#define DHCP_START
Definition: app_ethernet.h:62
osStatus osDelay(uint32_t millisec)
Wait for Timeout (Time Delay)
Definition: cmsis_os.c:305
#define netif_is_up(netif)
Definition: netif.h:356
#define DHCP_TIMEOUT
Definition: app_ethernet.h:65
void User_notification(struct netif *netif)
Notify the User about the network interface config status.
Definition: app_ethernet.c:72
#define NETMASK_ADDR1
Definition: main.h:116
#define IP_ADDR1
Definition: main.h:109
#define IP_ADDR3
Definition: main.h:111