@@ -133,8 +133,15 @@ nsapi_error_t CC3220SFInterface::set_credentials(const char *ssid, const char *p
133
133
nsapi_error_t CC3220SFInterface::set_channel (uint8_t channel)
134
134
{
135
135
_channel = channel;
136
- _cc3200_simplelink.set_channel (channel);
137
- return NSAPI_ERROR_OK;
136
+ int32_t status = _cc3200_simplelink.set_channel (channel);
137
+ if (status == 0 )
138
+ {
139
+ return NSAPI_ERROR_OK;
140
+ }
141
+ else
142
+ {
143
+ return NSAPI_ERROR_DEVICE_ERROR;
144
+ }
138
145
}
139
146
140
147
nsapi_error_t CC3220SFInterface::disconnect ()
@@ -212,7 +219,7 @@ nsapi_connection_status_t CC3220SFInterface::get_connection_status() const
212
219
}
213
220
214
221
struct cc3200_socket {
215
- int id ;
222
+ int sd ;
216
223
nsapi_protocol_t proto;
217
224
bool connected;
218
225
// SocketAddress addr;
@@ -221,11 +228,23 @@ struct cc3200_socket {
221
228
222
229
int CC3220SFInterface::socket_open (void **handle, nsapi_protocol_t proto)
223
230
{
231
+ int32_t sd;
224
232
if (handle)
225
233
{
226
- *( int32_t *)handle = _cc3200_simplelink. open_socket (proto) ;
227
- if (*( int32_t *)handle >= 0 )
234
+ struct cc3200_socket *socket = new struct cc3200_socket ;
235
+ if (!socket )
228
236
{
237
+ return NSAPI_ERROR_NO_SOCKET;
238
+ }
239
+
240
+ sd = _cc3200_simplelink.open_socket (proto);
241
+ if (sd >= 0 ) // socket open succeeded
242
+ {
243
+ socket->sd = sd;
244
+ socket->proto = proto;
245
+ socket->connected = false ;
246
+ socket->keepalive = 0 ;
247
+ *handle = socket;
229
248
return 0 ;
230
249
}
231
250
}
@@ -234,32 +253,93 @@ int CC3220SFInterface::socket_open(void **handle, nsapi_protocol_t proto)
234
253
235
254
int CC3220SFInterface::socket_close (void *handle)
236
255
{
237
- return (_cc3200_simplelink.close_socket ((uint32_t )handle));
256
+ struct cc3200_socket *socket = (struct cc3200_socket *)handle;
257
+ int err = 0 ;
258
+
259
+ if (!socket) {
260
+ return NSAPI_ERROR_NO_SOCKET;
261
+ }
262
+
263
+ if (socket->connected && !_cc3200_simplelink.close_socket (socket->sd ))
264
+ {
265
+ err = NSAPI_ERROR_DEVICE_ERROR;
266
+ }
267
+ socket->connected = false ;
268
+ delete socket;
269
+ return err;
270
+ }
271
+
272
+ #if 0
273
+ nsapi_error_t CC3220SFInterface::gethostbyname(const char *name, SocketAddress *address, nsapi_version_t version)
274
+ {
275
+ nsapi_addr_t ip_address;
276
+ ip_address.version = NSAPI_IPv4;
277
+ if (_cc3200_simplelink.dns_lookup(name, (char*)ip_address.bytes, sizeof(ip_address.bytes), version) == NSAPI_ERROR_OK)
278
+ {
279
+ address->set_addr(ip_address);
280
+ return NSAPI_ERROR_OK;
281
+ }
282
+ else
283
+ {
284
+ return NSAPI_ERROR_DNS_FAILURE;
285
+ }
286
+ }
287
+ #endif
288
+
289
+ nsapi_error_t CC3220SFInterface::get_dns_server (int index, SocketAddress *address)
290
+ {
291
+ nsapi_addr_t dns_address;
292
+ dns_address.version = NSAPI_IPv4;
293
+ if (_cc3200_simplelink.getDNS (dns_address.bytes , sizeof (dns_address.bytes )) == NSAPI_ERROR_OK)
294
+ {
295
+ address->set_addr (dns_address);
296
+ return NSAPI_ERROR_OK;
297
+ }
298
+ else
299
+ {
300
+ return NSAPI_ERROR_DNS_FAILURE;
301
+ }
238
302
}
239
303
240
304
nsapi_error_t CC3220SFInterface::setsockopt (nsapi_socket_t handle, int level,
241
305
int optname, const void *optval, unsigned optlen)
242
306
{
243
- nsapi_error_t retcode = _cc3200_simplelink.setsockopt ((uint32_t )handle, level, optname, optval, optlen);
307
+ struct cc3200_socket *socket = (struct cc3200_socket *)handle;
308
+ if (!socket)
309
+ {
310
+ return NSAPI_ERROR_NO_SOCKET;
311
+ }
312
+ nsapi_error_t retcode = _cc3200_simplelink.setsockopt (socket->sd , level, optname, optval, optlen);
244
313
return retcode;
245
314
}
246
315
247
316
nsapi_error_t CC3220SFInterface::getsockopt (nsapi_socket_t handle, int level, int optname,
248
317
void *optval, unsigned *optlen)
249
318
{
250
- nsapi_error_t retcode = _cc3200_simplelink.getsockopt ((uint32_t )handle, level, optname, optval, optlen);
319
+ struct cc3200_socket *socket = (struct cc3200_socket *)handle;
320
+ if (!socket)
321
+ {
322
+ return NSAPI_ERROR_NO_SOCKET;
323
+ }
324
+ nsapi_error_t retcode = _cc3200_simplelink.getsockopt (socket->sd , level, optname, optval, optlen);
251
325
return retcode;
252
326
}
253
327
254
328
int CC3220SFInterface::socket_bind (void *handle, const SocketAddress &address)
255
329
{
330
+ struct cc3200_socket *socket = (struct cc3200_socket *)handle;
331
+ if (!socket)
332
+ {
333
+ return NSAPI_ERROR_NO_SOCKET;
334
+ }
335
+
256
336
bool ipv6 = false ;
257
337
nsapi_addr_t nsapi_address = address.get_addr ();
258
338
if (nsapi_address.version == NSAPI_IPv6)
259
339
{
260
340
ipv6 = true ;
261
341
}
262
- return _cc3200_simplelink.bind_socket (( uint32_t )handle , ipv6, nsapi_address.bytes , address.get_port ());
342
+ return _cc3200_simplelink.bind_socket (socket-> sd , ipv6, nsapi_address.bytes , address.get_port ());
263
343
}
264
344
265
345
int CC3220SFInterface::socket_listen (void *handle, int backlog)
@@ -269,14 +349,25 @@ int CC3220SFInterface::socket_listen(void *handle, int backlog)
269
349
270
350
int CC3220SFInterface::socket_connect (void *handle, const SocketAddress &addr)
271
351
{
352
+ struct cc3200_socket *socket = (struct cc3200_socket *)handle;
353
+ if (!socket)
354
+ {
355
+ return NSAPI_ERROR_NO_SOCKET;
356
+ }
272
357
bool ipv6 = false ;
273
358
nsapi_addr_t nsapi_address = addr.get_addr ();
274
359
if (nsapi_address.version == NSAPI_IPv6)
275
360
{
276
361
ipv6 = true ;
277
362
}
278
363
279
- return _cc3200_simplelink.connect_socket ((uint32_t )handle, ipv6, nsapi_address.bytes , addr.get_port ());
364
+ if (_cc3200_simplelink.connect_socket (socket->sd , ipv6, nsapi_address.bytes , addr.get_port ()) == 0 )
365
+ {
366
+ socket->connected = true ;
367
+ return 0 ;
368
+ }
369
+ printf (" socket_connect failed\n " );
370
+ return NSAPI_ERROR_DEVICE_ERROR;
280
371
}
281
372
282
373
int CC3220SFInterface::socket_accept (void *handle, void **socket, SocketAddress *address)
@@ -286,27 +377,47 @@ int CC3220SFInterface::socket_accept(void *handle, void **socket, SocketAddress
286
377
287
378
int CC3220SFInterface::socket_send (void *handle, const void *data, unsigned size)
288
379
{
289
- return _cc3200_simplelink.send ((uint32_t )handle, data, size);
380
+ struct cc3200_socket *socket = (struct cc3200_socket *)handle;
381
+ if (!socket)
382
+ {
383
+ return NSAPI_ERROR_NO_SOCKET;
384
+ }
385
+ return _cc3200_simplelink.send (socket->sd , data, size);
290
386
}
291
387
292
388
int CC3220SFInterface::socket_recv (void *handle, void *data, unsigned size)
293
389
{
294
- return _cc3200_simplelink.recv ((uint32_t )handle, data, size);
390
+ struct cc3200_socket *socket = (struct cc3200_socket *)handle;
391
+ if (!socket)
392
+ {
393
+ return NSAPI_ERROR_NO_SOCKET;
394
+ }
395
+ return _cc3200_simplelink.recv (socket->sd , data, size);
295
396
}
296
397
297
398
int CC3220SFInterface::socket_sendto (void *handle, const SocketAddress &address, const void *data, unsigned size)
298
399
{
400
+ struct cc3200_socket *socket = (struct cc3200_socket *)handle;
401
+ if (!socket)
402
+ {
403
+ return NSAPI_ERROR_NO_SOCKET;
404
+ }
299
405
bool ipv6 = false ;
300
406
nsapi_addr_t nsapi_address = address.get_addr ();
301
407
if (nsapi_address.version == NSAPI_IPv6)
302
408
{
303
409
ipv6 = true ;
304
410
}
305
- return _cc3200_simplelink.sendto_socket (( uint32_t )handle , ipv6, data, size, nsapi_address.bytes , address.get_port ());
411
+ return _cc3200_simplelink.sendto_socket (socket-> sd , ipv6, data, size, nsapi_address.bytes , address.get_port ());
306
412
}
307
413
308
414
int CC3220SFInterface::socket_recvfrom (void *handle, SocketAddress *address, void *buffer, unsigned size)
309
415
{
416
+ struct cc3200_socket *socket = (struct cc3200_socket *)handle;
417
+ if (!socket)
418
+ {
419
+ return NSAPI_ERROR_NO_SOCKET;
420
+ }
310
421
bool ipv6 = false ;
311
422
if (address)
312
423
{
@@ -315,11 +426,11 @@ int CC3220SFInterface::socket_recvfrom(void *handle, SocketAddress *address, voi
315
426
{
316
427
ipv6 = true ;
317
428
}
318
- return _cc3200_simplelink.recvfrom (( uint32_t )handle , ipv6, buffer, size, nsapi_address.bytes , address->get_port ());
429
+ return _cc3200_simplelink.recvfrom (socket-> sd , ipv6, buffer, size, nsapi_address.bytes , address->get_port ());
319
430
}
320
431
else
321
432
{
322
- return _cc3200_simplelink. recv (( uint32_t )handle, buffer, size) ;
433
+ return 0 ;
323
434
}
324
435
}
325
436
0 commit comments