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:
1:c7b8f55e0ca1
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 #ifndef CC3000_COMMON_H
SolderSplashLabs 23:fed7f64dd520 42 #define CC3000_COMMON_H
SolderSplashLabs 23:fed7f64dd520 43
SolderSplashLabs 23:fed7f64dd520 44 #include <errno.h>
SolderSplashLabs 23:fed7f64dd520 45
SolderSplashLabs 23:fed7f64dd520 46 //#define CC3000_TINY_DRIVER // Driver for small memory model CPUs
SolderSplashLabs 23:fed7f64dd520 47
SolderSplashLabs 23:fed7f64dd520 48 #define ESUCCESS 0
SolderSplashLabs 23:fed7f64dd520 49 #define EFAIL -1
SolderSplashLabs 23:fed7f64dd520 50 #define EERROR EFAIL
SolderSplashLabs 23:fed7f64dd520 51
SolderSplashLabs 23:fed7f64dd520 52 #define CC3000_UNENCRYPTED_SMART_CONFIG // No encryption
SolderSplashLabs 23:fed7f64dd520 53
SolderSplashLabs 23:fed7f64dd520 54 #define ERROR_SOCKET_INACTIVE -57
SolderSplashLabs 23:fed7f64dd520 55
SolderSplashLabs 23:fed7f64dd520 56 #define HCI_CC_PAYLOAD_LEN 5
SolderSplashLabs 23:fed7f64dd520 57
SolderSplashLabs 23:fed7f64dd520 58 #define WLAN_ENABLE (1)
SolderSplashLabs 23:fed7f64dd520 59 #define WLAN_DISABLE (0)
SolderSplashLabs 23:fed7f64dd520 60
SolderSplashLabs 23:fed7f64dd520 61 #define MAC_ADDR_LEN (6)
SolderSplashLabs 23:fed7f64dd520 62
SolderSplashLabs 23:fed7f64dd520 63
SolderSplashLabs 23:fed7f64dd520 64 /*Defines for minimal and maximal RX buffer size. This size includes the spi
SolderSplashLabs 23:fed7f64dd520 65 header and hci header.
SolderSplashLabs 23:fed7f64dd520 66 maximal buffer size: MTU + HCI header + SPI header + sendto() args size
SolderSplashLabs 23:fed7f64dd520 67 minimum buffer size: HCI header + SPI header + max args size
SolderSplashLabs 23:fed7f64dd520 68
SolderSplashLabs 23:fed7f64dd520 69 This buffer is used for receiving events and data.
SolderSplashLabs 23:fed7f64dd520 70 The packet can not be longer than MTU size and CC3000 does not support
SolderSplashLabs 23:fed7f64dd520 71 fragmentation. Note that the same buffer is used for reception of the data
SolderSplashLabs 23:fed7f64dd520 72 and events from CC3000. That is why the minimum is defined.
SolderSplashLabs 23:fed7f64dd520 73 The calculation for the actual size of buffer for reception is:
SolderSplashLabs 23:fed7f64dd520 74 Given the maximal data size MAX_DATA that is expected to be received by
SolderSplashLabs 23:fed7f64dd520 75 application, the required buffer Using recv() or recvfrom():
SolderSplashLabs 23:fed7f64dd520 76
SolderSplashLabs 23:fed7f64dd520 77 max(CC3000_MINIMAL_RX_SIZE, MAX_DATA + HEADERS_SIZE_DATA + fromlen + ucArgsize + 1)
SolderSplashLabs 23:fed7f64dd520 78
SolderSplashLabs 23:fed7f64dd520 79 Using gethostbyname() with minimal buffer size will limit the host name returned to 99 bytes.
SolderSplashLabs 23:fed7f64dd520 80 The 1 is used for the overrun detection
SolderSplashLabs 23:fed7f64dd520 81 */
SolderSplashLabs 23:fed7f64dd520 82
SolderSplashLabs 23:fed7f64dd520 83 #define CC3000_MINIMAL_RX_SIZE (118 + 1)
SolderSplashLabs 23:fed7f64dd520 84 #define CC3000_MAXIMAL_RX_SIZE (511 + 1)
SolderSplashLabs 23:fed7f64dd520 85
SolderSplashLabs 23:fed7f64dd520 86 /*Defines for minimal and maximal TX buffer size.
SolderSplashLabs 23:fed7f64dd520 87 This buffer is used for sending events and data.
SolderSplashLabs 23:fed7f64dd520 88 The packet can not be longer than MTU size and CC3000 does not support
SolderSplashLabs 23:fed7f64dd520 89 fragmentation. Note that the same buffer is used for transmission of the data
SolderSplashLabs 23:fed7f64dd520 90 and commands. That is why the minimum is defined.
SolderSplashLabs 23:fed7f64dd520 91 The calculation for the actual size of buffer for transmission is:
SolderSplashLabs 23:fed7f64dd520 92 Given the maximal data size MAX_DATA, the required buffer is:
SolderSplashLabs 23:fed7f64dd520 93 Using Sendto():
SolderSplashLabs 23:fed7f64dd520 94
SolderSplashLabs 23:fed7f64dd520 95 max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE
SolderSplashLabs 23:fed7f64dd520 96 + SOCKET_SENDTO_PARAMS_LEN + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1)
SolderSplashLabs 23:fed7f64dd520 97
SolderSplashLabs 23:fed7f64dd520 98 Using Send():
SolderSplashLabs 23:fed7f64dd520 99
SolderSplashLabs 23:fed7f64dd520 100 max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE
SolderSplashLabs 23:fed7f64dd520 101 + HCI_CMND_SEND_ARG_LENGTH + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1)
SolderSplashLabs 23:fed7f64dd520 102
SolderSplashLabs 23:fed7f64dd520 103 The 1 is used for the overrun detection */
SolderSplashLabs 23:fed7f64dd520 104
SolderSplashLabs 23:fed7f64dd520 105 #define CC3000_MINIMAL_TX_SIZE (118 + 1)
SolderSplashLabs 23:fed7f64dd520 106 #define CC3000_MAXIMAL_TX_SIZE (1519 + 1)
SolderSplashLabs 23:fed7f64dd520 107
SolderSplashLabs 23:fed7f64dd520 108 //TX and RX buffer size - allow to receive and transmit maximum data at lengh 8.
SolderSplashLabs 23:fed7f64dd520 109 #ifdef CC3000_TINY_DRIVER
SolderSplashLabs 23:fed7f64dd520 110 #define TINY_CC3000_MAXIMAL_RX_SIZE 44
SolderSplashLabs 23:fed7f64dd520 111 #define TINY_CC3000_MAXIMAL_TX_SIZE 59
SolderSplashLabs 23:fed7f64dd520 112 #endif
SolderSplashLabs 23:fed7f64dd520 113
SolderSplashLabs 23:fed7f64dd520 114 /*In order to determine your preferred buffer size,
SolderSplashLabs 23:fed7f64dd520 115 change CC3000_MAXIMAL_RX_SIZE and CC3000_MAXIMAL_TX_SIZE to a value between
SolderSplashLabs 23:fed7f64dd520 116 the minimal and maximal specified above.
SolderSplashLabs 23:fed7f64dd520 117 Note that the buffers are allocated by SPI.
SolderSplashLabs 23:fed7f64dd520 118 */
SolderSplashLabs 23:fed7f64dd520 119
SolderSplashLabs 23:fed7f64dd520 120 #ifndef CC3000_TINY_DRIVER
SolderSplashLabs 23:fed7f64dd520 121
SolderSplashLabs 23:fed7f64dd520 122 #define CC3000_RX_BUFFER_SIZE (CC3000_MAXIMAL_RX_SIZE)
SolderSplashLabs 23:fed7f64dd520 123 #define CC3000_TX_BUFFER_SIZE (CC3000_MAXIMAL_TX_SIZE)
SolderSplashLabs 23:fed7f64dd520 124 #define SP_PORTION_SIZE 512
SolderSplashLabs 23:fed7f64dd520 125
SolderSplashLabs 23:fed7f64dd520 126 //TINY DRIVER: We use smaller rx and tx buffers in order to minimize RAM consumption
SolderSplashLabs 23:fed7f64dd520 127 #else
SolderSplashLabs 23:fed7f64dd520 128 #define CC3000_RX_BUFFER_SIZE (TINY_CC3000_MAXIMAL_RX_SIZE)
SolderSplashLabs 23:fed7f64dd520 129 #define CC3000_TX_BUFFER_SIZE (TINY_CC3000_MAXIMAL_TX_SIZE)
SolderSplashLabs 23:fed7f64dd520 130 #define SP_PORTION_SIZE 32
SolderSplashLabs 23:fed7f64dd520 131 #endif
SolderSplashLabs 23:fed7f64dd520 132
SolderSplashLabs 23:fed7f64dd520 133
SolderSplashLabs 23:fed7f64dd520 134 //Copy 8 bit to stream while converting to little endian format.
SolderSplashLabs 23:fed7f64dd520 135 #define UINT8_TO_STREAM(_p, _val) {*(_p)++ = (_val);}
SolderSplashLabs 23:fed7f64dd520 136 //Copy 16 bit to stream while converting to little endian format.
SolderSplashLabs 23:fed7f64dd520 137 #define UINT16_TO_STREAM(_p, _u16) (UINT16_TO_STREAM_f(_p, _u16))
SolderSplashLabs 23:fed7f64dd520 138 //Copy 32 bit to stream while converting to little endian format.
SolderSplashLabs 23:fed7f64dd520 139 #define UINT32_TO_STREAM(_p, _u32) (UINT32_TO_STREAM_f(_p, _u32))
SolderSplashLabs 23:fed7f64dd520 140 //Copy a specified value length bits (l) to stream while converting to little endian format.
SolderSplashLabs 23:fed7f64dd520 141 #define ARRAY_TO_STREAM(p, a, l) {uint32_t _i; for (_i = 0; _i < l; _i++) *(p)++ = ((uint8_t *) a)[_i];}
SolderSplashLabs 23:fed7f64dd520 142 //Copy received stream to 8 bit in little endian format.
SolderSplashLabs 23:fed7f64dd520 143 #define STREAM_TO_UINT8(_p, _offset, _u8) {_u8 = (uint8_t)(*(_p + _offset));}
SolderSplashLabs 23:fed7f64dd520 144 //Copy received stream to 16 bit in little endian format.
SolderSplashLabs 23:fed7f64dd520 145 #define STREAM_TO_UINT16(_p, _offset, _u16) {_u16 = STREAM_TO_UINT16_f(_p, _offset);}
SolderSplashLabs 23:fed7f64dd520 146 //Copy received stream to 32 bit in little endian format.
SolderSplashLabs 23:fed7f64dd520 147 #define STREAM_TO_UINT32(_p, _offset, _u32) {_u32 = STREAM_TO_UINT32_f(_p, _offset);}
SolderSplashLabs 23:fed7f64dd520 148 #define STREAM_TO_STREAM(p, a, l) {uint32_t _i; for (_i = 0; _i < l; _i++) *(a)++= ((uint8_t *) p)[_i];}
SolderSplashLabs 23:fed7f64dd520 149
SolderSplashLabs 23:fed7f64dd520 150 typedef struct _sockaddr_t
SolderSplashLabs 23:fed7f64dd520 151 {
SolderSplashLabs 23:fed7f64dd520 152 uint16_t family;
SolderSplashLabs 23:fed7f64dd520 153 uint8_t data[14];
SolderSplashLabs 23:fed7f64dd520 154 } sockaddr;
SolderSplashLabs 23:fed7f64dd520 155
SolderSplashLabs 23:fed7f64dd520 156 struct timeval
SolderSplashLabs 23:fed7f64dd520 157 {
SolderSplashLabs 23:fed7f64dd520 158 int32_t tv_sec; /* seconds */
SolderSplashLabs 23:fed7f64dd520 159 int32_t tv_usec; /* microseconds */
SolderSplashLabs 23:fed7f64dd520 160 };
SolderSplashLabs 23:fed7f64dd520 161
SolderSplashLabs 23:fed7f64dd520 162 #define SMART_CONFIG_PROFILE_SIZE 67 // 67 = 32 (max ssid) + 32 (max key) + 1 (SSID length) + 1 (security type) + 1 (key length)
SolderSplashLabs 23:fed7f64dd520 163
SolderSplashLabs 23:fed7f64dd520 164 /* patches type */
SolderSplashLabs 23:fed7f64dd520 165 #define PATCHES_HOST_TYPE_WLAN_DRIVER 0x01
SolderSplashLabs 23:fed7f64dd520 166 #define PATCHES_HOST_TYPE_WLAN_FW 0x02
SolderSplashLabs 23:fed7f64dd520 167 #define PATCHES_HOST_TYPE_BOOTLOADER 0x03
SolderSplashLabs 23:fed7f64dd520 168
SolderSplashLabs 23:fed7f64dd520 169 #define SL_SET_SCAN_PARAMS_INTERVAL_LIST_SIZE (16)
SolderSplashLabs 23:fed7f64dd520 170 #define SL_SIMPLE_CONFIG_PREFIX_LENGTH (3)
SolderSplashLabs 23:fed7f64dd520 171 #define ETH_ALEN (6)
SolderSplashLabs 23:fed7f64dd520 172 #define MAXIMAL_SSID_LENGTH (32)
SolderSplashLabs 23:fed7f64dd520 173
SolderSplashLabs 23:fed7f64dd520 174 #define SL_PATCHES_REQUEST_DEFAULT (0)
SolderSplashLabs 23:fed7f64dd520 175 #define SL_PATCHES_REQUEST_FORCE_HOST (1)
SolderSplashLabs 23:fed7f64dd520 176 #define SL_PATCHES_REQUEST_FORCE_NONE (2)
SolderSplashLabs 23:fed7f64dd520 177
SolderSplashLabs 23:fed7f64dd520 178
SolderSplashLabs 23:fed7f64dd520 179 #define WLAN_SEC_UNSEC (0)
SolderSplashLabs 23:fed7f64dd520 180 #define WLAN_SEC_WEP (1)
SolderSplashLabs 23:fed7f64dd520 181 #define WLAN_SEC_WPA (2)
SolderSplashLabs 23:fed7f64dd520 182 #define WLAN_SEC_WPA2 (3)
SolderSplashLabs 23:fed7f64dd520 183
SolderSplashLabs 23:fed7f64dd520 184
SolderSplashLabs 23:fed7f64dd520 185 #define WLAN_SL_INIT_START_PARAMS_LEN (1)
SolderSplashLabs 23:fed7f64dd520 186 #define WLAN_PATCH_PARAMS_LENGTH (8)
SolderSplashLabs 23:fed7f64dd520 187 #define WLAN_SET_CONNECTION_POLICY_PARAMS_LEN (12)
SolderSplashLabs 23:fed7f64dd520 188 #define WLAN_DEL_PROFILE_PARAMS_LEN (4)
SolderSplashLabs 23:fed7f64dd520 189 #define WLAN_SET_MASK_PARAMS_LEN (4)
SolderSplashLabs 23:fed7f64dd520 190 #define WLAN_SET_SCAN_PARAMS_LEN (100)
SolderSplashLabs 23:fed7f64dd520 191 #define WLAN_GET_SCAN_RESULTS_PARAMS_LEN (4)
SolderSplashLabs 23:fed7f64dd520 192 #define WLAN_ADD_PROFILE_NOSEC_PARAM_LEN (24)
SolderSplashLabs 23:fed7f64dd520 193 #define WLAN_ADD_PROFILE_WEP_PARAM_LEN (36)
SolderSplashLabs 23:fed7f64dd520 194 #define WLAN_ADD_PROFILE_WPA_PARAM_LEN (44)
SolderSplashLabs 23:fed7f64dd520 195 #define WLAN_CONNECT_PARAM_LEN (29)
SolderSplashLabs 23:fed7f64dd520 196 #define WLAN_SMART_CONFIG_START_PARAMS_LEN (4)
SolderSplashLabs 23:fed7f64dd520 197
SolderSplashLabs 23:fed7f64dd520 198 #endif