cc3000 hostdriver with the mbed socket interface

Dependents:   cc3000_hello_world_demo cc3000_simple_socket_demo cc3000_ntp_demo cc3000_ping_demo ... more

Committer:
SolderSplashLabs
Date:
Thu Oct 03 21:00:00 2013 +0000
Revision:
23:fed7f64dd520
Parent:
13:5e36c267e62f
Added separate debug messages and VT100 formatting

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SolderSplashLabs 23:fed7f64dd520 1 /*****************************************************************************
SolderSplashLabs 23:fed7f64dd520 2 *
SolderSplashLabs 23:fed7f64dd520 3 * C++ interface/implementation created by Martin Kojtal (0xc0170). Thanks to
SolderSplashLabs 23:fed7f64dd520 4 * Jim Carver and Frank Vannieuwkerke for their inital cc3000 mbed port and
SolderSplashLabs 23:fed7f64dd520 5 * provided help.
SolderSplashLabs 23:fed7f64dd520 6 *
SolderSplashLabs 23:fed7f64dd520 7 * This version of "host driver" uses CC3000 Host Driver Implementation. Thus
SolderSplashLabs 23:fed7f64dd520 8 * read the following copyright:
SolderSplashLabs 23:fed7f64dd520 9 *
SolderSplashLabs 23:fed7f64dd520 10 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
SolderSplashLabs 23:fed7f64dd520 11 *
SolderSplashLabs 23:fed7f64dd520 12 * Redistribution and use in source and binary forms, with or without
SolderSplashLabs 23:fed7f64dd520 13 * modification, are permitted provided that the following conditions
SolderSplashLabs 23:fed7f64dd520 14 * are met:
SolderSplashLabs 23:fed7f64dd520 15 *
SolderSplashLabs 23:fed7f64dd520 16 * Redistributions of source code must retain the above copyright
SolderSplashLabs 23:fed7f64dd520 17 * notice, this list of conditions and the following disclaimer.
SolderSplashLabs 23:fed7f64dd520 18 *
SolderSplashLabs 23:fed7f64dd520 19 * Redistributions in binary form must reproduce the above copyright
SolderSplashLabs 23:fed7f64dd520 20 * notice, this list of conditions and the following disclaimer in the
SolderSplashLabs 23:fed7f64dd520 21 * documentation and/or other materials provided with the
SolderSplashLabs 23:fed7f64dd520 22 * distribution.
SolderSplashLabs 23:fed7f64dd520 23 *
SolderSplashLabs 23:fed7f64dd520 24 * Neither the name of Texas Instruments Incorporated nor the names of
SolderSplashLabs 23:fed7f64dd520 25 * its contributors may be used to endorse or promote products derived
SolderSplashLabs 23:fed7f64dd520 26 * from this software without specific prior written permission.
SolderSplashLabs 23:fed7f64dd520 27 *
SolderSplashLabs 23:fed7f64dd520 28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
SolderSplashLabs 23:fed7f64dd520 29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
SolderSplashLabs 23:fed7f64dd520 30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
SolderSplashLabs 23:fed7f64dd520 31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
SolderSplashLabs 23:fed7f64dd520 32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SolderSplashLabs 23:fed7f64dd520 33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
SolderSplashLabs 23:fed7f64dd520 34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
SolderSplashLabs 23:fed7f64dd520 35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
SolderSplashLabs 23:fed7f64dd520 36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SolderSplashLabs 23:fed7f64dd520 37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
SolderSplashLabs 23:fed7f64dd520 38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SolderSplashLabs 23:fed7f64dd520 39 *
SolderSplashLabs 23:fed7f64dd520 40 *****************************************************************************/
SolderSplashLabs 23:fed7f64dd520 41 #include "cc3000.h"
SolderSplashLabs 23:fed7f64dd520 42
SolderSplashLabs 23:fed7f64dd520 43 namespace mbed_cc3000 {
SolderSplashLabs 23:fed7f64dd520 44 cc3000_server::cc3000_server(cc3000 &cc3000_ref, sockaddr socket_add) : _socket_address(socket_add), _cc3000(cc3000_ref) {
SolderSplashLabs 23:fed7f64dd520 45 _current_socket = -1;
SolderSplashLabs 23:fed7f64dd520 46 }
SolderSplashLabs 23:fed7f64dd520 47
SolderSplashLabs 23:fed7f64dd520 48 cc3000_server::cc3000_server(cc3000 &cc3000_ref, sockaddr socket_add, int16_t socket) : _socket_address(socket_add), _cc3000(cc3000_ref) {
SolderSplashLabs 23:fed7f64dd520 49 _current_socket = socket;
SolderSplashLabs 23:fed7f64dd520 50 }
SolderSplashLabs 23:fed7f64dd520 51
SolderSplashLabs 23:fed7f64dd520 52 int32_t cc3000_server::accept(void) {
SolderSplashLabs 23:fed7f64dd520 53 int32_t client_descriptor = -2;
SolderSplashLabs 23:fed7f64dd520 54 sockaddr dest_address;
SolderSplashLabs 23:fed7f64dd520 55
SolderSplashLabs 23:fed7f64dd520 56 socklen_t address_length = sizeof(dest_address);
SolderSplashLabs 23:fed7f64dd520 57 _current_socket = 0;
SolderSplashLabs 23:fed7f64dd520 58
SolderSplashLabs 23:fed7f64dd520 59 DBG_HCI("Waiting for receiving a connection");
SolderSplashLabs 23:fed7f64dd520 60
SolderSplashLabs 23:fed7f64dd520 61 while((client_descriptor == -1) || (client_descriptor == -2))
SolderSplashLabs 23:fed7f64dd520 62 {
SolderSplashLabs 23:fed7f64dd520 63 client_descriptor = _cc3000._socket.accept(_current_socket,&dest_address, &address_length);
SolderSplashLabs 23:fed7f64dd520 64 }
SolderSplashLabs 23:fed7f64dd520 65
SolderSplashLabs 23:fed7f64dd520 66 DBG_HCI("Received");
SolderSplashLabs 23:fed7f64dd520 67
SolderSplashLabs 23:fed7f64dd520 68 _current_socket = client_descriptor;
SolderSplashLabs 23:fed7f64dd520 69
SolderSplashLabs 23:fed7f64dd520 70 return _current_socket;
SolderSplashLabs 23:fed7f64dd520 71 }
SolderSplashLabs 23:fed7f64dd520 72
SolderSplashLabs 23:fed7f64dd520 73 int32_t cc3000_server::receive(void *buffer, uint16_t length, uint32_t flags) {
SolderSplashLabs 23:fed7f64dd520 74 return _cc3000._socket.recv(_current_socket, buffer, length, flags);
SolderSplashLabs 23:fed7f64dd520 75 }
SolderSplashLabs 23:fed7f64dd520 76
SolderSplashLabs 23:fed7f64dd520 77 int32_t cc3000_server::send(void *buffer, uint16_t length, uint32_t flags) {
SolderSplashLabs 23:fed7f64dd520 78 return _cc3000._socket.send(_current_socket, buffer, length, flags);
SolderSplashLabs 23:fed7f64dd520 79 }
SolderSplashLabs 23:fed7f64dd520 80
SolderSplashLabs 23:fed7f64dd520 81 void cc3000_server::bind(void) {
SolderSplashLabs 23:fed7f64dd520 82 _cc3000._socket.bind(_current_socket, &_socket_address, sizeof(sockaddr));
SolderSplashLabs 23:fed7f64dd520 83 }
SolderSplashLabs 23:fed7f64dd520 84
SolderSplashLabs 23:fed7f64dd520 85 void cc3000_server::listen(uint32_t backlog) {
SolderSplashLabs 23:fed7f64dd520 86 _cc3000._socket.listen(_current_socket, backlog);
SolderSplashLabs 23:fed7f64dd520 87 }
SolderSplashLabs 23:fed7f64dd520 88
SolderSplashLabs 23:fed7f64dd520 89 void cc3000_server::close(void) {
SolderSplashLabs 23:fed7f64dd520 90 _cc3000._socket.closesocket(_current_socket);
SolderSplashLabs 23:fed7f64dd520 91 }
SolderSplashLabs 23:fed7f64dd520 92
SolderSplashLabs 23:fed7f64dd520 93 }