cc3000 hostdriver with the mbed socket interface

Fork of cc3000_hostdriver_mbedsocket by Martin Kojtal

Committer:
frankvnk
Date:
Mon Apr 06 18:23:37 2015 +0000
Revision:
51:897cfc2c7e8c
Parent:
50:04e43d8059b8
Added 2 optional parameters to the constructor : set TX and RX buffer size

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 20:30b6ed7bf8fd 1 /*****************************************************************************
Kojto 20:30b6ed7bf8fd 2 *
Kojto 20:30b6ed7bf8fd 3 * C++ interface/implementation created by Martin Kojtal (0xc0170). Thanks to
Kojto 20:30b6ed7bf8fd 4 * Jim Carver and Frank Vannieuwkerke for their inital cc3000 mbed port and
Kojto 20:30b6ed7bf8fd 5 * provided help.
Kojto 20:30b6ed7bf8fd 6 *
Kojto 20:30b6ed7bf8fd 7 * This version of "host driver" uses CC3000 Host Driver Implementation. Thus
Kojto 20:30b6ed7bf8fd 8 * read the following copyright:
Kojto 20:30b6ed7bf8fd 9 *
Kojto 20:30b6ed7bf8fd 10 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
Kojto 20:30b6ed7bf8fd 11 *
Kojto 20:30b6ed7bf8fd 12 * Redistribution and use in source and binary forms, with or without
Kojto 20:30b6ed7bf8fd 13 * modification, are permitted provided that the following conditions
Kojto 20:30b6ed7bf8fd 14 * are met:
Kojto 20:30b6ed7bf8fd 15 *
Kojto 20:30b6ed7bf8fd 16 * Redistributions of source code must retain the above copyright
Kojto 20:30b6ed7bf8fd 17 * notice, this list of conditions and the following disclaimer.
Kojto 20:30b6ed7bf8fd 18 *
Kojto 20:30b6ed7bf8fd 19 * Redistributions in binary form must reproduce the above copyright
Kojto 20:30b6ed7bf8fd 20 * notice, this list of conditions and the following disclaimer in the
Kojto 20:30b6ed7bf8fd 21 * documentation and/or other materials provided with the
Kojto 20:30b6ed7bf8fd 22 * distribution.
Kojto 20:30b6ed7bf8fd 23 *
Kojto 20:30b6ed7bf8fd 24 * Neither the name of Texas Instruments Incorporated nor the names of
Kojto 20:30b6ed7bf8fd 25 * its contributors may be used to endorse or promote products derived
Kojto 20:30b6ed7bf8fd 26 * from this software without specific prior written permission.
Kojto 20:30b6ed7bf8fd 27 *
Kojto 20:30b6ed7bf8fd 28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Kojto 20:30b6ed7bf8fd 29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Kojto 20:30b6ed7bf8fd 30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Kojto 20:30b6ed7bf8fd 31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Kojto 20:30b6ed7bf8fd 32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Kojto 20:30b6ed7bf8fd 33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Kojto 20:30b6ed7bf8fd 34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Kojto 20:30b6ed7bf8fd 35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Kojto 20:30b6ed7bf8fd 36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Kojto 20:30b6ed7bf8fd 37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Kojto 20:30b6ed7bf8fd 38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Kojto 20:30b6ed7bf8fd 39 *
Kojto 20:30b6ed7bf8fd 40 *****************************************************************************/
Kojto 20:30b6ed7bf8fd 41 #ifndef CC3000_COMMON_H
Kojto 20:30b6ed7bf8fd 42 #define CC3000_COMMON_H
Kojto 20:30b6ed7bf8fd 43
Kojto 20:30b6ed7bf8fd 44 #include <errno.h>
Kojto 20:30b6ed7bf8fd 45
Kojto 20:30b6ed7bf8fd 46 //#define CC3000_TINY_DRIVER // Driver for small memory model CPUs
Kojto 20:30b6ed7bf8fd 47
Kojto 20:30b6ed7bf8fd 48 #define ESUCCESS 0
Kojto 20:30b6ed7bf8fd 49 #define EFAIL -1
Kojto 20:30b6ed7bf8fd 50 #define EERROR EFAIL
Kojto 20:30b6ed7bf8fd 51
Kojto 20:30b6ed7bf8fd 52 #define CC3000_UNENCRYPTED_SMART_CONFIG // No encryption
Kojto 20:30b6ed7bf8fd 53
Kojto 20:30b6ed7bf8fd 54 #define ERROR_SOCKET_INACTIVE -57
Kojto 20:30b6ed7bf8fd 55
Kojto 20:30b6ed7bf8fd 56 #define HCI_CC_PAYLOAD_LEN 5
Kojto 20:30b6ed7bf8fd 57
Kojto 20:30b6ed7bf8fd 58 #define WLAN_ENABLE (1)
Kojto 20:30b6ed7bf8fd 59 #define WLAN_DISABLE (0)
Kojto 20:30b6ed7bf8fd 60
Kojto 20:30b6ed7bf8fd 61 #define MAC_ADDR_LEN (6)
Kojto 20:30b6ed7bf8fd 62
Kojto 20:30b6ed7bf8fd 63
Kojto 20:30b6ed7bf8fd 64 /*Defines for minimal and maximal RX buffer size. This size includes the spi
Kojto 20:30b6ed7bf8fd 65 header and hci header.
Kojto 20:30b6ed7bf8fd 66 maximal buffer size: MTU + HCI header + SPI header + sendto() args size
Kojto 20:30b6ed7bf8fd 67 minimum buffer size: HCI header + SPI header + max args size
Kojto 20:30b6ed7bf8fd 68
Kojto 20:30b6ed7bf8fd 69 This buffer is used for receiving events and data.
Kojto 20:30b6ed7bf8fd 70 The packet can not be longer than MTU size and CC3000 does not support
Kojto 20:30b6ed7bf8fd 71 fragmentation. Note that the same buffer is used for reception of the data
Kojto 20:30b6ed7bf8fd 72 and events from CC3000. That is why the minimum is defined.
Kojto 20:30b6ed7bf8fd 73 The calculation for the actual size of buffer for reception is:
Kojto 20:30b6ed7bf8fd 74 Given the maximal data size MAX_DATA that is expected to be received by
Kojto 20:30b6ed7bf8fd 75 application, the required buffer Using recv() or recvfrom():
Kojto 20:30b6ed7bf8fd 76
Kojto 20:30b6ed7bf8fd 77 max(CC3000_MINIMAL_RX_SIZE, MAX_DATA + HEADERS_SIZE_DATA + fromlen + ucArgsize + 1)
Kojto 20:30b6ed7bf8fd 78
Kojto 20:30b6ed7bf8fd 79 Using gethostbyname() with minimal buffer size will limit the host name returned to 99 bytes.
Kojto 20:30b6ed7bf8fd 80 The 1 is used for the overrun detection
Kojto 20:30b6ed7bf8fd 81 */
Kojto 20:30b6ed7bf8fd 82
Kojto 20:30b6ed7bf8fd 83
Kojto 20:30b6ed7bf8fd 84 /*Defines for minimal and maximal TX buffer size.
Kojto 20:30b6ed7bf8fd 85 This buffer is used for sending events and data.
Kojto 20:30b6ed7bf8fd 86 The packet can not be longer than MTU size and CC3000 does not support
Kojto 20:30b6ed7bf8fd 87 fragmentation. Note that the same buffer is used for transmission of the data
Kojto 20:30b6ed7bf8fd 88 and commands. That is why the minimum is defined.
Kojto 20:30b6ed7bf8fd 89 The calculation for the actual size of buffer for transmission is:
Kojto 20:30b6ed7bf8fd 90 Given the maximal data size MAX_DATA, the required buffer is:
Kojto 20:30b6ed7bf8fd 91 Using Sendto():
Kojto 20:30b6ed7bf8fd 92
Kojto 20:30b6ed7bf8fd 93 max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE
Kojto 20:30b6ed7bf8fd 94 + SOCKET_SENDTO_PARAMS_LEN + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1)
Kojto 20:30b6ed7bf8fd 95
Kojto 20:30b6ed7bf8fd 96 Using Send():
Kojto 20:30b6ed7bf8fd 97
Kojto 20:30b6ed7bf8fd 98 max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE
Kojto 20:30b6ed7bf8fd 99 + HCI_CMND_SEND_ARG_LENGTH + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1)
Kojto 20:30b6ed7bf8fd 100
Kojto 20:30b6ed7bf8fd 101 The 1 is used for the overrun detection */
Kojto 20:30b6ed7bf8fd 102
Kojto 20:30b6ed7bf8fd 103 #ifndef CC3000_TINY_DRIVER
Kojto 20:30b6ed7bf8fd 104 #define SP_PORTION_SIZE 512
frankvnk 51:897cfc2c7e8c 105 //TINY DRIVER: We use smaller buffers in order to minimize RAM consumption
Kojto 20:30b6ed7bf8fd 106 #else
Kojto 20:30b6ed7bf8fd 107 #define SP_PORTION_SIZE 32
Kojto 20:30b6ed7bf8fd 108 #endif
Kojto 20:30b6ed7bf8fd 109
Kojto 20:30b6ed7bf8fd 110
Kojto 20:30b6ed7bf8fd 111 //Copy 8 bit to stream while converting to little endian format.
Kojto 20:30b6ed7bf8fd 112 #define UINT8_TO_STREAM(_p, _val) {*(_p)++ = (_val);}
Kojto 20:30b6ed7bf8fd 113 //Copy 16 bit to stream while converting to little endian format.
Kojto 20:30b6ed7bf8fd 114 #define UINT16_TO_STREAM(_p, _u16) (UINT16_TO_STREAM_f(_p, _u16))
Kojto 20:30b6ed7bf8fd 115 //Copy 32 bit to stream while converting to little endian format.
Kojto 20:30b6ed7bf8fd 116 #define UINT32_TO_STREAM(_p, _u32) (UINT32_TO_STREAM_f(_p, _u32))
Kojto 20:30b6ed7bf8fd 117 //Copy a specified value length bits (l) to stream while converting to little endian format.
Kojto 20:30b6ed7bf8fd 118 #define ARRAY_TO_STREAM(p, a, l) {uint32_t _i; for (_i = 0; _i < l; _i++) *(p)++ = ((uint8_t *) a)[_i];}
Kojto 20:30b6ed7bf8fd 119 //Copy received stream to 8 bit in little endian format.
Kojto 20:30b6ed7bf8fd 120 #define STREAM_TO_UINT8(_p, _offset, _u8) {_u8 = (uint8_t)(*(_p + _offset));}
Kojto 20:30b6ed7bf8fd 121 //Copy received stream to 16 bit in little endian format.
Kojto 20:30b6ed7bf8fd 122 #define STREAM_TO_UINT16(_p, _offset, _u16) {_u16 = STREAM_TO_UINT16_f(_p, _offset);}
Kojto 20:30b6ed7bf8fd 123 //Copy received stream to 32 bit in little endian format.
Kojto 20:30b6ed7bf8fd 124 #define STREAM_TO_UINT32(_p, _offset, _u32) {_u32 = STREAM_TO_UINT32_f(_p, _offset);}
Kojto 20:30b6ed7bf8fd 125 #define STREAM_TO_STREAM(p, a, l) {uint32_t _i; for (_i = 0; _i < l; _i++) *(a)++= ((uint8_t *) p)[_i];}
Kojto 20:30b6ed7bf8fd 126
Kojto 20:30b6ed7bf8fd 127 typedef struct _sockaddr_t
Kojto 20:30b6ed7bf8fd 128 {
Kojto 20:30b6ed7bf8fd 129 uint16_t family;
Kojto 20:30b6ed7bf8fd 130 uint8_t data[14];
Kojto 20:30b6ed7bf8fd 131 } sockaddr;
Kojto 20:30b6ed7bf8fd 132
Kojto 20:30b6ed7bf8fd 133 struct timeval
Kojto 20:30b6ed7bf8fd 134 {
Kojto 20:30b6ed7bf8fd 135 int32_t tv_sec; /* seconds */
Kojto 20:30b6ed7bf8fd 136 int32_t tv_usec; /* microseconds */
Kojto 20:30b6ed7bf8fd 137 };
Kojto 20:30b6ed7bf8fd 138
Kojto 20:30b6ed7bf8fd 139 #define SMART_CONFIG_PROFILE_SIZE 67 // 67 = 32 (max ssid) + 32 (max key) + 1 (SSID length) + 1 (security type) + 1 (key length)
Kojto 20:30b6ed7bf8fd 140
Kojto 20:30b6ed7bf8fd 141 /* patches type */
Kojto 20:30b6ed7bf8fd 142 #define PATCHES_HOST_TYPE_WLAN_DRIVER 0x01
Kojto 20:30b6ed7bf8fd 143 #define PATCHES_HOST_TYPE_WLAN_FW 0x02
Kojto 20:30b6ed7bf8fd 144 #define PATCHES_HOST_TYPE_BOOTLOADER 0x03
Kojto 20:30b6ed7bf8fd 145
Kojto 20:30b6ed7bf8fd 146 #define SL_SET_SCAN_PARAMS_INTERVAL_LIST_SIZE (16)
Kojto 20:30b6ed7bf8fd 147 #define SL_SIMPLE_CONFIG_PREFIX_LENGTH (3)
Kojto 20:30b6ed7bf8fd 148 #define ETH_ALEN (6)
Kojto 20:30b6ed7bf8fd 149 #define MAXIMAL_SSID_LENGTH (32)
Kojto 20:30b6ed7bf8fd 150
Kojto 20:30b6ed7bf8fd 151 #define SL_PATCHES_REQUEST_DEFAULT (0)
Kojto 20:30b6ed7bf8fd 152 #define SL_PATCHES_REQUEST_FORCE_HOST (1)
Kojto 20:30b6ed7bf8fd 153 #define SL_PATCHES_REQUEST_FORCE_NONE (2)
Kojto 20:30b6ed7bf8fd 154
Kojto 20:30b6ed7bf8fd 155
Kojto 20:30b6ed7bf8fd 156 #define WLAN_SEC_UNSEC (0)
Kojto 20:30b6ed7bf8fd 157 #define WLAN_SEC_WEP (1)
Kojto 20:30b6ed7bf8fd 158 #define WLAN_SEC_WPA (2)
Kojto 20:30b6ed7bf8fd 159 #define WLAN_SEC_WPA2 (3)
Kojto 20:30b6ed7bf8fd 160
Kojto 20:30b6ed7bf8fd 161
Kojto 20:30b6ed7bf8fd 162 #define WLAN_SL_INIT_START_PARAMS_LEN (1)
Kojto 20:30b6ed7bf8fd 163 #define WLAN_PATCH_PARAMS_LENGTH (8)
Kojto 20:30b6ed7bf8fd 164 #define WLAN_SET_CONNECTION_POLICY_PARAMS_LEN (12)
Kojto 20:30b6ed7bf8fd 165 #define WLAN_DEL_PROFILE_PARAMS_LEN (4)
Kojto 20:30b6ed7bf8fd 166 #define WLAN_SET_MASK_PARAMS_LEN (4)
Kojto 20:30b6ed7bf8fd 167 #define WLAN_SET_SCAN_PARAMS_LEN (100)
Kojto 20:30b6ed7bf8fd 168 #define WLAN_GET_SCAN_RESULTS_PARAMS_LEN (4)
Kojto 20:30b6ed7bf8fd 169 #define WLAN_ADD_PROFILE_NOSEC_PARAM_LEN (24)
Kojto 20:30b6ed7bf8fd 170 #define WLAN_ADD_PROFILE_WEP_PARAM_LEN (36)
Kojto 20:30b6ed7bf8fd 171 #define WLAN_ADD_PROFILE_WPA_PARAM_LEN (44)
Kojto 20:30b6ed7bf8fd 172 #define WLAN_CONNECT_PARAM_LEN (29)
Kojto 20:30b6ed7bf8fd 173 #define WLAN_SMART_CONFIG_START_PARAMS_LEN (4)
Kojto 20:30b6ed7bf8fd 174
Kojto 20:30b6ed7bf8fd 175 #endif