17
17
#include " mbed.h"
18
18
#include " EthernetInterface.h"
19
19
#include " NetworkStack.h"
20
+ #include " SingletonPtr.h"
20
21
21
22
#include " eth_arch.h"
22
23
#include " lwip/opt.h"
29
30
30
31
31
32
/* Predeclared LWIPStack class */
32
- static class LWIPStack : public NetworkStack
33
+ class LWIPStack : public NetworkStack
33
34
{
34
35
virtual const char *get_ip_address ();
35
36
virtual int socket_open (void **handle, nsapi_protocol_t proto);
@@ -44,7 +45,9 @@ static class LWIPStack : public NetworkStack
44
45
virtual int socket_recvfrom (void *handle, SocketAddress *address, void *buffer, unsigned size);
45
46
virtual int setsockopt (void *handle, int level, int optname, const void *optval, unsigned optlen);
46
47
virtual void socket_attach (void *handle, void (*callback)(void *), void *data);
47
- } lwip_stack;
48
+ };
49
+
50
+ static SingletonPtr<LWIPStack> lwip_stack;
48
51
49
52
50
53
/* Static arena of sockets */
@@ -108,26 +111,26 @@ static struct netif lwip_netif;
108
111
static char lwip_ip_addr[NSAPI_IP_SIZE] = " \0 " ;
109
112
static char lwip_mac_addr[NSAPI_MAC_SIZE] = " \0 " ;
110
113
111
- static Semaphore lwip_tcpip_inited ( 0 ) ;
114
+ static SingletonPtr< Semaphore> lwip_tcpip_inited;
112
115
static void lwip_tcpip_init_irq (void *)
113
116
{
114
- lwip_tcpip_inited. release ();
117
+ lwip_tcpip_inited-> release ();
115
118
}
116
119
117
- static Semaphore lwip_netif_linked ( 0 ) ;
120
+ static SingletonPtr< Semaphore> lwip_netif_linked;
118
121
static void lwip_netif_link_irq (struct netif *lwip_netif)
119
122
{
120
123
if (netif_is_link_up (lwip_netif)) {
121
- lwip_netif_linked. release ();
124
+ lwip_netif_linked-> release ();
122
125
}
123
126
}
124
127
125
- static Semaphore lwip_netif_up ( 0 ) ;
128
+ static SingletonPtr< Semaphore> lwip_netif_up;
126
129
static void lwip_netif_status_irq (struct netif *lwip_netif)
127
130
{
128
131
if (netif_is_up (lwip_netif)) {
129
132
strcpy (lwip_ip_addr, inet_ntoa (lwip_netif->ip_addr ));
130
- lwip_netif_up. release ();
133
+ lwip_netif_up-> release ();
131
134
}
132
135
}
133
136
@@ -166,7 +169,7 @@ static int lwip_init()
166
169
lwip_set_mac_address ();
167
170
168
171
tcpip_init (lwip_tcpip_init_irq, NULL );
169
- lwip_tcpip_inited. wait ();
172
+ lwip_tcpip_inited-> wait ();
170
173
171
174
memset (&lwip_netif, 0 , sizeof lwip_netif);
172
175
netif_add (&lwip_netif, 0 , 0 , 0 , NULL , eth_arch_enetif_init, tcpip_input);
@@ -184,7 +187,7 @@ static int lwip_init()
184
187
185
188
// Wait for an IP Address
186
189
// -1: error, 0: timeout
187
- if (lwip_netif_up. wait (15000 ) <= 0 ) {
190
+ if (lwip_netif_up-> wait (15000 ) <= 0 ) {
188
191
return NSAPI_ERROR_DHCP_FAILURE;
189
192
}
190
193
@@ -457,5 +460,5 @@ const char *EthernetInterface::get_mac_address()
457
460
458
461
NetworkStack *EthernetInterface::get_stack ()
459
462
{
460
- return & lwip_stack;
463
+ return lwip_stack. get () ;
461
464
}
0 commit comments