26
26
27
27
// ESP8266Interface implementation
28
28
ESP8266Interface::ESP8266Interface (PinName tx, PinName rx, bool debug)
29
- : _esp(tx, rx, debug)
29
+ : _esp(tx, rx, debug), _stack(_esp)
30
30
{
31
- memset (_ids, 0 , sizeof (_ids));
32
- memset (_cbs, 0 , sizeof (_cbs));
33
-
34
- _esp.attach (this , &ESP8266Interface::event);
31
+ // Do nothing
35
32
}
36
33
37
34
int ESP8266Interface::connect (
@@ -71,23 +68,41 @@ int ESP8266Interface::disconnect()
71
68
return 0 ;
72
69
}
73
70
74
- const char * ESP8266Interface::get_ip_address ()
71
+ const char * ESP8266Interface::get_ip_address ()
75
72
{
76
73
return _esp.getIPAddress ();
77
74
}
78
75
79
- const char * ESP8266Interface::get_mac_address ()
76
+ const char * ESP8266Interface::get_mac_address ()
80
77
{
81
78
return _esp.getMACAddress ();
82
79
}
83
80
81
+ NetworkStack* ESP8266Interface::get_stack (void )
82
+ {
83
+ return &_stack;
84
+ }
85
+
84
86
struct esp8266_socket {
85
87
int id;
86
88
nsapi_protocol_t proto;
87
89
bool connected;
88
90
};
89
91
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)
91
106
{
92
107
// Look for an unused socket
93
108
int id = -1 ;
@@ -116,7 +131,7 @@ int ESP8266Interface::socket_open(void **handle, nsapi_protocol_t proto)
116
131
return 0 ;
117
132
}
118
133
119
- int ESP8266Interface ::socket_close (void *handle)
134
+ int ESP8266Stack ::socket_close (void *handle)
120
135
{
121
136
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
122
137
int err = 0 ;
@@ -131,17 +146,17 @@ int ESP8266Interface::socket_close(void *handle)
131
146
return err;
132
147
}
133
148
134
- int ESP8266Interface ::socket_bind (void *handle, const SocketAddress &address)
149
+ int ESP8266Stack ::socket_bind (void *handle, const SocketAddress &address)
135
150
{
136
151
return NSAPI_ERROR_UNSUPPORTED;
137
152
}
138
153
139
- int ESP8266Interface ::socket_listen (void *handle, int backlog)
154
+ int ESP8266Stack ::socket_listen (void *handle, int backlog)
140
155
{
141
156
return NSAPI_ERROR_UNSUPPORTED;
142
157
}
143
158
144
- int ESP8266Interface ::socket_connect (void *handle, const SocketAddress &addr)
159
+ int ESP8266Stack ::socket_connect (void *handle, const SocketAddress &addr)
145
160
{
146
161
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
147
162
_esp.setTimeout (ESP8266_MISC_TIMEOUT);
@@ -155,12 +170,12 @@ int ESP8266Interface::socket_connect(void *handle, const SocketAddress &addr)
155
170
return 0 ;
156
171
}
157
172
158
- int ESP8266Interface ::socket_accept (void **handle, void *server)
173
+ int ESP8266Stack ::socket_accept (void **handle, void *server)
159
174
{
160
175
return NSAPI_ERROR_UNSUPPORTED;
161
176
}
162
177
163
- int ESP8266Interface ::socket_send (void *handle, const void *data, unsigned size)
178
+ int ESP8266Stack ::socket_send (void *handle, const void *data, unsigned size)
164
179
{
165
180
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
166
181
_esp.setTimeout (ESP8266_SEND_TIMEOUT);
@@ -172,7 +187,7 @@ int ESP8266Interface::socket_send(void *handle, const void *data, unsigned size)
172
187
return size;
173
188
}
174
189
175
- int ESP8266Interface ::socket_recv (void *handle, void *data, unsigned size)
190
+ int ESP8266Stack ::socket_recv (void *handle, void *data, unsigned size)
176
191
{
177
192
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
178
193
_esp.setTimeout (ESP8266_RECV_TIMEOUT);
@@ -185,7 +200,7 @@ int ESP8266Interface::socket_recv(void *handle, void *data, unsigned size)
185
200
return recv;
186
201
}
187
202
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)
189
204
{
190
205
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
191
206
if (!socket->connected ) {
@@ -198,20 +213,20 @@ int ESP8266Interface::socket_sendto(void *handle, const SocketAddress &addr, con
198
213
return socket_send (socket, data, size);
199
214
}
200
215
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)
202
217
{
203
218
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
204
219
return socket_recv (socket, data, size);
205
220
}
206
221
207
- void ESP8266Interface ::socket_attach (void *handle, void (*callback)(void *), void *data)
222
+ void ESP8266Stack ::socket_attach (void *handle, void (*callback)(void *), void *data)
208
223
{
209
224
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
210
225
_cbs[socket->id ].callback = callback;
211
226
_cbs[socket->id ].data = data;
212
227
}
213
228
214
- void ESP8266Interface ::event () {
229
+ void ESP8266Stack ::event () {
215
230
for (int i = 0 ; i < ESP8266_SOCKET_COUNT; i++) {
216
231
if (_cbs[i].callback ) {
217
232
_cbs[i].callback (_cbs[i].data );
0 commit comments