2626
2727// ESP8266Interface implementation
2828ESP8266Interface::ESP8266Interface (PinName tx, PinName rx, bool debug)
29- : _esp(tx, rx, debug)
29+ : _esp(tx, rx, debug), _stack(_esp)
3030{
31- memset (_ids, 0 , sizeof (_ids));
32- memset (_cbs, 0 , sizeof (_cbs));
33-
34- _esp.attach (this , &ESP8266Interface::event);
31+ // Do nothing
3532}
3633
3734int ESP8266Interface::connect (
@@ -71,23 +68,41 @@ int ESP8266Interface::disconnect()
7168 return 0 ;
7269}
7370
74- const char * ESP8266Interface::get_ip_address ()
71+ const char * ESP8266Interface::get_ip_address ()
7572{
7673 return _esp.getIPAddress ();
7774}
7875
79- const char * ESP8266Interface::get_mac_address ()
76+ const char * ESP8266Interface::get_mac_address ()
8077{
8178 return _esp.getMACAddress ();
8279}
8380
81+ NetworkStack* ESP8266Interface::get_stack (void )
82+ {
83+ return &_stack;
84+ }
85+
8486struct esp8266_socket {
8587 int id;
8688 nsapi_protocol_t proto;
8789 bool connected;
8890};
8991
90- int ESP8266Interface::socket_open (void **handle, nsapi_protocol_t proto)
92+ ESP8266Stack::ESP8266Stack (ESP8266 &esp): _esp(esp)
93+ {
94+ memset (_ids, 0 , sizeof (_ids));
95+ memset (_cbs, 0 , sizeof (_cbs));
96+
97+ _esp.attach (this , &ESP8266Stack::event);
98+ };
99+
100+ const char *ESP8266Stack::get_ip_address ()
101+ {
102+ return _esp.getIPAddress ();
103+ }
104+
105+ int ESP8266Stack::socket_open (void **handle, nsapi_protocol_t proto)
91106{
92107 // Look for an unused socket
93108 int id = -1 ;
@@ -116,7 +131,7 @@ int ESP8266Interface::socket_open(void **handle, nsapi_protocol_t proto)
116131 return 0 ;
117132}
118133
119- int ESP8266Interface ::socket_close (void *handle)
134+ int ESP8266Stack ::socket_close (void *handle)
120135{
121136 struct esp8266_socket *socket = (struct esp8266_socket *)handle;
122137 int err = 0 ;
@@ -131,17 +146,17 @@ int ESP8266Interface::socket_close(void *handle)
131146 return err;
132147}
133148
134- int ESP8266Interface ::socket_bind (void *handle, const SocketAddress &address)
149+ int ESP8266Stack ::socket_bind (void *handle, const SocketAddress &address)
135150{
136151 return NSAPI_ERROR_UNSUPPORTED;
137152}
138153
139- int ESP8266Interface ::socket_listen (void *handle, int backlog)
154+ int ESP8266Stack ::socket_listen (void *handle, int backlog)
140155{
141156 return NSAPI_ERROR_UNSUPPORTED;
142157}
143158
144- int ESP8266Interface ::socket_connect (void *handle, const SocketAddress &addr)
159+ int ESP8266Stack ::socket_connect (void *handle, const SocketAddress &addr)
145160{
146161 struct esp8266_socket *socket = (struct esp8266_socket *)handle;
147162 _esp.setTimeout (ESP8266_MISC_TIMEOUT);
@@ -155,12 +170,12 @@ int ESP8266Interface::socket_connect(void *handle, const SocketAddress &addr)
155170 return 0 ;
156171}
157172
158- int ESP8266Interface ::socket_accept (void **handle, void *server)
173+ int ESP8266Stack ::socket_accept (void **handle, void *server)
159174{
160175 return NSAPI_ERROR_UNSUPPORTED;
161176}
162177
163- int ESP8266Interface ::socket_send (void *handle, const void *data, unsigned size)
178+ int ESP8266Stack ::socket_send (void *handle, const void *data, unsigned size)
164179{
165180 struct esp8266_socket *socket = (struct esp8266_socket *)handle;
166181 _esp.setTimeout (ESP8266_SEND_TIMEOUT);
@@ -172,7 +187,7 @@ int ESP8266Interface::socket_send(void *handle, const void *data, unsigned size)
172187 return size;
173188}
174189
175- int ESP8266Interface ::socket_recv (void *handle, void *data, unsigned size)
190+ int ESP8266Stack ::socket_recv (void *handle, void *data, unsigned size)
176191{
177192 struct esp8266_socket *socket = (struct esp8266_socket *)handle;
178193 _esp.setTimeout (ESP8266_RECV_TIMEOUT);
@@ -185,7 +200,7 @@ int ESP8266Interface::socket_recv(void *handle, void *data, unsigned size)
185200 return recv;
186201}
187202
188- int ESP8266Interface ::socket_sendto (void *handle, const SocketAddress &addr, const void *data, unsigned size)
203+ int ESP8266Stack ::socket_sendto (void *handle, const SocketAddress &addr, const void *data, unsigned size)
189204{
190205 struct esp8266_socket *socket = (struct esp8266_socket *)handle;
191206 if (!socket->connected ) {
@@ -198,20 +213,20 @@ int ESP8266Interface::socket_sendto(void *handle, const SocketAddress &addr, con
198213 return socket_send (socket, data, size);
199214}
200215
201- int ESP8266Interface ::socket_recvfrom (void *handle, SocketAddress *addr, void *data, unsigned size)
216+ int ESP8266Stack ::socket_recvfrom (void *handle, SocketAddress *addr, void *data, unsigned size)
202217{
203218 struct esp8266_socket *socket = (struct esp8266_socket *)handle;
204219 return socket_recv (socket, data, size);
205220}
206221
207- void ESP8266Interface ::socket_attach (void *handle, void (*callback)(void *), void *data)
222+ void ESP8266Stack ::socket_attach (void *handle, void (*callback)(void *), void *data)
208223{
209224 struct esp8266_socket *socket = (struct esp8266_socket *)handle;
210225 _cbs[socket->id ].callback = callback;
211226 _cbs[socket->id ].data = data;
212227}
213228
214- void ESP8266Interface ::event () {
229+ void ESP8266Stack ::event () {
215230 for (int i = 0 ; i < ESP8266_SOCKET_COUNT; i++) {
216231 if (_cbs[i].callback ) {
217232 _cbs[i].callback (_cbs[i].data );
0 commit comments