cc3000 hostdriver with the mbed socket interface
Dependents: cc3000_hello_world_demo cc3000_simple_socket_demo cc3000_ntp_demo cc3000_ping_demo ... more
Diff: cc3000_socket.cpp
- Revision:
- 45:50ab13d8f2dc
- Parent:
- 42:bd2c631a031a
diff -r 960b73df5981 -r 50ab13d8f2dc cc3000_socket.cpp
--- a/cc3000_socket.cpp Sun Oct 13 11:46:21 2013 +0200
+++ b/cc3000_socket.cpp Wed Nov 06 17:56:25 2013 +0100
@@ -46,25 +46,21 @@
namespace mbed_cc3000 {
cc3000_socket::cc3000_socket(cc3000_simple_link &simplelink, cc3000_hci &hci, cc3000_event &event)
- : _simple_link(simplelink), _hci(hci), _event(event)
-{
+ : _simple_link(simplelink), _hci(hci), _event(event) {
}
-cc3000_socket::~cc3000_socket()
-{
+cc3000_socket::~cc3000_socket() {
}
int32_t cc3000_socket::HostFlowControlConsumeBuff(int32_t sd) {
#ifndef SEND_NON_BLOCKING
/* wait in busy loop */
- do
- {
+ do {
// When the last transmission failed, return the last failure reason.
// Note that the buffer will not be allocated in this case
- if (_simple_link.get_transmit_error() != 0)
- {
+ if (_simple_link.get_transmit_error() != 0) {
errno = _simple_link.get_transmit_error();
_simple_link.set_transmit_error(0);
return errno;
@@ -72,7 +68,7 @@
if(SOCKET_STATUS_ACTIVE != _event.get_socket_active_status(sd))
return -1;
- } while(0 == _simple_link.get_number_free_buffers());
+ } while (0 == _simple_link.get_number_free_buffers());
uint16_t free_buffer = _simple_link.get_number_free_buffers();
free_buffer--;
@@ -83,24 +79,20 @@
// When the last transmission failed, return the last failure reason.
// Note that the buffer will not be allocated in this case
- if (_simple_link.get_transmit_error() != 0)
- {
+ if (_simple_link.get_transmit_error() != 0) {
errno = _simple_link.get_transmit_error();
_simple_link.set_transmit_error(0);
return errno;
}
- if(SOCKET_STATUS_ACTIVE != _event.get_socket_active_status(sd))
+ if (SOCKET_STATUS_ACTIVE != _event.get_socket_active_status(sd))
return -1;
// If there are no available buffers, return -2. It is recommended to use
// select or receive to see if there is any buffer occupied with received data
// If so, call receive() to release the buffer.
- if(0 == _simple_link.get_number_free_buffers())
- {
+ if (0 == _simple_link.get_number_free_buffers()) {
return -2;
- }
- else
- {
+ } else {
uint16_t free_buffer = _simple_link.get_number_free_buffers();
free_buffer--;
_simple_link.set_number_free_buffers(free_buffer);
@@ -133,14 +125,14 @@
_event.set_socket_active_status(ret, SOCKET_STATUS_ACTIVE);
- return(ret);
+ return ret;
}
int32_t cc3000_socket::closesocket(int32_t sd) {
int32_t ret;
uint8_t *ptr, *args;
- while(_simple_link.get_number_free_buffers() != SOCKET_MAX_FREE_BUFFERS);
+ while (_simple_link.get_number_free_buffers() != SOCKET_MAX_FREE_BUFFERS);
ret = EFAIL;
ptr = _simple_link.get_transmit_buffer();
args = (ptr + HEADERS_SIZE_CMD);
@@ -158,7 +150,7 @@
// since 'close' call may result in either OK (and then it closed) or error, mark this socket as invalid
_event.set_socket_active_status(sd, SOCKET_STATUS_INACTIVE);
- return(ret);
+ return ret;
}
int32_t cc3000_socket::accept(int32_t sd, sockaddr *addr, socklen_t *addrlen) {
@@ -187,16 +179,13 @@
ret = errno;
// if succeeded, iStatus = new socket descriptor. otherwise - error number
- if(M_IS_VALID_SD(ret))
- {
+ if(M_IS_VALID_SD(ret)) {
_event.set_socket_active_status(ret, SOCKET_STATUS_ACTIVE);
- }
- else
- {
+ } else {
_event.set_socket_active_status(sd, SOCKET_STATUS_INACTIVE);
}
- return(ret);
+ return ret;
}
int32_t cc3000_socket::bind(int32_t sd, const sockaddr *addr, int32_t addrlen) {
@@ -223,7 +212,7 @@
errno = ret;
- return(ret);
+ return ret;
}
int32_t cc3000_socket::listen(int32_t sd, int32_t backlog) {
@@ -279,12 +268,9 @@
tBsdSelectRecvParams tParams;
uint32_t is_blocking;
- if( timeout == NULL)
- {
+ if (timeout == NULL) {
is_blocking = 1; /* blocking , infinity timeout */
- }
- else
- {
+ } else {
is_blocking = 0; /* no blocking, timeout */
}
@@ -303,10 +289,8 @@
args = UINT32_TO_STREAM(args, ((writesds) ? *(uint32_t*)writesds : 0));
args = UINT32_TO_STREAM(args, ((exceptsds) ? *(uint32_t*)exceptsds : 0));
- if (timeout)
- {
- if ( 0 == timeout->tv_sec && timeout->tv_usec < SELECT_TIMEOUT_MIN_MICRO_SECONDS)
- {
+ if (timeout) {
+ if ( 0 == timeout->tv_sec && timeout->tv_usec < SELECT_TIMEOUT_MIN_MICRO_SECONDS) {
timeout->tv_usec = SELECT_TIMEOUT_MIN_MICRO_SECONDS;
}
args = UINT32_TO_STREAM(args, timeout->tv_sec);
@@ -320,30 +304,24 @@
_event.simplelink_wait_event(HCI_EVNT_SELECT, &tParams);
// Update actually read FD
- if (tParams.iStatus >= 0)
- {
- if (readsds)
- {
+ if (tParams.iStatus >= 0) {
+ if (readsds) {
memcpy(readsds, &tParams.uiRdfd, sizeof(tParams.uiRdfd));
}
- if (writesds)
- {
+ if (writesds) {
memcpy(writesds, &tParams.uiWrfd, sizeof(tParams.uiWrfd));
}
- if (exceptsds)
- {
+ if (exceptsds) {
memcpy(exceptsds, &tParams.uiExfd, sizeof(tParams.uiExfd));
}
return(tParams.iStatus);
- }
- else
- {
+ } else {
errno = tParams.iStatus;
- return(-1);
+ return -1;
}
}
@@ -365,14 +343,11 @@
// Since we are in blocking state - wait for event complete
_event.simplelink_wait_event(HCI_CMND_GETSOCKOPT, &tRetParams);
- if (((int8_t)tRetParams.iStatus) >= 0)
- {
+ if (((int8_t)tRetParams.iStatus) >= 0) {
*optlen = 4;
memcpy(optval, tRetParams.ucOptValue, 4);
return (0);
- }
- else
- {
+ } else {
errno = tRetParams.iStatus;
return errno;
}
@@ -397,8 +372,7 @@
_event.simplelink_wait_event(opcode, &tSocketReadEvent);
// In case the number of bytes is more then zero - read data
- if (tSocketReadEvent.iNumberOfBytes > 0)
- {
+ if (tSocketReadEvent.iNumberOfBytes > 0) {
// Wait for the data in a synchronous way. Here we assume that the bug is
// big enough to store also parameters of receive from too....
_event.simplelink_wait_data((uint8_t *)buf, (uint8_t *)from, (uint8_t *)fromlen);
@@ -425,8 +399,7 @@
tBsdReadReturnParams tSocketSendEvent;
// Check the bsd_arguments
- if (0 != (res = HostFlowControlConsumeBuff(sd)))
- {
+ if (0 != (res = HostFlowControlConsumeBuff(sd))) {
return res;
}
@@ -442,7 +415,7 @@
// Update the offset of data and parameters according to the command
switch(opcode)
{
- case HCI_CMND_SENDTO:
+ case HCI_CMND_SENDTO:
{
addr_offset = len + sizeof(len) + sizeof(len);
addrlen = 8;
@@ -451,7 +424,7 @@
break;
}
- case HCI_CMND_SEND:
+ case HCI_CMND_SEND:
{
tolen = 0;
to = NULL;
@@ -460,7 +433,7 @@
break;
}
- default:
+ default:
{
break;
}
@@ -472,8 +445,7 @@
args = UINT32_TO_STREAM(args, len);
args = UINT32_TO_STREAM(args, flags);
- if (opcode == HCI_CMND_SENDTO)
- {
+ if (opcode == HCI_CMND_SENDTO) {
args = UINT32_TO_STREAM(args, addr_offset);
args = UINT32_TO_STREAM(args, addrlen);
}
@@ -482,8 +454,7 @@
ARRAY_TO_STREAM(pDataPtr, ((uint8_t *)buf), len);
// In case we are using SendTo, copy the to parameters
- if (opcode == HCI_CMND_SENDTO)
- {
+ if (opcode == HCI_CMND_SENDTO) {
ARRAY_TO_STREAM(pDataPtr, ((uint8_t *)to), tolen);
}
@@ -509,8 +480,7 @@
int32_t ret;
uint8_t *pTxBuffer, *pArgs;
- if (device_service_name_length > MDNS_DEVICE_SERVICE_MAX_LENGTH)
- {
+ if (device_service_name_length > MDNS_DEVICE_SERVICE_MAX_LENGTH) {
return EFAIL;
}
@@ -540,8 +510,7 @@
errno = EFAIL;
- if (name_length > HOSTNAME_MAX_LENGTH)
- {
+ if (name_length > HOSTNAME_MAX_LENGTH) {
return errno;
}
@@ -587,12 +556,9 @@
// Since we are in blocking state - wait for event complete
_event.simplelink_wait_event(HCI_CMND_SETSOCKOPT, &ret);
- if (ret >= 0)
- {
+ if (ret >= 0) {
return (0);
- }
- else
- {
+ } else {
errno = ret;
return ret;
}
@@ -600,39 +566,39 @@
#endif
-char * cc3000_socket::inet_ntoa_r(uint32_t s_addr, char *buf, int buflen)
+char* cc3000_socket::inet_ntoa_r(uint32_t s_addr, char *buf, int buflen)
{
- char inv[3];
- char *rp;
- uint8_t *ap;
- uint8_t rem;
- uint8_t n;
- uint8_t i;
- int len = 0;
+ char inv[3];
+ char *rp;
+ uint8_t *ap;
+ uint8_t rem;
+ uint8_t n;
+ uint8_t i;
+ int len = 0;
- rp = buf;
- ap = (uint8_t *)&s_addr;
- for(n = 0; n < 4; n++) {
- i = 0;
- do {
- rem = *ap % (uint8_t)10;
- *ap /= (uint8_t)10;
- inv[i++] = '0' + rem;
- } while(*ap);
- while(i--) {
- if (len++ >= buflen) {
- return NULL;
- }
- *rp++ = inv[i];
+ rp = buf;
+ ap = (uint8_t *)&s_addr;
+ for (n = 0; n < 4; n++) {
+ i = 0;
+ do {
+ rem = *ap % (uint8_t)10;
+ *ap /= (uint8_t)10;
+ inv[i++] = '0' + rem;
+ } while(*ap);
+ while(i--) {
+ if (len++ >= buflen) {
+ return NULL;
+ }
+ *rp++ = inv[i];
+ }
+ if (len++ >= buflen) {
+ return NULL;
+ }
+ *rp++ = '.';
+ ap++;
}
- if (len++ >= buflen) {
- return NULL;
- }
- *rp++ = '.';
- ap++;
- }
- *--rp = 0;
- return buf;
+ *--rp = 0;
+ return buf;
}
-} /* end of cc3000 namespace */
+} // mbed_cc3000 namespace
SimpleLink Wi-Fi CC3000
Avnet Wi-Go System