version_2.0

Dependents:   cc3000_ping_demo_try_2

Fork of cc3000_hostdriver_mbedsocket by Martin Kojtal

Committer:
SolderSplashLabs
Date:
Sat Oct 12 21:53:28 2013 +0000
Revision:
42:bd2c631a031a
Parent:
39:03ac37ab34eb
Child:
43:864437b6c058
Added David's IRQ checking before re-enabling the IRQ.; Modified the is_connected function, connect + dhcp are needed ; Moved inet_ntoa_r to the socket class, not sure this is the best place, but other conversion functions live here.

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);
SolderSplashLabs 42:bd2c631a031a 1003 /**
SolderSplashLabs 42:bd2c631a031a 1004 * \brief
SolderSplashLabs 42:bd2c631a031a 1005 * \param[in] s_addr in host format ( little endian )
SolderSplashLabs 42:bd2c631a031a 1006 * \param[in] *buf buffer to write too
SolderSplashLabs 42:bd2c631a031a 1007 * \param[in] buflen length of supplied buffer
SolderSplashLabs 42:bd2c631a031a 1008 * \return pointer to buf \n
SolderSplashLabs 42:bd2c631a031a 1009 */
SolderSplashLabs 42:bd2c631a031a 1010 char * inet_ntoa_r(uint32_t s_addr, char *buf, int buflen);
Kojto 20:30b6ed7bf8fd 1011 #ifndef CC3000_TINY_DRIVER
Kojto 33:9e23b24fb4f3 1012 /**
Kojto 34:1ad18123bf11 1013 * \brief Get host IP by name.\n
Kojto 34:1ad18123bf11 1014 * Obtain the IP Address of machine on network\n
Kojto 34:1ad18123bf11 1015 *
Kojto 34:1ad18123bf11 1016 * \param[in] hostname host name
Kojto 34:1ad18123bf11 1017 * \param[in] name_length name length
Kojto 34:1ad18123bf11 1018 * \param[out] out_ip_addr This parameter is filled in with host IP address.\n
Kojto 34:1ad18123bf11 1019 * In case that host name is not resolved, \n
Kojto 34:1ad18123bf11 1020 * out_ip_addr is zero.\n
Kojto 34:1ad18123bf11 1021 * \return On success, positive is returned.\n
Kojto 34:1ad18123bf11 1022 * On error, negative is returned by its name.\n
Kojto 34:1ad18123bf11 1023 * \note On this version, only blocking mode is supported. Also note that\n
Kojto 34:1ad18123bf11 1024 * The function requires DNS server to be configured prior to its usage.\n
Kojto 33:9e23b24fb4f3 1025 */
Kojto 20:30b6ed7bf8fd 1026 int32_t gethostbyname(uint8_t *hostname, uint16_t name_length, uint32_t *out_ip_addr);
Kojto 29:c40918cd9b6d 1027 /**
Kojto 34:1ad18123bf11 1028 * \brief set socket options.
Kojto 34:1ad18123bf11 1029 * This function manipulate the options associated with a socket.\n
Kojto 34:1ad18123bf11 1030 * Options may exist at multiple protocol levels; they are always\n
Kojto 34:1ad18123bf11 1031 * present at the uppermost socket level.\n
Kojto 34:1ad18123bf11 1032 * When manipulating socket options the level at which the option \n
Kojto 34:1ad18123bf11 1033 * resides and the name of the option must be specified.\n
Kojto 34:1ad18123bf11 1034 * To manipulate options at the socket level, level is specified as\n
Kojto 34:1ad18123bf11 1035 * SOL_SOCKET. To manipulate options at any other level the protocol \n
Kojto 34:1ad18123bf11 1036 * number of the appropriate protocol controlling the option is \n
Kojto 34:1ad18123bf11 1037 * supplied. For example, to indicate that an option is to be \n
Kojto 34:1ad18123bf11 1038 * interpreted by the TCP protocol, level should be set to the \n
Kojto 34:1ad18123bf11 1039 * protocol number of TCP; \n
Kojto 34:1ad18123bf11 1040 * The parameters optval and optlen are used to access optval - \n
Kojto 34:1ad18123bf11 1041 * use for setsockopt(). For getsockopt() they identify a buffer\n
Kojto 34:1ad18123bf11 1042 * in which the value for the requested option(s) are to \n
Kojto 34:1ad18123bf11 1043 * be returned. For getsockopt(), optlen is a value-result \n
Kojto 34:1ad18123bf11 1044 * parameter, initially containing the size of the buffer \n
Kojto 34:1ad18123bf11 1045 * pointed to by option_value, and modified on return to \n
Kojto 34:1ad18123bf11 1046 * indicate the actual size of the value returned. If no option \n
Kojto 34:1ad18123bf11 1047 * value is to be supplied or returned, option_value may be NULL.\n
Kojto 34:1ad18123bf11 1048 *
Kojto 34:1ad18123bf11 1049 * \param[in] sd socket handle
Kojto 34:1ad18123bf11 1050 * \param[in] level defines the protocol level for this option
Kojto 34:1ad18123bf11 1051 * \param[in] optname defines the option name to Interrogate
Kojto 34:1ad18123bf11 1052 * \param[in] optval specifies a value for the option
Kojto 34:1ad18123bf11 1053 * \param[in] optlen specifies the length of the option value
Kojto 34:1ad18123bf11 1054 * \return On success, zero is returned.\n
Kojto 34:1ad18123bf11 1055 * On error, -1 is returned\n
Kojto 34:1ad18123bf11 1056 *
Kojto 34:1ad18123bf11 1057 * \Note On this version the following two socket options are enabled:\n
Kojto 34:1ad18123bf11 1058 * The only protocol level supported in this version is SOL_SOCKET (level).\n
Kojto 34:1ad18123bf11 1059 * 1. SOCKOPT_RECV_TIMEOUT (optname)\n
Kojto 34:1ad18123bf11 1060 * SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout in milliseconds.\n
Kojto 34:1ad18123bf11 1061 * In that case optval should be pointer to unsigned long.\n
Kojto 34:1ad18123bf11 1062 * 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on or off.\n
Kojto 34:1ad18123bf11 1063 * In that case optval should be SOCK_ON or SOCK_OFF (optval).\n
Kojto 34:1ad18123bf11 1064 * \sa getsockopt
Kojto 29:c40918cd9b6d 1065 */
Kojto 20:30b6ed7bf8fd 1066 int32_t setsockopt(int32_t sd, int32_t level, int32_t optname, const void *optval, socklen_t optlen);
Kojto 20:30b6ed7bf8fd 1067 #endif
Kojto 20:30b6ed7bf8fd 1068 private:
Kojto 20:30b6ed7bf8fd 1069 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 1070 cc3000_hci &_hci;
Kojto 20:30b6ed7bf8fd 1071 cc3000_event &_event;
Kojto 20:30b6ed7bf8fd 1072 };
Kojto 20:30b6ed7bf8fd 1073
Kojto 31:7b6e85b68b01 1074 /** SPI communication layer
Kojto 20:30b6ed7bf8fd 1075 */
Kojto 20:30b6ed7bf8fd 1076 class cc3000_spi {
Kojto 20:30b6ed7bf8fd 1077 public:
Kojto 33:9e23b24fb4f3 1078 /**
Kojto 33:9e23b24fb4f3 1079 * \brief Ctor
Kojto 34:1ad18123bf11 1080 * \param irq IRQ pin
Kojto 34:1ad18123bf11 1081 * \param cc3000_en Enable pin
Kojto 34:1ad18123bf11 1082 * \param cc3000_cs Chip select pin
Kojto 34:1ad18123bf11 1083 * \param cc3000_spi SPI object
Kojto 34:1ad18123bf11 1084 * \param irq_port Port for IRQ pin (needed for enable/disable interrupts)
Kojto 34:1ad18123bf11 1085 * \param event Reference to the event object.
Kojto 34:1ad18123bf11 1086 * \param simple_link Reference to the simple link object.
Kojto 33:9e23b24fb4f3 1087 * \return none
Kojto 20:30b6ed7bf8fd 1088 */
Kojto 20:30b6ed7bf8fd 1089 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 1090 /**
Kojto 33:9e23b24fb4f3 1091 * \brief Dtor
Kojto 33:9e23b24fb4f3 1092 * \param none
Kojto 33:9e23b24fb4f3 1093 * \return none
Kojto 20:30b6ed7bf8fd 1094 */
Kojto 20:30b6ed7bf8fd 1095 ~cc3000_spi();
Kojto 33:9e23b24fb4f3 1096 /**
Kojto 33:9e23b24fb4f3 1097 * \brief Close SPI - disables IRQ and set received buffer to 0
Kojto 20:30b6ed7bf8fd 1098 * \param none
Kojto 20:30b6ed7bf8fd 1099 * \return none
Kojto 20:30b6ed7bf8fd 1100 */
Kojto 20:30b6ed7bf8fd 1101 void close();
Kojto 34:1ad18123bf11 1102 /**
Kojto 34:1ad18123bf11 1103 * \brief Open the SPI interface
Kojto 34:1ad18123bf11 1104 * \param none
Kojto 34:1ad18123bf11 1105 * \return none
Kojto 20:30b6ed7bf8fd 1106 */
Kojto 20:30b6ed7bf8fd 1107 void open();
Kojto 34:1ad18123bf11 1108 /**
Kojto 34:1ad18123bf11 1109 * \brief First SPI write after powerup (delay needed between SPI header and body)
Kojto 34:1ad18123bf11 1110 * \param buffer pointer to write buffer
Kojto 34:1ad18123bf11 1111 * \param length buffer length
Kojto 34:1ad18123bf11 1112 * \return 0
Kojto 20:30b6ed7bf8fd 1113 */
Kojto 20:30b6ed7bf8fd 1114 uint32_t first_write(uint8_t *buffer, uint16_t length);
Kojto 34:1ad18123bf11 1115 /**
Kojto 34:1ad18123bf11 1116 * \brief SPI Write function
Kojto 34:1ad18123bf11 1117 * \param buffer pointer to write buffer
Kojto 34:1ad18123bf11 1118 * \param length buffer length
Kojto 34:1ad18123bf11 1119 * \return 0
Kojto 20:30b6ed7bf8fd 1120 */
Kojto 20:30b6ed7bf8fd 1121 uint32_t write(uint8_t *buffer, uint16_t length);
Kojto 34:1ad18123bf11 1122 /**
Kojto 34:1ad18123bf11 1123 * \brief Low level SPI write
Kojto 34:1ad18123bf11 1124 * \param data pointer to data buffer
Kojto 34:1ad18123bf11 1125 * \param size number of bytes
Kojto 34:1ad18123bf11 1126 * \return none
Kojto 20:30b6ed7bf8fd 1127 */
Kojto 20:30b6ed7bf8fd 1128 void write_synchronous(uint8_t *data, uint16_t size);
Kojto 34:1ad18123bf11 1129 /**
Kojto 34:1ad18123bf11 1130 * \brief Low level SPI read
Kojto 34:1ad18123bf11 1131 * \param data pointer to data buffer
Kojto 34:1ad18123bf11 1132 * \param size number of bytes
Kojto 34:1ad18123bf11 1133 * \return none
Kojto 20:30b6ed7bf8fd 1134 */
Kojto 20:30b6ed7bf8fd 1135 void read_synchronous(uint8_t *data, uint16_t size);
Kojto 34:1ad18123bf11 1136 /**
Kojto 34:1ad18123bf11 1137 * \brief Process the received SPI Header and in accordance with it - continue reading the packet
Kojto 34:1ad18123bf11 1138 * \param None
Kojto 34:1ad18123bf11 1139 * \return 0
Kojto 20:30b6ed7bf8fd 1140 */
Kojto 20:30b6ed7bf8fd 1141 uint32_t read_data_cont();
Kojto 20:30b6ed7bf8fd 1142 /**
Kojto 34:1ad18123bf11 1143 * \brief Enable WLAN interrutp
Kojto 34:1ad18123bf11 1144 * \param None
Kojto 34:1ad18123bf11 1145 * \return None
Kojto 20:30b6ed7bf8fd 1146 */
Kojto 20:30b6ed7bf8fd 1147 void wlan_irq_enable();
Kojto 34:1ad18123bf11 1148 /**
Kojto 34:1ad18123bf11 1149 * \brief Disable WLAN interrutp
Kojto 34:1ad18123bf11 1150 * \param None
Kojto 34:1ad18123bf11 1151 * \return None
Kojto 20:30b6ed7bf8fd 1152 */
Kojto 20:30b6ed7bf8fd 1153 void wlan_irq_disable();
Kojto 20:30b6ed7bf8fd 1154 /**
Kojto 34:1ad18123bf11 1155 * \brief Get WLAN interrupt status
Kojto 34:1ad18123bf11 1156 * \param None
Kojto 34:1ad18123bf11 1157 * \return 0 : No interrupt occured
Kojto 34:1ad18123bf11 1158 * 1 : Interrupt occured
Kojto 20:30b6ed7bf8fd 1159 */
Kojto 20:30b6ed7bf8fd 1160 uint32_t wlan_irq_read();
Kojto 20:30b6ed7bf8fd 1161 /**
Kojto 34:1ad18123bf11 1162 * \brief SPI interrupt Handler.
Kojto 34:1ad18123bf11 1163 * The external WLAN device asserts the IRQ line when data is ready.\n
Kojto 34:1ad18123bf11 1164 * The host CPU needs to acknowledges the IRQ by asserting CS.\n
Kojto 34:1ad18123bf11 1165 *
Kojto 34:1ad18123bf11 1166 * \param none
Kojto 34:1ad18123bf11 1167 * \return none
Kojto 20:30b6ed7bf8fd 1168 */
Kojto 20:30b6ed7bf8fd 1169 void WLAN_IRQHandler();
Kojto 20:30b6ed7bf8fd 1170 /**
Kojto 34:1ad18123bf11 1171 * \brief Enable/Disable the WLAN module
Kojto 34:1ad18123bf11 1172 * \param value 1 : Enable
Kojto 34:1ad18123bf11 1173 * 0 : Disable
Kojto 34:1ad18123bf11 1174 * \return None
Kojto 20:30b6ed7bf8fd 1175 */
Kojto 34:1ad18123bf11 1176 void set_wlan_en(uint8_t value);
Kojto 20:30b6ed7bf8fd 1177 private:
Kojto 20:30b6ed7bf8fd 1178 tSpiInfo _spi_info;
Kojto 20:30b6ed7bf8fd 1179 InterruptIn _wlan_irq;
Kojto 20:30b6ed7bf8fd 1180 DigitalOut _wlan_en;
Kojto 20:30b6ed7bf8fd 1181 DigitalOut _wlan_cs;
Kojto 20:30b6ed7bf8fd 1182 SPI _wlan_spi;
Kojto 20:30b6ed7bf8fd 1183 IRQn_Type _irq_port;
Kojto 20:30b6ed7bf8fd 1184 pFunctionPointer_t _function_pointer;
Kojto 20:30b6ed7bf8fd 1185 cc3000_event &_event;
Kojto 20:30b6ed7bf8fd 1186 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 1187 };
Kojto 20:30b6ed7bf8fd 1188
Kojto 31:7b6e85b68b01 1189 /** HCI layer
Kojto 31:7b6e85b68b01 1190 */
Kojto 20:30b6ed7bf8fd 1191 class cc3000_hci {
Kojto 20:30b6ed7bf8fd 1192 public:
Kojto 29:c40918cd9b6d 1193 /**
Kojto 29:c40918cd9b6d 1194 * \brief Ctor
Kojto 34:1ad18123bf11 1195 * \param spi Reference to the spi object.
Kojto 29:c40918cd9b6d 1196 * \return none
Kojto 29:c40918cd9b6d 1197 */
Kojto 20:30b6ed7bf8fd 1198 cc3000_hci(cc3000_spi &spi);
Kojto 29:c40918cd9b6d 1199 /**
Kojto 29:c40918cd9b6d 1200 * \brief Dtor
Kojto 29:c40918cd9b6d 1201 * \param none
Kojto 29:c40918cd9b6d 1202 * \return none
Kojto 29:c40918cd9b6d 1203 */
Kojto 20:30b6ed7bf8fd 1204 ~cc3000_hci();
Kojto 29:c40918cd9b6d 1205 /**
Kojto 29:c40918cd9b6d 1206 * \brief Initiate an HCI command.
Kojto 29:c40918cd9b6d 1207 * \param op_code command operation code
Kojto 29:c40918cd9b6d 1208 * \param buffer pointer to the command's arguments buffer
Kojto 29:c40918cd9b6d 1209 * \param length length of the arguments
Kojto 34:1ad18123bf11 1210 * \return 0
Kojto 29:c40918cd9b6d 1211 */
Kojto 20:30b6ed7bf8fd 1212 uint16_t command_send(uint16_t op_code, uint8_t *buffer, uint8_t length);
Kojto 29:c40918cd9b6d 1213 /**
Kojto 29:c40918cd9b6d 1214 * \brief Initiate an HCI data write operation
Kojto 29:c40918cd9b6d 1215 * \param op_code command operation code
Kojto 29:c40918cd9b6d 1216 * \param args pointer to the command's arguments buffer
Kojto 29:c40918cd9b6d 1217 * \param arg_length length of the arguments
Kojto 29:c40918cd9b6d 1218 * \param data_length length od data
Kojto 29:c40918cd9b6d 1219 * \param tail pointer to the data buffer
Kojto 29:c40918cd9b6d 1220 * \param tail_length buffer length
Kojto 34:1ad18123bf11 1221 * \return ESUCCESS
Kojto 29:c40918cd9b6d 1222 */
Kojto 20:30b6ed7bf8fd 1223 uint32_t data_send(uint8_t op_code, uint8_t *args, uint16_t arg_length,
Kojto 20:30b6ed7bf8fd 1224 uint16_t data_length, const uint8_t *tail, uint16_t tail_length);
Kojto 29:c40918cd9b6d 1225 /**
Kojto 29:c40918cd9b6d 1226 * \brief Prepare HCI header and initiate an HCI data write operation.
Kojto 29:c40918cd9b6d 1227 * \param op_code command operation code
Kojto 29:c40918cd9b6d 1228 * \param buffer pointer to the data buffer
Kojto 29:c40918cd9b6d 1229 * \param arg_length arguments length
Kojto 29:c40918cd9b6d 1230 * \param data_length data length
Kojto 29:c40918cd9b6d 1231 * \return none
Kojto 29:c40918cd9b6d 1232 */
Kojto 20:30b6ed7bf8fd 1233 void data_command_send(uint16_t op_code, uint8_t *buffer, uint8_t arg_length,
Kojto 20:30b6ed7bf8fd 1234 uint16_t data_length);
Kojto 29:c40918cd9b6d 1235 /**
Kojto 29:c40918cd9b6d 1236 * \brief Prepare HCI header and initiate an HCI patch write operation.
Kojto 29:c40918cd9b6d 1237 * \param op_code command operation code
Kojto 29:c40918cd9b6d 1238 * \param buffer pointer to the command's arguments buffer
Kojto 29:c40918cd9b6d 1239 * \param patch pointer to patch content buffer
Kojto 29:c40918cd9b6d 1240 * \param data_length data length
Kojto 29:c40918cd9b6d 1241 * \return none
Kojto 29:c40918cd9b6d 1242 */
Kojto 20:30b6ed7bf8fd 1243 void patch_send(uint8_t op_code, uint8_t *buffer, uint8_t *patch, uint16_t data_length);
Kojto 20:30b6ed7bf8fd 1244 private:
Kojto 20:30b6ed7bf8fd 1245 cc3000_spi &_spi;
Kojto 20:30b6ed7bf8fd 1246 };
Kojto 20:30b6ed7bf8fd 1247
Kojto 31:7b6e85b68b01 1248 /** NVMEM layer
Kojto 31:7b6e85b68b01 1249 */
Kojto 20:30b6ed7bf8fd 1250 class cc3000_nvmem {
Kojto 20:30b6ed7bf8fd 1251 public:
Kojto 29:c40918cd9b6d 1252 /**
Kojto 29:c40918cd9b6d 1253 * \brief Ctor
Kojto 34:1ad18123bf11 1254 * \param hci Reference to the hci object.
Kojto 34:1ad18123bf11 1255 * \param event Reference to the event object.
Kojto 34:1ad18123bf11 1256 * \param simple_link Reference to the simple link object.
Kojto 29:c40918cd9b6d 1257 * \return none
Kojto 29:c40918cd9b6d 1258 */
Kojto 29:c40918cd9b6d 1259 cc3000_nvmem(cc3000_hci &hci, cc3000_event &event, cc3000_simple_link &simple_link);
Kojto 29:c40918cd9b6d 1260 /**
Kojto 29:c40918cd9b6d 1261 * \brief Dtor
Kojto 29:c40918cd9b6d 1262 * \param none
Kojto 29:c40918cd9b6d 1263 * \return none
Kojto 29:c40918cd9b6d 1264 */
Kojto 20:30b6ed7bf8fd 1265 ~cc3000_nvmem();
Kojto 29:c40918cd9b6d 1266 /**
Kojto 29:c40918cd9b6d 1267 * \brief Reads data from the file referred by the file_id parameter.
Kojto 29:c40918cd9b6d 1268 * Reads data from file offset till length. Err if the file can't be used,
Kojto 29:c40918cd9b6d 1269 * is invalid, or if the read is out of bounds.
Kojto 29:c40918cd9b6d 1270 * \param file_id nvmem file id.
Kojto 29:c40918cd9b6d 1271 * \param length number of bytes to read.
Kojto 29:c40918cd9b6d 1272 * \param offset offset in file from where to read.
Kojto 29:c40918cd9b6d 1273 * \param buff output buffer pointer.
Kojto 29:c40918cd9b6d 1274 * \return
Kojto 29:c40918cd9b6d 1275 * Number of bytes read, otherwise error.
Kojto 29:c40918cd9b6d 1276 */
Kojto 20:30b6ed7bf8fd 1277 int32_t read(uint32_t file_id, uint32_t length, uint32_t offset, uint8_t *buff);
Kojto 29:c40918cd9b6d 1278 /**
Kojto 29:c40918cd9b6d 1279 * \brief Write data to nvmem.
Kojto 29:c40918cd9b6d 1280 * \param file_id Nvmem file id
Kojto 29:c40918cd9b6d 1281 * \param length number of bytes to write
Kojto 29:c40918cd9b6d 1282 * \param entry_offset offset in file to start write operation from
Kojto 29:c40918cd9b6d 1283 * \param buff data to write
Kojto 29:c40918cd9b6d 1284 * \return
Kojto 29:c40918cd9b6d 1285 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1286 */
Kojto 20:30b6ed7bf8fd 1287 int32_t write(uint32_t file_id, uint32_t length, uint32_t entry_offset, uint8_t *buff);
Kojto 29:c40918cd9b6d 1288 /**
Kojto 29:c40918cd9b6d 1289 * \brief Write MAC address to EEPROM.
Kojto 29:c40918cd9b6d 1290 * \param mac Mac address to be set
Kojto 29:c40918cd9b6d 1291 * \return
Kojto 29:c40918cd9b6d 1292 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1293 */
Kojto 20:30b6ed7bf8fd 1294 uint8_t set_mac_address(uint8_t *mac);
Kojto 29:c40918cd9b6d 1295 /**
Kojto 29:c40918cd9b6d 1296 * \brief Read MAC address from EEPROM.
Kojto 29:c40918cd9b6d 1297 * \param mac Mac address
Kojto 29:c40918cd9b6d 1298 * \return
Kojto 33:9e23b24fb4f3 1299 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1300 */
Kojto 20:30b6ed7bf8fd 1301 uint8_t get_mac_address(uint8_t *mac);
Kojto 29:c40918cd9b6d 1302 /**
Kojto 29:c40918cd9b6d 1303 * \brief Program a patch to a specific file ID. The SP data is assumed to be organized in 2-dimensional.
Kojto 29:c40918cd9b6d 1304 * Each line is SP_PORTION_SIZE bytes long.
Kojto 29:c40918cd9b6d 1305 * \param file_id nvmem file id/
Kojto 29:c40918cd9b6d 1306 * \param length number of bytes to write
Kojto 29:c40918cd9b6d 1307 * \param data SP data to write
Kojto 29:c40918cd9b6d 1308 * \return
Kojto 29:c40918cd9b6d 1309 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1310 */
Kojto 20:30b6ed7bf8fd 1311 uint8_t write_patch(uint32_t file_id, uint32_t length, const uint8_t *data);
Kojto 29:c40918cd9b6d 1312 /**
Kojto 29:c40918cd9b6d 1313 * \brief Create new file entry and allocate space on the NVMEM. Applies only to user files.
Kojto 29:c40918cd9b6d 1314 * \param file_id nvmem file Id
Kojto 29:c40918cd9b6d 1315 * \param new_len entry ulLength
Kojto 29:c40918cd9b6d 1316 * \return
Kojto 29:c40918cd9b6d 1317 */
Kojto 20:30b6ed7bf8fd 1318 int32_t create_entry(uint32_t file_id, uint32_t new_len);
Kojto 20:30b6ed7bf8fd 1319 #ifndef CC3000_TINY_DRIVER
Kojto 29:c40918cd9b6d 1320 /**
Kojto 29:c40918cd9b6d 1321 * \brief Read patch version. read package version (WiFi FW patch, river-supplicant-NS patch,
Kojto 29:c40918cd9b6d 1322 * bootloader patch)
Kojto 29:c40918cd9b6d 1323 * \param patch_ver First number indicates package ID and the second number indicates
Kojto 29:c40918cd9b6d 1324 * package build number
Kojto 29:c40918cd9b6d 1325 * \return
Kojto 29:c40918cd9b6d 1326 * On success 0, error otherwise.
Kojto 29:c40918cd9b6d 1327 */
Kojto 20:30b6ed7bf8fd 1328 uint8_t read_sp_version(uint8_t* patch_ver);
Kojto 20:30b6ed7bf8fd 1329 #endif
Kojto 20:30b6ed7bf8fd 1330 private:
Kojto 20:30b6ed7bf8fd 1331 cc3000_hci &_hci;
Kojto 20:30b6ed7bf8fd 1332 cc3000_event &_event;
Kojto 20:30b6ed7bf8fd 1333 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 1334 };
Kojto 20:30b6ed7bf8fd 1335
Kojto 31:7b6e85b68b01 1336 /** WLAN layer
Kojto 31:7b6e85b68b01 1337 */
Kojto 20:30b6ed7bf8fd 1338 class cc3000_wlan {
Kojto 20:30b6ed7bf8fd 1339 public:
Kojto 29:c40918cd9b6d 1340 /**
Kojto 29:c40918cd9b6d 1341 * \brief Ctor
Kojto 34:1ad18123bf11 1342 * \param simple_link Reference to the simple link object.
Kojto 34:1ad18123bf11 1343 * \param event Reference to the event object.
Kojto 34:1ad18123bf11 1344 * \param spi Reference to the spi object.
Kojto 34:1ad18123bf11 1345 * \param hci Reference to the hci object.
Kojto 29:c40918cd9b6d 1346 * \return none
Kojto 29:c40918cd9b6d 1347 */
Kojto 20:30b6ed7bf8fd 1348 cc3000_wlan(cc3000_simple_link &simple_link, cc3000_event &event, cc3000_spi &spi, cc3000_hci &hci);
Kojto 29:c40918cd9b6d 1349 /**
Kojto 29:c40918cd9b6d 1350 * \brief Dtor
Kojto 29:c40918cd9b6d 1351 * \param none
Kojto 29:c40918cd9b6d 1352 * \return none
Kojto 29:c40918cd9b6d 1353 */
Kojto 20:30b6ed7bf8fd 1354 ~cc3000_wlan();
Kojto 29:c40918cd9b6d 1355 /**
Kojto 29:c40918cd9b6d 1356 * \brief Send SIMPLE LINK START to cc3000.
Kojto 29:c40918cd9b6d 1357 * \param patches_available_host Flag to indicate if patches are available.
Kojto 20:30b6ed7bf8fd 1358 * \return none
Kojto 20:30b6ed7bf8fd 1359 */
Kojto 20:30b6ed7bf8fd 1360 void simpleLink_init_start(uint16_t patches_available_host);
Kojto 29:c40918cd9b6d 1361 /**
Kojto 29:c40918cd9b6d 1362 * \brief Start wlan device. Blocking call until init is completed.
Kojto 29:c40918cd9b6d 1363 * \param patches_available_host Flag to indicate if patches are available.
Kojto 20:30b6ed7bf8fd 1364 * \return none
Kojto 20:30b6ed7bf8fd 1365 */
Kojto 20:30b6ed7bf8fd 1366 void start(uint16_t patches_available_host);
Kojto 29:c40918cd9b6d 1367 /**
Kojto 29:c40918cd9b6d 1368 * \brief Stop wlan device
Kojto 20:30b6ed7bf8fd 1369 * \param none
Kojto 20:30b6ed7bf8fd 1370 * \return none
Kojto 20:30b6ed7bf8fd 1371 */
Kojto 20:30b6ed7bf8fd 1372 void stop(void);
Kojto 20:30b6ed7bf8fd 1373 #ifndef CC3000_TINY_DRIVER
Kojto 29:c40918cd9b6d 1374 /**
Kojto 29:c40918cd9b6d 1375 * \brief Connect to AP.
Kojto 29:c40918cd9b6d 1376 * \param sec_type Security option.
Kojto 29:c40918cd9b6d 1377 * \param ssid up to 32 bytes, ASCII SSID
Kojto 29:c40918cd9b6d 1378 * \param ssid_length length of SSID
Kojto 29:c40918cd9b6d 1379 * \param b_ssid 6 bytes specified the AP bssid
Kojto 29:c40918cd9b6d 1380 * \param key up to 16 bytes specified the AP security key
Kojto 29:c40918cd9b6d 1381 * \param key_len key length
Kojto 29:c40918cd9b6d 1382 * \return
Kojto 29:c40918cd9b6d 1383 * On success, zero is returned. On error, negative is returned.
Kojto 29:c40918cd9b6d 1384 */
Kojto 20:30b6ed7bf8fd 1385 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 1386 /**
Kojto 29:c40918cd9b6d 1387 * \brief Add profile. Up to 7 profiles are supported.
Kojto 29:c40918cd9b6d 1388 * \param sec_type Security option.
Kojto 29:c40918cd9b6d 1389 * \param ssid Up to 32 bytes, ASCII SSID
Kojto 29:c40918cd9b6d 1390 * \param ssid_length Length of SSID
Kojto 29:c40918cd9b6d 1391 * \param b_ssid 6 bytes specified the AP bssid
Kojto 29:c40918cd9b6d 1392 * \param priority Up to 16 bytes specified the AP security key
Kojto 29:c40918cd9b6d 1393 * \param pairwise_cipher_or_tx_key_len Key length
Kojto 29:c40918cd9b6d 1394 * \param group_cipher_tx_key_index Key length for WEP security
Kojto 29:c40918cd9b6d 1395 * \param key_mgmt KEY management
Kojto 29:c40918cd9b6d 1396 * \param pf_or_key Security key
Kojto 29:c40918cd9b6d 1397 * \param pass_phrase_length Security key length for WPA\WPA2
Kojto 29:c40918cd9b6d 1398 * \return
Kojto 29:c40918cd9b6d 1399 * On success, zero is returned. On error, negative is returned.
Kojto 29:c40918cd9b6d 1400 */
Kojto 20:30b6ed7bf8fd 1401 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 1402 uint32_t key_mgmt, uint8_t* pf_or_key, uint32_t pass_phrase_length);
Kojto 29:c40918cd9b6d 1403 /**
Kojto 29:c40918cd9b6d 1404 * \brief Gets entry from scan result table. The scan results are returned
Kojto 29:c40918cd9b6d 1405 * one by one, and each entry represents a single AP found in the area.
Kojto 29:c40918cd9b6d 1406 * \param scan_timeout Not supported yet
Kojto 29:c40918cd9b6d 1407 * \param results Scan result
Kojto 29:c40918cd9b6d 1408 * \return
Kojto 29:c40918cd9b6d 1409 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1410 */
Kojto 20:30b6ed7bf8fd 1411 int32_t ioctl_get_scan_results(uint32_t scan_timeout, uint8_t *results);
Kojto 29:c40918cd9b6d 1412 /**
Kojto 29:c40918cd9b6d 1413 * \brief Start and stop scan procedure. Set scan parameters.
Kojto 29:c40918cd9b6d 1414 * \param enable Start/stop application scan
Kojto 29:c40918cd9b6d 1415 * \param min_dwell_time Minimum dwell time value to be used for each channel, in ms. (Default: 20)
Kojto 29:c40918cd9b6d 1416 * \param max_dwell_time Maximum dwell time value to be used for each channel, in ms. (Default: 30)
Kojto 29:c40918cd9b6d 1417 * \param num_probe_requests Max probe request between dwell time. (Default:2)
Kojto 29:c40918cd9b6d 1418 * \param channel_mask Bitwise, up to 13 channels (0x1fff).
Kojto 29:c40918cd9b6d 1419 * \param rssi_threshold RSSI threshold. Saved: yes (Default: -80)
Kojto 29:c40918cd9b6d 1420 * \param snr_threshold NSR threshold. Saved: yes (Default: 0)
Kojto 29:c40918cd9b6d 1421 * \param default_tx_power probe Tx power. Saved: yes (Default: 205)
Kojto 29:c40918cd9b6d 1422 * \param interval_list Pointer to array with 16 entries (16 channels)
Kojto 29:c40918cd9b6d 1423 * \return
Kojto 29:c40918cd9b6d 1424 * On success, zero is returned. On error, -1 is returned.
Kojto 29:c40918cd9b6d 1425 */
Kojto 20:30b6ed7bf8fd 1426 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 1427 uint32_t channel_mask, int32_t rssi_threshold, uint32_t snr_threshold, uint32_t default_tx_power, uint32_t *interval_list);
Kojto 29:c40918cd9b6d 1428 /**
Kojto 29:c40918cd9b6d 1429 * \brief Get wlan status: disconnected, scanning, connecting or connected
Kojto 29:c40918cd9b6d 1430 * \param none
Kojto 29:c40918cd9b6d 1431 * \return
Kojto 29:c40918cd9b6d 1432 * WLAN_STATUS_DISCONNECTED, WLAN_STATUS_SCANING, STATUS_CONNECTING or WLAN_STATUS_CONNECTED
Kojto 29:c40918cd9b6d 1433 */
Kojto 20:30b6ed7bf8fd 1434 int32_t ioctl_statusget(void);
Kojto 20:30b6ed7bf8fd 1435 #else
Kojto 29:c40918cd9b6d 1436 /**
Kojto 29:c40918cd9b6d 1437 * \brief Connect to AP
Kojto 29:c40918cd9b6d 1438 * \param ssid Up to 32 bytes and is ASCII SSID of the AP
Kojto 29:c40918cd9b6d 1439 * \param ssid_length Length of the SSID
Kojto 29:c40918cd9b6d 1440 * \return
Kojto 29:c40918cd9b6d 1441 * On success, zero is returned. On error, negative is returned.
Kojto 29:c40918cd9b6d 1442 */
Kojto 20:30b6ed7bf8fd 1443 int32_t connect(const uint8_t *ssid, int32_t ssid_length);
Kojto 29:c40918cd9b6d 1444 /**
Kojto 29:c40918cd9b6d 1445 * \brief When auto start is enabled, the device connects to station from the profiles table.
Kojto 29:c40918cd9b6d 1446 * If several profiles configured the device choose the highest priority profile.
Kojto 29:c40918cd9b6d 1447 * \param sec_type WLAN_SEC_UNSEC,WLAN_SEC_WEP,WLAN_SEC_WPA,WLAN_SEC_WPA2
Kojto 29:c40918cd9b6d 1448 * \param ssid SSID up to 32 bytes
Kojto 29:c40918cd9b6d 1449 * \param ssid_length SSID length
Kojto 29:c40918cd9b6d 1450 * \param b_ssid bssid 6 bytes
Kojto 29:c40918cd9b6d 1451 * \param priority Profile priority. Lowest priority:0.
Kojto 29:c40918cd9b6d 1452 * \param pairwise_cipher_or_tx_key_len Key length for WEP security
Kojto 29:c40918cd9b6d 1453 * \param group_cipher_tx_key_index Key index
Kojto 29:c40918cd9b6d 1454 * \param key_mgmt KEY management
Kojto 29:c40918cd9b6d 1455 * \param pf_or_key Security key
Kojto 29:c40918cd9b6d 1456 * \param pass_phrase_length Security key length for WPA\WPA2
Kojto 29:c40918cd9b6d 1457 * \return
Kojto 29:c40918cd9b6d 1458 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1459 */
Kojto 20:30b6ed7bf8fd 1460 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 1461 uint32_t pairwise_cipher_or_tx_key_len, uint32_t group_cipher_tx_key_index, uint32_t key_mgmt,
Kojto 20:30b6ed7bf8fd 1462 uint8_t* pf_or_key, uint32_t pass_phrase_length);
Kojto 20:30b6ed7bf8fd 1463 #endif
Kojto 20:30b6ed7bf8fd 1464 #ifndef CC3000_UNENCRYPTED_SMART_CONFIG
Kojto 29:c40918cd9b6d 1465 /**
Kojto 29:c40918cd9b6d 1466 * \brief Process the acquired data and store it as a profile.
Kojto 29:c40918cd9b6d 1467 * \param none
Kojto 29:c40918cd9b6d 1468 * \return
Kojto 29:c40918cd9b6d 1469 * On success, zero is returned. On error, -1 is returned.
Kojto 29:c40918cd9b6d 1470 */
Kojto 20:30b6ed7bf8fd 1471 int32_t smart_config_process(void);
Kojto 20:30b6ed7bf8fd 1472 #endif
Kojto 29:c40918cd9b6d 1473 /**
Kojto 29:c40918cd9b6d 1474 * \brief Disconnect connection from AP.
Kojto 29:c40918cd9b6d 1475 * \param none
Kojto 29:c40918cd9b6d 1476 * \return
Kojto 29:c40918cd9b6d 1477 * 0 if disconnected done, other CC3000 already disconnected.
Kojto 29:c40918cd9b6d 1478 */
Kojto 20:30b6ed7bf8fd 1479 int32_t disconnect();
Kojto 29:c40918cd9b6d 1480 /**
Kojto 29:c40918cd9b6d 1481 * \brief When auto is enabled, the device tries to connect according the following policy:
Kojto 29:c40918cd9b6d 1482 * 1) If fast connect is enabled and last connection is valid, the device will try to
Kojto 29:c40918cd9b6d 1483 * connect to it without the scanning procedure (fast). The last connection will be
Kojto 29:c40918cd9b6d 1484 * marked as invalid, due to adding/removing profile.
Kojto 29:c40918cd9b6d 1485 * 2) If profile exists, the device will try to connect it (Up to seven profiles).
Kojto 29:c40918cd9b6d 1486 * 3) If fast and profiles are not found, and open mode is enabled, the device
Kojto 29:c40918cd9b6d 1487 * will try to connect to any AP.
Kojto 29:c40918cd9b6d 1488 * Note that the policy settings are stored in the CC3000 NVMEM.
Kojto 29:c40918cd9b6d 1489 * \param should_connect_to_open_ap Enable(1), disable(0) connect to any available AP.
Kojto 29:c40918cd9b6d 1490 * \param use_fast_connect Enable(1), disable(0). if enabled, tries to
Kojto 29:c40918cd9b6d 1491 * connect to the last connected AP.
Kojto 29:c40918cd9b6d 1492 * \param use_profiles Enable(1), disable(0) auto connect after reset.
Kojto 29:c40918cd9b6d 1493 * and periodically reconnect if needed.
Kojto 29:c40918cd9b6d 1494 * \return
Kojto 29:c40918cd9b6d 1495 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1496 */
Kojto 20:30b6ed7bf8fd 1497 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 1498 /**
Kojto 29:c40918cd9b6d 1499 * \brief Delete WLAN profile
Kojto 29:c40918cd9b6d 1500 * \param index Number of profile to delete
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 ioctl_del_profile(uint32_t index);
Kojto 29:c40918cd9b6d 1505 /**
Kojto 29:c40918cd9b6d 1506 * \brief Mask event according to bit mask. In case that event is
Kojto 29:c40918cd9b6d 1507 * masked (1), the device will not send the masked event to host.
Kojto 29:c40918cd9b6d 1508 * \param mask event mask
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 set_event_mask(uint32_t mask);
Kojto 29:c40918cd9b6d 1513 /**
Kojto 29:c40918cd9b6d 1514 * \brief Start to acquire device profile. The device acquire its own
Kojto 29:c40918cd9b6d 1515 * profile, if profile message is found.
Kojto 29:c40918cd9b6d 1516 * \param encrypted_flag Indicates whether the information is encrypted
Kojto 29:c40918cd9b6d 1517 * \return
Kojto 29:c40918cd9b6d 1518 * On success, zero is returned. On error, -1 is returned.
Kojto 29:c40918cd9b6d 1519 */
Kojto 20:30b6ed7bf8fd 1520 int32_t smart_config_start(uint32_t encrypted_flag);
Kojto 29:c40918cd9b6d 1521 /**
Kojto 29:c40918cd9b6d 1522 * \brief Stop the acquire profile procedure.
Kojto 29:c40918cd9b6d 1523 * \param none
Kojto 29:c40918cd9b6d 1524 * \return
Kojto 29:c40918cd9b6d 1525 * On success, zero is returned. On error, -1 is returned
Kojto 29:c40918cd9b6d 1526 */
Kojto 20:30b6ed7bf8fd 1527 int32_t smart_config_stop(void);
Kojto 29:c40918cd9b6d 1528 /**
Kojto 29:c40918cd9b6d 1529 * \brief Configure station ssid prefix.
Kojto 29:c40918cd9b6d 1530 * \param new_prefix 3 bytes identify the SSID prefix for the Smart Config.
Kojto 29:c40918cd9b6d 1531 * \return
Kojto 29:c40918cd9b6d 1532 * On success, zero is returned. On error, -1 is returned.
Kojto 29:c40918cd9b6d 1533 */
Kojto 20:30b6ed7bf8fd 1534 int32_t smart_config_set_prefix(uint8_t *new_prefix);
Kojto 20:30b6ed7bf8fd 1535 private:
Kojto 20:30b6ed7bf8fd 1536 cc3000_simple_link &_simple_link;
Kojto 20:30b6ed7bf8fd 1537 cc3000_event &_event;
Kojto 20:30b6ed7bf8fd 1538 cc3000_spi &_spi;
Kojto 20:30b6ed7bf8fd 1539 cc3000_hci &_hci;
Kojto 20:30b6ed7bf8fd 1540 };
Kojto 20:30b6ed7bf8fd 1541
Kojto 31:7b6e85b68b01 1542 /** The main object of cc3000 implementation
Kojto 20:30b6ed7bf8fd 1543 */
Kojto 20:30b6ed7bf8fd 1544 class cc3000 {
Kojto 20:30b6ed7bf8fd 1545 public:
Kojto 29:c40918cd9b6d 1546 /** status structure */
Kojto 20:30b6ed7bf8fd 1547 typedef struct {
Kojto 29:c40918cd9b6d 1548 bool dhcp;
Kojto 29:c40918cd9b6d 1549 bool connected;
Kojto 20:30b6ed7bf8fd 1550 uint8_t socket;
Kojto 29:c40918cd9b6d 1551 bool smart_config_complete;
Kojto 29:c40918cd9b6d 1552 bool stop_smart_config;
Kojto 29:c40918cd9b6d 1553 bool dhcp_configured;
Kojto 29:c40918cd9b6d 1554 bool ok_to_shut_down;
SolderSplashLabs 39:03ac37ab34eb 1555 bool enabled;
Kojto 20:30b6ed7bf8fd 1556 } tStatus;
Kojto 29:c40918cd9b6d 1557 /**
Kojto 29:c40918cd9b6d 1558 * \brief Ctor.
Kojto 20:30b6ed7bf8fd 1559 * \param cc3000_irq IRQ pin
Kojto 20:30b6ed7bf8fd 1560 * \param cc3000_en Enable pin
Kojto 20:30b6ed7bf8fd 1561 * \param cc3000_cs Chip select pin
Kojto 20:30b6ed7bf8fd 1562 * \param cc3000_spi SPI interface
Kojto 20:30b6ed7bf8fd 1563 * \param irq_port IRQ pin's port
Kojto 20:30b6ed7bf8fd 1564 */
Kojto 20:30b6ed7bf8fd 1565 cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, IRQn_Type irq_port);
Kojto 29:c40918cd9b6d 1566 /**
Kojto 29:c40918cd9b6d 1567 * \brief Dtor.
Kojto 20:30b6ed7bf8fd 1568 */
Kojto 20:30b6ed7bf8fd 1569 ~cc3000();
Kojto 29:c40918cd9b6d 1570 /**
Kojto 29:c40918cd9b6d 1571 * \brief Initiate cc3000. It starts the wlan communication and deletes profiles.
Kojto 20:30b6ed7bf8fd 1572 * \param patch Patch
Kojto 20:30b6ed7bf8fd 1573 */
Kojto 20:30b6ed7bf8fd 1574 void start(uint8_t patch);
Kojto 29:c40918cd9b6d 1575 /**
Kojto 29:c40918cd9b6d 1576 * \brief Stops the wlan communication.
Kojto 20:30b6ed7bf8fd 1577 */
Kojto 20:30b6ed7bf8fd 1578 void stop();
Kojto 29:c40918cd9b6d 1579 /**
Kojto 29:c40918cd9b6d 1580 * \brief Restarts the wlan communication.
Kojto 20:30b6ed7bf8fd 1581 */
Kojto 20:30b6ed7bf8fd 1582 void restart(uint8_t patch);
Kojto 29:c40918cd9b6d 1583 /**
Kojto 29:c40918cd9b6d 1584 * \brief Disconnect wlan device
Kojto 20:30b6ed7bf8fd 1585 *
Kojto 20:30b6ed7bf8fd 1586 */
Kojto 20:30b6ed7bf8fd 1587 bool disconnect(void);
Kojto 29:c40918cd9b6d 1588 /**
Kojto 29:c40918cd9b6d 1589 * \brief Callback which is called from the event class. This updates status of cc3000.
Kojto 20:30b6ed7bf8fd 1590 * \param event_type Type of the event
Kojto 20:30b6ed7bf8fd 1591 * \param data Pointer to data
Kojto 20:30b6ed7bf8fd 1592 * \param length Length of data
Kojto 20:30b6ed7bf8fd 1593 * \return none
Kojto 20:30b6ed7bf8fd 1594 */
Kojto 20:30b6ed7bf8fd 1595 void usync_callback(int32_t event_type, uint8_t *data, uint8_t length);
Kojto 29:c40918cd9b6d 1596 /**
SolderSplashLabs 39:03ac37ab34eb 1597 * \brief Start connection to SSID (open/secured) non-blocking
SolderSplashLabs 39:03ac37ab34eb 1598 * \param ssid SSID name
SolderSplashLabs 39:03ac37ab34eb 1599 * \param key Security key (if key = 0, open connection)
SolderSplashLabs 39:03ac37ab34eb 1600 * \param security_mode Security mode
SolderSplashLabs 39:03ac37ab34eb 1601 * \return true if connection was established, false otherwise.
SolderSplashLabs 39:03ac37ab34eb 1602 */
SolderSplashLabs 39:03ac37ab34eb 1603 bool connect_non_blocking(const uint8_t *ssid, const uint8_t *key, int32_t security_mode);
SolderSplashLabs 39:03ac37ab34eb 1604 /**
SolderSplashLabs 39:03ac37ab34eb 1605 * \brief Connect to SSID (open/secured) with timeout (10s).
Kojto 20:30b6ed7bf8fd 1606 * \param ssid SSID name
Kojto 20:30b6ed7bf8fd 1607 * \param key Security key (if key = 0, open connection)
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_to_AP(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 secured
Kojto 20:30b6ed7bf8fd 1614 * \param ssid SSID name
Kojto 20:30b6ed7bf8fd 1615 * \param key Security key
Kojto 20:30b6ed7bf8fd 1616 * \param security_mode Security mode
Kojto 20:30b6ed7bf8fd 1617 * \return true if connection was established, false otherwise.
Kojto 20:30b6ed7bf8fd 1618 */
Kojto 20:30b6ed7bf8fd 1619 bool connect_secure(const uint8_t *ssid, const uint8_t *key, int32_t security_mode);
Kojto 29:c40918cd9b6d 1620 /**
Kojto 29:c40918cd9b6d 1621 * \brief Connect to SSID which is open (no security)
Kojto 20:30b6ed7bf8fd 1622 * \param ssid SSID name
Kojto 20:30b6ed7bf8fd 1623 * \return true if connection was established, false otherwise.
Kojto 20:30b6ed7bf8fd 1624 */
Kojto 20:30b6ed7bf8fd 1625 bool connect_open(const uint8_t *ssid);
Kojto 29:c40918cd9b6d 1626 /**
SolderSplashLabs 39:03ac37ab34eb 1627 * \brief Status of the cc3000 module.
SolderSplashLabs 39:03ac37ab34eb 1628 * \return true if it's enabled, false otherwise.
SolderSplashLabs 39:03ac37ab34eb 1629 */
SolderSplashLabs 39:03ac37ab34eb 1630 bool is_enabled();
SolderSplashLabs 39:03ac37ab34eb 1631 /**
Kojto 29:c40918cd9b6d 1632 * \brief Status of the cc3000 connection.
Kojto 20:30b6ed7bf8fd 1633 * \return true if it's connected, false otherwise.
Kojto 20:30b6ed7bf8fd 1634 */
Kojto 20:30b6ed7bf8fd 1635 bool is_connected();
Kojto 29:c40918cd9b6d 1636 /**
Kojto 29:c40918cd9b6d 1637 * \brief Status of DHCP.
Kojto 20:30b6ed7bf8fd 1638 * \param none
Kojto 20:30b6ed7bf8fd 1639 * \return true if DCHP is configured, false otherwise.
Kojto 20:30b6ed7bf8fd 1640 */
Kojto 20:30b6ed7bf8fd 1641 bool is_dhcp_configured();
Kojto 29:c40918cd9b6d 1642 /**
Kojto 29:c40918cd9b6d 1643 * \brief Status of smart confing completation.
Kojto 20:30b6ed7bf8fd 1644 * \param none
Kojto 20:30b6ed7bf8fd 1645 * \return smart config was set, false otherwise.
Kojto 20:30b6ed7bf8fd 1646 */
Kojto 20:30b6ed7bf8fd 1647 bool is_smart_confing_completed();
Kojto 29:c40918cd9b6d 1648 /**
Kojto 29:c40918cd9b6d 1649 * \brief Return the cc3000's mac address.
Kojto 20:30b6ed7bf8fd 1650 * \param address Retreived mac address.
Kojto 20:30b6ed7bf8fd 1651 * \return
Kojto 20:30b6ed7bf8fd 1652 */
Kojto 20:30b6ed7bf8fd 1653 uint8_t get_mac_address(uint8_t address[6]);
Kojto 29:c40918cd9b6d 1654 /**
Kojto 29:c40918cd9b6d 1655 * \brief Set the cc3000's mac address.
Kojto 29:c40918cd9b6d 1656 * \param address Mac address to be set.
Kojto 20:30b6ed7bf8fd 1657 * \return
Kojto 20:30b6ed7bf8fd 1658 */
Kojto 20:30b6ed7bf8fd 1659 uint8_t set_mac_address(uint8_t address[6]);
Kojto 29:c40918cd9b6d 1660 /**
Kojto 29:c40918cd9b6d 1661 * \brief Get user file info.
Kojto 29:c40918cd9b6d 1662 * \param info_file Pointer where info will be stored.
Kojto 29:c40918cd9b6d 1663 * \param size Available size.
Kojto 20:30b6ed7bf8fd 1664 * \return none
Kojto 20:30b6ed7bf8fd 1665 */
Kojto 20:30b6ed7bf8fd 1666 void get_user_file_info(uint8_t *info_file, size_t size);
Kojto 29:c40918cd9b6d 1667 /**
Kojto 29:c40918cd9b6d 1668 * \brief Set user filo info.
Kojto 29:c40918cd9b6d 1669 * \param info_file Pointer to user's info.
Kojto 20:30b6ed7bf8fd 1670 * \return none
Kojto 20:30b6ed7bf8fd 1671 */
Kojto 20:30b6ed7bf8fd 1672 void set_user_file_info(uint8_t *info_file, size_t size);
Kojto 29:c40918cd9b6d 1673 /**
Kojto 29:c40918cd9b6d 1674 * \brief Start smart config.
Kojto 29:c40918cd9b6d 1675 * \param smart_config_key Pointer to smart config key.
Kojto 20:30b6ed7bf8fd 1676 * \return none
Kojto 20:30b6ed7bf8fd 1677 */
Kojto 20:30b6ed7bf8fd 1678 void start_smart_config(const uint8_t *smart_config_key); /* TODO enable AES ? */
Kojto 20:30b6ed7bf8fd 1679 #ifndef CC3000_TINY_DRIVER
Kojto 29:c40918cd9b6d 1680 /**
Kojto 29:c40918cd9b6d 1681 * \brief Return ip configuration.
Kojto 29:c40918cd9b6d 1682 * \param ip_config Pointer to ipconfig data.
Kojto 29:c40918cd9b6d 1683 * \return true if it's connected and info was retrieved, false otherwise.
Kojto 20:30b6ed7bf8fd 1684 */
Kojto 20:30b6ed7bf8fd 1685 bool get_ip_config(tNetappIpconfigRetArgs *ip_config);
Kojto 20:30b6ed7bf8fd 1686 #endif
Kojto 29:c40918cd9b6d 1687 /**
Kojto 33:9e23b24fb4f3 1688 * \brief Delete all stored profiles.
Kojto 29:c40918cd9b6d 1689 * \param none
Kojto 20:30b6ed7bf8fd 1690 * \return none
Kojto 20:30b6ed7bf8fd 1691 */
Kojto 20:30b6ed7bf8fd 1692 void delete_profiles(void);
Kojto 20:30b6ed7bf8fd 1693 /**
Kojto 33:9e23b24fb4f3 1694 * \brief Ping an ip address.
Kojto 29:c40918cd9b6d 1695 * \param ip Destination IP address
Kojto 29:c40918cd9b6d 1696 * \param attempts Number of attempts
Kojto 29:c40918cd9b6d 1697 * \param timeout Time to wait for a response,in milliseconds.
Kojto 29:c40918cd9b6d 1698 * \param size Send buffer size which may be up to 1400 bytes
Kojto 20:30b6ed7bf8fd 1699 */
Kojto 20:30b6ed7bf8fd 1700 uint32_t ping(uint32_t ip, uint8_t attempts, uint16_t timeout, uint8_t size);
Kojto 29:c40918cd9b6d 1701 /**
Kojto 33:9e23b24fb4f3 1702 * \brief Returns cc3000 instance. Used in Socket interface.
Kojto 29:c40918cd9b6d 1703 * \param none
Kojto 29:c40918cd9b6d 1704 * \return Pointer to cc3000 object
Kojto 29:c40918cd9b6d 1705 */
Kojto 20:30b6ed7bf8fd 1706 static cc3000 *get_instance() {
Kojto 20:30b6ed7bf8fd 1707 return _inst;
Kojto 20:30b6ed7bf8fd 1708 }
SolderSplashLabs 39:03ac37ab34eb 1709 #ifdef CC3000_ETH_COMPAT
SolderSplashLabs 39:03ac37ab34eb 1710 /**
SolderSplashLabs 39:03ac37ab34eb 1711 * \brief
SolderSplashLabs 39:03ac37ab34eb 1712 * \param
SolderSplashLabs 39:03ac37ab34eb 1713 * \return
SolderSplashLabs 39:03ac37ab34eb 1714 */
SolderSplashLabs 39:03ac37ab34eb 1715 char* getMACAddress();
SolderSplashLabs 39:03ac37ab34eb 1716
SolderSplashLabs 39:03ac37ab34eb 1717 /**
SolderSplashLabs 39:03ac37ab34eb 1718 * \brief
SolderSplashLabs 39:03ac37ab34eb 1719 * \param
SolderSplashLabs 39:03ac37ab34eb 1720 * \return
SolderSplashLabs 39:03ac37ab34eb 1721 */
SolderSplashLabs 39:03ac37ab34eb 1722 char* getIPAddress();
SolderSplashLabs 39:03ac37ab34eb 1723
SolderSplashLabs 39:03ac37ab34eb 1724 /**
SolderSplashLabs 39:03ac37ab34eb 1725 * \brief
SolderSplashLabs 39:03ac37ab34eb 1726 * \param
SolderSplashLabs 39:03ac37ab34eb 1727 * \return
SolderSplashLabs 39:03ac37ab34eb 1728 */
SolderSplashLabs 39:03ac37ab34eb 1729 char* getGateway();
SolderSplashLabs 39:03ac37ab34eb 1730
SolderSplashLabs 39:03ac37ab34eb 1731 /**
SolderSplashLabs 39:03ac37ab34eb 1732 * \brief
SolderSplashLabs 39:03ac37ab34eb 1733 * \param
SolderSplashLabs 39:03ac37ab34eb 1734 * \return
SolderSplashLabs 39:03ac37ab34eb 1735 */
SolderSplashLabs 39:03ac37ab34eb 1736 char* getNetworkMask();
SolderSplashLabs 39:03ac37ab34eb 1737 #endif
Kojto 20:30b6ed7bf8fd 1738 public:
Kojto 20:30b6ed7bf8fd 1739 cc3000_simple_link _simple_link;
Kojto 20:30b6ed7bf8fd 1740 cc3000_event _event;
Kojto 20:30b6ed7bf8fd 1741 #ifndef CC3000_UNENCRYPTED_SMART_CONFIG
Kojto 20:30b6ed7bf8fd 1742 cc3000_security _security;
Kojto 20:30b6ed7bf8fd 1743 #endif
Kojto 20:30b6ed7bf8fd 1744 cc3000_socket _socket;
Kojto 20:30b6ed7bf8fd 1745 cc3000_spi _spi;
Kojto 20:30b6ed7bf8fd 1746 cc3000_hci _hci;
Kojto 20:30b6ed7bf8fd 1747 cc3000_nvmem _nvmem;
Kojto 20:30b6ed7bf8fd 1748 cc3000_netapp _netapp;
Kojto 20:30b6ed7bf8fd 1749 cc3000_wlan _wlan;
Kojto 20:30b6ed7bf8fd 1750 protected:
Kojto 20:30b6ed7bf8fd 1751 static cc3000 *_inst;
Kojto 20:30b6ed7bf8fd 1752 private:
Kojto 20:30b6ed7bf8fd 1753 tStatus _status;
Kojto 20:30b6ed7bf8fd 1754 netapp_pingreport_args_t _ping_report;
Kojto 20:30b6ed7bf8fd 1755 bool _closed_sockets[MAX_SOCKETS];
Kojto 20:30b6ed7bf8fd 1756 };
Kojto 20:30b6ed7bf8fd 1757
Kojto 20:30b6ed7bf8fd 1758 /**
Kojto 29:c40918cd9b6d 1759 * Copy 32 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 32 bit
Kojto 29:c40918cd9b6d 1762 * @return pointer to the new stream
Kojto 29:c40918cd9b6d 1763 */
Kojto 20:30b6ed7bf8fd 1764 uint8_t *UINT32_TO_STREAM_f (uint8_t *p, uint32_t u32);
Kojto 20:30b6ed7bf8fd 1765
Kojto 20:30b6ed7bf8fd 1766 /**
Kojto 29:c40918cd9b6d 1767 * Copy 16 bit to stream while converting to little endian format.
Kojto 29:c40918cd9b6d 1768 * @param p pointer to the new stream
Kojto 29:c40918cd9b6d 1769 * @param u32 pointer to the 16 bit
Kojto 29:c40918cd9b6d 1770 * @return pointer to the new stream
Kojto 29:c40918cd9b6d 1771 */
Kojto 20:30b6ed7bf8fd 1772 uint8_t *UINT16_TO_STREAM_f (uint8_t *p, uint16_t u16);
Kojto 20:30b6ed7bf8fd 1773
Kojto 20:30b6ed7bf8fd 1774 /**
Kojto 29:c40918cd9b6d 1775 * Copy received stream to 16 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 16 bit
Kojto 29:c40918cd9b6d 1779 */
Kojto 20:30b6ed7bf8fd 1780 uint16_t STREAM_TO_UINT16_f(uint8_t* p, uint16_t offset);
Kojto 20:30b6ed7bf8fd 1781
Kojto 20:30b6ed7bf8fd 1782 /**
Kojto 29:c40918cd9b6d 1783 * Copy received stream to 32 bit in little endian format.
Kojto 29:c40918cd9b6d 1784 * @param p pointer to the stream
Kojto 29:c40918cd9b6d 1785 * @param offset offset in the stream
Kojto 29:c40918cd9b6d 1786 * @return pointer to the new 32 bit
Kojto 29:c40918cd9b6d 1787 */
Kojto 20:30b6ed7bf8fd 1788 uint32_t STREAM_TO_UINT32_f(uint8_t* p, uint16_t offset);
Kojto 20:30b6ed7bf8fd 1789
Kojto 20:30b6ed7bf8fd 1790 } /* end of mbed_cc3000 namespace */
Kojto 20:30b6ed7bf8fd 1791
Kojto 20:30b6ed7bf8fd 1792
Kojto 20:30b6ed7bf8fd 1793 #endif