Added mutex for multiple SPI devices on the same SPI bus
Fork of cc3000_hostdriver_mbedsocket by
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