@@ -24,11 +24,9 @@ CC3220SFInterface::CC3220SFInterface():
2424 _initialized(false ),
2525 _started(false )
2626{
27- // memset(_ids, 0, sizeof(_ids));
2827 // memset(_cbs, 0, sizeof(_cbs));
2928 memset (_ssid, 0 , sizeof (_ssid));
3029 memset (_pass, 0 , sizeof (_pass));
31- // memset(_local_ports, 0, sizeof(_local_ports));
3230 _security = NSAPI_SECURITY_UNKNOWN;
3331 _cc3200_simplelink.initialize ();
3432}
@@ -213,35 +211,72 @@ nsapi_connection_status_t CC3220SFInterface::get_connection_status() const
213211 return _cc3200_simplelink.get_connection_status ();
214212}
215213
216- #if 0
217- WiFiInterface *WiFiInterface::get_default_instance() {
218- static CC3220SF_WiFiInterface cc3220_wifi;
219- return &cc3220_wifi;
220- }
221- #endif
214+ struct cc3200_socket {
215+ int id;
216+ nsapi_protocol_t proto;
217+ bool connected;
218+ // SocketAddress addr;
219+ int keepalive; // TCP
220+ };
222221
223222int CC3220SFInterface::socket_open (void **handle, nsapi_protocol_t proto)
224223{
225- return 0 ;
224+ if (handle)
225+ {
226+ *(int32_t *)handle = _cc3200_simplelink.open_socket (proto);
227+ if (*(int32_t *)handle >= 0 )
228+ {
229+ return 0 ;
230+ }
231+ }
232+ return -1 ;
226233}
234+
227235int CC3220SFInterface::socket_close (void *handle)
228236{
229- return 0 ;
237+ return (_cc3200_simplelink.close_socket ((uint32_t )handle));
238+ }
239+
240+ nsapi_error_t CC3220SFInterface::setsockopt (nsapi_socket_t handle, int level,
241+ int optname, const void *optval, unsigned optlen)
242+ {
243+ nsapi_error_t retcode = _cc3200_simplelink.setsockopt ((uint32_t )handle, level, optname, optval, optlen);
244+ return retcode;
245+ }
246+
247+ nsapi_error_t CC3220SFInterface::getsockopt (nsapi_socket_t handle, int level, int optname,
248+ void *optval, unsigned *optlen)
249+ {
250+ nsapi_error_t retcode = _cc3200_simplelink.getsockopt ((uint32_t )handle, level, optname, optval, optlen);
251+ return retcode;
230252}
231253
232254int CC3220SFInterface::socket_bind (void *handle, const SocketAddress &address)
233255{
234- return 0 ;
256+ bool ipv6 = false ;
257+ nsapi_addr_t nsapi_address = address.get_addr ();
258+ if (nsapi_address.version == NSAPI_IPv6)
259+ {
260+ ipv6 = true ;
261+ }
262+ return _cc3200_simplelink.bind_socket ((uint32_t )handle, ipv6, nsapi_address.bytes , address.get_port ());
235263}
236264
237265int CC3220SFInterface::socket_listen (void *handle, int backlog)
238266{
239267 return 0 ;
240268}
241269
242- int CC3220SFInterface::socket_connect (void *handle, const SocketAddress &address )
270+ int CC3220SFInterface::socket_connect (void *handle, const SocketAddress &addr )
243271{
244- return 0 ;
272+ bool ipv6 = false ;
273+ nsapi_addr_t nsapi_address = addr.get_addr ();
274+ if (nsapi_address.version == NSAPI_IPv6)
275+ {
276+ ipv6 = true ;
277+ }
278+
279+ return _cc3200_simplelink.connect_socket ((uint32_t )handle, ipv6, nsapi_address.bytes , addr.get_port ());
245280}
246281
247282int CC3220SFInterface::socket_accept (void *handle, void **socket, SocketAddress *address)
@@ -251,22 +286,41 @@ int CC3220SFInterface::socket_accept(void *handle, void **socket, SocketAddress
251286
252287int CC3220SFInterface::socket_send (void *handle, const void *data, unsigned size)
253288{
254- return 0 ;
289+ return _cc3200_simplelink. send (( uint32_t )handle, data, size) ;
255290}
256291
257292int CC3220SFInterface::socket_recv (void *handle, void *data, unsigned size)
258293{
259- return 0 ;
294+ return _cc3200_simplelink. recv (( uint32_t )handle, data, size) ;
260295}
261296
262297int CC3220SFInterface::socket_sendto (void *handle, const SocketAddress &address, const void *data, unsigned size)
263298{
264- return 0 ;
299+ bool ipv6 = false ;
300+ nsapi_addr_t nsapi_address = address.get_addr ();
301+ if (nsapi_address.version == NSAPI_IPv6)
302+ {
303+ ipv6 = true ;
304+ }
305+ return _cc3200_simplelink.sendto_socket ((uint32_t )handle, ipv6, data, size, nsapi_address.bytes , address.get_port ());
265306}
266307
267308int CC3220SFInterface::socket_recvfrom (void *handle, SocketAddress *address, void *buffer, unsigned size)
268309{
269- return 0 ;
310+ bool ipv6 = false ;
311+ if (address)
312+ {
313+ nsapi_addr_t nsapi_address = address->get_addr ();
314+ if (nsapi_address.version == NSAPI_IPv6)
315+ {
316+ ipv6 = true ;
317+ }
318+ return _cc3200_simplelink.recvfrom ((uint32_t )handle, ipv6, buffer, size, nsapi_address.bytes , address->get_port ());
319+ }
320+ else
321+ {
322+ return _cc3200_simplelink.recv ((uint32_t )handle, buffer, size);
323+ }
270324}
271325
272326void CC3220SFInterface::socket_attach (void *handle, void (*callback)(void *), void *data)
0 commit comments