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:
0:615c697c33b0
Child:
45:50ab13d8f2dc
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 #include "cc3000_netapp.h"
SolderSplashLabs 23:fed7f64dd520 43
SolderSplashLabs 23:fed7f64dd520 44 namespace mbed_cc3000 {
SolderSplashLabs 23:fed7f64dd520 45
SolderSplashLabs 23:fed7f64dd520 46 cc3000_netapp::cc3000_netapp(cc3000_simple_link &simple_link, cc3000_nvmem &nvmem, cc3000_hci &hci , cc3000_event &event) :
SolderSplashLabs 23:fed7f64dd520 47 _simple_link(simple_link), _nvmem(nvmem), _hci(hci), _event(event) {
SolderSplashLabs 23:fed7f64dd520 48
SolderSplashLabs 23:fed7f64dd520 49 }
SolderSplashLabs 23:fed7f64dd520 50
SolderSplashLabs 23:fed7f64dd520 51 cc3000_netapp::~cc3000_netapp() {
SolderSplashLabs 23:fed7f64dd520 52
SolderSplashLabs 23:fed7f64dd520 53 }
SolderSplashLabs 23:fed7f64dd520 54
SolderSplashLabs 23:fed7f64dd520 55 int32_t cc3000_netapp::config_mac_adrress(uint8_t * mac) {
SolderSplashLabs 23:fed7f64dd520 56 return _nvmem.set_mac_address(mac);
SolderSplashLabs 23:fed7f64dd520 57 }
SolderSplashLabs 23:fed7f64dd520 58
SolderSplashLabs 23:fed7f64dd520 59 int32_t cc3000_netapp::dhcp(uint32_t *ip, uint32_t *subnet_mask,uint32_t *default_gateway, uint32_t *dns_server) {
SolderSplashLabs 23:fed7f64dd520 60 int8_t scRet;
SolderSplashLabs 23:fed7f64dd520 61 uint8_t *ptr;
SolderSplashLabs 23:fed7f64dd520 62 uint8_t *args;
SolderSplashLabs 23:fed7f64dd520 63
SolderSplashLabs 23:fed7f64dd520 64 scRet = EFAIL;
SolderSplashLabs 23:fed7f64dd520 65 ptr = _simple_link.get_transmit_buffer();
SolderSplashLabs 23:fed7f64dd520 66 args = (ptr + HEADERS_SIZE_CMD);
SolderSplashLabs 23:fed7f64dd520 67
SolderSplashLabs 23:fed7f64dd520 68 // Fill in temporary command buffer
SolderSplashLabs 23:fed7f64dd520 69 ARRAY_TO_STREAM(args,ip,4);
SolderSplashLabs 23:fed7f64dd520 70 ARRAY_TO_STREAM(args,subnet_mask,4);
SolderSplashLabs 23:fed7f64dd520 71 ARRAY_TO_STREAM(args,default_gateway,4);
SolderSplashLabs 23:fed7f64dd520 72 args = UINT32_TO_STREAM(args, 0);
SolderSplashLabs 23:fed7f64dd520 73 ARRAY_TO_STREAM(args,dns_server,4);
SolderSplashLabs 23:fed7f64dd520 74
SolderSplashLabs 23:fed7f64dd520 75 // Initiate a HCI command
SolderSplashLabs 23:fed7f64dd520 76 _hci.command_send(HCI_NETAPP_DHCP, ptr, NETAPP_DHCP_PARAMS_LEN);
SolderSplashLabs 23:fed7f64dd520 77
SolderSplashLabs 23:fed7f64dd520 78 // Wait for command complete event
SolderSplashLabs 23:fed7f64dd520 79 _event.simplelink_wait_event(HCI_NETAPP_DHCP, &scRet);
SolderSplashLabs 23:fed7f64dd520 80
SolderSplashLabs 23:fed7f64dd520 81 return(scRet);
SolderSplashLabs 23:fed7f64dd520 82 }
SolderSplashLabs 23:fed7f64dd520 83
SolderSplashLabs 23:fed7f64dd520 84 #ifndef CC3000_TINY_DRIVER
SolderSplashLabs 23:fed7f64dd520 85 void cc3000_netapp::ipconfig( tNetappIpconfigRetArgs * ipconfig ) {
SolderSplashLabs 23:fed7f64dd520 86 uint8_t *ptr;
SolderSplashLabs 23:fed7f64dd520 87
SolderSplashLabs 23:fed7f64dd520 88 ptr = _simple_link.get_transmit_buffer();
SolderSplashLabs 23:fed7f64dd520 89
SolderSplashLabs 23:fed7f64dd520 90 // Initiate a HCI command
SolderSplashLabs 23:fed7f64dd520 91 _hci.command_send(HCI_NETAPP_IPCONFIG, ptr, 0);
SolderSplashLabs 23:fed7f64dd520 92
SolderSplashLabs 23:fed7f64dd520 93 // Wait for command complete event
SolderSplashLabs 23:fed7f64dd520 94 _event.simplelink_wait_event(HCI_NETAPP_IPCONFIG, ipconfig );
SolderSplashLabs 23:fed7f64dd520 95 }
SolderSplashLabs 23:fed7f64dd520 96
SolderSplashLabs 23:fed7f64dd520 97
SolderSplashLabs 23:fed7f64dd520 98 int32_t cc3000_netapp::timeout_values(uint32_t *dhcp, uint32_t *arp,uint32_t *keep_alive, uint32_t *inactivity) {
SolderSplashLabs 23:fed7f64dd520 99 int8_t scRet;
SolderSplashLabs 23:fed7f64dd520 100 uint8_t *ptr;
SolderSplashLabs 23:fed7f64dd520 101 uint8_t *args;
SolderSplashLabs 23:fed7f64dd520 102
SolderSplashLabs 23:fed7f64dd520 103 scRet = EFAIL;
SolderSplashLabs 23:fed7f64dd520 104 ptr = _simple_link.get_transmit_buffer();
SolderSplashLabs 23:fed7f64dd520 105 args = (ptr + HEADERS_SIZE_CMD);
SolderSplashLabs 23:fed7f64dd520 106
SolderSplashLabs 23:fed7f64dd520 107 // Set minimal values of timers
SolderSplashLabs 23:fed7f64dd520 108 MIN_TIMER_SET(*dhcp)
SolderSplashLabs 23:fed7f64dd520 109 MIN_TIMER_SET(*arp)
SolderSplashLabs 23:fed7f64dd520 110 MIN_TIMER_SET(*keep_alive)
SolderSplashLabs 23:fed7f64dd520 111 MIN_TIMER_SET(*inactivity)
SolderSplashLabs 23:fed7f64dd520 112
SolderSplashLabs 23:fed7f64dd520 113 // Fill in temporary command buffer
SolderSplashLabs 23:fed7f64dd520 114 args = UINT32_TO_STREAM(args, *dhcp);
SolderSplashLabs 23:fed7f64dd520 115 args = UINT32_TO_STREAM(args, *arp);
SolderSplashLabs 23:fed7f64dd520 116 args = UINT32_TO_STREAM(args, *keep_alive);
SolderSplashLabs 23:fed7f64dd520 117 args = UINT32_TO_STREAM(args, *inactivity);
SolderSplashLabs 23:fed7f64dd520 118
SolderSplashLabs 23:fed7f64dd520 119 // Initiate a HCI command
SolderSplashLabs 23:fed7f64dd520 120 _hci.command_send(HCI_NETAPP_SET_TIMERS, ptr, NETAPP_SET_TIMER_PARAMS_LEN);
SolderSplashLabs 23:fed7f64dd520 121
SolderSplashLabs 23:fed7f64dd520 122 // Wait for command complete event
SolderSplashLabs 23:fed7f64dd520 123 _event.simplelink_wait_event(HCI_NETAPP_SET_TIMERS, &scRet);
SolderSplashLabs 23:fed7f64dd520 124
SolderSplashLabs 23:fed7f64dd520 125 return(scRet);
SolderSplashLabs 23:fed7f64dd520 126 }
SolderSplashLabs 23:fed7f64dd520 127
SolderSplashLabs 23:fed7f64dd520 128 int32_t cc3000_netapp::ping_send(uint32_t *ip, uint32_t ping_attempts, uint32_t ping_size, uint32_t ping_timeout) {
SolderSplashLabs 23:fed7f64dd520 129 int8_t scRet;
SolderSplashLabs 23:fed7f64dd520 130 uint8_t *ptr, *args;
SolderSplashLabs 23:fed7f64dd520 131
SolderSplashLabs 23:fed7f64dd520 132 scRet = EFAIL;
SolderSplashLabs 23:fed7f64dd520 133 ptr = _simple_link.get_transmit_buffer();
SolderSplashLabs 23:fed7f64dd520 134 args = (ptr + HEADERS_SIZE_CMD);
SolderSplashLabs 23:fed7f64dd520 135
SolderSplashLabs 23:fed7f64dd520 136 // Fill in temporary command buffer
SolderSplashLabs 23:fed7f64dd520 137 args = UINT32_TO_STREAM(args, *ip);
SolderSplashLabs 23:fed7f64dd520 138 args = UINT32_TO_STREAM(args, ping_attempts);
SolderSplashLabs 23:fed7f64dd520 139 args = UINT32_TO_STREAM(args, ping_size);
SolderSplashLabs 23:fed7f64dd520 140 args = UINT32_TO_STREAM(args, ping_timeout);
SolderSplashLabs 23:fed7f64dd520 141
SolderSplashLabs 23:fed7f64dd520 142 // Initiate a HCI command
SolderSplashLabs 23:fed7f64dd520 143 _hci.command_send(HCI_NETAPP_PING_SEND, ptr, NETAPP_PING_SEND_PARAMS_LEN);
SolderSplashLabs 23:fed7f64dd520 144
SolderSplashLabs 23:fed7f64dd520 145 // Wait for command complete event
SolderSplashLabs 23:fed7f64dd520 146 _event.simplelink_wait_event(HCI_NETAPP_PING_SEND, &scRet);
SolderSplashLabs 23:fed7f64dd520 147
SolderSplashLabs 23:fed7f64dd520 148 return(scRet);
SolderSplashLabs 23:fed7f64dd520 149 }
SolderSplashLabs 23:fed7f64dd520 150
SolderSplashLabs 23:fed7f64dd520 151 void cc3000_netapp::ping_report() {
SolderSplashLabs 23:fed7f64dd520 152 uint8_t *ptr;
SolderSplashLabs 23:fed7f64dd520 153 int8_t scRet;
SolderSplashLabs 23:fed7f64dd520 154 ptr = _simple_link.get_transmit_buffer();
SolderSplashLabs 23:fed7f64dd520 155
SolderSplashLabs 23:fed7f64dd520 156
SolderSplashLabs 23:fed7f64dd520 157 scRet = EFAIL;
SolderSplashLabs 23:fed7f64dd520 158
SolderSplashLabs 23:fed7f64dd520 159 // Initiate a HCI command
SolderSplashLabs 23:fed7f64dd520 160 _hci.command_send(HCI_NETAPP_PING_REPORT, ptr, 0);
SolderSplashLabs 23:fed7f64dd520 161
SolderSplashLabs 23:fed7f64dd520 162 // Wait for command complete event
SolderSplashLabs 23:fed7f64dd520 163 _event.simplelink_wait_event(HCI_NETAPP_PING_REPORT, &scRet);
SolderSplashLabs 23:fed7f64dd520 164 }
SolderSplashLabs 23:fed7f64dd520 165
SolderSplashLabs 23:fed7f64dd520 166 int32_t cc3000_netapp::ping_stop() {
SolderSplashLabs 23:fed7f64dd520 167 int8_t scRet;
SolderSplashLabs 23:fed7f64dd520 168 uint8_t *ptr;
SolderSplashLabs 23:fed7f64dd520 169
SolderSplashLabs 23:fed7f64dd520 170 scRet = EFAIL;
SolderSplashLabs 23:fed7f64dd520 171 ptr = _simple_link.get_transmit_buffer();
SolderSplashLabs 23:fed7f64dd520 172
SolderSplashLabs 23:fed7f64dd520 173 // Initiate a HCI command
SolderSplashLabs 23:fed7f64dd520 174 _hci.command_send(HCI_NETAPP_PING_STOP, ptr, 0);
SolderSplashLabs 23:fed7f64dd520 175
SolderSplashLabs 23:fed7f64dd520 176 // Wait for command complete event
SolderSplashLabs 23:fed7f64dd520 177 _event.simplelink_wait_event(HCI_NETAPP_PING_STOP, &scRet);
SolderSplashLabs 23:fed7f64dd520 178
SolderSplashLabs 23:fed7f64dd520 179 return(scRet);
SolderSplashLabs 23:fed7f64dd520 180 }
SolderSplashLabs 23:fed7f64dd520 181
SolderSplashLabs 23:fed7f64dd520 182 int32_t cc3000_netapp::arp_flush() {
SolderSplashLabs 23:fed7f64dd520 183 int8_t scRet;
SolderSplashLabs 23:fed7f64dd520 184 uint8_t *ptr;
SolderSplashLabs 23:fed7f64dd520 185
SolderSplashLabs 23:fed7f64dd520 186 scRet = EFAIL;
SolderSplashLabs 23:fed7f64dd520 187 ptr = _simple_link.get_transmit_buffer();
SolderSplashLabs 23:fed7f64dd520 188
SolderSplashLabs 23:fed7f64dd520 189 // Initiate a HCI command
SolderSplashLabs 23:fed7f64dd520 190 _hci.command_send(HCI_NETAPP_ARP_FLUSH, ptr, 0);
SolderSplashLabs 23:fed7f64dd520 191
SolderSplashLabs 23:fed7f64dd520 192 // Wait for command complete event
SolderSplashLabs 23:fed7f64dd520 193 _event.simplelink_wait_event(HCI_NETAPP_ARP_FLUSH, &scRet);
SolderSplashLabs 23:fed7f64dd520 194
SolderSplashLabs 23:fed7f64dd520 195 return(scRet);
SolderSplashLabs 23:fed7f64dd520 196 }
SolderSplashLabs 23:fed7f64dd520 197 #endif
SolderSplashLabs 23:fed7f64dd520 198
SolderSplashLabs 23:fed7f64dd520 199 } /* end of cc3000 namespace */