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:
Sat Oct 12 20:46:19 2013 +0000
Revision:
39:03ac37ab34eb
Parent:
38:1d374a7f0c0d
Child:
42:bd2c631a031a
Added mbed ethernet library compatability, get ip, gateway and sub mask functions. Added enabled flag so we know when the module is enabled. Smart config tweaks

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_H
Kojto 20:30b6ed7bf8fd 42 #define CC3000_H
Kojto 20:30b6ed7bf8fd 43
Kojto 20:30b6ed7bf8fd 44 #include "mbed.h"
Kojto 20:30b6ed7bf8fd 45 #include "cc3000_common.h"
Kojto 20:30b6ed7bf8fd 46 #include "cc3000_spi.h"
Kojto 20:30b6ed7bf8fd 47 #include "cc3000_simplelink.h"
Kojto 20:30b6ed7bf8fd 48 #include "cc3000_netapp.h"
Kojto 20:30b6ed7bf8fd 49 #include "cc3000_nvmem.h"
Kojto 20:30b6ed7bf8fd 50 #include "cc3000_socket.h"
Kojto 20:30b6ed7bf8fd 51
Kojto 20:30b6ed7bf8fd 52 #define MAX_SOCKETS 4
SolderSplashLabs 39:03ac37ab34eb 53 #define CC3000_ETH_COMPAT
Kojto 20:30b6ed7bf8fd 54
Kojto 35:9dd909fb7caf 55 /** Enable debug messages, remove comment from the ones you want or all.
Kojto 20:30b6ed7bf8fd 56 */
SolderSplashLabs 26:456f73ed2a75 57
SolderSplashLabs 24:ba3fa29197ac 58 // Debug - Socket interface messages
SolderSplashLabs 38:1d374a7f0c0d 59 #define CC3000_DEBUG_SOCKET
SolderSplashLabs 26:456f73ed2a75 60
SolderSplashLabs 24:ba3fa29197ac 61 // Debug - HCI TX messages
SolderSplashLabs 38:1d374a7f0c0d 62 #define CC3000_DEBUG_HCI_TX
SolderSplashLabs 26:456f73ed2a75 63
SolderSplashLabs 24:ba3fa29197ac 64 // Debug - HCI Rx messages
SolderSplashLabs 38:1d374a7f0c0d 65 #define CC3000_DEBUG_HCI_RX
SolderSplashLabs 26:456f73ed2a75 66
SolderSplashLabs 24:ba3fa29197ac 67 // Debug - General Debug
SolderSplashLabs 38:1d374a7f0c0d 68 #define CC3000_DEBUG
Kojto 20:30b6ed7bf8fd 69
SolderSplashLabs 26:456f73ed2a75 70 // Add colour to the debug messages, requires a VT100 terminal like putty, comment out to remove
SolderSplashLabs 38:1d374a7f0c0d 71 #define VT100_COLOUR
SolderSplashLabs 22:d23c59fec0dc 72
SolderSplashLabs 22:d23c59fec0dc 73 #ifdef CC3000_DEBUG_SOCKET
Kojto 20:30b6ed7bf8fd 74
SolderSplashLabs 22:d23c59fec0dc 75 #ifdef VT100_COLOUR
SolderSplashLabs 22:d23c59fec0dc 76 #define DBG_SOCKET(x, ...) std::printf("\x1b[2;32;40m[CC3000 : SOCKET] "x"\x1b[0;37;40m\r\n", ##__VA_ARGS__);
SolderSplashLabs 22:d23c59fec0dc 77 #else
SolderSplashLabs 22:d23c59fec0dc 78 #define DBG_SOCKET(x, ...) std::printf("[CC3000 : SOCKET] "x"\r\n", ##__VA_ARGS__);
SolderSplashLabs 22:d23c59fec0dc 79 #endif
Kojto 29:c40918cd9b6d 80
Kojto 20:30b6ed7bf8fd 81 #else
Kojto 20:30b6ed7bf8fd 82 #define DBG_SOCKET(x, ...)
SolderSplashLabs 22:d23c59fec0dc 83 #endif
SolderSplashLabs 22:d23c59fec0dc 84
SolderSplashLabs 22:d23c59fec0dc 85 #ifdef CC3000_DEBUG_HCI_TX
SolderSplashLabs 22:d23c59fec0dc 86
SolderSplashLabs 22:d23c59fec0dc 87 #ifdef VT100_COLOUR
SolderSplashLabs 22:d23c59fec0dc 88 #define DBG_HCI(x, ...) std::printf("\x1b[2;35;40m[CC3000 : HCI RX] "x"\x1b[0;37;40m\r\n", ##__VA_ARGS__);
SolderSplashLabs 22:d23c59fec0dc 89 #else
SolderSplashLabs 22:d23c59fec0dc 90 #define DBG_HCI(x, ...) std::printf("[CC3000 : HCI RX] "x"\r\n", ##__VA_ARGS__);
SolderSplashLabs 22:d23c59fec0dc 91 #endif
Kojto 29:c40918cd9b6d 92
SolderSplashLabs 22:d23c59fec0dc 93 #else
Kojto 20:30b6ed7bf8fd 94 #define DBG_HCI(x, ...)
SolderSplashLabs 22:d23c59fec0dc 95 #endif
SolderSplashLabs 22:d23c59fec0dc 96
SolderSplashLabs 22:d23c59fec0dc 97 #ifdef CC3000_DEBUG_HCI_RX
SolderSplashLabs 22:d23c59fec0dc 98
SolderSplashLabs 22:d23c59fec0dc 99 #ifdef VT100_COLOUR
SolderSplashLabs 22:d23c59fec0dc 100 #define DBG_HCI_CMD(x, ...) std::printf("\x1b[2;36;40m[CC3000 : HCI TX] "x"\x1b[0;37;40m\r\n", ##__VA_ARGS__);
SolderSplashLabs 22:d23c59fec0dc 101 #else
SolderSplashLabs 22:d23c59fec0dc 102 #define DBG_HCI_CMD(x, ...) std::printf("[CC3000 : HCI TX] "x"\r\n", ##__VA_ARGS__);
SolderSplashLabs 22:d23c59fec0dc 103 #endif
Kojto 29:c40918cd9b6d 104
SolderSplashLabs 22:d23c59fec0dc 105 #else
SolderSplashLabs 22:d23c59fec0dc 106 #define DBG_HCI_CMD(x, ...)
SolderSplashLabs 22:d23c59fec0dc 107 #endif
SolderSplashLabs 22:d23c59fec0dc 108
SolderSplashLabs 22:d23c59fec0dc 109
SolderSplashLabs 22:d23c59fec0dc 110 #ifdef CC3000_DEBUG
SolderSplashLabs 22:d23c59fec0dc 111
SolderSplashLabs 22:d23c59fec0dc 112 #ifdef VT100_COLOUR
SolderSplashLabs 22:d23c59fec0dc 113 #define DBG_CC(x, ...) std::printf("\x1b[2;32;40m[CC3000] "x"\x1b[0;37;40m\r\n", ##__VA_ARGS__);
SolderSplashLabs 22:d23c59fec0dc 114 #else
SolderSplashLabs 22:d23c59fec0dc 115 #define DBG_CC(x, ...) std::printf("[CC3000] "x"\r\n", ##__VA_ARGS__);
SolderSplashLabs 22:d23c59fec0dc 116 #endif
Kojto 29:c40918cd9b6d 117
SolderSplashLabs 22:d23c59fec0dc 118 #else
SolderSplashLabs 24:ba3fa29197ac 119 #define DBG_CC(x, ...)
Kojto 20:30b6ed7bf8fd 120 #endif
Kojto 20:30b6ed7bf8fd 121
Kojto 20:30b6ed7bf8fd 122 namespace mbed_cc3000 {
Kojto 20:30b6ed7bf8fd 123
Kojto 20:30b6ed7bf8fd 124 /** User info structure
Kojto 20:30b6ed7bf8fd 125 */
Kojto 20:30b6ed7bf8fd 126 typedef struct {
Kojto 20:30b6ed7bf8fd 127 uint8_t FTC; // First time config performed
Kojto 20:30b6ed7bf8fd 128 uint8_t PP_version[2]; // Patch Programmer version
Kojto 20:30b6ed7bf8fd 129 uint8_t SERV_PACK[2]; // Service Pack Version
Kojto 20:30b6ed7bf8fd 130 uint8_t DRV_VER[3]; // Driver Version
Kojto 20:30b6ed7bf8fd 131 uint8_t FW_VER[3]; // Firmware Version
Kojto 20:30b6ed7bf8fd 132 uint8_t validCIK; // CIK[] is valid (Client Interface Key)
Kojto 20:30b6ed7bf8fd 133 uint8_t CIK[40];
Kojto 20:30b6ed7bf8fd 134 } tUserFS;
Kojto 20:30b6ed7bf8fd 135
Kojto 20:30b6ed7bf8fd 136 /** Function pointers which are not yet implemented
Kojto 20:30b6ed7bf8fd 137 */
Kojto 20:30b6ed7bf8fd 138 enum FunctionNumber {
Kojto 20:30b6ed7bf8fd 139 FW_PATCHES = 0,
Kojto 20:30b6ed7bf8fd 140 DRIVER_PATCHES = 1,
Kojto 20:30b6ed7bf8fd 141 BOOTLOADER_PATCHES = 2,
Kojto 20:30b6ed7bf8fd 142 };
Kojto 20:30b6ed7bf8fd 143
Kojto 20:30b6ed7bf8fd 144 /** CC3000 Simple Link class which contains status of cc3000.
Kojto 20:30b6ed7bf8fd 145 */
Kojto 20:30b6ed7bf8fd 146 class cc3000_simple_link {
Kojto 20:30b6ed7bf8fd 147 public:
Kojto 33:9e23b24fb4f3 148 /**
Kojto 33:9e23b24fb4f3 149 * \brief ctor - sets magic number in the buffers (overflow mark).
Kojto 33:9e23b24fb4f3 150 * \param none
Kojto 33:9e23b24fb4f3 151 * \return none
Kojto 20:30b6ed7bf8fd 152 */
Kojto 20:30b6ed7bf8fd 153 cc3000_simple_link();
Kojto 33:9e23b24fb4f3 154 /**
Kojto 33:9e23b24fb4f3 155 * \brief dtor
Kojto 33:9e23b24fb4f3 156 * \param none
Kojto 33:9e23b24fb4f3 157 * \return none
Kojto 20:30b6ed7bf8fd 158 */
Kojto 20:30b6ed7bf8fd 159 ~cc3000_simple_link();
Kojto 33:9e23b24fb4f3 160 /**
Kojto 33:9e23b24fb4f3 161 * \brief Returns data received flag.
Kojto 33:9e23b24fb4f3 162 * \return Data received flag.
Kojto 20:30b6ed7bf8fd 163 */
Kojto 20:30b6ed7bf8fd 164 uint8_t get_data_received_flag();
Kojto 33:9e23b24fb4f3 165 /**
Kojto 33:9e23b24fb4f3 166 * \brief Set data received flag.
Kojto 20:30b6ed7bf8fd 167 * \param value The value to be set.
Kojto 20:30b6ed7bf8fd 168 */
Kojto 20:30b6ed7bf8fd 169 void set_data_received_flag(uint8_t value);
Kojto 20:30b6ed7bf8fd 170 /** Returns if tx was completed.
Kojto 20:30b6ed7bf8fd 171 * \return
Kojto 20:30b6ed7bf8fd 172 * true if tx was completed,
Kojto 20:30b6ed7bf8fd 173 * false otherwise.
Kojto 20:30b6ed7bf8fd 174 */
Kojto 20:30b6ed7bf8fd 175 bool get_tx_complete_signal();
Kojto 20:30b6ed7bf8fd 176 /**
Kojto 33:9e23b24fb4f3 177 * \brief Sets flag that tx was completed.
Kojto 33:9e23b24fb4f3 178 * \param value Value to be set
Kojto 33:9e23b24fb4f3 179 * \return none
Kojto 20:30b6ed7bf8fd 180 */
Kojto 20:30b6ed7bf8fd 181 void set_tx_complete_signal(bool value);
Kojto 20:30b6ed7bf8fd 182 /**
Kojto 33:9e23b24fb4f3 183 * \brief Get receive buffer.
Kojto 33:9e23b24fb4f3 184 * \param none
Kojto 33:9e23b24fb4f3 185 * \return Pointer to the receive buffer.
Kojto 20:30b6ed7bf8fd 186 */
Kojto 20:30b6ed7bf8fd 187 uint8_t *get_received_buffer();
Kojto 20:30b6ed7bf8fd 188 /**
Kojto 33:9e23b24fb4f3 189 * \brief Get transmit buffer.
Kojto 33:9e23b24fb4f3 190 * \param none
Kojto 33:9e23b24fb4f3 191 * \return Pointer to the transmit buffer.
Kojto 20:30b6ed7bf8fd 192 */
Kojto 20:30b6ed7bf8fd 193 uint8_t *get_transmit_buffer();
Kojto 20:30b6ed7bf8fd 194 /**
Kojto 33:9e23b24fb4f3 195 * \brief Get number of free buffers.
Kojto 33:9e23b24fb4f3 196 * \param none
Kojto 29:c40918cd9b6d 197 * \return
Kojto 33:9e23b24fb4f3 198 * Number of free buffers.
Kojto 20:30b6ed7bf8fd 199 */
Kojto 20:30b6ed7bf8fd 200 uint16_t get_number_free_buffers();
Kojto 20:30b6ed7bf8fd 201 /**
Kojto 33:9e23b24fb4f3 202 * \brief Set number of free buffers.
Kojto 33:9e23b24fb4f3 203 * \param value Number of free buffers.
Kojto 33:9e23b24fb4f3 204 * \return none
Kojto 20:30b6ed7bf8fd 205 */
Kojto 20:30b6ed7bf8fd 206 void set_number_free_buffers(uint16_t value);
Kojto 20:30b6ed7bf8fd 207 /**
Kojto 33:9e23b24fb4f3 208 * \brief Retrieve buffer length.
Kojto 33:9e23b24fb4f3 209 * \param none
Kojto 33:9e23b24fb4f3 210 * \return Buffer length
Kojto 20:30b6ed7bf8fd 211 */
Kojto 20:30b6ed7bf8fd 212 uint16_t get_buffer_length();
Kojto 20:30b6ed7bf8fd 213 /**
Kojto 33:9e23b24fb4f3 214 * \brief Set buffer length
Kojto 33:9e23b24fb4f3 215 * \param value The length
Kojto 33:9e23b24fb4f3 216 * \return none
Kojto 20:30b6ed7bf8fd 217 */
Kojto 20:30b6ed7bf8fd 218 void set_buffer_length(uint16_t value);
Kojto 20:30b6ed7bf8fd 219 /**
Kojto 33:9e23b24fb4f3 220 * \brief Retrieve pending data flag.
Kojto 33:9e23b24fb4f3 221 * \param none
Kojto 33:9e23b24fb4f3 222 * \return Pending data flag
Kojto 20:30b6ed7bf8fd 223 */
Kojto 20:30b6ed7bf8fd 224 uint16_t get_pending_data();
Kojto 20:30b6ed7bf8fd 225 /**
Kojto 33:9e23b24fb4f3 226 * \brief Set pending data flag.
Kojto 33:9e23b24fb4f3 227 * \param value Pending data value.
Kojto 33:9e23b24fb4f3 228 * \return none
Kojto 20:30b6ed7bf8fd 229 */
Kojto 20:30b6ed7bf8fd 230 void set_pending_data(uint16_t value);
Kojto 20:30b6ed7bf8fd 231 /**
Kojto 33:9e23b24fb4f3 232 * \brief Retreive op code.
Kojto 33:9e23b24fb4f3 233 * \param none
Kojto 33:9e23b24fb4f3 234 * \return Op code
Kojto 20:30b6ed7bf8fd 235 */
Kojto 20:30b6ed7bf8fd 236 uint16_t get_op_code();
Kojto 20:30b6ed7bf8fd 237 /**
Kojto 33:9e23b24fb4f3 238 * \brief Set op code.
Kojto 33:9e23b24fb4f3 239 * \param code op code.
Kojto 33:9e23b24fb4f3 240 * \return none
Kojto 20:30b6ed7bf8fd 241 */
Kojto 20:30b6ed7bf8fd 242 void set_op_code(uint16_t code);
Kojto 20:30b6ed7bf8fd 243 /**
Kojto 33:9e23b24fb4f3 244 * \brief Get number of released packets.
Kojto 33:9e23b24fb4f3 245 * \param none
Kojto 33:9e23b24fb4f3 246 * \return Number of released packets.
Kojto 20:30b6ed7bf8fd 247 */
Kojto 20:30b6ed7bf8fd 248 uint16_t get_released_packets();
Kojto 20:30b6ed7bf8fd 249 /**
Kojto 33:9e23b24fb4f3 250 * \brief Set number of released packets.
Kojto 33:9e23b24fb4f3 251 * \param value Number of released packets.
Kojto 33:9e23b24fb4f3 252 * \return none
Kojto 20:30b6ed7bf8fd 253 */
Kojto 20:30b6ed7bf8fd 254 void set_number_of_released_packets(uint16_t value);
Kojto 20:30b6ed7bf8fd 255 /**
Kojto 33:9e23b24fb4f3 256 * \brief Get number of sent packats
Kojto 33:9e23b24fb4f3 257 * \param none
Kojto 33:9e23b24fb4f3 258 * \return Number of sent packets.
Kojto 20:30b6ed7bf8fd 259 */
Kojto 20:30b6ed7bf8fd 260 uint16_t get_sent_packets();
Kojto 20:30b6ed7bf8fd 261 /**
Kojto 33:9e23b24fb4f3 262 * \brief Set number of sent packets
Kojto 33:9e23b24fb4f3 263 * \param value Number of sent packets.
Kojto 33:9e23b24fb4f3 264 * \return none
Kojto 20:30b6ed7bf8fd 265 */
Kojto 20:30b6ed7bf8fd 266 void set_sent_packets(uint16_t value);
Kojto 29:c40918cd9b6d 267 /**
Kojto 33:9e23b24fb4f3 268 * \brief Retrieve transmit error
Kojto 33:9e23b24fb4f3 269 * \param none
Kojto 33:9e23b24fb4f3 270 * \return Transmit error
Kojto 29:c40918cd9b6d 271 */
Kojto 20:30b6ed7bf8fd 272 int32_t get_transmit_error();
Kojto 29:c40918cd9b6d 273 /**
Kojto 33:9e23b24fb4f3 274 * \brief Set transmit error.
Kojto 33:9e23b24fb4f3 275 * \param value Error to be set.
Kojto 33:9e23b24fb4f3 276 * \return none
Kojto 29:c40918cd9b6d 277 */
Kojto 20:30b6ed7bf8fd 278 void set_transmit_error(int32_t value);
Kojto 29:c40918cd9b6d 279 /**
Kojto 33:9e23b24fb4f3 280 * \brief Get buffer size.
Kojto 33:9e23b24fb4f3 281 * \param none
Kojto 33:9e23b24fb4f3 282 * \return Size of buffer.
Kojto 29:c40918cd9b6d 283 */
Kojto 33:9e23b24fb4f3 284 uint16_t get_buffer_size();
Kojto 29:c40918cd9b6d 285 /**
Kojto 33:9e23b24fb4f3 286 * \brief Set buffer size.
Kojto 33:9e23b24fb4f3 287 * \param value Buffer size.
Kojto 33:9e23b24fb4f3 288 * \return none
Kojto 29:c40918cd9b6d 289 */
Kojto 20:30b6ed7bf8fd 290 void set_buffer_size(uint16_t value);
Kojto 29:c40918cd9b6d 291 /**
Kojto 33:9e23b24fb4f3 292 * \brief Not used currently.
Kojto 33:9e23b24fb4f3 293 * \param function Number of desired function.
Kojto 33:9e23b24fb4f3 294 * \return void pointer to the function (need to recast).
Kojto 29:c40918cd9b6d 295 */
Kojto 20:30b6ed7bf8fd 296 void *get_func_pointer(FunctionNumber function);
Kojto 29:c40918cd9b6d 297 /**
Kojto 33:9e23b24fb4f3 298 * \brief Retreive pointer to the received data.
Kojto 33:9e23b24fb4f3 299 * \param none
Kojto 33:9e23b24fb4f3 300 * \return Pointer to the received data buffer.
Kojto 29:c40918cd9b6d 301 */
Kojto 33:9e23b24fb4f3 302 uint8_t *get_received_data();
Kojto 29:c40918cd9b6d 303 /**
Kojto 33:9e23b24fb4f3 304 * \brief Set received data pointer.
Kojto 33:9e23b24fb4f3 305 * \param pointer Pointer to the buffer.
Kojto 33:9e23b24fb4f3 306 * \return none
Kojto 29:c40918cd9b6d 307 */
Kojto 20:30b6ed7bf8fd 308 void set_received_data(uint8_t *pointer);
Kojto 20:30b6ed7bf8fd 309 private:
Kojto 20:30b6ed7bf8fd 310 uint8_t _data_received_flag;
Kojto 20:30b6ed7bf8fd 311 bool _tx_complete_signal;
Kojto 20:30b6ed7bf8fd 312 uint16_t _rx_event_opcode;
Kojto 20:30b6ed7bf8fd 313 uint16_t _free_buffers;
Kojto 20:30b6ed7bf8fd 314 uint16_t _buffer_length;
Kojto 20:30b6ed7bf8fd 315 uint16_t _buffer_size;
Kojto 20:30b6ed7bf8fd 316 uint16_t _rx_data_pending;
Kojto 20:30b6ed7bf8fd 317 uint16_t _sent_packets;
Kojto 20:30b6ed7bf8fd 318 uint16_t _released_packets;
Kojto 20:30b6ed7bf8fd 319 int32_t _transmit_data_error;
Kojto 20:30b6ed7bf8fd 320 uint8_t *_received_data;
Kojto 20:30b6ed7bf8fd 321 uint8_t _rx_buffer[CC3000_RX_BUFFER_SIZE];
Kojto 20:30b6ed7bf8fd 322 uint8_t _tx_buffer[CC3000_TX_BUFFER_SIZE];
Kojto 20:30b6ed7bf8fd 323 private:
Kojto 33:9e23b24fb4f3 324 /* Not used currently */
Kojto 20:30b6ed7bf8fd 325 int8_t *(* _fFWPatches)(uint32_t *length);
Kojto 20:30b6ed7bf8fd 326 int8_t *(* _fDriverPatches)(uint32_t *length);
Kojto 20:30b6ed7bf8fd 327 int8_t *(* _fBootLoaderPatches)(uint32_t *length);
Kojto 20:30b6ed7bf8fd 328 };
Kojto 20:30b6ed7bf8fd 329
Kojto 20:30b6ed7bf8fd 330 /** Forward declaration classes
Kojto 20:30b6ed7bf8fd 331 */
Kojto 20:30b6ed7bf8fd 332 class cc3000_hci;
Kojto 20:30b6ed7bf8fd 333 class cc3000_nvmem;
Kojto 20:30b6ed7bf8fd 334 class cc3000_spi;
Kojto 20:30b6ed7bf8fd 335 class cc3000;
Kojto 20:30b6ed7bf8fd 336
Kojto 31:7b6e85b68b01 337 /** Event layer
Kojto 20:30b6ed7bf8fd 338 */
Kojto 20:30b6ed7bf8fd 339 class cc3000_event {
Kojto 20:30b6ed7bf8fd 340 public:
Kojto 29:c40918cd9b6d 341 /**
Kojto 29:c40918cd9b6d 342 * \brief
Kojto 34:1ad18123bf11 343 * \param simplelink Reference to simple link object.
Kojto 34:1ad18123bf11 344 * \param hci Reference to hci object.
Kojto 34:1ad18123bf11 345 * \param spi Reference to spi object.
Kojto 34:1ad18123bf11 346 * \param cc3000 Reference to cc3000 object.
Kojto 34:1ad18123bf11 347 * \return none
Kojto 29:c40918cd9b6d 348 */
Kojto 20:30b6ed7bf8fd 349 cc3000_event(cc3000_simple_link &simplelink, cc3000_hci &hci, cc3000_spi &spi, cc3000 &cc3000);
Kojto 29:c40918cd9b6d 350 /**
Kojto 34:1ad18123bf11 351 * \brief Ctor
Kojto 34:1ad18123bf11 352 * \param none
Kojto 34:1ad18123bf11 353 * \return none
Kojto 29:c40918cd9b6d 354 */
Kojto 29:c40918cd9b6d 355 ~cc3000_event();
Kojto 34:1ad18123bf11 356 /**
Kojto 34:1ad18123bf11 357 * \brief Handle unsolicited event from type patch request.
Kojto 34:1ad18123bf11 358 * \param event_hdr event header
Kojto 34:1ad18123bf11 359 * \return none
Kojto 29:c40918cd9b6d 360 */
Kojto 20:30b6ed7bf8fd 361 void hci_unsol_handle_patch_request(uint8_t *event_hdr);
Kojto 29:c40918cd9b6d 362 /**
Kojto 34:1ad18123bf11 363 * \brief Parse the incoming event packets and issue corresponding event handler from global array of handlers pointers.
Kojto 34:1ad18123bf11 364 * \param ret_param incoming data buffer
Kojto 34:1ad18123bf11 365 * \param from from information (in case of data received)
Kojto 34:1ad18123bf11 366 * \param fromlen from information length (in case of data received)
Kojto 34:1ad18123bf11 367 * \return none
Kojto 34:1ad18123bf11 368 */
Kojto 20:30b6ed7bf8fd 369 uint8_t *hci_event_handler(void *ret_param, uint8_t *from, uint8_t *fromlen);
Kojto 29:c40918cd9b6d 370 /**
Kojto 34:1ad18123bf11 371 * \brief Handle unsolicited events.
Kojto 34:1ad18123bf11 372 * \param event_hdr Event header
Kojto 34:1ad18123bf11 373 * \return 1 if event supported and handled
Kojto 34:1ad18123bf11 374 * \return 0 if event is not supported
Kojto 34:1ad18123bf11 375 */
Kojto 20:30b6ed7bf8fd 376 int32_t hci_unsol_event_handler(uint8_t *event_hdr);
Kojto 29:c40918cd9b6d 377 /**
Kojto 34:1ad18123bf11 378 * \brief Parse the incoming unsolicited event packets and start corresponding event handler.
Kojto 34:1ad18123bf11 379 * \param None
Kojto 34:1ad18123bf11 380 * \return ESUCCESS if successful, EFAIL if an error occurred.
Kojto 34:1ad18123bf11 381 */
Kojto 20:30b6ed7bf8fd 382 int32_t hci_unsolicited_event_handler(void);
Kojto 29:c40918cd9b6d 383 /**
Kojto 34:1ad18123bf11 384 * \brief Get the socket status.
Kojto 34:1ad18123bf11 385 * \param Sd Socket IS
Kojto 34:1ad18123bf11 386 * \return Current status of the socket.
Kojto 34:1ad18123bf11 387 */
Kojto 20:30b6ed7bf8fd 388 int32_t get_socket_active_status(int32_t sd);
Kojto 29:c40918cd9b6d 389 /**
Kojto 34:1ad18123bf11 390 * \brief Check if the socket ID and status are valid and set the global socket status accordingly.
Kojto 34:1ad18123bf11 391 * \param Sd Sock descr
Kojto 34:1ad18123bf11 392 * \param Status status to be set
Kojto 34:1ad18123bf11 393 * \return none
Kojto 34:1ad18123bf11 394 */
Kojto 20:30b6ed7bf8fd 395 void set_socket_active_status(int32_t sd, int32_t status);
Kojto 29:c40918cd9b6d 396 /**
Kojto 34:1ad18123bf11 397 * \brief Keep track on the number of packets transmitted and update the number of free buffer in the SL device.
Kojto 34:1ad18123bf11 398 * \brief Called when unsolicited event = HCI_EVNT_DATA_UNSOL_FREE_BUFF has received.
Kojto 34:1ad18123bf11 399 * \param event pointer to the string contains parameters for IPERF.
Kojto 34:1ad18123bf11 400 * \return ESUCCESS if successful, EFAIL if an error occurred.
Kojto 34:1ad18123bf11 401 */
Kojto 20:30b6ed7bf8fd 402 int32_t hci_event_unsol_flowcontrol_handler(uint8_t *event);
Kojto 29:c40918cd9b6d 403 /**
Kojto 34:1ad18123bf11 404 * \brief Update the socket status.
Kojto 34:1ad18123bf11 405 * \param resp_params Socket IS
Kojto 34:1ad18123bf11 406 * \return Current status of the socket.
Kojto 34:1ad18123bf11 407 */
Kojto 20:30b6ed7bf8fd 408 void update_socket_active_status(uint8_t *resp_params);
Kojto 29:c40918cd9b6d 409 /**
Kojto 34:1ad18123bf11 410 * \brief Wait for event, pass it to the hci_event_handler and update the event opcode in a global variable.
Kojto 34:1ad18123bf11 411 * \param op_code Command operation code
Kojto 34:1ad18123bf11 412 * \param ret_param Command return parameters
Kojto 34:1ad18123bf11 413 * \return none
Kojto 29:c40918cd9b6d 414 */
Kojto 20:30b6ed7bf8fd 415 void simplelink_wait_event(uint16_t op_code, void *ret_param);
Kojto 29:c40918cd9b6d 416 /**
Kojto 34:1ad18123bf11 417 * \brief Wait for data, pass it to the hci_event_handler and set the data available flag.
Kojto 34:1ad18123bf11 418 * \param buffer Data buffer
Kojto 34:1ad18123bf11 419 * \param from From information
Kojto 34:1ad18123bf11 420 * \param fromlen From information length
Kojto 34:1ad18123bf11 421 * \return none
Kojto 29:c40918cd9b6d 422 */
Kojto 20:30b6ed7bf8fd 423 void simplelink_wait_data(uint8_t *buffer, uint8_t *from, uint8_t *fromlen);
Kojto 29:c40918cd9b6d 424 /**
Kojto 34:1ad18123bf11 425 * \brief Trigger Received event/data processing - called from the SPI library to receive the data
Kojto 34:1ad18123bf11 426 * \param buffer pointer to the received data buffer\n
Kojto 34:1ad18123bf11 427 * The function triggers Received event/data processing\n
Kojto 34:1ad18123bf11 428 * \return none
Kojto 29:c40918cd9b6d 429 */
Kojto 20:30b6ed7bf8fd 430 void received_handler(uint8_t *buffer);
Kojto 34:1ad18123bf11 431 private:
Kojto 20:30b6ed7bf8fd 432 uint32_t socket_active_status;
Kojto 20:30b6ed7bf8fd 433 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 434 cc3000_hci &_hci;
Kojto 20:30b6ed7bf8fd 435 cc3000_spi &_spi;
Kojto 20:30b6ed7bf8fd 436 cc3000 &_cc3000;
Kojto 20:30b6ed7bf8fd 437 };
Kojto 20:30b6ed7bf8fd 438
Kojto 31:7b6e85b68b01 439 /** Netapp layer
Kojto 31:7b6e85b68b01 440 */
Kojto 20:30b6ed7bf8fd 441 class cc3000_netapp {
Kojto 20:30b6ed7bf8fd 442 public:
Kojto 29:c40918cd9b6d 443 /**
Kojto 34:1ad18123bf11 444 * \brief Ctor
Kojto 34:1ad18123bf11 445 * \param simple_link Reference to the simple link object.
Kojto 34:1ad18123bf11 446 * \param nvmem Reference to the nvmem object.
Kojto 34:1ad18123bf11 447 * \param hci Reference to the hci object.
Kojto 34:1ad18123bf11 448 * \param event Reference to the event object.
Kojto 34:1ad18123bf11 449 * \return none
Kojto 29:c40918cd9b6d 450 */
Kojto 20:30b6ed7bf8fd 451 cc3000_netapp(cc3000_simple_link &simple_link, cc3000_nvmem &nvmem, cc3000_hci &hci, cc3000_event &event);
Kojto 29:c40918cd9b6d 452 /**
Kojto 34:1ad18123bf11 453 * \brief Dtor
Kojto 34:1ad18123bf11 454 * \param none
Kojto 34:1ad18123bf11 455 * \return none
Kojto 29:c40918cd9b6d 456 */
Kojto 20:30b6ed7bf8fd 457 ~cc3000_netapp();
Kojto 29:c40918cd9b6d 458 /**
Kojto 34:1ad18123bf11 459 * \brief Configure device MAC address and store it in NVMEM.
Kojto 34:1ad18123bf11 460 * The value of the MAC address configured through the API will be\n
Kojto 34:1ad18123bf11 461 * stored in CC3000 non volatile memory, thus preserved over resets.\n
Kojto 34:1ad18123bf11 462 * \param mac device mac address, 6 bytes. Saved: yes
Kojto 34:1ad18123bf11 463 * \return return on success 0, otherwise error.
Kojto 29:c40918cd9b6d 464 */
Kojto 20:30b6ed7bf8fd 465 int32_t config_mac_adrress(uint8_t *mac);
Kojto 29:c40918cd9b6d 466 /**
Kojto 34:1ad18123bf11 467 * \brief Configure the network interface, static or dynamic (DHCP).
Kojto 34:1ad18123bf11 468 * In order to activate DHCP mode, ip, subnet_mask, default_gateway must be 0.\n
Kojto 34:1ad18123bf11 469 * The default mode of CC3000 is DHCP mode. The configuration is saved in non volatile memory\n
Kojto 34:1ad18123bf11 470 * and thus preserved over resets.\n
Kojto 34:1ad18123bf11 471 * \param ip device mac address, 6 bytes. Saved: yes
Kojto 34:1ad18123bf11 472 * \param subnet_mask device mac address, 6 bytes. Saved: yes
Kojto 34:1ad18123bf11 473 * \param default_gateway device mac address, 6 bytes. Saved: yes
Kojto 34:1ad18123bf11 474 * \param dns_server device mac address, 6 bytes. Saved: yes
Kojto 34:1ad18123bf11 475 * \return 0 on success, otherwise error.
Kojto 34:1ad18123bf11 476 * \note If the mode is altered, a reset of CC3000 device is required to apply the changes.\n
Kojto 34:1ad18123bf11 477 * Also note that an asynchronous event of type 'DHCP_EVENT' is generated only when\n
Kojto 34:1ad18123bf11 478 * a connection to the AP was established. This event is generated when an IP address\n
Kojto 34:1ad18123bf11 479 * is allocated either by the DHCP server or by static allocation.\n
Kojto 29:c40918cd9b6d 480 */
Kojto 20:30b6ed7bf8fd 481 int32_t dhcp(uint32_t *ip, uint32_t *subnet_mask,uint32_t *default_gateway, uint32_t *dns_server);
Kojto 20:30b6ed7bf8fd 482 #ifndef CC3000_TINY_DRIVER
Kojto 29:c40918cd9b6d 483 /**
Kojto 34:1ad18123bf11 484 * \brief Get the CC3000 Network interface information.
Kojto 34:1ad18123bf11 485 * This information is only available after establishing a WLAN connection.\n
Kojto 34:1ad18123bf11 486 * Undefined values are returned when this function is called before association.\n
Kojto 34:1ad18123bf11 487 * \param ipconfig pointer to a tNetappIpconfigRetArgs structure for storing the network interface configuration.\n
Kojto 34:1ad18123bf11 488 * tNetappIpconfigRetArgs: aucIP - ip address,\n
Kojto 34:1ad18123bf11 489 * aucSubnetMask - mask
Kojto 34:1ad18123bf11 490 * aucDefaultGateway - default gateway address\n
Kojto 34:1ad18123bf11 491 * aucDHCPServer - dhcp server address\n
Kojto 34:1ad18123bf11 492 * aucDNSServer - dns server address\n
Kojto 34:1ad18123bf11 493 * uaMacAddr - mac address\n
Kojto 34:1ad18123bf11 494 * uaSSID - connected AP ssid\n
Kojto 34:1ad18123bf11 495 * \return none
Kojto 34:1ad18123bf11 496 * \note This function is useful for figuring out the IP Configuration of\n
Kojto 34:1ad18123bf11 497 * the device when DHCP is used and for figuring out the SSID of\n
Kojto 34:1ad18123bf11 498 * the Wireless network the device is associated with.\n
Kojto 29:c40918cd9b6d 499 */
Kojto 20:30b6ed7bf8fd 500 void ipconfig(tNetappIpconfigRetArgs *ipconfig);
Kojto 29:c40918cd9b6d 501 /**
Kojto 34:1ad18123bf11 502 * \brief Set new timeout values for DHCP lease timeout, ARP refresh timeout, keepalive event timeout and socket inactivity timeout
Kojto 34:1ad18123bf11 503 * \param dhcp DHCP lease time request, also impact\n
Kojto 34:1ad18123bf11 504 * the DHCP renew timeout.\n
Kojto 34:1ad18123bf11 505 * Range: [0-0xffffffff] seconds,\n
Kojto 34:1ad18123bf11 506 * 0 or 0xffffffff = infinite lease timeout.\n
Kojto 34:1ad18123bf11 507 * Resolution: 10 seconds.\n
Kojto 34:1ad18123bf11 508 * Influence: only after reconnecting to the AP. \n
Kojto 34:1ad18123bf11 509 * Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 seconds.\n
Kojto 34:1ad18123bf11 510 * The parameter is saved into the CC3000 NVMEM.\n
Kojto 34:1ad18123bf11 511 * The default value on CC3000 is 14400 seconds.\n
Kojto 34:1ad18123bf11 512 *
Kojto 34:1ad18123bf11 513 * \param arp ARP refresh timeout, if ARP entry is not updated by\n
Kojto 34:1ad18123bf11 514 * incoming packet, the ARP entry will be deleted by\n
Kojto 34:1ad18123bf11 515 * the end of the timeout. \n
Kojto 34:1ad18123bf11 516 * Range: [0-0xffffffff] seconds, 0 = infinite ARP timeout\n
Kojto 34:1ad18123bf11 517 * Resolution: 10 seconds.\n
Kojto 34:1ad18123bf11 518 * Influence: at runtime.\n
Kojto 34:1ad18123bf11 519 * Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 seconds\n
Kojto 34:1ad18123bf11 520 * The parameter is saved into the CC3000 NVMEM.\n
Kojto 34:1ad18123bf11 521 * The default value on CC3000 is 3600 seconds.\n
Kojto 34:1ad18123bf11 522 *
Kojto 34:1ad18123bf11 523 * \param keep_alive Keepalive event sent by the end of keepalive timeout\n
Kojto 34:1ad18123bf11 524 * Range: [0-0xffffffff] seconds, 0 == infinite timeout\n
Kojto 34:1ad18123bf11 525 * Resolution: 10 seconds.\n
Kojto 34:1ad18123bf11 526 * Influence: at runtime.\n
Kojto 34:1ad18123bf11 527 * Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 sec\n
Kojto 34:1ad18123bf11 528 * The parameter is saved into the CC3000 NVMEM. \n
Kojto 34:1ad18123bf11 529 * The default value on CC3000 is 10 seconds.\n
Kojto 34:1ad18123bf11 530 *
Kojto 34:1ad18123bf11 531 * \param inactivity Socket inactivity timeout, socket timeout is\n
Kojto 34:1ad18123bf11 532 * refreshed by incoming or outgoing packet, by the\n
Kojto 34:1ad18123bf11 533 * end of the socket timeout the socket will be closed\n
Kojto 34:1ad18123bf11 534 * Range: [0-0xffffffff] sec, 0 == infinite timeout.\n
Kojto 34:1ad18123bf11 535 * Resolution: 10 seconds.\n
Kojto 34:1ad18123bf11 536 * Influence: at runtime.\n
Kojto 34:1ad18123bf11 537 * Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 sec\n
Kojto 34:1ad18123bf11 538 * The parameter is saved into the CC3000 NVMEM.\n
Kojto 34:1ad18123bf11 539 * The default value on CC3000 is 60 seconds.\n
Kojto 34:1ad18123bf11 540 *
Kojto 34:1ad18123bf11 541 * \return 0 on success,otherwise error.
Kojto 34:1ad18123bf11 542 *
Kojto 34:1ad18123bf11 543 * \note A parameter set to a non zero value less than 20s automatically changes to 20s.
Kojto 29:c40918cd9b6d 544 */
Kojto 20:30b6ed7bf8fd 545 int32_t timeout_values(uint32_t *dhcp, uint32_t *arp,uint32_t *keep_alive, uint32_t *inactivity);
Kojto 29:c40918cd9b6d 546 /**
Kojto 34:1ad18123bf11 547 * \brief send ICMP ECHO_REQUEST to network hosts
Kojto 34:1ad18123bf11 548 * \param ip destination IP address
Kojto 34:1ad18123bf11 549 * \param ping_attempts number of echo requests to send
Kojto 34:1ad18123bf11 550 * \param ping_size send buffer size which may be up to 1400 bytes
Kojto 34:1ad18123bf11 551 * \param ping_timeout Time to wait for a response,in milliseconds.
Kojto 34:1ad18123bf11 552 * \return 0 on success, otherwise error.
Kojto 34:1ad18123bf11 553 *
Kojto 34:1ad18123bf11 554 * \note A succesful operation will generate an asynchronous ping report event.\n
Kojto 34:1ad18123bf11 555 * The report structure is defined by structure netapp_pingreport_args_t.\n
Kojto 34:1ad18123bf11 556 * \warning Calling this function while a Ping Request is in progress will kill the ping request in progress.
Kojto 29:c40918cd9b6d 557 */
Kojto 20:30b6ed7bf8fd 558 int32_t ping_send(uint32_t *ip, uint32_t ping_attempts, uint32_t ping_size, uint32_t ping_timeout);
Kojto 29:c40918cd9b6d 559 /**
Kojto 34:1ad18123bf11 560 * \brief Ping status request.
Kojto 34:1ad18123bf11 561 * This API triggers the CC3000 to send asynchronous events: HCI_EVNT_WLAN_ASYNC_PING_REPORT.\n
Kojto 34:1ad18123bf11 562 * This event will create the report structure in netapp_pingreport_args_t.\n
Kojto 34:1ad18123bf11 563 * This structure is filled with ping results until the API is triggered.\n
Kojto 34:1ad18123bf11 564 * netapp_pingreport_args_t: packets_sent - echo sent\n
Kojto 34:1ad18123bf11 565 * packets_received - echo reply\n
Kojto 34:1ad18123bf11 566 * min_round_time - minimum round time\n
Kojto 34:1ad18123bf11 567 * max_round_time - max round time\n
Kojto 34:1ad18123bf11 568 * avg_round_time - average round time\n
Kojto 34:1ad18123bf11 569 *
Kojto 34:1ad18123bf11 570 * \param none
Kojto 34:1ad18123bf11 571 * \return none
Kojto 34:1ad18123bf11 572 * \note When a ping operation is not active, the returned structure fields are 0.
Kojto 29:c40918cd9b6d 573 */
Kojto 20:30b6ed7bf8fd 574 void ping_report();
Kojto 29:c40918cd9b6d 575 /**
Kojto 34:1ad18123bf11 576 * \brief Stop any ping request.
Kojto 34:1ad18123bf11 577 * \param none
Kojto 34:1ad18123bf11 578 * \return 0 on success
Kojto 34:1ad18123bf11 579 * -1 on error
Kojto 29:c40918cd9b6d 580 */
Kojto 20:30b6ed7bf8fd 581 int32_t ping_stop();
Kojto 29:c40918cd9b6d 582 /**
Kojto 34:1ad18123bf11 583 * \brief Flush ARP table
Kojto 34:1ad18123bf11 584 * \param none
Kojto 34:1ad18123bf11 585 * \return none
Kojto 29:c40918cd9b6d 586 */
Kojto 20:30b6ed7bf8fd 587 int32_t arp_flush();
Kojto 20:30b6ed7bf8fd 588 #endif
Kojto 20:30b6ed7bf8fd 589 private:
Kojto 20:30b6ed7bf8fd 590 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 591 cc3000_nvmem &_nvmem;
Kojto 20:30b6ed7bf8fd 592 cc3000_hci &_hci;
Kojto 20:30b6ed7bf8fd 593 cc3000_event &_event;
Kojto 20:30b6ed7bf8fd 594 };
Kojto 20:30b6ed7bf8fd 595
Kojto 20:30b6ed7bf8fd 596 #ifndef CC3000_UNENCRYPTED_SMART_CONFIG
Kojto 31:7b6e85b68b01 597 /** Security class used only if encrypted smart config is set
Kojto 31:7b6e85b68b01 598 */
Kojto 20:30b6ed7bf8fd 599 class cc3000_security {
Kojto 20:30b6ed7bf8fd 600 public:
Kojto 29:c40918cd9b6d 601 /**
Kojto 34:1ad18123bf11 602 * \brief Expand a 16 bytes key for AES128 implementation.
Kojto 34:1ad18123bf11 603 * \param expanded_key expanded AES128 key
Kojto 34:1ad18123bf11 604 * \param key AES128 key - 16 bytes
Kojto 34:1ad18123bf11 605 * \return none
Kojto 29:c40918cd9b6d 606 */
Kojto 20:30b6ed7bf8fd 607 void expandKey(uint8_t *expanded_key, uint8_t *key);
Kojto 29:c40918cd9b6d 608 /**
Kojto 34:1ad18123bf11 609 * \brief multiply by 2 in the galois field.
Kojto 34:1ad18123bf11 610 * \param value Argument to multiply
Kojto 34:1ad18123bf11 611 * \return multiplied argument
Kojto 29:c40918cd9b6d 612 */
Kojto 20:30b6ed7bf8fd 613 uint8_t galois_mul2(uint8_t value);
Kojto 29:c40918cd9b6d 614 /**
Kojto 34:1ad18123bf11 615 * \brief internal implementation of AES128 encryption.
Kojto 34:1ad18123bf11 616 * straight forward aes encryption implementation\n
Kojto 34:1ad18123bf11 617 * first the group of operations
Kojto 34:1ad18123bf11 618 * - addRoundKey
Kojto 34:1ad18123bf11 619 * - subbytes
Kojto 34:1ad18123bf11 620 * - shiftrows
Kojto 34:1ad18123bf11 621 * - mixcolums\n
Kojto 34:1ad18123bf11 622 *
Kojto 34:1ad18123bf11 623 * is executed 9 times, after this addroundkey to finish the 9th\n
Kojto 34:1ad18123bf11 624 * round, after that the 10th round without mixcolums\n
Kojto 34:1ad18123bf11 625 * no further subfunctions to save cycles for function calls\n
Kojto 34:1ad18123bf11 626 * no structuring with "for (....)" to save cycles.\n
Kojto 34:1ad18123bf11 627 * \param[in] expanded_key expanded AES128 key
Kojto 34:1ad18123bf11 628 * \param[in/out] state 16 bytes of plain text and cipher text
Kojto 34:1ad18123bf11 629 * \return none
Kojto 29:c40918cd9b6d 630 */
Kojto 20:30b6ed7bf8fd 631 void aes_encr(uint8_t *state, uint8_t *expanded_key);
Kojto 29:c40918cd9b6d 632 /**
Kojto 34:1ad18123bf11 633 * \brief internal implementation of AES128 decryption.
Kojto 34:1ad18123bf11 634 * straightforward aes decryption implementation\n
Kojto 34:1ad18123bf11 635 * the order of substeps is the exact reverse of decryption\n
Kojto 34:1ad18123bf11 636 * inverse functions:
Kojto 34:1ad18123bf11 637 * - addRoundKey is its own inverse
Kojto 34:1ad18123bf11 638 * - rsbox is inverse of sbox
Kojto 34:1ad18123bf11 639 * - rightshift instead of leftshift
Kojto 34:1ad18123bf11 640 * - invMixColumns = barreto + mixColumns\n
Kojto 34:1ad18123bf11 641 *
Kojto 34:1ad18123bf11 642 * no further subfunctions to save cycles for function calls\n
Kojto 34:1ad18123bf11 643 * no structuring with "for (....)" to save cycles\n
Kojto 34:1ad18123bf11 644 * \param[in] expanded_key expanded AES128 key
Kojto 34:1ad18123bf11 645 * \param[in\out] state 16 bytes of cipher text and plain text
Kojto 34:1ad18123bf11 646 * \return none
Kojto 29:c40918cd9b6d 647 */
Kojto 20:30b6ed7bf8fd 648 void aes_decr(uint8_t *state, uint8_t *expanded_key);
Kojto 29:c40918cd9b6d 649 /**
Kojto 34:1ad18123bf11 650 * \brief AES128 encryption.
Kojto 34:1ad18123bf11 651 * Given AES128 key and 16 bytes plain text, cipher text of 16 bytes is computed.\n
Kojto 34:1ad18123bf11 652 * The AES implementation is in mode ECB (Electronic Code Book).\n
Kojto 34:1ad18123bf11 653 * \param[in] key AES128 key of size 16 bytes
Kojto 34:1ad18123bf11 654 * \param[in\out] state 16 bytes of plain text and cipher text
Kojto 34:1ad18123bf11 655 * \return none
Kojto 29:c40918cd9b6d 656 */
Kojto 20:30b6ed7bf8fd 657 void aes_encrypt(uint8_t *state, uint8_t *key);
Kojto 29:c40918cd9b6d 658 /**
Kojto 34:1ad18123bf11 659 * \brief AES128 decryption.
Kojto 34:1ad18123bf11 660 * Given AES128 key and 16 bytes cipher text, plain text of 16 bytes is computed.\n
Kojto 34:1ad18123bf11 661 * The AES implementation is in mode ECB (Electronic Code Book).\n
Kojto 34:1ad18123bf11 662 * \param[in] key AES128 key of size 16 bytes
Kojto 34:1ad18123bf11 663 * \param[in\out] state 16 bytes of cipher text and plain text
Kojto 34:1ad18123bf11 664 * \return none
Kojto 29:c40918cd9b6d 665 */
Kojto 20:30b6ed7bf8fd 666 void aes_decrypt(uint8_t *state, uint8_t *key);
Kojto 29:c40918cd9b6d 667 /**
Kojto 34:1ad18123bf11 668 * \brief Read the AES128 key from fileID #12 in EEPROM.
Kojto 34:1ad18123bf11 669 * \param[out] key AES128 key of size 16 bytes
Kojto 34:1ad18123bf11 670 * \return 0 on success, error otherwise.
Kojto 29:c40918cd9b6d 671 */
Kojto 20:30b6ed7bf8fd 672 int32_t aes_read_key(uint8_t *key);
Kojto 29:c40918cd9b6d 673 /**
Kojto 34:1ad18123bf11 674 * \brief Write the AES128 key to fileID #12 in EEPROM.
Kojto 34:1ad18123bf11 675 * \param[out] key AES128 key of size 16 bytes
Kojto 34:1ad18123bf11 676 * \return on success 0, error otherwise.
Kojto 29:c40918cd9b6d 677 */
Kojto 20:30b6ed7bf8fd 678 int32_t aes_write_key(uint8_t *key);
Kojto 20:30b6ed7bf8fd 679 private:
Kojto 20:30b6ed7bf8fd 680 uint8_t _expanded_key[176];
Kojto 20:30b6ed7bf8fd 681 };
Kojto 20:30b6ed7bf8fd 682 #endif
Kojto 20:30b6ed7bf8fd 683
Kojto 31:7b6e85b68b01 684 /** Socket layer
Kojto 31:7b6e85b68b01 685 */
Kojto 20:30b6ed7bf8fd 686 class cc3000_socket {
Kojto 20:30b6ed7bf8fd 687 public:
Kojto 29:c40918cd9b6d 688 /**
Kojto 34:1ad18123bf11 689 * \brief Ctor
Kojto 34:1ad18123bf11 690 * \param simplelink Reference to simple link object.
Kojto 34:1ad18123bf11 691 * \param hci Reference to hci object.
Kojto 34:1ad18123bf11 692 * \param event Reference to event object.
Kojto 34:1ad18123bf11 693 * \return none
Kojto 29:c40918cd9b6d 694 */
Kojto 20:30b6ed7bf8fd 695 cc3000_socket(cc3000_simple_link &simplelink, cc3000_hci &hci, cc3000_event &event);
Kojto 29:c40918cd9b6d 696 /**
Kojto 34:1ad18123bf11 697 * \brief Dtor
Kojto 29:c40918cd9b6d 698 * \param
Kojto 34:1ad18123bf11 699 * \return none
Kojto 29:c40918cd9b6d 700 */
Kojto 20:30b6ed7bf8fd 701 ~cc3000_socket();
Kojto 29:c40918cd9b6d 702 /**
Kojto 34:1ad18123bf11 703 * \brief create an endpoint for communication.
Kojto 34:1ad18123bf11 704 * The socket function creates a socket that is bound to a specific transport service provider.\n
Kojto 34:1ad18123bf11 705 * This function is called by the application layer to obtain a socket handle.\n
Kojto 34:1ad18123bf11 706 *
Kojto 34:1ad18123bf11 707 * \param domain selects the protocol family which will be used for\n
Kojto 34:1ad18123bf11 708 * communication. On this version only AF_INET is supported\n
Kojto 34:1ad18123bf11 709 * \param type specifies the communication semantics. On this version\n
Kojto 34:1ad18123bf11 710 * only SOCK_STREAM, SOCK_DGRAM, SOCK_RAW are supported\n
Kojto 34:1ad18123bf11 711 * \param protocol specifies a particular protocol to be used with the\n
Kojto 34:1ad18123bf11 712 * socket IPPROTO_TCP, IPPROTO_UDP or IPPROTO_RAW are supported.\n
Kojto 34:1ad18123bf11 713 * \return On success, socket handle that is used for consequent socket operations\n
Kojto 34:1ad18123bf11 714 * On error, -1 is returned.\n
Kojto 29:c40918cd9b6d 715 */
Kojto 20:30b6ed7bf8fd 716 int32_t socket(int32_t domain, int32_t type, int32_t protocol);
Kojto 29:c40918cd9b6d 717 /**
Kojto 34:1ad18123bf11 718 * \brief accept a connection on a socket.
Kojto 34:1ad18123bf11 719 * This function is used with connection-based socket types\n
Kojto 34:1ad18123bf11 720 * (SOCK_STREAM). It extracts the first connection request on the\n
Kojto 34:1ad18123bf11 721 * queue of pending connections, creates a new connected socket, and\n
Kojto 34:1ad18123bf11 722 * returns a new file descriptor referring to that socket.\n
Kojto 34:1ad18123bf11 723 * The newly created socket is not in the listening state.\n
Kojto 34:1ad18123bf11 724 * The original socket sd is unaffected by this call.\n
Kojto 34:1ad18123bf11 725 * The argument sd is a socket that has been created with socket(),\n
Kojto 34:1ad18123bf11 726 * bound to a local address with bind(), and is listening for \n
Kojto 34:1ad18123bf11 727 * connections after a listen(). The argument addr is a pointer \n
Kojto 34:1ad18123bf11 728 * to a sockaddr structure. This structure is filled in with the \n
Kojto 34:1ad18123bf11 729 * address of the peer socket, as known to the communications layer.\n
Kojto 34:1ad18123bf11 730 * The exact format of the address returned addr is determined by the \n
Kojto 34:1ad18123bf11 731 * socket's address family. The addrlen argument is a value-result\n
Kojto 34:1ad18123bf11 732 * argument: it should initially contain the size of the structure\n
Kojto 34:1ad18123bf11 733 * pointed to by addr, on return it will contain the actual\n
Kojto 34:1ad18123bf11 734 * length (in bytes) of the address returned.\n
Kojto 34:1ad18123bf11 735 *
Kojto 34:1ad18123bf11 736 * \param[in] sd socket descriptor (handle)\n
Kojto 34:1ad18123bf11 737 * \param[out] addr the argument addr is a pointer to a sockaddr structure\n
Kojto 34:1ad18123bf11 738 * This structure is filled in with the address of the \n
Kojto 34:1ad18123bf11 739 * peer socket, as known to the communications layer. \n
Kojto 34:1ad18123bf11 740 * determined. The exact format of the address returned \n
Kojto 34:1ad18123bf11 741 * addr is by the socket's address sockaddr. \n
Kojto 34:1ad18123bf11 742 * On this version only AF_INET is supported.\n
Kojto 34:1ad18123bf11 743 * This argument returns in network order.\n
Kojto 34:1ad18123bf11 744 * \param[out] addrlen the addrlen argument is a value-result argument: \n
Kojto 34:1ad18123bf11 745 * it should initially contain the size of the structure\n
Kojto 34:1ad18123bf11 746 * pointed to by addr.\n
Kojto 34:1ad18123bf11 747 * \return For socket in blocking mode:\n
Kojto 34:1ad18123bf11 748 * - On success, socket handle. on failure negative\n
Kojto 34:1ad18123bf11 749 * For socket in non-blocking mode:\n
Kojto 34:1ad18123bf11 750 * - On connection establishment, socket handle\n
Kojto 34:1ad18123bf11 751 * - On connection pending, SOC_IN_PROGRESS (-2)\n
Kojto 34:1ad18123bf11 752 * - On failure, SOC_ERROR (-1)\n
Kojto 34:1ad18123bf11 753 * \sa socket ; bind ; listen
Kojto 29:c40918cd9b6d 754 */
Kojto 20:30b6ed7bf8fd 755 int32_t accept(int32_t sd, sockaddr *addr, socklen_t *addrlen);
Kojto 29:c40918cd9b6d 756 /**
Kojto 34:1ad18123bf11 757 * \brief assign a name to a socket.
Kojto 34:1ad18123bf11 758 * This function gives the socket the local address addr.\n
Kojto 34:1ad18123bf11 759 * addr is addrlen bytes long. Traditionally, this is called when a \n
Kojto 34:1ad18123bf11 760 * socket is created with socket, it exists in a name space (address \n
Kojto 34:1ad18123bf11 761 * family) but has no name assigned.\n
Kojto 34:1ad18123bf11 762 * It is necessary to assign a local address before a SOCK_STREAM\n
Kojto 34:1ad18123bf11 763 * socket may receive connections.\n
Kojto 34:1ad18123bf11 764 *
Kojto 34:1ad18123bf11 765 * \param[in] sd socket descriptor (handle)
Kojto 34:1ad18123bf11 766 * \param[out] addr specifies the destination address. On this version\n
Kojto 34:1ad18123bf11 767 * only AF_INET is supported.\n
Kojto 34:1ad18123bf11 768 * \param[out] addrlen contains the size of the structure pointed to by addr.\n
Kojto 34:1ad18123bf11 769 * \return On success, zero is returned.\n
Kojto 34:1ad18123bf11 770 * On error, -1 is returned.\n
Kojto 34:1ad18123bf11 771 * \sa socket ; accept ; listen
Kojto 29:c40918cd9b6d 772 */
Kojto 20:30b6ed7bf8fd 773 int32_t bind(int32_t sd, const sockaddr *addr, int32_t addrlen);
Kojto 29:c40918cd9b6d 774 /**
Kojto 34:1ad18123bf11 775 * \brief HostFlowControlConsumeBuff.
Kojto 34:1ad18123bf11 776 * if SEND_NON_BLOCKING is not defined - block until a free buffer is available,\n
Kojto 34:1ad18123bf11 777 * otherwise return the status of the available buffers.\n
Kojto 34:1ad18123bf11 778 *
Kojto 34:1ad18123bf11 779 * \param sd socket descriptor
Kojto 34:1ad18123bf11 780 * \return 0 in case there are buffers available, \n
Kojto 34:1ad18123bf11 781 * -1 in case of bad socket\n
Kojto 34:1ad18123bf11 782 * -2 if there are no free buffers present (only when SEND_NON_BLOCKING is enabled)\n
Kojto 29:c40918cd9b6d 783 */
Kojto 20:30b6ed7bf8fd 784 int32_t HostFlowControlConsumeBuff(int32_t sd);
Kojto 29:c40918cd9b6d 785 /**
Kojto 34:1ad18123bf11 786 * \brief The socket function closes a created socket.
Kojto 34:1ad18123bf11 787 * \param sd socket handle.
Kojto 34:1ad18123bf11 788 * \return On success, zero is returned. On error, -1 is returned.
Kojto 29:c40918cd9b6d 789 */
Kojto 20:30b6ed7bf8fd 790 int32_t closesocket(int32_t sd);
Kojto 29:c40918cd9b6d 791 /**
Kojto 34:1ad18123bf11 792 * \brief listen for connections on a socket.
Kojto 34:1ad18123bf11 793 * The willingness to accept incoming connections and a queue\n
Kojto 34:1ad18123bf11 794 * limit for incoming connections are specified with listen(),\n
Kojto 34:1ad18123bf11 795 * and then the connections are accepted with accept.\n
Kojto 34:1ad18123bf11 796 * The listen() call applies only to sockets of type SOCK_STREAM\n
Kojto 34:1ad18123bf11 797 * The backlog parameter defines the maximum length the queue of\n
Kojto 34:1ad18123bf11 798 * pending connections may grow to. \n
Kojto 34:1ad18123bf11 799 *
Kojto 34:1ad18123bf11 800 * \param[in] sd socket descriptor (handle)
Kojto 34:1ad18123bf11 801 * \param[in] backlog specifies the listen queue depth. On this version\n
Kojto 34:1ad18123bf11 802 * backlog is not supported.\n
Kojto 34:1ad18123bf11 803 * \return On success, zero is returned.\n
Kojto 34:1ad18123bf11 804 * On error, -1 is returned.\n
Kojto 34:1ad18123bf11 805 * \sa socket ; accept ; bind
Kojto 34:1ad18123bf11 806 * \note On this version, backlog is not supported
Kojto 29:c40918cd9b6d 807 */
Kojto 20:30b6ed7bf8fd 808 int32_t listen(int32_t sd, int32_t backlog);
Kojto 29:c40918cd9b6d 809 /**
Kojto 34:1ad18123bf11 810 * \brief initiate a connection on a socket.
Kojto 34:1ad18123bf11 811 * Function connects the socket referred to by the socket descriptor\n
Kojto 34:1ad18123bf11 812 * sd, to the address specified by addr. The addrlen argument \n
Kojto 34:1ad18123bf11 813 * specifies the size of addr. The format of the address in addr is \n
Kojto 34:1ad18123bf11 814 * determined by the address space of the socket. If it is of type \n
Kojto 34:1ad18123bf11 815 * SOCK_DGRAM, this call specifies the peer with which the socket is \n
Kojto 34:1ad18123bf11 816 * to be associated; this address is that to which datagrams are to be\n
Kojto 34:1ad18123bf11 817 * sent, and the only address from which datagrams are to be received. \n
Kojto 34:1ad18123bf11 818 * If the socket is of type SOCK_STREAM, this call attempts to make a \n
Kojto 34:1ad18123bf11 819 * connection to another socket. The other socket is specified by \n
Kojto 34:1ad18123bf11 820 * address, which is an address in the communications space of the\n
Kojto 34:1ad18123bf11 821 * socket. Note that the function implements only blocking behavior \n
Kojto 34:1ad18123bf11 822 * thus the caller will be waiting either for the connection \n
Kojto 34:1ad18123bf11 823 * establishment or for the connection establishment failure.\n
Kojto 34:1ad18123bf11 824 *
Kojto 34:1ad18123bf11 825 * \param[in] sd socket descriptor (handle)
Kojto 34:1ad18123bf11 826 * \param[in] addr specifies the destination addr. On this version\n
Kojto 34:1ad18123bf11 827 * only AF_INET is supported.\n
Kojto 34:1ad18123bf11 828 * \param[out] addrlen contains the size of the structure pointed to by addr
Kojto 34:1ad18123bf11 829 * \return On success, zero is returned.\n
Kojto 34:1ad18123bf11 830 On error, -1 is returned\n
Kojto 34:1ad18123bf11 831 * \sa socket
Kojto 29:c40918cd9b6d 832 */
Kojto 20:30b6ed7bf8fd 833 int32_t connect(int32_t sd, const sockaddr *addr, int32_t addrlen);
Kojto 29:c40918cd9b6d 834 /**
Kojto 34:1ad18123bf11 835 * \brief Monitor socket activity.
Kojto 34:1ad18123bf11 836 * Select allow a program to monitor multiple file descriptors,\n
Kojto 34:1ad18123bf11 837 * waiting until one or more of the file descriptors become \n
Kojto 34:1ad18123bf11 838 * "ready" for some class of I/O operation \n
Kojto 34:1ad18123bf11 839 *
Kojto 34:1ad18123bf11 840 * \param[in] nfds the highest-numbered file descriptor in any of the\n
Kojto 34:1ad18123bf11 841 * three sets, plus 1. \n
Kojto 34:1ad18123bf11 842 * \param[out] readsds socket descriptors list for read monitoring\n
Kojto 34:1ad18123bf11 843 * \param[out] writesds socket descriptors list for write monitoring\n
Kojto 34:1ad18123bf11 844 * \param[out] exceptsds socket descriptors list for exception monitoring\n
Kojto 34:1ad18123bf11 845 * \param[in] timeout is an upper bound on the amount of time elapsed\n
Kojto 34:1ad18123bf11 846 * before select() returns. Null means infinity \n
Kojto 34:1ad18123bf11 847 * timeout. The minimum timeout is 5 milliseconds,\n
Kojto 34:1ad18123bf11 848 * less than 5 milliseconds will be set\n
Kojto 34:1ad18123bf11 849 * automatically to 5 milliseconds.\n
Kojto 34:1ad18123bf11 850 * \return On success, select() returns the number of file descriptors\n
Kojto 34:1ad18123bf11 851 * contained in the three returned descriptor sets (that is, the\n
Kojto 34:1ad18123bf11 852 * total number of bits that are set in readfds, writefds,\n
Kojto 34:1ad18123bf11 853 * exceptfds) which may be zero if the timeout expires before\n
Kojto 34:1ad18123bf11 854 * anything interesting happens.\n
Kojto 34:1ad18123bf11 855 * On error, -1 is returned.\n
Kojto 34:1ad18123bf11 856 * *readsds - return the sockets on which Read request will\n
Kojto 34:1ad18123bf11 857 * return without delay with valid data.\n
Kojto 34:1ad18123bf11 858 * *writesds - return the sockets on which Write request \n
Kojto 34:1ad18123bf11 859 * will return without delay.\n
Kojto 34:1ad18123bf11 860 * *exceptsds - return the sockets which closed recently.\n
Kojto 34:1ad18123bf11 861 * \Note If the timeout value set to less than 5ms it will automatically\n
Kojto 34:1ad18123bf11 862 * change to 5ms to prevent overload of the system\n
Kojto 34:1ad18123bf11 863 * \sa socket
Kojto 29:c40918cd9b6d 864 */
Kojto 20:30b6ed7bf8fd 865 int32_t select(int32_t nfds, fd_set *readsds, fd_set *writesds, fd_set *exceptsds, struct timeval *timeout);
Kojto 29:c40918cd9b6d 866 /**
Kojto 34:1ad18123bf11 867 * \brief get socket options.
Kojto 34:1ad18123bf11 868 * This function manipulate the options associated with a socket.\n
Kojto 34:1ad18123bf11 869 * Options may exist at multiple protocol levels; they are always\n
Kojto 34:1ad18123bf11 870 * present at the uppermost socket level.\n
Kojto 34:1ad18123bf11 871 * When manipulating socket options the level at which the option \n
Kojto 34:1ad18123bf11 872 * resides and the name of the option must be specified. \n
Kojto 34:1ad18123bf11 873 * To manipulate options at the socket level, level is specified as \n
Kojto 34:1ad18123bf11 874 * SOL_SOCKET. To manipulate options at any other level the protocol \n
Kojto 34:1ad18123bf11 875 * number of the appropriate protocol controlling the option is \n
Kojto 34:1ad18123bf11 876 * supplied. For example, to indicate that an option is to be \n
Kojto 34:1ad18123bf11 877 * interpreted by the TCP protocol, level should be set to the \n
Kojto 34:1ad18123bf11 878 * protocol number of TCP; \n
Kojto 34:1ad18123bf11 879 * The parameters optval and optlen are used to access optval -\n
Kojto 34:1ad18123bf11 880 * use for setsockopt(). For getsockopt() they identify a buffer\n
Kojto 34:1ad18123bf11 881 * in which the value for the requested option(s) are to \n
Kojto 34:1ad18123bf11 882 * be returned. For getsockopt(), optlen is a value-result \n
Kojto 34:1ad18123bf11 883 * parameter, initially containing the size of the buffer \n
Kojto 34:1ad18123bf11 884 * pointed to by option_value, and modified on return to \n
Kojto 34:1ad18123bf11 885 * indicate the actual size of the value returned. If no option \n
Kojto 34:1ad18123bf11 886 * value is to be supplied or returned, option_value may be NULL.\n
Kojto 34:1ad18123bf11 887 *
Kojto 34:1ad18123bf11 888 * \param[in] sd socket handle
Kojto 34:1ad18123bf11 889 * \param[in] level defines the protocol level for this option
Kojto 34:1ad18123bf11 890 * \param[in] optname defines the option name to Interrogate
Kojto 34:1ad18123bf11 891 * \param[out] optval specifies a value for the option
Kojto 34:1ad18123bf11 892 * \param[out] optlen specifies the length of the option value
Kojto 34:1ad18123bf11 893 * \return On success, zero is returned. On error, -1 is returned
Kojto 34:1ad18123bf11 894 *
Kojto 34:1ad18123bf11 895 * \Note On this version the following two socket options are enabled:\n
Kojto 34:1ad18123bf11 896 * The only protocol level supported in this version is SOL_SOCKET (level).\n
Kojto 34:1ad18123bf11 897 * 1. SOCKOPT_RECV_TIMEOUT (optname)\n
Kojto 34:1ad18123bf11 898 * SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout in milliseconds.\n
Kojto 34:1ad18123bf11 899 * In that case optval should be pointer to unsigned long.\n
Kojto 34:1ad18123bf11 900 * 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on or off.\n
Kojto 34:1ad18123bf11 901 * In that case optval should be SOCK_ON or SOCK_OFF (optval).\n
Kojto 34:1ad18123bf11 902 * \sa setsockopt
Kojto 29:c40918cd9b6d 903 */
Kojto 20:30b6ed7bf8fd 904 int32_t getsockopt (int32_t sd, int32_t level, int32_t optname, void *optval, socklen_t *optlen);
Kojto 29:c40918cd9b6d 905 /**
Kojto 34:1ad18123bf11 906 * \brief Read data from socket (simple_link_recv).
Kojto 34:1ad18123bf11 907 * Return the length of the message on successful completion.\n
Kojto 34:1ad18123bf11 908 * If a message is too long to fit in the supplied buffer, excess bytes may\n
Kojto 34:1ad18123bf11 909 * be discarded depending on the type of socket the message is received from.\n
Kojto 34:1ad18123bf11 910 *
Kojto 34:1ad18123bf11 911 * \param sd socket handle
Kojto 34:1ad18123bf11 912 * \param buf read buffer
Kojto 34:1ad18123bf11 913 * \param len buffer length
Kojto 34:1ad18123bf11 914 * \param flags indicates blocking or non-blocking operation
Kojto 34:1ad18123bf11 915 * \param from pointer to an address structure indicating source address
Kojto 34:1ad18123bf11 916 * \param fromlen source address structure size
Kojto 34:1ad18123bf11 917 * \return Return the number of bytes received, or -1 if an error occurred
Kojto 29:c40918cd9b6d 918 */
Kojto 20:30b6ed7bf8fd 919 int32_t simple_link_recv(int32_t sd, void *buf, int32_t len, int32_t flags, sockaddr *from, socklen_t *fromlen, int32_t opcode);
Kojto 29:c40918cd9b6d 920 /**
Kojto 34:1ad18123bf11 921 * \brief Transmit a message to another socket (simple_link_send).
Kojto 34:1ad18123bf11 922 * \param sd socket handle
Kojto 34:1ad18123bf11 923 * \param buf write buffer
Kojto 34:1ad18123bf11 924 * \param len buffer length
Kojto 34:1ad18123bf11 925 * \param flags On this version, this parameter is not supported
Kojto 34:1ad18123bf11 926 * \param to pointer to an address structure indicating destination address
Kojto 34:1ad18123bf11 927 * \param tolen destination address structure size
Kojto 34:1ad18123bf11 928 * \return Return the number of bytes transmitted, or -1 if an error\n
Kojto 34:1ad18123bf11 929 * occurred, or -2 in case there are no free buffers available\n
Kojto 34:1ad18123bf11 930 * (only when SEND_NON_BLOCKING is enabled)\n
Kojto 29:c40918cd9b6d 931 */
Kojto 20:30b6ed7bf8fd 932 int32_t simple_link_send(int32_t sd, const void *buf, int32_t len, int32_t flags, const sockaddr *to, int32_t tolen, int32_t opcode);
Kojto 29:c40918cd9b6d 933 /**
Kojto 34:1ad18123bf11 934 * \brief Receive a message from a connection-mode socket.
Kojto 34:1ad18123bf11 935 * \param[in] sd socket handle
Kojto 34:1ad18123bf11 936 * \param[out] buf Points to the buffer where the message should be stored
Kojto 34:1ad18123bf11 937 * \param[in] len Specifies the length in bytes of the buffer pointed to \n
Kojto 34:1ad18123bf11 938 * by the buffer argument.\n
Kojto 34:1ad18123bf11 939 * \param[in] flags Specifies the type of message reception. \n
Kojto 34:1ad18123bf11 940 * On this version, this parameter is not supported.\n
Kojto 34:1ad18123bf11 941 * \return Return the number of bytes received, or -1 if an error occurred
Kojto 34:1ad18123bf11 942 * \sa recvfrom
Kojto 34:1ad18123bf11 943 * \Note On this version, only blocking mode is supported.
Kojto 29:c40918cd9b6d 944 */
Kojto 20:30b6ed7bf8fd 945 int32_t recv(int32_t sd, void *buf, int32_t len, int32_t flags);
Kojto 29:c40918cd9b6d 946 /**
Kojto 34:1ad18123bf11 947 * \brief read data from socket (recvfrom).
Kojto 34:1ad18123bf11 948 * Receives a message from a connection-mode or connectionless-mode socket.\n
Kojto 34:1ad18123bf11 949 * Note that raw sockets are not supported.\n
Kojto 34:1ad18123bf11 950 *
Kojto 34:1ad18123bf11 951 * \param[in] sd socket handle
Kojto 34:1ad18123bf11 952 * \param[out] buf Points to the buffer where the message should be stored
Kojto 34:1ad18123bf11 953 * \param[in] len Specifies the length in bytes of the buffer pointed to \n
Kojto 34:1ad18123bf11 954 * by the buffer argument.\n
Kojto 34:1ad18123bf11 955 * \param[in] flags Specifies the type of message reception.\n
Kojto 34:1ad18123bf11 956 * On this version, this parameter is not supported.\n
Kojto 34:1ad18123bf11 957 * \param[in] from pointer to an address structure indicating the source\n
Kojto 34:1ad18123bf11 958 * address: sockaddr. On this version only AF_INET is\n
Kojto 34:1ad18123bf11 959 * supported.\n
Kojto 34:1ad18123bf11 960 * \param[in] fromlen source address structure size
Kojto 34:1ad18123bf11 961 * \return Return the number of bytes received, or -1 if an error occurred
Kojto 34:1ad18123bf11 962 * \sa recv
Kojto 34:1ad18123bf11 963 * \Note On this version, only blocking mode is supported.
Kojto 29:c40918cd9b6d 964 */
Kojto 20:30b6ed7bf8fd 965 int32_t recvfrom(int32_t sd, void *buf, int32_t len, int32_t flags, sockaddr *from, socklen_t *fromlen);
Kojto 29:c40918cd9b6d 966 /**
Kojto 34:1ad18123bf11 967 * \brief Transmit a message to another socket (send).
Kojto 34:1ad18123bf11 968 * \param sd socket handle
Kojto 34:1ad18123bf11 969 * \param buf Points to a buffer containing the message to be sent
Kojto 34:1ad18123bf11 970 * \param len message size in bytes
Kojto 34:1ad18123bf11 971 * \param flags On this version, this parameter is not supported
Kojto 34:1ad18123bf11 972 * \return Return the number of bytes transmitted, or -1 if an\n
Kojto 34:1ad18123bf11 973 * error occurred\n
Kojto 34:1ad18123bf11 974 * \Note On this version, only blocking mode is supported.
Kojto 34:1ad18123bf11 975 * \sa sendto
Kojto 29:c40918cd9b6d 976 */
Kojto 20:30b6ed7bf8fd 977 int32_t send(int32_t sd, const void *buf, int32_t len, int32_t flags);
Kojto 29:c40918cd9b6d 978 /**
Kojto 34:1ad18123bf11 979 * \brief Transmit a message to another socket (sendto).
Kojto 34:1ad18123bf11 980 * \param sd socket handle
Kojto 34:1ad18123bf11 981 * \param buf Points to a buffer containing the message to be sent
Kojto 34:1ad18123bf11 982 * \param len message size in bytes
Kojto 34:1ad18123bf11 983 * \param flags On this version, this parameter is not supported
Kojto 34:1ad18123bf11 984 * \param to pointer to an address structure indicating the destination\n
Kojto 34:1ad18123bf11 985 * address: sockaddr. On this version only AF_INET is\n
Kojto 34:1ad18123bf11 986 * supported.\n
Kojto 34:1ad18123bf11 987 * \param tolen destination address structure size
Kojto 34:1ad18123bf11 988 * \return Return the number of bytes transmitted, or -1 if an error occurred
Kojto 34:1ad18123bf11 989 * \Note On this version, only blocking mode is supported.
Kojto 34:1ad18123bf11 990 * \sa send
Kojto 29:c40918cd9b6d 991 */
Kojto 20:30b6ed7bf8fd 992 int32_t sendto(int32_t sd, const void *buf, int32_t len, int32_t flags, const sockaddr *to, socklen_t tolen);
Kojto 29:c40918cd9b6d 993 /**
Kojto 34:1ad18123bf11 994 * \brief Set CC3000 in mDNS advertiser mode in order to advertise itself.
Kojto 34:1ad18123bf11 995 * \param[in] mdns_enabled flag to enable/disable the mDNS feature
Kojto 34:1ad18123bf11 996 * \param[in] device_service_name Service name as part of the published\n
Kojto 34:1ad18123bf11 997 * canonical domain name\n
Kojto 34:1ad18123bf11 998 * \param[in] device_service_name_length Length of the service name
Kojto 34:1ad18123bf11 999 * \return On success, zero is returned,\n
Kojto 34:1ad18123bf11 1000 * return SOC_ERROR if socket was not opened successfully, or if an error occurred.\n
Kojto 29:c40918cd9b6d 1001 */
Kojto 20:30b6ed7bf8fd 1002 int32_t mdns_advertiser(uint16_t mdns_enabled, uint8_t * device_service_name, uint16_t device_service_name_length);
Kojto 20:30b6ed7bf8fd 1003 #ifndef CC3000_TINY_DRIVER
Kojto 33:9e23b24fb4f3 1004 /**
Kojto 34:1ad18123bf11 1005 * \brief Get host IP by name.\n
Kojto 34:1ad18123bf11 1006 * Obtain the IP Address of machine on network\n
Kojto 34:1ad18123bf11 1007 *
Kojto 34:1ad18123bf11 1008 * \param[in] hostname host name
Kojto 34:1ad18123bf11 1009 * \param[in] name_length name length
Kojto 34:1ad18123bf11 1010 * \param[out] out_ip_addr This parameter is filled in with host IP address.\n
Kojto 34:1ad18123bf11 1011 * In case that host name is not resolved, \n
Kojto 34:1ad18123bf11 1012 * out_ip_addr is zero.\n
Kojto 34:1ad18123bf11 1013 * \return On success, positive is returned.\n
Kojto 34:1ad18123bf11 1014 * On error, negative is returned by its name.\n
Kojto 34:1ad18123bf11 1015 * \note On this version, only blocking mode is supported. Also note that\n
Kojto 34:1ad18123bf11 1016 * The function requires DNS server to be configured prior to its usage.\n
Kojto 33:9e23b24fb4f3 1017 */
Kojto 20:30b6ed7bf8fd 1018 int32_t gethostbyname(uint8_t *hostname, uint16_t name_length, uint32_t *out_ip_addr);
Kojto 29:c40918cd9b6d 1019 /**
Kojto 34:1ad18123bf11 1020 * \brief set socket options.
Kojto 34:1ad18123bf11 1021 * This function manipulate the options associated with a socket.\n
Kojto 34:1ad18123bf11 1022 * Options may exist at multiple protocol levels; they are always\n
Kojto 34:1ad18123bf11 1023 * present at the uppermost socket level.\n
Kojto 34:1ad18123bf11 1024 * When manipulating socket options the level at which the option \n
Kojto 34:1ad18123bf11 1025 * resides and the name of the option must be specified.\n
Kojto 34:1ad18123bf11 1026 * To manipulate options at the socket level, level is specified as\n
Kojto 34:1ad18123bf11 1027 * SOL_SOCKET. To manipulate options at any other level the protocol \n
Kojto 34:1ad18123bf11 1028 * number of the appropriate protocol controlling the option is \n
Kojto 34:1ad18123bf11 1029 * supplied. For example, to indicate that an option is to be \n
Kojto 34:1ad18123bf11 1030 * interpreted by the TCP protocol, level should be set to the \n
Kojto 34:1ad18123bf11 1031 * protocol number of TCP; \n
Kojto 34:1ad18123bf11 1032 * The parameters optval and optlen are used to access optval - \n
Kojto 34:1ad18123bf11 1033 * use for setsockopt(). For getsockopt() they identify a buffer\n
Kojto 34:1ad18123bf11 1034 * in which the value for the requested option(s) are to \n
Kojto 34:1ad18123bf11 1035 * be returned. For getsockopt(), optlen is a value-result \n
Kojto 34:1ad18123bf11 1036 * parameter, initially containing the size of the buffer \n
Kojto 34:1ad18123bf11 1037 * pointed to by option_value, and modified on return to \n
Kojto 34:1ad18123bf11 1038 * indicate the actual size of the value returned. If no option \n
Kojto 34:1ad18123bf11 1039 * value is to be supplied or returned, option_value may be NULL.\n
Kojto 34:1ad18123bf11 1040 *
Kojto 34:1ad18123bf11 1041 * \param[in] sd socket handle
Kojto 34:1ad18123bf11 1042 * \param[in] level defines the protocol level for this option
Kojto 34:1ad18123bf11 1043 * \param[in] optname defines the option name to Interrogate
Kojto 34:1ad18123bf11 1044 * \param[in] optval specifies a value for the option
Kojto 34:1ad18123bf11 1045 * \param[in] optlen specifies the length of the option value
Kojto 34:1ad18123bf11 1046 * \return On success, zero is returned.\n
Kojto 34:1ad18123bf11 1047 * On error, -1 is returned\n
Kojto 34:1ad18123bf11 1048 *
Kojto 34:1ad18123bf11 1049 * \Note On this version the following two socket options are enabled:\n
Kojto 34:1ad18123bf11 1050 * The only protocol level supported in this version is SOL_SOCKET (level).\n
Kojto 34:1ad18123bf11 1051 * 1. SOCKOPT_RECV_TIMEOUT (optname)\n
Kojto 34:1ad18123bf11 1052 * SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout in milliseconds.\n
Kojto 34:1ad18123bf11 1053 * In that case optval should be pointer to unsigned long.\n
Kojto 34:1ad18123bf11 1054 * 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on or off.\n
Kojto 34:1ad18123bf11 1055 * In that case optval should be SOCK_ON or SOCK_OFF (optval).\n
Kojto 34:1ad18123bf11 1056 * \sa getsockopt
Kojto 29:c40918cd9b6d 1057 */
Kojto 20:30b6ed7bf8fd 1058 int32_t setsockopt(int32_t sd, int32_t level, int32_t optname, const void *optval, socklen_t optlen);
Kojto 20:30b6ed7bf8fd 1059 #endif
Kojto 20:30b6ed7bf8fd 1060 private:
Kojto 20:30b6ed7bf8fd 1061 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 1062 cc3000_hci &_hci;
Kojto 20:30b6ed7bf8fd 1063 cc3000_event &_event;
Kojto 20:30b6ed7bf8fd 1064 };
Kojto 20:30b6ed7bf8fd 1065
Kojto 31:7b6e85b68b01 1066 /** SPI communication layer
Kojto 20:30b6ed7bf8fd 1067 */
Kojto 20:30b6ed7bf8fd 1068 class cc3000_spi {
Kojto 20:30b6ed7bf8fd 1069 public:
Kojto 33:9e23b24fb4f3 1070 /**
Kojto 33:9e23b24fb4f3 1071 * \brief Ctor
Kojto 34:1ad18123bf11 1072 * \param irq IRQ pin
Kojto 34:1ad18123bf11 1073 * \param cc3000_en Enable pin
Kojto 34:1ad18123bf11 1074 * \param cc3000_cs Chip select pin
Kojto 34:1ad18123bf11 1075 * \param cc3000_spi SPI object
Kojto 34:1ad18123bf11 1076 * \param irq_port Port for IRQ pin (needed for enable/disable interrupts)
Kojto 34:1ad18123bf11 1077 * \param event Reference to the event object.
Kojto 34:1ad18123bf11 1078 * \param simple_link Reference to the simple link object.
Kojto 33:9e23b24fb4f3 1079 * \return none
Kojto 20:30b6ed7bf8fd 1080 */
Kojto 20:30b6ed7bf8fd 1081 cc3000_spi(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, IRQn_Type irq_port, cc3000_event &event, cc3000_simple_link &simple_link);
Kojto 33:9e23b24fb4f3 1082 /**
Kojto 33:9e23b24fb4f3 1083 * \brief Dtor
Kojto 33:9e23b24fb4f3 1084 * \param none
Kojto 33:9e23b24fb4f3 1085 * \return none
Kojto 20:30b6ed7bf8fd 1086 */
Kojto 20:30b6ed7bf8fd 1087 ~cc3000_spi();
Kojto 33:9e23b24fb4f3 1088 /**
Kojto 33:9e23b24fb4f3 1089 * \brief Close SPI - disables IRQ and set received buffer to 0
Kojto 20:30b6ed7bf8fd 1090 * \param none
Kojto 20:30b6ed7bf8fd 1091 * \return none
Kojto 20:30b6ed7bf8fd 1092 */
Kojto 20:30b6ed7bf8fd 1093 void close();
Kojto 34:1ad18123bf11 1094 /**
Kojto 34:1ad18123bf11 1095 * \brief Open the SPI interface
Kojto 34:1ad18123bf11 1096 * \param none
Kojto 34:1ad18123bf11 1097 * \return none
Kojto 20:30b6ed7bf8fd 1098 */
Kojto 20:30b6ed7bf8fd 1099 void open();
Kojto 34:1ad18123bf11 1100 /**
Kojto 34:1ad18123bf11 1101 * \brief First SPI write after powerup (delay needed between SPI header and body)
Kojto 34:1ad18123bf11 1102 * \param buffer pointer to write buffer
Kojto 34:1ad18123bf11 1103 * \param length buffer length
Kojto 34:1ad18123bf11 1104 * \return 0
Kojto 20:30b6ed7bf8fd 1105 */
Kojto 20:30b6ed7bf8fd 1106 uint32_t first_write(uint8_t *buffer, uint16_t length);
Kojto 34:1ad18123bf11 1107 /**
Kojto 34:1ad18123bf11 1108 * \brief SPI Write function
Kojto 34:1ad18123bf11 1109 * \param buffer pointer to write buffer
Kojto 34:1ad18123bf11 1110 * \param length buffer length
Kojto 34:1ad18123bf11 1111 * \return 0
Kojto 20:30b6ed7bf8fd 1112 */
Kojto 20:30b6ed7bf8fd 1113 uint32_t write(uint8_t *buffer, uint16_t length);
Kojto 34:1ad18123bf11 1114 /**
Kojto 34:1ad18123bf11 1115 * \brief Low level SPI write
Kojto 34:1ad18123bf11 1116 * \param data pointer to data buffer
Kojto 34:1ad18123bf11 1117 * \param size number of bytes
Kojto 34:1ad18123bf11 1118 * \return none
Kojto 20:30b6ed7bf8fd 1119 */
Kojto 20:30b6ed7bf8fd 1120 void write_synchronous(uint8_t *data, uint16_t size);
Kojto 34:1ad18123bf11 1121 /**
Kojto 34:1ad18123bf11 1122 * \brief Low level SPI read
Kojto 34:1ad18123bf11 1123 * \param data pointer to data buffer
Kojto 34:1ad18123bf11 1124 * \param size number of bytes
Kojto 34:1ad18123bf11 1125 * \return none
Kojto 20:30b6ed7bf8fd 1126 */
Kojto 20:30b6ed7bf8fd 1127 void read_synchronous(uint8_t *data, uint16_t size);
Kojto 34:1ad18123bf11 1128 /**
Kojto 34:1ad18123bf11 1129 * \brief Process the received SPI Header and in accordance with it - continue reading the packet
Kojto 34:1ad18123bf11 1130 * \param None
Kojto 34:1ad18123bf11 1131 * \return 0
Kojto 20:30b6ed7bf8fd 1132 */
Kojto 20:30b6ed7bf8fd 1133 uint32_t read_data_cont();
Kojto 20:30b6ed7bf8fd 1134 /**
Kojto 34:1ad18123bf11 1135 * \brief Enable WLAN interrutp
Kojto 34:1ad18123bf11 1136 * \param None
Kojto 34:1ad18123bf11 1137 * \return None
Kojto 20:30b6ed7bf8fd 1138 */
Kojto 20:30b6ed7bf8fd 1139 void wlan_irq_enable();
Kojto 34:1ad18123bf11 1140 /**
Kojto 34:1ad18123bf11 1141 * \brief Disable WLAN interrutp
Kojto 34:1ad18123bf11 1142 * \param None
Kojto 34:1ad18123bf11 1143 * \return None
Kojto 20:30b6ed7bf8fd 1144 */
Kojto 20:30b6ed7bf8fd 1145 void wlan_irq_disable();
Kojto 20:30b6ed7bf8fd 1146 /**
Kojto 34:1ad18123bf11 1147 * \brief Get WLAN interrupt status
Kojto 34:1ad18123bf11 1148 * \param None
Kojto 34:1ad18123bf11 1149 * \return 0 : No interrupt occured
Kojto 34:1ad18123bf11 1150 * 1 : Interrupt occured
Kojto 20:30b6ed7bf8fd 1151 */
Kojto 20:30b6ed7bf8fd 1152 uint32_t wlan_irq_read();
Kojto 20:30b6ed7bf8fd 1153 /**
Kojto 34:1ad18123bf11 1154 * \brief SPI interrupt Handler.
Kojto 34:1ad18123bf11 1155 * The external WLAN device asserts the IRQ line when data is ready.\n
Kojto 34:1ad18123bf11 1156 * The host CPU needs to acknowledges the IRQ by asserting CS.\n
Kojto 34:1ad18123bf11 1157 *
Kojto 34:1ad18123bf11 1158 * \param none
Kojto 34:1ad18123bf11 1159 * \return none
Kojto 20:30b6ed7bf8fd 1160 */
Kojto 20:30b6ed7bf8fd 1161 void WLAN_IRQHandler();
Kojto 20:30b6ed7bf8fd 1162 /**
Kojto 34:1ad18123bf11 1163 * \brief Enable/Disable the WLAN module
Kojto 34:1ad18123bf11 1164 * \param value 1 : Enable
Kojto 34:1ad18123bf11 1165 * 0 : Disable
Kojto 34:1ad18123bf11 1166 * \return None
Kojto 20:30b6ed7bf8fd 1167 */
Kojto 34:1ad18123bf11 1168 void set_wlan_en(uint8_t value);
Kojto 20:30b6ed7bf8fd 1169 private:
Kojto 20:30b6ed7bf8fd 1170 tSpiInfo _spi_info;
Kojto 20:30b6ed7bf8fd 1171 InterruptIn _wlan_irq;
Kojto 20:30b6ed7bf8fd 1172 DigitalOut _wlan_en;
Kojto 20:30b6ed7bf8fd 1173 DigitalOut _wlan_cs;
Kojto 20:30b6ed7bf8fd 1174 SPI _wlan_spi;
Kojto 20:30b6ed7bf8fd 1175 IRQn_Type _irq_port;
Kojto 20:30b6ed7bf8fd 1176 pFunctionPointer_t _function_pointer;
Kojto 20:30b6ed7bf8fd 1177 cc3000_event &_event;
Kojto 20:30b6ed7bf8fd 1178 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 1179 };
Kojto 20:30b6ed7bf8fd 1180
Kojto 31:7b6e85b68b01 1181 /** HCI layer
Kojto 31:7b6e85b68b01 1182 */
Kojto 20:30b6ed7bf8fd 1183 class cc3000_hci {
Kojto 20:30b6ed7bf8fd 1184 public:
Kojto 29:c40918cd9b6d 1185 /**
Kojto 29:c40918cd9b6d 1186 * \brief Ctor
Kojto 34:1ad18123bf11 1187 * \param spi Reference to the spi object.
Kojto 29:c40918cd9b6d 1188 * \return none
Kojto 29:c40918cd9b6d 1189 */
Kojto 20:30b6ed7bf8fd 1190 cc3000_hci(cc3000_spi &spi);
Kojto 29:c40918cd9b6d 1191 /**
Kojto 29:c40918cd9b6d 1192 * \brief Dtor
Kojto 29:c40918cd9b6d 1193 * \param none
Kojto 29:c40918cd9b6d 1194 * \return none
Kojto 29:c40918cd9b6d 1195 */
Kojto 20:30b6ed7bf8fd 1196 ~cc3000_hci();
Kojto 29:c40918cd9b6d 1197 /**
Kojto 29:c40918cd9b6d 1198 * \brief Initiate an HCI command.
Kojto 29:c40918cd9b6d 1199 * \param op_code command operation code
Kojto 29:c40918cd9b6d 1200 * \param buffer pointer to the command's arguments buffer
Kojto 29:c40918cd9b6d 1201 * \param length length of the arguments
Kojto 34:1ad18123bf11 1202 * \return 0
Kojto 29:c40918cd9b6d 1203 */
Kojto 20:30b6ed7bf8fd 1204 uint16_t command_send(uint16_t op_code, uint8_t *buffer, uint8_t length);
Kojto 29:c40918cd9b6d 1205 /**
Kojto 29:c40918cd9b6d 1206 * \brief Initiate an HCI data write operation
Kojto 29:c40918cd9b6d 1207 * \param op_code command operation code
Kojto 29:c40918cd9b6d 1208 * \param args pointer to the command's arguments buffer
Kojto 29:c40918cd9b6d 1209 * \param arg_length length of the arguments
Kojto 29:c40918cd9b6d 1210 * \param data_length length od data
Kojto 29:c40918cd9b6d 1211 * \param tail pointer to the data buffer
Kojto 29:c40918cd9b6d 1212 * \param tail_length buffer length
Kojto 34:1ad18123bf11 1213 * \return ESUCCESS
Kojto 29:c40918cd9b6d 1214 */
Kojto 20:30b6ed7bf8fd 1215 uint32_t data_send(uint8_t op_code, uint8_t *args, uint16_t arg_length,
Kojto 20:30b6ed7bf8fd 1216 uint16_t data_length, const uint8_t *tail, uint16_t tail_length);
Kojto 29:c40918cd9b6d 1217 /**
Kojto 29:c40918cd9b6d 1218 * \brief Prepare HCI header and initiate an HCI data write operation.
Kojto 29:c40918cd9b6d 1219 * \param op_code command operation code
Kojto 29:c40918cd9b6d 1220 * \param buffer pointer to the data buffer
Kojto 29:c40918cd9b6d 1221 * \param arg_length arguments length
Kojto 29:c40918cd9b6d 1222 * \param data_length data length
Kojto 29:c40918cd9b6d 1223 * \return none
Kojto 29:c40918cd9b6d 1224 */
Kojto 20:30b6ed7bf8fd 1225 void data_command_send(uint16_t op_code, uint8_t *buffer, uint8_t arg_length,
Kojto 20:30b6ed7bf8fd 1226 uint16_t data_length);
Kojto 29:c40918cd9b6d 1227 /**
Kojto 29:c40918cd9b6d 1228 * \brief Prepare HCI header and initiate an HCI patch write operation.
Kojto 29:c40918cd9b6d 1229 * \param op_code command operation code
Kojto 29:c40918cd9b6d 1230 * \param buffer pointer to the command's arguments buffer
Kojto 29:c40918cd9b6d 1231 * \param patch pointer to patch content buffer
Kojto 29:c40918cd9b6d 1232 * \param data_length data length
Kojto 29:c40918cd9b6d 1233 * \return none
Kojto 29:c40918cd9b6d 1234 */
Kojto 20:30b6ed7bf8fd 1235 void patch_send(uint8_t op_code, uint8_t *buffer, uint8_t *patch, uint16_t data_length);
Kojto 20:30b6ed7bf8fd 1236 private:
Kojto 20:30b6ed7bf8fd 1237 cc3000_spi &_spi;
Kojto 20:30b6ed7bf8fd 1238 };
Kojto 20:30b6ed7bf8fd 1239
Kojto 31:7b6e85b68b01 1240 /** NVMEM layer
Kojto 31:7b6e85b68b01 1241 */
Kojto 20:30b6ed7bf8fd 1242 class cc3000_nvmem {
Kojto 20:30b6ed7bf8fd 1243 public:
Kojto 29:c40918cd9b6d 1244 /**
Kojto 29:c40918cd9b6d 1245 * \brief Ctor
Kojto 34:1ad18123bf11 1246 * \param hci Reference to the hci object.
Kojto 34:1ad18123bf11 1247 * \param event Reference to the event object.
Kojto 34:1ad18123bf11 1248 * \param simple_link Reference to the simple link object.
Kojto 29:c40918cd9b6d 1249 * \return none
Kojto 29:c40918cd9b6d 1250 */
Kojto 29:c40918cd9b6d 1251 cc3000_nvmem(cc3000_hci &hci, cc3000_event &event, cc3000_simple_link &simple_link);
Kojto 29:c40918cd9b6d 1252 /**
Kojto 29:c40918cd9b6d 1253 * \brief Dtor
Kojto 29:c40918cd9b6d 1254 * \param none
Kojto 29:c40918cd9b6d 1255 * \return none
Kojto 29:c40918cd9b6d 1256 */
Kojto 20:30b6ed7bf8fd 1257 ~cc3000_nvmem();
Kojto 29:c40918cd9b6d 1258 /**
Kojto 29:c40918cd9b6d 1259 * \brief Reads data from the file referred by the file_id parameter.
Kojto 29:c40918cd9b6d 1260 * Reads data from file offset till length. Err if the file can't be used,
Kojto 29:c40918cd9b6d 1261 * is invalid, or if the read is out of bounds.
Kojto 29:c40918cd9b6d 1262 * \param file_id nvmem file id.
Kojto 29:c40918cd9b6d 1263 * \param length number of bytes to read.
Kojto 29:c40918cd9b6d 1264 * \param offset offset in file from where to read.
Kojto 29:c40918cd9b6d 1265 * \param buff output buffer pointer.
Kojto 29:c40918cd9b6d 1266 * \return
Kojto 29:c40918cd9b6d 1267 * Number of bytes read, otherwise error.
Kojto 29:c40918cd9b6d 1268 */
Kojto 20:30b6ed7bf8fd 1269 int32_t read(uint32_t file_id, uint32_t length, uint32_t offset, uint8_t *buff);
Kojto 29:c40918cd9b6d 1270 /**
Kojto 29:c40918cd9b6d 1271 * \brief Write data to nvmem.
Kojto 29:c40918cd9b6d 1272 * \param file_id Nvmem file id
Kojto 29:c40918cd9b6d 1273 * \param length number of bytes to write
Kojto 29:c40918cd9b6d 1274 * \param entry_offset offset in file to start write operation from
Kojto 29:c40918cd9b6d 1275 * \param buff data to write
Kojto 29:c40918cd9b6d 1276 * \return
Kojto 29:c40918cd9b6d 1277 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1278 */
Kojto 20:30b6ed7bf8fd 1279 int32_t write(uint32_t file_id, uint32_t length, uint32_t entry_offset, uint8_t *buff);
Kojto 29:c40918cd9b6d 1280 /**
Kojto 29:c40918cd9b6d 1281 * \brief Write MAC address to EEPROM.
Kojto 29:c40918cd9b6d 1282 * \param mac Mac address to be set
Kojto 29:c40918cd9b6d 1283 * \return
Kojto 29:c40918cd9b6d 1284 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1285 */
Kojto 20:30b6ed7bf8fd 1286 uint8_t set_mac_address(uint8_t *mac);
Kojto 29:c40918cd9b6d 1287 /**
Kojto 29:c40918cd9b6d 1288 * \brief Read MAC address from EEPROM.
Kojto 29:c40918cd9b6d 1289 * \param mac Mac address
Kojto 29:c40918cd9b6d 1290 * \return
Kojto 33:9e23b24fb4f3 1291 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1292 */
Kojto 20:30b6ed7bf8fd 1293 uint8_t get_mac_address(uint8_t *mac);
Kojto 29:c40918cd9b6d 1294 /**
Kojto 29:c40918cd9b6d 1295 * \brief Program a patch to a specific file ID. The SP data is assumed to be organized in 2-dimensional.
Kojto 29:c40918cd9b6d 1296 * Each line is SP_PORTION_SIZE bytes long.
Kojto 29:c40918cd9b6d 1297 * \param file_id nvmem file id/
Kojto 29:c40918cd9b6d 1298 * \param length number of bytes to write
Kojto 29:c40918cd9b6d 1299 * \param data SP data to write
Kojto 29:c40918cd9b6d 1300 * \return
Kojto 29:c40918cd9b6d 1301 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1302 */
Kojto 20:30b6ed7bf8fd 1303 uint8_t write_patch(uint32_t file_id, uint32_t length, const uint8_t *data);
Kojto 29:c40918cd9b6d 1304 /**
Kojto 29:c40918cd9b6d 1305 * \brief Create new file entry and allocate space on the NVMEM. Applies only to user files.
Kojto 29:c40918cd9b6d 1306 * \param file_id nvmem file Id
Kojto 29:c40918cd9b6d 1307 * \param new_len entry ulLength
Kojto 29:c40918cd9b6d 1308 * \return
Kojto 29:c40918cd9b6d 1309 */
Kojto 20:30b6ed7bf8fd 1310 int32_t create_entry(uint32_t file_id, uint32_t new_len);
Kojto 20:30b6ed7bf8fd 1311 #ifndef CC3000_TINY_DRIVER
Kojto 29:c40918cd9b6d 1312 /**
Kojto 29:c40918cd9b6d 1313 * \brief Read patch version. read package version (WiFi FW patch, river-supplicant-NS patch,
Kojto 29:c40918cd9b6d 1314 * bootloader patch)
Kojto 29:c40918cd9b6d 1315 * \param patch_ver First number indicates package ID and the second number indicates
Kojto 29:c40918cd9b6d 1316 * package build number
Kojto 29:c40918cd9b6d 1317 * \return
Kojto 29:c40918cd9b6d 1318 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1319 */
Kojto 20:30b6ed7bf8fd 1320 uint8_t read_sp_version(uint8_t* patch_ver);
Kojto 20:30b6ed7bf8fd 1321 #endif
Kojto 20:30b6ed7bf8fd 1322 private:
Kojto 20:30b6ed7bf8fd 1323 cc3000_hci &_hci;
Kojto 20:30b6ed7bf8fd 1324 cc3000_event &_event;
Kojto 20:30b6ed7bf8fd 1325 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 1326 };
Kojto 20:30b6ed7bf8fd 1327
Kojto 31:7b6e85b68b01 1328 /** WLAN layer
Kojto 31:7b6e85b68b01 1329 */
Kojto 20:30b6ed7bf8fd 1330 class cc3000_wlan {
Kojto 20:30b6ed7bf8fd 1331 public:
Kojto 29:c40918cd9b6d 1332 /**
Kojto 29:c40918cd9b6d 1333 * \brief Ctor
Kojto 34:1ad18123bf11 1334 * \param simple_link Reference to the simple link object.
Kojto 34:1ad18123bf11 1335 * \param event Reference to the event object.
Kojto 34:1ad18123bf11 1336 * \param spi Reference to the spi object.
Kojto 34:1ad18123bf11 1337 * \param hci Reference to the hci object.
Kojto 29:c40918cd9b6d 1338 * \return none
Kojto 29:c40918cd9b6d 1339 */
Kojto 20:30b6ed7bf8fd 1340 cc3000_wlan(cc3000_simple_link &simple_link, cc3000_event &event, cc3000_spi &spi, cc3000_hci &hci);
Kojto 29:c40918cd9b6d 1341 /**
Kojto 29:c40918cd9b6d 1342 * \brief Dtor
Kojto 29:c40918cd9b6d 1343 * \param none
Kojto 29:c40918cd9b6d 1344 * \return none
Kojto 29:c40918cd9b6d 1345 */
Kojto 20:30b6ed7bf8fd 1346 ~cc3000_wlan();
Kojto 29:c40918cd9b6d 1347 /**
Kojto 29:c40918cd9b6d 1348 * \brief Send SIMPLE LINK START to cc3000.
Kojto 29:c40918cd9b6d 1349 * \param patches_available_host Flag to indicate if patches are available.
Kojto 20:30b6ed7bf8fd 1350 * \return none
Kojto 20:30b6ed7bf8fd 1351 */
Kojto 20:30b6ed7bf8fd 1352 void simpleLink_init_start(uint16_t patches_available_host);
Kojto 29:c40918cd9b6d 1353 /**
Kojto 29:c40918cd9b6d 1354 * \brief Start wlan device. Blocking call until init is completed.
Kojto 29:c40918cd9b6d 1355 * \param patches_available_host Flag to indicate if patches are available.
Kojto 20:30b6ed7bf8fd 1356 * \return none
Kojto 20:30b6ed7bf8fd 1357 */
Kojto 20:30b6ed7bf8fd 1358 void start(uint16_t patches_available_host);
Kojto 29:c40918cd9b6d 1359 /**
Kojto 29:c40918cd9b6d 1360 * \brief Stop wlan device
Kojto 20:30b6ed7bf8fd 1361 * \param none
Kojto 20:30b6ed7bf8fd 1362 * \return none
Kojto 20:30b6ed7bf8fd 1363 */
Kojto 20:30b6ed7bf8fd 1364 void stop(void);
Kojto 20:30b6ed7bf8fd 1365 #ifndef CC3000_TINY_DRIVER
Kojto 29:c40918cd9b6d 1366 /**
Kojto 29:c40918cd9b6d 1367 * \brief Connect to AP.
Kojto 29:c40918cd9b6d 1368 * \param sec_type Security option.
Kojto 29:c40918cd9b6d 1369 * \param ssid up to 32 bytes, ASCII SSID
Kojto 29:c40918cd9b6d 1370 * \param ssid_length length of SSID
Kojto 29:c40918cd9b6d 1371 * \param b_ssid 6 bytes specified the AP bssid
Kojto 29:c40918cd9b6d 1372 * \param key up to 16 bytes specified the AP security key
Kojto 29:c40918cd9b6d 1373 * \param key_len key length
Kojto 29:c40918cd9b6d 1374 * \return
Kojto 29:c40918cd9b6d 1375 * On success, zero is returned. On error, negative is returned.
Kojto 29:c40918cd9b6d 1376 */
Kojto 20:30b6ed7bf8fd 1377 int32_t connect(uint32_t sec_type, const uint8_t *ssid, int32_t ssid_length, uint8_t *b_ssid, uint8_t *key, int32_t key_len);
Kojto 29:c40918cd9b6d 1378 /**
Kojto 29:c40918cd9b6d 1379 * \brief Add profile. Up to 7 profiles are supported.
Kojto 29:c40918cd9b6d 1380 * \param sec_type Security option.
Kojto 29:c40918cd9b6d 1381 * \param ssid Up to 32 bytes, ASCII SSID
Kojto 29:c40918cd9b6d 1382 * \param ssid_length Length of SSID
Kojto 29:c40918cd9b6d 1383 * \param b_ssid 6 bytes specified the AP bssid
Kojto 29:c40918cd9b6d 1384 * \param priority Up to 16 bytes specified the AP security key
Kojto 29:c40918cd9b6d 1385 * \param pairwise_cipher_or_tx_key_len Key length
Kojto 29:c40918cd9b6d 1386 * \param group_cipher_tx_key_index Key length for WEP security
Kojto 29:c40918cd9b6d 1387 * \param key_mgmt KEY management
Kojto 29:c40918cd9b6d 1388 * \param pf_or_key Security key
Kojto 29:c40918cd9b6d 1389 * \param pass_phrase_length Security key length for WPA\WPA2
Kojto 29:c40918cd9b6d 1390 * \return
Kojto 29:c40918cd9b6d 1391 * On success, zero is returned. On error, negative is returned.
Kojto 29:c40918cd9b6d 1392 */
Kojto 20:30b6ed7bf8fd 1393 int32_t add_profile(uint32_t sec_type, uint8_t* ssid, uint32_t ssid_length, uint8_t *b_ssid, uint32_t priority, uint32_t pairwise_cipher_or_tx_key_len, uint32_t group_cipher_tx_key_index,
Kojto 20:30b6ed7bf8fd 1394 uint32_t key_mgmt, uint8_t* pf_or_key, uint32_t pass_phrase_length);
Kojto 29:c40918cd9b6d 1395 /**
Kojto 29:c40918cd9b6d 1396 * \brief Gets entry from scan result table. The scan results are returned
Kojto 29:c40918cd9b6d 1397 * one by one, and each entry represents a single AP found in the area.
Kojto 29:c40918cd9b6d 1398 * \param scan_timeout Not supported yet
Kojto 29:c40918cd9b6d 1399 * \param results Scan result
Kojto 29:c40918cd9b6d 1400 * \return
Kojto 29:c40918cd9b6d 1401 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1402 */
Kojto 20:30b6ed7bf8fd 1403 int32_t ioctl_get_scan_results(uint32_t scan_timeout, uint8_t *results);
Kojto 29:c40918cd9b6d 1404 /**
Kojto 29:c40918cd9b6d 1405 * \brief Start and stop scan procedure. Set scan parameters.
Kojto 29:c40918cd9b6d 1406 * \param enable Start/stop application scan
Kojto 29:c40918cd9b6d 1407 * \param min_dwell_time Minimum dwell time value to be used for each channel, in ms. (Default: 20)
Kojto 29:c40918cd9b6d 1408 * \param max_dwell_time Maximum dwell time value to be used for each channel, in ms. (Default: 30)
Kojto 29:c40918cd9b6d 1409 * \param num_probe_requests Max probe request between dwell time. (Default:2)
Kojto 29:c40918cd9b6d 1410 * \param channel_mask Bitwise, up to 13 channels (0x1fff).
Kojto 29:c40918cd9b6d 1411 * \param rssi_threshold RSSI threshold. Saved: yes (Default: -80)
Kojto 29:c40918cd9b6d 1412 * \param snr_threshold NSR threshold. Saved: yes (Default: 0)
Kojto 29:c40918cd9b6d 1413 * \param default_tx_power probe Tx power. Saved: yes (Default: 205)
Kojto 29:c40918cd9b6d 1414 * \param interval_list Pointer to array with 16 entries (16 channels)
Kojto 29:c40918cd9b6d 1415 * \return
Kojto 29:c40918cd9b6d 1416 * On success, zero is returned. On error, -1 is returned.
Kojto 29:c40918cd9b6d 1417 */
Kojto 20:30b6ed7bf8fd 1418 int32_t ioctl_set_scan_params(uint32_t enable, uint32_t min_dwell_time, uint32_t max_dwell_time, uint32_t num_probe_requests,
Kojto 20:30b6ed7bf8fd 1419 uint32_t channel_mask, int32_t rssi_threshold, uint32_t snr_threshold, uint32_t default_tx_power, uint32_t *interval_list);
Kojto 29:c40918cd9b6d 1420 /**
Kojto 29:c40918cd9b6d 1421 * \brief Get wlan status: disconnected, scanning, connecting or connected
Kojto 29:c40918cd9b6d 1422 * \param none
Kojto 29:c40918cd9b6d 1423 * \return
Kojto 29:c40918cd9b6d 1424 * WLAN_STATUS_DISCONNECTED, WLAN_STATUS_SCANING, STATUS_CONNECTING or WLAN_STATUS_CONNECTED
Kojto 29:c40918cd9b6d 1425 */
Kojto 20:30b6ed7bf8fd 1426 int32_t ioctl_statusget(void);
Kojto 20:30b6ed7bf8fd 1427 #else
Kojto 29:c40918cd9b6d 1428 /**
Kojto 29:c40918cd9b6d 1429 * \brief Connect to AP
Kojto 29:c40918cd9b6d 1430 * \param ssid Up to 32 bytes and is ASCII SSID of the AP
Kojto 29:c40918cd9b6d 1431 * \param ssid_length Length of the SSID
Kojto 29:c40918cd9b6d 1432 * \return
Kojto 29:c40918cd9b6d 1433 * On success, zero is returned. On error, negative is returned.
Kojto 29:c40918cd9b6d 1434 */
Kojto 20:30b6ed7bf8fd 1435 int32_t connect(const uint8_t *ssid, int32_t ssid_length);
Kojto 29:c40918cd9b6d 1436 /**
Kojto 29:c40918cd9b6d 1437 * \brief When auto start is enabled, the device connects to station from the profiles table.
Kojto 29:c40918cd9b6d 1438 * If several profiles configured the device choose the highest priority profile.
Kojto 29:c40918cd9b6d 1439 * \param sec_type WLAN_SEC_UNSEC,WLAN_SEC_WEP,WLAN_SEC_WPA,WLAN_SEC_WPA2
Kojto 29:c40918cd9b6d 1440 * \param ssid SSID up to 32 bytes
Kojto 29:c40918cd9b6d 1441 * \param ssid_length SSID length
Kojto 29:c40918cd9b6d 1442 * \param b_ssid bssid 6 bytes
Kojto 29:c40918cd9b6d 1443 * \param priority Profile priority. Lowest priority:0.
Kojto 29:c40918cd9b6d 1444 * \param pairwise_cipher_or_tx_key_len Key length for WEP security
Kojto 29:c40918cd9b6d 1445 * \param group_cipher_tx_key_index Key index
Kojto 29:c40918cd9b6d 1446 * \param key_mgmt KEY management
Kojto 29:c40918cd9b6d 1447 * \param pf_or_key Security key
Kojto 29:c40918cd9b6d 1448 * \param pass_phrase_length Security key length for WPA\WPA2
Kojto 29:c40918cd9b6d 1449 * \return
Kojto 29:c40918cd9b6d 1450 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1451 */
Kojto 20:30b6ed7bf8fd 1452 int32_t add_profile(uint32_t sec_type, uint8_t *ssid, uint32_t ssid_length, uint8_t *b_ssid, uint32_t priority,
Kojto 20:30b6ed7bf8fd 1453 uint32_t pairwise_cipher_or_tx_key_len, uint32_t group_cipher_tx_key_index, uint32_t key_mgmt,
Kojto 20:30b6ed7bf8fd 1454 uint8_t* pf_or_key, uint32_t pass_phrase_length);
Kojto 20:30b6ed7bf8fd 1455 #endif
Kojto 20:30b6ed7bf8fd 1456 #ifndef CC3000_UNENCRYPTED_SMART_CONFIG
Kojto 29:c40918cd9b6d 1457 /**
Kojto 29:c40918cd9b6d 1458 * \brief Process the acquired data and store it as a profile.
Kojto 29:c40918cd9b6d 1459 * \param none
Kojto 29:c40918cd9b6d 1460 * \return
Kojto 29:c40918cd9b6d 1461 * On success, zero is returned. On error, -1 is returned.
Kojto 29:c40918cd9b6d 1462 */
Kojto 20:30b6ed7bf8fd 1463 int32_t smart_config_process(void);
Kojto 20:30b6ed7bf8fd 1464 #endif
Kojto 29:c40918cd9b6d 1465 /**
Kojto 29:c40918cd9b6d 1466 * \brief Disconnect connection from AP.
Kojto 29:c40918cd9b6d 1467 * \param none
Kojto 29:c40918cd9b6d 1468 * \return
Kojto 29:c40918cd9b6d 1469 * 0 if disconnected done, other CC3000 already disconnected.
Kojto 29:c40918cd9b6d 1470 */
Kojto 20:30b6ed7bf8fd 1471 int32_t disconnect();
Kojto 29:c40918cd9b6d 1472 /**
Kojto 29:c40918cd9b6d 1473 * \brief When auto is enabled, the device tries to connect according the following policy:
Kojto 29:c40918cd9b6d 1474 * 1) If fast connect is enabled and last connection is valid, the device will try to
Kojto 29:c40918cd9b6d 1475 * connect to it without the scanning procedure (fast). The last connection will be
Kojto 29:c40918cd9b6d 1476 * marked as invalid, due to adding/removing profile.
Kojto 29:c40918cd9b6d 1477 * 2) If profile exists, the device will try to connect it (Up to seven profiles).
Kojto 29:c40918cd9b6d 1478 * 3) If fast and profiles are not found, and open mode is enabled, the device
Kojto 29:c40918cd9b6d 1479 * will try to connect to any AP.
Kojto 29:c40918cd9b6d 1480 * Note that the policy settings are stored in the CC3000 NVMEM.
Kojto 29:c40918cd9b6d 1481 * \param should_connect_to_open_ap Enable(1), disable(0) connect to any available AP.
Kojto 29:c40918cd9b6d 1482 * \param use_fast_connect Enable(1), disable(0). if enabled, tries to
Kojto 29:c40918cd9b6d 1483 * connect to the last connected AP.
Kojto 29:c40918cd9b6d 1484 * \param use_profiles Enable(1), disable(0) auto connect after reset.
Kojto 29:c40918cd9b6d 1485 * and periodically reconnect if needed.
Kojto 29:c40918cd9b6d 1486 * \return
Kojto 29:c40918cd9b6d 1487 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1488 */
Kojto 20:30b6ed7bf8fd 1489 int32_t ioctl_set_connection_policy(uint32_t should_connect_to_open_ap, uint32_t use_fast_connect, uint32_t use_profiles);
Kojto 29:c40918cd9b6d 1490 /**
Kojto 29:c40918cd9b6d 1491 * \brief Delete WLAN profile
Kojto 29:c40918cd9b6d 1492 * \param index Number of profile to delete
Kojto 29:c40918cd9b6d 1493 * \return
Kojto 29:c40918cd9b6d 1494 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1495 */
Kojto 20:30b6ed7bf8fd 1496 int32_t ioctl_del_profile(uint32_t index);
Kojto 29:c40918cd9b6d 1497 /**
Kojto 29:c40918cd9b6d 1498 * \brief Mask event according to bit mask. In case that event is
Kojto 29:c40918cd9b6d 1499 * masked (1), the device will not send the masked event to host.
Kojto 29:c40918cd9b6d 1500 * \param mask event mask
Kojto 29:c40918cd9b6d 1501 * \return
Kojto 29:c40918cd9b6d 1502 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1503 */
Kojto 20:30b6ed7bf8fd 1504 int32_t set_event_mask(uint32_t mask);
Kojto 29:c40918cd9b6d 1505 /**
Kojto 29:c40918cd9b6d 1506 * \brief Start to acquire device profile. The device acquire its own
Kojto 29:c40918cd9b6d 1507 * profile, if profile message is found.
Kojto 29:c40918cd9b6d 1508 * \param encrypted_flag Indicates whether the information is encrypted
Kojto 29:c40918cd9b6d 1509 * \return
Kojto 29:c40918cd9b6d 1510 * On success, zero is returned. On error, -1 is returned.
Kojto 29:c40918cd9b6d 1511 */
Kojto 20:30b6ed7bf8fd 1512 int32_t smart_config_start(uint32_t encrypted_flag);
Kojto 29:c40918cd9b6d 1513 /**
Kojto 29:c40918cd9b6d 1514 * \brief Stop the acquire profile procedure.
Kojto 29:c40918cd9b6d 1515 * \param none
Kojto 29:c40918cd9b6d 1516 * \return
Kojto 29:c40918cd9b6d 1517 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1518 */
Kojto 20:30b6ed7bf8fd 1519 int32_t smart_config_stop(void);
Kojto 29:c40918cd9b6d 1520 /**
Kojto 29:c40918cd9b6d 1521 * \brief Configure station ssid prefix.
Kojto 29:c40918cd9b6d 1522 * \param new_prefix 3 bytes identify the SSID prefix for the Smart Config.
Kojto 29:c40918cd9b6d 1523 * \return
Kojto 29:c40918cd9b6d 1524 * On success, zero is returned. On error, -1 is returned.
Kojto 29:c40918cd9b6d 1525 */
Kojto 20:30b6ed7bf8fd 1526 int32_t smart_config_set_prefix(uint8_t *new_prefix);
Kojto 20:30b6ed7bf8fd 1527 private:
Kojto 20:30b6ed7bf8fd 1528 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 1529 cc3000_event &_event;
Kojto 20:30b6ed7bf8fd 1530 cc3000_spi &_spi;
Kojto 20:30b6ed7bf8fd 1531 cc3000_hci &_hci;
Kojto 20:30b6ed7bf8fd 1532 };
Kojto 20:30b6ed7bf8fd 1533
Kojto 31:7b6e85b68b01 1534 /** The main object of cc3000 implementation
Kojto 20:30b6ed7bf8fd 1535 */
Kojto 20:30b6ed7bf8fd 1536 class cc3000 {
Kojto 20:30b6ed7bf8fd 1537 public:
Kojto 29:c40918cd9b6d 1538 /** status structure */
Kojto 20:30b6ed7bf8fd 1539 typedef struct {
Kojto 29:c40918cd9b6d 1540 bool dhcp;
Kojto 29:c40918cd9b6d 1541 bool connected;
Kojto 20:30b6ed7bf8fd 1542 uint8_t socket;
Kojto 29:c40918cd9b6d 1543 bool smart_config_complete;
Kojto 29:c40918cd9b6d 1544 bool stop_smart_config;
Kojto 29:c40918cd9b6d 1545 bool dhcp_configured;
Kojto 29:c40918cd9b6d 1546 bool ok_to_shut_down;
SolderSplashLabs 39:03ac37ab34eb 1547 bool enabled;
Kojto 20:30b6ed7bf8fd 1548 } tStatus;
Kojto 29:c40918cd9b6d 1549 /**
Kojto 29:c40918cd9b6d 1550 * \brief Ctor.
Kojto 20:30b6ed7bf8fd 1551 * \param cc3000_irq IRQ pin
Kojto 20:30b6ed7bf8fd 1552 * \param cc3000_en Enable pin
Kojto 20:30b6ed7bf8fd 1553 * \param cc3000_cs Chip select pin
Kojto 20:30b6ed7bf8fd 1554 * \param cc3000_spi SPI interface
Kojto 20:30b6ed7bf8fd 1555 * \param irq_port IRQ pin's port
Kojto 20:30b6ed7bf8fd 1556 */
Kojto 20:30b6ed7bf8fd 1557 cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, IRQn_Type irq_port);
Kojto 29:c40918cd9b6d 1558 /**
Kojto 29:c40918cd9b6d 1559 * \brief Dtor.
Kojto 20:30b6ed7bf8fd 1560 */
Kojto 20:30b6ed7bf8fd 1561 ~cc3000();
Kojto 29:c40918cd9b6d 1562 /**
Kojto 29:c40918cd9b6d 1563 * \brief Initiate cc3000. It starts the wlan communication and deletes profiles.
Kojto 20:30b6ed7bf8fd 1564 * \param patch Patch
Kojto 20:30b6ed7bf8fd 1565 */
Kojto 20:30b6ed7bf8fd 1566 void start(uint8_t patch);
Kojto 29:c40918cd9b6d 1567 /**
Kojto 29:c40918cd9b6d 1568 * \brief Stops the wlan communication.
Kojto 20:30b6ed7bf8fd 1569 */
Kojto 20:30b6ed7bf8fd 1570 void stop();
Kojto 29:c40918cd9b6d 1571 /**
Kojto 29:c40918cd9b6d 1572 * \brief Restarts the wlan communication.
Kojto 20:30b6ed7bf8fd 1573 */
Kojto 20:30b6ed7bf8fd 1574 void restart(uint8_t patch);
Kojto 29:c40918cd9b6d 1575 /**
Kojto 29:c40918cd9b6d 1576 * \brief Disconnect wlan device
Kojto 20:30b6ed7bf8fd 1577 *
Kojto 20:30b6ed7bf8fd 1578 */
Kojto 20:30b6ed7bf8fd 1579 bool disconnect(void);
Kojto 29:c40918cd9b6d 1580 /**
Kojto 29:c40918cd9b6d 1581 * \brief Callback which is called from the event class. This updates status of cc3000.
Kojto 20:30b6ed7bf8fd 1582 * \param event_type Type of the event
Kojto 20:30b6ed7bf8fd 1583 * \param data Pointer to data
Kojto 20:30b6ed7bf8fd 1584 * \param length Length of data
Kojto 20:30b6ed7bf8fd 1585 * \return none
Kojto 20:30b6ed7bf8fd 1586 */
Kojto 20:30b6ed7bf8fd 1587 void usync_callback(int32_t event_type, uint8_t *data, uint8_t length);
Kojto 29:c40918cd9b6d 1588 /**
SolderSplashLabs 39:03ac37ab34eb 1589 * \brief Start connection to SSID (open/secured) non-blocking
SolderSplashLabs 39:03ac37ab34eb 1590 * \param ssid SSID name
SolderSplashLabs 39:03ac37ab34eb 1591 * \param key Security key (if key = 0, open connection)
SolderSplashLabs 39:03ac37ab34eb 1592 * \param security_mode Security mode
SolderSplashLabs 39:03ac37ab34eb 1593 * \return true if connection was established, false otherwise.
SolderSplashLabs 39:03ac37ab34eb 1594 */
SolderSplashLabs 39:03ac37ab34eb 1595 bool connect_non_blocking(const uint8_t *ssid, const uint8_t *key, int32_t security_mode);
SolderSplashLabs 39:03ac37ab34eb 1596 /**
SolderSplashLabs 39:03ac37ab34eb 1597 * \brief Connect to SSID (open/secured) with timeout (10s).
Kojto 20:30b6ed7bf8fd 1598 * \param ssid SSID name
Kojto 20:30b6ed7bf8fd 1599 * \param key Security key (if key = 0, open connection)
Kojto 20:30b6ed7bf8fd 1600 * \param security_mode Security mode
Kojto 20:30b6ed7bf8fd 1601 * \return true if connection was established, false otherwise.
Kojto 20:30b6ed7bf8fd 1602 */
Kojto 20:30b6ed7bf8fd 1603 bool connect_to_AP(const uint8_t *ssid, const uint8_t *key, int32_t security_mode);
Kojto 29:c40918cd9b6d 1604 /**
Kojto 29:c40918cd9b6d 1605 * \brief Connect to SSID which is secured
Kojto 20:30b6ed7bf8fd 1606 * \param ssid SSID name
Kojto 20:30b6ed7bf8fd 1607 * \param key Security key
Kojto 20:30b6ed7bf8fd 1608 * \param security_mode Security mode
Kojto 20:30b6ed7bf8fd 1609 * \return true if connection was established, false otherwise.
Kojto 20:30b6ed7bf8fd 1610 */
Kojto 20:30b6ed7bf8fd 1611 bool connect_secure(const uint8_t *ssid, const uint8_t *key, int32_t security_mode);
Kojto 29:c40918cd9b6d 1612 /**
Kojto 29:c40918cd9b6d 1613 * \brief Connect to SSID which is open (no security)
Kojto 20:30b6ed7bf8fd 1614 * \param ssid SSID name
Kojto 20:30b6ed7bf8fd 1615 * \return true if connection was established, false otherwise.
Kojto 20:30b6ed7bf8fd 1616 */
Kojto 20:30b6ed7bf8fd 1617 bool connect_open(const uint8_t *ssid);
Kojto 29:c40918cd9b6d 1618 /**
SolderSplashLabs 39:03ac37ab34eb 1619 * \brief Status of the cc3000 module.
SolderSplashLabs 39:03ac37ab34eb 1620 * \return true if it's enabled, false otherwise.
SolderSplashLabs 39:03ac37ab34eb 1621 */
SolderSplashLabs 39:03ac37ab34eb 1622 bool is_enabled();
SolderSplashLabs 39:03ac37ab34eb 1623 /**
Kojto 29:c40918cd9b6d 1624 * \brief Status of the cc3000 connection.
Kojto 20:30b6ed7bf8fd 1625 * \return true if it's connected, false otherwise.
Kojto 20:30b6ed7bf8fd 1626 */
Kojto 20:30b6ed7bf8fd 1627 bool is_connected();
Kojto 29:c40918cd9b6d 1628 /**
Kojto 29:c40918cd9b6d 1629 * \brief Status of DHCP.
Kojto 20:30b6ed7bf8fd 1630 * \param none
Kojto 20:30b6ed7bf8fd 1631 * \return true if DCHP is configured, false otherwise.
Kojto 20:30b6ed7bf8fd 1632 */
Kojto 20:30b6ed7bf8fd 1633 bool is_dhcp_configured();
Kojto 29:c40918cd9b6d 1634 /**
Kojto 29:c40918cd9b6d 1635 * \brief Status of smart confing completation.
Kojto 20:30b6ed7bf8fd 1636 * \param none
Kojto 20:30b6ed7bf8fd 1637 * \return smart config was set, false otherwise.
Kojto 20:30b6ed7bf8fd 1638 */
Kojto 20:30b6ed7bf8fd 1639 bool is_smart_confing_completed();
Kojto 29:c40918cd9b6d 1640 /**
Kojto 29:c40918cd9b6d 1641 * \brief Return the cc3000's mac address.
Kojto 20:30b6ed7bf8fd 1642 * \param address Retreived mac address.
Kojto 20:30b6ed7bf8fd 1643 * \return
Kojto 20:30b6ed7bf8fd 1644 */
Kojto 20:30b6ed7bf8fd 1645 uint8_t get_mac_address(uint8_t address[6]);
Kojto 29:c40918cd9b6d 1646 /**
Kojto 29:c40918cd9b6d 1647 * \brief Set the cc3000's mac address.
Kojto 29:c40918cd9b6d 1648 * \param address Mac address to be set.
Kojto 20:30b6ed7bf8fd 1649 * \return
Kojto 20:30b6ed7bf8fd 1650 */
Kojto 20:30b6ed7bf8fd 1651 uint8_t set_mac_address(uint8_t address[6]);
Kojto 29:c40918cd9b6d 1652 /**
Kojto 29:c40918cd9b6d 1653 * \brief Get user file info.
Kojto 29:c40918cd9b6d 1654 * \param info_file Pointer where info will be stored.
Kojto 29:c40918cd9b6d 1655 * \param size Available size.
Kojto 20:30b6ed7bf8fd 1656 * \return none
Kojto 20:30b6ed7bf8fd 1657 */
Kojto 20:30b6ed7bf8fd 1658 void get_user_file_info(uint8_t *info_file, size_t size);
Kojto 29:c40918cd9b6d 1659 /**
Kojto 29:c40918cd9b6d 1660 * \brief Set user filo info.
Kojto 29:c40918cd9b6d 1661 * \param info_file Pointer to user's info.
Kojto 20:30b6ed7bf8fd 1662 * \return none
Kojto 20:30b6ed7bf8fd 1663 */
Kojto 20:30b6ed7bf8fd 1664 void set_user_file_info(uint8_t *info_file, size_t size);
Kojto 29:c40918cd9b6d 1665 /**
Kojto 29:c40918cd9b6d 1666 * \brief Start smart config.
Kojto 29:c40918cd9b6d 1667 * \param smart_config_key Pointer to smart config key.
Kojto 20:30b6ed7bf8fd 1668 * \return none
Kojto 20:30b6ed7bf8fd 1669 */
Kojto 20:30b6ed7bf8fd 1670 void start_smart_config(const uint8_t *smart_config_key); /* TODO enable AES ? */
Kojto 20:30b6ed7bf8fd 1671 #ifndef CC3000_TINY_DRIVER
Kojto 29:c40918cd9b6d 1672 /**
Kojto 29:c40918cd9b6d 1673 * \brief Return ip configuration.
Kojto 29:c40918cd9b6d 1674 * \param ip_config Pointer to ipconfig data.
Kojto 29:c40918cd9b6d 1675 * \return true if it's connected and info was retrieved, false otherwise.
Kojto 20:30b6ed7bf8fd 1676 */
Kojto 20:30b6ed7bf8fd 1677 bool get_ip_config(tNetappIpconfigRetArgs *ip_config);
Kojto 20:30b6ed7bf8fd 1678 #endif
Kojto 29:c40918cd9b6d 1679 /**
Kojto 33:9e23b24fb4f3 1680 * \brief Delete all stored profiles.
Kojto 29:c40918cd9b6d 1681 * \param none
Kojto 20:30b6ed7bf8fd 1682 * \return none
Kojto 20:30b6ed7bf8fd 1683 */
Kojto 20:30b6ed7bf8fd 1684 void delete_profiles(void);
Kojto 20:30b6ed7bf8fd 1685 /**
Kojto 33:9e23b24fb4f3 1686 * \brief Ping an ip address.
Kojto 29:c40918cd9b6d 1687 * \param ip Destination IP address
Kojto 29:c40918cd9b6d 1688 * \param attempts Number of attempts
Kojto 29:c40918cd9b6d 1689 * \param timeout Time to wait for a response,in milliseconds.
Kojto 29:c40918cd9b6d 1690 * \param size Send buffer size which may be up to 1400 bytes
Kojto 20:30b6ed7bf8fd 1691 */
Kojto 20:30b6ed7bf8fd 1692 uint32_t ping(uint32_t ip, uint8_t attempts, uint16_t timeout, uint8_t size);
Kojto 29:c40918cd9b6d 1693 /**
Kojto 33:9e23b24fb4f3 1694 * \brief Returns cc3000 instance. Used in Socket interface.
Kojto 29:c40918cd9b6d 1695 * \param none
Kojto 29:c40918cd9b6d 1696 * \return Pointer to cc3000 object
Kojto 29:c40918cd9b6d 1697 */
Kojto 20:30b6ed7bf8fd 1698 static cc3000 *get_instance() {
Kojto 20:30b6ed7bf8fd 1699 return _inst;
Kojto 20:30b6ed7bf8fd 1700 }
SolderSplashLabs 39:03ac37ab34eb 1701 #ifdef CC3000_ETH_COMPAT
SolderSplashLabs 39:03ac37ab34eb 1702 /**
SolderSplashLabs 39:03ac37ab34eb 1703 * \brief
SolderSplashLabs 39:03ac37ab34eb 1704 * \param
SolderSplashLabs 39:03ac37ab34eb 1705 * \return
SolderSplashLabs 39:03ac37ab34eb 1706 */
SolderSplashLabs 39:03ac37ab34eb 1707 char* getMACAddress();
SolderSplashLabs 39:03ac37ab34eb 1708
SolderSplashLabs 39:03ac37ab34eb 1709 /**
SolderSplashLabs 39:03ac37ab34eb 1710 * \brief
SolderSplashLabs 39:03ac37ab34eb 1711 * \param
SolderSplashLabs 39:03ac37ab34eb 1712 * \return
SolderSplashLabs 39:03ac37ab34eb 1713 */
SolderSplashLabs 39:03ac37ab34eb 1714 char* getIPAddress();
SolderSplashLabs 39:03ac37ab34eb 1715
SolderSplashLabs 39:03ac37ab34eb 1716 /**
SolderSplashLabs 39:03ac37ab34eb 1717 * \brief
SolderSplashLabs 39:03ac37ab34eb 1718 * \param
SolderSplashLabs 39:03ac37ab34eb 1719 * \return
SolderSplashLabs 39:03ac37ab34eb 1720 */
SolderSplashLabs 39:03ac37ab34eb 1721 char* getGateway();
SolderSplashLabs 39:03ac37ab34eb 1722
SolderSplashLabs 39:03ac37ab34eb 1723 /**
SolderSplashLabs 39:03ac37ab34eb 1724 * \brief
SolderSplashLabs 39:03ac37ab34eb 1725 * \param
SolderSplashLabs 39:03ac37ab34eb 1726 * \return
SolderSplashLabs 39:03ac37ab34eb 1727 */
SolderSplashLabs 39:03ac37ab34eb 1728 char* getNetworkMask();
SolderSplashLabs 39:03ac37ab34eb 1729 #endif
Kojto 20:30b6ed7bf8fd 1730 public:
Kojto 20:30b6ed7bf8fd 1731 cc3000_simple_link _simple_link;
Kojto 20:30b6ed7bf8fd 1732 cc3000_event _event;
Kojto 20:30b6ed7bf8fd 1733 #ifndef CC3000_UNENCRYPTED_SMART_CONFIG
Kojto 20:30b6ed7bf8fd 1734 cc3000_security _security;
Kojto 20:30b6ed7bf8fd 1735 #endif
Kojto 20:30b6ed7bf8fd 1736 cc3000_socket _socket;
Kojto 20:30b6ed7bf8fd 1737 cc3000_spi _spi;
Kojto 20:30b6ed7bf8fd 1738 cc3000_hci _hci;
Kojto 20:30b6ed7bf8fd 1739 cc3000_nvmem _nvmem;
Kojto 20:30b6ed7bf8fd 1740 cc3000_netapp _netapp;
Kojto 20:30b6ed7bf8fd 1741 cc3000_wlan _wlan;
Kojto 20:30b6ed7bf8fd 1742 protected:
Kojto 20:30b6ed7bf8fd 1743 static cc3000 *_inst;
Kojto 20:30b6ed7bf8fd 1744 private:
Kojto 20:30b6ed7bf8fd 1745 tStatus _status;
Kojto 20:30b6ed7bf8fd 1746 netapp_pingreport_args_t _ping_report;
Kojto 20:30b6ed7bf8fd 1747 bool _closed_sockets[MAX_SOCKETS];
Kojto 20:30b6ed7bf8fd 1748 };
Kojto 20:30b6ed7bf8fd 1749
Kojto 20:30b6ed7bf8fd 1750 /**
Kojto 29:c40918cd9b6d 1751 * Copy 32 bit to stream while converting to little endian format.
Kojto 29:c40918cd9b6d 1752 * @param p pointer to the new stream
Kojto 29:c40918cd9b6d 1753 * @param u32 pointer to the 32 bit
Kojto 29:c40918cd9b6d 1754 * @return pointer to the new stream
Kojto 29:c40918cd9b6d 1755 */
Kojto 20:30b6ed7bf8fd 1756 uint8_t *UINT32_TO_STREAM_f (uint8_t *p, uint32_t u32);
Kojto 20:30b6ed7bf8fd 1757
Kojto 20:30b6ed7bf8fd 1758 /**
Kojto 29:c40918cd9b6d 1759 * Copy 16 bit to stream while converting to little endian format.
Kojto 29:c40918cd9b6d 1760 * @param p pointer to the new stream
Kojto 29:c40918cd9b6d 1761 * @param u32 pointer to the 16 bit
Kojto 29:c40918cd9b6d 1762 * @return pointer to the new stream
Kojto 29:c40918cd9b6d 1763 */
Kojto 20:30b6ed7bf8fd 1764 uint8_t *UINT16_TO_STREAM_f (uint8_t *p, uint16_t u16);
Kojto 20:30b6ed7bf8fd 1765
Kojto 20:30b6ed7bf8fd 1766 /**
Kojto 29:c40918cd9b6d 1767 * Copy received stream to 16 bit in little endian format.
Kojto 29:c40918cd9b6d 1768 * @param p pointer to the stream
Kojto 29:c40918cd9b6d 1769 * @param offset offset in the stream
Kojto 29:c40918cd9b6d 1770 * @return pointer to the new 16 bit
Kojto 29:c40918cd9b6d 1771 */
Kojto 20:30b6ed7bf8fd 1772 uint16_t STREAM_TO_UINT16_f(uint8_t* p, uint16_t offset);
Kojto 20:30b6ed7bf8fd 1773
Kojto 20:30b6ed7bf8fd 1774 /**
Kojto 29:c40918cd9b6d 1775 * Copy received stream to 32 bit in little endian format.
Kojto 29:c40918cd9b6d 1776 * @param p pointer to the stream
Kojto 29:c40918cd9b6d 1777 * @param offset offset in the stream
Kojto 29:c40918cd9b6d 1778 * @return pointer to the new 32 bit
Kojto 29:c40918cd9b6d 1779 */
Kojto 20:30b6ed7bf8fd 1780 uint32_t STREAM_TO_UINT32_f(uint8_t* p, uint16_t offset);
Kojto 20:30b6ed7bf8fd 1781
Kojto 20:30b6ed7bf8fd 1782 } /* end of mbed_cc3000 namespace */
Kojto 20:30b6ed7bf8fd 1783
Kojto 20:30b6ed7bf8fd 1784
Kojto 20:30b6ed7bf8fd 1785 #endif