Driver for CC3000 Wi-Fi module

Dependencies:   NVIC_set_all_priorities

Dependents:   CC3000_Simple_Socket Wi-Go_IOT_Demo

Information

The current code has been reworked to a full object oriented application and contains an mbed socket compatible API.

CC3000 Wi-Fi module library

Info

This is the low level driver for TI's SimpleLink CC3000 device.
Port from Avnet's Wi-Go KEIL code (based on TI's CC3000 code).
Special thanks to Jim Carver from Avnet for providing the Wi-Go board and for his assistance.

Differences with TI's original code

The code functionality stays exactly the same.
In order to make it easier to use the code, following changes were made :

  • Addition of a tool to shift all IRQ priorities to a lower level since it is very important to keep the SPI handler at the highest system priority, the WLAN interrupt the second highest and all other system interrupts at a lower priority, so their handlers can be preempted by the CC3000 interrupts.
  • Addition of low level I/O controls and conditional compiler controls in cc3000_common.h.
  • CC3000 initialisation, pin declarations, SPI and WLAN irq priorities are set in Init_HostDriver , we need to call this function at the start of the main function.
  • The SPI and HCI code are joined into one file.
  • The include list has been rearranged - Only #include "wlan.h" is needed in the user API.
  • Part of the CC3000's user eeprom memory is used to store additional info (52 bytes in NVMEM_USER_FILE_1):
# bytesDescriptionInfo
1First time config parameterUseful when connecting
2Firmware updater versionused with the Firmware update tool
2Service Pack versionused with the Firmware update tool
3Driver Versionused with the Firmware update tool
3Firmware Versionused with the Firmware update tool
1CIK validation (Client Interface Key)
40CIK data (Client Interface Key)used with the exosite

Using the Library

A user API is needed to access the CC3000 functions.
Examples:

Using the library with other processors

cc3000_common.cpp loads the irq tool for all targets:
All current mbed targets are supported by this library.

#include "NVIC_set_all_priorities.h"


All low level settings that need to change are available in cc3000_common.h

//*****************************************************************************
//              PIN CONTROLS & COMPILE CONTROLS
//*****************************************************************************
// Compiler control
#define CC3000_UNENCRYPTED_SMART_CONFIG   // No encryption
//#define CC3000_TINY_DRIVER                // Driver for small memory model CPUs

//Interrupt controls
#define NVIC_ALL_IRQ        NVIC_set_all_irq_priorities(3);         // Set ALL interrupt priorities to level 3
#define NVIC_SPI_IRQ        NVIC_SetPriority(SPI0_IRQn, 0x0);       // Wi-Fi SPI interrupt must be higher priority than SysTick
#define NVIC_PORT_IRQ       NVIC_SetPriority(PORTA_IRQn, 0x1);
#define NVIC_SYSTICK_IRQ    NVIC_SetPriority(SysTick_IRQn, 0x2);    // SysTick set to lower priority than Wi-Fi SPI bus interrupt
//#define NVIC_ADC_IRQ        NVIC_SetPriority(ADC0_IRQn, 0x3);       // ADC is the lowest of all

// Wlan controls
#define WLAN_ISF_PCR        PORTA->PCR[16]
#define WLAN_ISF_ISFR       PORTA->ISFR
#define WLAN_ISF_MASK       (1<<16)

#define WLAN_ASSERT_CS      wlan_cs = 0;   //CS : active low
#define WLAN_DEASSERT_CS    wlan_cs = 1;

#define WLAN_ASSERT_EN      wlan_en = 1;   //EN : active high
#define WLAN_DEASSERT_EN    wlan_en = 0;

#define WLAN_READ_IRQ       wlan_int

#define WLAN_ENABLE_IRQ     wlan_int.fall(&WLAN_IRQHandler);
#define WLAN_DISABLE_IRQ    wlan_int.fall(NULL);

#define WLAN_IRQ_PIN_CREATE         InterruptIn wlan_int (PTA16);
#define WLAN_EN_PIN_CREATE          DigitalOut  wlan_en  (PTA13);
#define WLAN_CS_PIN_CREATE          DigitalOut  wlan_cs  (PTD0);
#define WLAN_SPI_PORT_CREATE        SPI wlan(PTD2, PTD3, PTC5); // mosi, miso, sclk

#define WLAN_SPI_PORT_INIT          wlan.format(8,1);
#define WLAN_SPI_SET_FREQ           wlan.frequency(12000000);
#define WLAN_SPI_SET_IRQ_HANDLER    wlan_int.fall(&WLAN_IRQHandler);

#define WLAN_SPI_WRITE              wlan.write(*data++);
#define WLAN_SPI_READ               wlan.write(0x03);          // !! DO NOT MODIFY the 0x03 parameter (CC3000 will not respond).

API documentation

Due to a little problem with the links on the mbed site, the API documentation is not directly accessible (will be solved in a next release).
Currently, it is only accessible by adding modules.html to the API doc link: http://mbed.org/users/frankvnk/code/CC3000_Hostdriver/docs/tip/modules.html

Committer:
frankvnk
Date:
Mon Jul 15 14:19:46 2013 +0000
Revision:
4:d8255a5aad46
Parent:
0:c44f0314d6ec
Child:
5:854f9b13a0f9
Full clean up (comments, Doxygen, code)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 0:c44f0314d6ec 1 /*****************************************************************************
frankvnk 0:c44f0314d6ec 2 *
frankvnk 0:c44f0314d6ec 3 * socket.h - CC3000 Host Driver Implementation.
frankvnk 0:c44f0314d6ec 4 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
frankvnk 0:c44f0314d6ec 5 *
frankvnk 0:c44f0314d6ec 6 * Redistribution and use in source and binary forms, with or without
frankvnk 0:c44f0314d6ec 7 * modification, are permitted provided that the following conditions
frankvnk 0:c44f0314d6ec 8 * are met:
frankvnk 0:c44f0314d6ec 9 *
frankvnk 0:c44f0314d6ec 10 * Redistributions of source code must retain the above copyright
frankvnk 0:c44f0314d6ec 11 * notice, this list of conditions and the following disclaimer.
frankvnk 0:c44f0314d6ec 12 *
frankvnk 0:c44f0314d6ec 13 * Redistributions in binary form must reproduce the above copyright
frankvnk 0:c44f0314d6ec 14 * notice, this list of conditions and the following disclaimer in the
frankvnk 0:c44f0314d6ec 15 * documentation and/or other materials provided with the
frankvnk 0:c44f0314d6ec 16 * distribution.
frankvnk 0:c44f0314d6ec 17 *
frankvnk 0:c44f0314d6ec 18 * Neither the name of Texas Instruments Incorporated nor the names of
frankvnk 0:c44f0314d6ec 19 * its contributors may be used to endorse or promote products derived
frankvnk 0:c44f0314d6ec 20 * from this software without specific prior written permission.
frankvnk 0:c44f0314d6ec 21 *
frankvnk 0:c44f0314d6ec 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
frankvnk 0:c44f0314d6ec 23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
frankvnk 0:c44f0314d6ec 24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
frankvnk 0:c44f0314d6ec 25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
frankvnk 0:c44f0314d6ec 26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
frankvnk 0:c44f0314d6ec 27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
frankvnk 0:c44f0314d6ec 28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
frankvnk 0:c44f0314d6ec 29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
frankvnk 0:c44f0314d6ec 30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
frankvnk 0:c44f0314d6ec 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
frankvnk 0:c44f0314d6ec 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
frankvnk 0:c44f0314d6ec 33 *
frankvnk 0:c44f0314d6ec 34 *****************************************************************************/
frankvnk 0:c44f0314d6ec 35 #ifndef __SOCKET_H__
frankvnk 0:c44f0314d6ec 36 #define __SOCKET_H__
frankvnk 0:c44f0314d6ec 37
frankvnk 0:c44f0314d6ec 38 #include "GlobalAssigns.h"
frankvnk 4:d8255a5aad46 39
frankvnk 0:c44f0314d6ec 40 /** CC3000 Host driver - Socket API
frankvnk 0:c44f0314d6ec 41 *
frankvnk 0:c44f0314d6ec 42 */
frankvnk 0:c44f0314d6ec 43
frankvnk 0:c44f0314d6ec 44 #ifdef __cplusplus
frankvnk 0:c44f0314d6ec 45 extern "C" {
frankvnk 0:c44f0314d6ec 46 #endif
frankvnk 0:c44f0314d6ec 47
frankvnk 4:d8255a5aad46 48 //Enable this flag if and only if you must comply with BSD socket
frankvnk 4:d8255a5aad46 49 //close() function
frankvnk 4:d8255a5aad46 50 #ifdef _API_USE_BSD_CLOSE
frankvnk 4:d8255a5aad46 51 #define close(sd) closesocket(sd)
frankvnk 4:d8255a5aad46 52 #endif
frankvnk 4:d8255a5aad46 53
frankvnk 4:d8255a5aad46 54 //Enable this flag if and only if you must comply with BSD socket read() and
frankvnk 4:d8255a5aad46 55 //write() functions
frankvnk 4:d8255a5aad46 56 #ifdef _API_USE_BSD_READ_WRITE
frankvnk 4:d8255a5aad46 57 #define read(sd, buf, len, flags) recv(sd, buf, len, flags)
frankvnk 4:d8255a5aad46 58 #define write(sd, buf, len, flags) send(sd, buf, len, flags)
frankvnk 4:d8255a5aad46 59 #endif
frankvnk 4:d8255a5aad46 60
frankvnk 4:d8255a5aad46 61 #define SOCKET_OPEN_PARAMS_LEN (12)
frankvnk 4:d8255a5aad46 62 #define SOCKET_CLOSE_PARAMS_LEN (4)
frankvnk 4:d8255a5aad46 63 #define SOCKET_ACCEPT_PARAMS_LEN (4)
frankvnk 4:d8255a5aad46 64 #define SOCKET_BIND_PARAMS_LEN (20)
frankvnk 4:d8255a5aad46 65 #define SOCKET_LISTEN_PARAMS_LEN (8)
frankvnk 4:d8255a5aad46 66 #define SOCKET_GET_HOST_BY_NAME_PARAMS_LEN (9)
frankvnk 4:d8255a5aad46 67 #define SOCKET_CONNECT_PARAMS_LEN (20)
frankvnk 4:d8255a5aad46 68 #define SOCKET_SELECT_PARAMS_LEN (44)
frankvnk 4:d8255a5aad46 69 #define SOCKET_SET_SOCK_OPT_PARAMS_LEN (20)
frankvnk 4:d8255a5aad46 70 #define SOCKET_GET_SOCK_OPT_PARAMS_LEN (12)
frankvnk 4:d8255a5aad46 71 #define SOCKET_RECV_FROM_PARAMS_LEN (12)
frankvnk 4:d8255a5aad46 72 #define SOCKET_SENDTO_PARAMS_LEN (24)
frankvnk 4:d8255a5aad46 73 #define SOCKET_MDNS_ADVERTISE_PARAMS_LEN (12)
frankvnk 4:d8255a5aad46 74
frankvnk 4:d8255a5aad46 75 //#define NULL 0
frankvnk 4:d8255a5aad46 76
frankvnk 4:d8255a5aad46 77 // The legnth of arguments for the SEND command: sd + buff_offset + len + flags,
frankvnk 4:d8255a5aad46 78 // while size of each parameter is 32 bit - so the total length is 16 bytes;
frankvnk 4:d8255a5aad46 79
frankvnk 4:d8255a5aad46 80 #define HCI_CMND_SEND_ARG_LENGTH (16)
frankvnk 4:d8255a5aad46 81 #define SELECT_TIMEOUT_MIN_MICRO_SECONDS 5000
frankvnk 4:d8255a5aad46 82 #define HEADERS_SIZE_DATA (SPI_HEADER_SIZE + 5)
frankvnk 4:d8255a5aad46 83 #define SIMPLE_LINK_HCI_CMND_TRANSPORT_HEADER_SIZE (SPI_HEADER_SIZE + SIMPLE_LINK_HCI_CMND_HEADER_SIZE)
frankvnk 4:d8255a5aad46 84 #define MDNS_DEVICE_SERVICE_MAX_LENGTH (32)
frankvnk 4:d8255a5aad46 85
frankvnk 4:d8255a5aad46 86
frankvnk 0:c44f0314d6ec 87 #define HOSTNAME_MAX_LENGTH (230) // 230 bytes + header shouldn't exceed 8 bit value
frankvnk 0:c44f0314d6ec 88
frankvnk 0:c44f0314d6ec 89 //--------- Address Families --------
frankvnk 0:c44f0314d6ec 90
frankvnk 0:c44f0314d6ec 91 #define AF_INET 2
frankvnk 0:c44f0314d6ec 92 #define AF_INET6 23
frankvnk 0:c44f0314d6ec 93
frankvnk 0:c44f0314d6ec 94 //------------ Socket Types ------------
frankvnk 0:c44f0314d6ec 95
frankvnk 0:c44f0314d6ec 96 #define SOCK_STREAM 1
frankvnk 0:c44f0314d6ec 97 #define SOCK_DGRAM 2
frankvnk 0:c44f0314d6ec 98 #define SOCK_RAW 3 // Raw sockets allow new IPv4 protocols to be implemented in user space. A raw socket receives or sends the raw datagram not including link level headers
frankvnk 0:c44f0314d6ec 99 #define SOCK_RDM 4
frankvnk 0:c44f0314d6ec 100 #define SOCK_SEQPACKET 5
frankvnk 0:c44f0314d6ec 101
frankvnk 0:c44f0314d6ec 102 //----------- Socket Protocol ----------
frankvnk 0:c44f0314d6ec 103
frankvnk 0:c44f0314d6ec 104 #define IPPROTO_IP 0 // dummy for IP
frankvnk 0:c44f0314d6ec 105 #define IPPROTO_ICMP 1 // control message protocol
frankvnk 0:c44f0314d6ec 106 #define IPPROTO_IPV4 IPPROTO_IP // IP inside IP
frankvnk 0:c44f0314d6ec 107 #define IPPROTO_TCP 6 // tcp
frankvnk 0:c44f0314d6ec 108 #define IPPROTO_UDP 17 // user datagram protocol
frankvnk 0:c44f0314d6ec 109 #define IPPROTO_IPV6 41 // IPv6 in IPv6
frankvnk 0:c44f0314d6ec 110 #define IPPROTO_NONE 59 // No next header
frankvnk 0:c44f0314d6ec 111 #define IPPROTO_RAW 255 // raw IP packet
frankvnk 0:c44f0314d6ec 112 #define IPPROTO_MAX 256
frankvnk 0:c44f0314d6ec 113
frankvnk 0:c44f0314d6ec 114 //----------- Socket retunr codes -----------
frankvnk 0:c44f0314d6ec 115
frankvnk 0:c44f0314d6ec 116 #define SOC_ERROR (-1) // error
frankvnk 4:d8255a5aad46 117 #define SOC_IN_PROGRESS (-2) // socket in progress
frankvnk 0:c44f0314d6ec 118
frankvnk 0:c44f0314d6ec 119 //----------- Socket Options -----------
frankvnk 4:d8255a5aad46 120 #define SOL_SOCKET 0xffff // socket level
frankvnk 4:d8255a5aad46 121 #define SOCKOPT_RECV_TIMEOUT 1 // optname to configure recv and recvfromtimeout
frankvnk 4:d8255a5aad46 122 #define SOCKOPT_NONBLOCK 2 // accept non block mode set SOCK_ON or SOCK_OFF (default block mode )
frankvnk 0:c44f0314d6ec 123 #define SOCK_ON 0 // socket non-blocking mode is enabled
frankvnk 0:c44f0314d6ec 124 #define SOCK_OFF 1 // socket blocking mode is enabled
frankvnk 0:c44f0314d6ec 125
frankvnk 0:c44f0314d6ec 126 #define TCP_NODELAY 0x0001
frankvnk 0:c44f0314d6ec 127 #define TCP_BSDURGENT 0x7000
frankvnk 0:c44f0314d6ec 128
frankvnk 0:c44f0314d6ec 129 #define MAX_PACKET_SIZE 1500
frankvnk 0:c44f0314d6ec 130 #define MAX_LISTEN_QUEUE 4
frankvnk 0:c44f0314d6ec 131
frankvnk 0:c44f0314d6ec 132 #define IOCTL_SOCKET_EVENTMASK
frankvnk 0:c44f0314d6ec 133
frankvnk 0:c44f0314d6ec 134 #define ENOBUFS 55 // No buffer space available
frankvnk 0:c44f0314d6ec 135
frankvnk 0:c44f0314d6ec 136 #define __FD_SETSIZE 32
frankvnk 0:c44f0314d6ec 137
frankvnk 0:c44f0314d6ec 138 #define ASIC_ADDR_LEN 8
frankvnk 0:c44f0314d6ec 139
frankvnk 0:c44f0314d6ec 140 #define NO_QUERY_RECIVED -3
frankvnk 0:c44f0314d6ec 141
frankvnk 0:c44f0314d6ec 142
frankvnk 0:c44f0314d6ec 143 typedef struct _in_addr_t
frankvnk 0:c44f0314d6ec 144 {
frankvnk 0:c44f0314d6ec 145 unsigned long s_addr; // load with inet_aton()
frankvnk 0:c44f0314d6ec 146 } in_addr;
frankvnk 0:c44f0314d6ec 147
frankvnk 0:c44f0314d6ec 148 typedef struct _sockaddr_t
frankvnk 0:c44f0314d6ec 149 {
frankvnk 4:d8255a5aad46 150 unsigned short int sa_family;
frankvnk 4:d8255a5aad46 151 unsigned char sa_data[14];
frankvnk 0:c44f0314d6ec 152 } sockaddr;
frankvnk 0:c44f0314d6ec 153
frankvnk 0:c44f0314d6ec 154 typedef struct _sockaddr_in_t
frankvnk 0:c44f0314d6ec 155 {
frankvnk 0:c44f0314d6ec 156 short sin_family; // e.g. AF_INET
frankvnk 0:c44f0314d6ec 157 unsigned short sin_port; // e.g. htons(3490)
frankvnk 0:c44f0314d6ec 158 in_addr sin_addr; // see struct in_addr, below
frankvnk 0:c44f0314d6ec 159 char sin_zero[8]; // zero this if you want to
frankvnk 0:c44f0314d6ec 160 } sockaddr_in;
frankvnk 0:c44f0314d6ec 161
frankvnk 0:c44f0314d6ec 162 typedef unsigned long socklen_t;
frankvnk 0:c44f0314d6ec 163
frankvnk 0:c44f0314d6ec 164 // The fd_set member is required to be an array of longs.
frankvnk 0:c44f0314d6ec 165 typedef long int __fd_mask;
frankvnk 0:c44f0314d6ec 166
frankvnk 0:c44f0314d6ec 167 // It's easier to assume 8-bit bytes than to get CHAR_BIT.
frankvnk 0:c44f0314d6ec 168 #define __NFDBITS (8 * sizeof (__fd_mask))
frankvnk 0:c44f0314d6ec 169 #define __FDELT(d) ((d) / __NFDBITS)
frankvnk 0:c44f0314d6ec 170 #define __FDMASK(d) ((__fd_mask) 1 << ((d) % __NFDBITS))
frankvnk 0:c44f0314d6ec 171
frankvnk 0:c44f0314d6ec 172 // fd_set for select and pselect.
frankvnk 0:c44f0314d6ec 173 typedef struct
frankvnk 0:c44f0314d6ec 174 {
frankvnk 0:c44f0314d6ec 175 __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
frankvnk 0:c44f0314d6ec 176 #define __FDS_BITS(set) ((set)->fds_bits)
frankvnk 0:c44f0314d6ec 177 } fd_set;
frankvnk 0:c44f0314d6ec 178
frankvnk 0:c44f0314d6ec 179 // We don't use `memset' because this would require a prototype and
frankvnk 0:c44f0314d6ec 180 // the array isn't too big.
frankvnk 0:c44f0314d6ec 181 #define __FD_ZERO(set) \
frankvnk 0:c44f0314d6ec 182 do { \
frankvnk 0:c44f0314d6ec 183 unsigned int __i; \
frankvnk 0:c44f0314d6ec 184 fd_set *__arr = (set); \
frankvnk 0:c44f0314d6ec 185 for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) \
frankvnk 0:c44f0314d6ec 186 __FDS_BITS (__arr)[__i] = 0; \
frankvnk 0:c44f0314d6ec 187 } while (0)
frankvnk 0:c44f0314d6ec 188 #define __FD_SET(d, set) (__FDS_BITS (set)[__FDELT (d)] |= __FDMASK (d))
frankvnk 0:c44f0314d6ec 189 #define __FD_CLR(d, set) (__FDS_BITS (set)[__FDELT (d)] &= ~__FDMASK (d))
frankvnk 0:c44f0314d6ec 190 #define __FD_ISSET(d, set) (__FDS_BITS (set)[__FDELT (d)] & __FDMASK (d))
frankvnk 0:c44f0314d6ec 191
frankvnk 0:c44f0314d6ec 192 // Access macros for 'fd_set'.
frankvnk 0:c44f0314d6ec 193 #define FD_SET(fd, fdsetp) __FD_SET (fd, fdsetp)
frankvnk 0:c44f0314d6ec 194 #define FD_CLR(fd, fdsetp) __FD_CLR (fd, fdsetp)
frankvnk 0:c44f0314d6ec 195 #define FD_ISSET(fd, fdsetp) __FD_ISSET (fd, fdsetp)
frankvnk 0:c44f0314d6ec 196 #define FD_ZERO(fdsetp) __FD_ZERO (fdsetp)
frankvnk 0:c44f0314d6ec 197
frankvnk 0:c44f0314d6ec 198 //Use in case of Big Endian only
frankvnk 0:c44f0314d6ec 199
frankvnk 0:c44f0314d6ec 200 #define htonl(A) ((((unsigned long)(A) & 0xff000000) >> 24) | \
frankvnk 0:c44f0314d6ec 201 (((unsigned long)(A) & 0x00ff0000) >> 8) | \
frankvnk 0:c44f0314d6ec 202 (((unsigned long)(A) & 0x0000ff00) << 8) | \
frankvnk 0:c44f0314d6ec 203 (((unsigned long)(A) & 0x000000ff) << 24))
frankvnk 0:c44f0314d6ec 204
frankvnk 0:c44f0314d6ec 205 #define ntohl htonl
frankvnk 0:c44f0314d6ec 206
frankvnk 0:c44f0314d6ec 207 //Use in case of Big Endian only
frankvnk 0:c44f0314d6ec 208 #define htons(A) ((((unsigned long)(A) & 0xff00) >> 8) | \
frankvnk 0:c44f0314d6ec 209 (((unsigned long)(A) & 0x00ff) << 8))
frankvnk 0:c44f0314d6ec 210
frankvnk 0:c44f0314d6ec 211
frankvnk 0:c44f0314d6ec 212 #define ntohs htons
frankvnk 0:c44f0314d6ec 213
frankvnk 0:c44f0314d6ec 214 // mDNS port - 5353 mDNS multicast address - 224.0.0.251
frankvnk 4:d8255a5aad46 215 #define SET_mDNS_ADD(sockaddr) sockaddr.sa_data[0] = 0x14; \
frankvnk 4:d8255a5aad46 216 sockaddr.sa_data[1] = 0xe9; \
frankvnk 4:d8255a5aad46 217 sockaddr.sa_data[2] = 0xe0; \
frankvnk 4:d8255a5aad46 218 sockaddr.sa_data[3] = 0x0; \
frankvnk 4:d8255a5aad46 219 sockaddr.sa_data[4] = 0x0; \
frankvnk 4:d8255a5aad46 220 sockaddr.sa_data[5] = 0xfb;
frankvnk 0:c44f0314d6ec 221
frankvnk 0:c44f0314d6ec 222
frankvnk 0:c44f0314d6ec 223 //*****************************************************************************
frankvnk 0:c44f0314d6ec 224 //
frankvnk 0:c44f0314d6ec 225 // Prototypes for the APIs.
frankvnk 0:c44f0314d6ec 226 //
frankvnk 0:c44f0314d6ec 227 //*****************************************************************************
frankvnk 0:c44f0314d6ec 228
frankvnk 4:d8255a5aad46 229 /**
frankvnk 4:d8255a5aad46 230 * HostFlowControlConsumeBuff
frankvnk 4:d8255a5aad46 231 * if SEND_NON_BLOCKING is not defined - block until a free buffer is available,
frankvnk 4:d8255a5aad46 232 * otherwise return the status of the available buffers.
frankvnk 4:d8255a5aad46 233 * @param sd socket descriptor
frankvnk 4:d8255a5aad46 234 * @return 0 in case there are buffers available,
frankvnk 4:d8255a5aad46 235 * -1 in case of bad socket
frankvnk 4:d8255a5aad46 236 * -2 if there are no free buffers present (only when SEND_NON_BLOCKING is enabled)
frankvnk 4:d8255a5aad46 237 */
frankvnk 4:d8255a5aad46 238 int HostFlowControlConsumeBuff(int sd);
frankvnk 4:d8255a5aad46 239
frankvnk 4:d8255a5aad46 240 /**
frankvnk 4:d8255a5aad46 241 * create an endpoint for communication
frankvnk 4:d8255a5aad46 242 * The socket function creates a socket that is bound to a specific transport service provider.
frankvnk 4:d8255a5aad46 243 * This function is called by the application layer to obtain a socket handle.
frankvnk 4:d8255a5aad46 244 * @param domain selects the protocol family which will be used for
frankvnk 4:d8255a5aad46 245 * communication. On this version only AF_INET is supported
frankvnk 4:d8255a5aad46 246 * @param type specifies the communication semantics. On this version
frankvnk 4:d8255a5aad46 247 * only SOCK_STREAM, SOCK_DGRAM, SOCK_RAW are supported
frankvnk 4:d8255a5aad46 248 * @param protocol specifies a particular protocol to be used with the
frankvnk 4:d8255a5aad46 249 * socket IPPROTO_TCP, IPPROTO_UDP or IPPROTO_RAW are supported.
frankvnk 4:d8255a5aad46 250 * @return On success, socket handle that is used for consequent socket
frankvnk 4:d8255a5aad46 251 * operations. On error, -1 is returned.
frankvnk 4:d8255a5aad46 252 */
frankvnk 0:c44f0314d6ec 253 extern int socket(long domain, long type, long protocol);
frankvnk 0:c44f0314d6ec 254
frankvnk 4:d8255a5aad46 255 /**
frankvnk 4:d8255a5aad46 256 * The socket function closes a created socket.
frankvnk 4:d8255a5aad46 257 * @param sd socket handle.
frankvnk 4:d8255a5aad46 258 * @return On success, zero is returned. On error, -1 is returned.
frankvnk 4:d8255a5aad46 259 */
frankvnk 0:c44f0314d6ec 260 extern long closesocket(long sd);
frankvnk 0:c44f0314d6ec 261
frankvnk 4:d8255a5aad46 262 /**
frankvnk 4:d8255a5aad46 263 * accept a connection on a socket:
frankvnk 4:d8255a5aad46 264 * This function is used with connection-based socket types
frankvnk 4:d8255a5aad46 265 * (SOCK_STREAM). It extracts the first connection request on the
frankvnk 4:d8255a5aad46 266 * queue of pending connections, creates a new connected socket, and
frankvnk 4:d8255a5aad46 267 * returns a new file descriptor referring to that socket.
frankvnk 4:d8255a5aad46 268 * The newly created socket is not in the listening state.
frankvnk 4:d8255a5aad46 269 * The original socket sd is unaffected by this call.
frankvnk 4:d8255a5aad46 270 * The argument sd is a socket that has been created with socket(),
frankvnk 4:d8255a5aad46 271 * bound to a local address with bind(), and is listening for
frankvnk 4:d8255a5aad46 272 * connections after a listen(). The argument addr is a pointer
frankvnk 4:d8255a5aad46 273 * to a sockaddr structure. This structure is filled in with the
frankvnk 4:d8255a5aad46 274 * address of the peer socket, as known to the communications layer.
frankvnk 4:d8255a5aad46 275 * The exact format of the address returned addr is determined by the
frankvnk 4:d8255a5aad46 276 * socket's address family. The addrlen argument is a value-result
frankvnk 4:d8255a5aad46 277 * argument: it should initially contain the size of the structure
frankvnk 4:d8255a5aad46 278 * pointed to by addr, on return it will contain the actual
frankvnk 4:d8255a5aad46 279 * length (in bytes) of the address returned.
frankvnk 4:d8255a5aad46 280 * @param[in] sd socket descriptor (handle)
frankvnk 4:d8255a5aad46 281 * @param[out] addr the argument addr is a pointer to a sockaddr structure
frankvnk 4:d8255a5aad46 282 * This structure is filled in with the address of the
frankvnk 4:d8255a5aad46 283 * peer socket, as known to the communications layer.
frankvnk 4:d8255a5aad46 284 * determined. The exact format of the address returned
frankvnk 4:d8255a5aad46 285 * addr is by the socket's address sockaddr.
frankvnk 4:d8255a5aad46 286 * On this version only AF_INET is supported.
frankvnk 4:d8255a5aad46 287 * This argument returns in network order.
frankvnk 4:d8255a5aad46 288 * @param[out] addrlen the addrlen argument is a value-result argument:
frankvnk 4:d8255a5aad46 289 * it should initially contain the size of the structure
frankvnk 4:d8255a5aad46 290 * pointed to by addr.
frankvnk 4:d8255a5aad46 291 * @return For socket in blocking mode:
frankvnk 4:d8255a5aad46 292 * - On success, socket handle. on failure negative
frankvnk 4:d8255a5aad46 293 * For socket in non-blocking mode:
frankvnk 4:d8255a5aad46 294 * - On connection establishment, socket handle
frankvnk 4:d8255a5aad46 295 * - On connection pending, SOC_IN_PROGRESS (-2)
frankvnk 4:d8255a5aad46 296 * - On failure, SOC_ERROR (-1)
frankvnk 4:d8255a5aad46 297 * @sa socket ; bind ; listen
frankvnk 4:d8255a5aad46 298 */
frankvnk 0:c44f0314d6ec 299 extern long accept(long sd, sockaddr *addr, socklen_t *addrlen);
frankvnk 0:c44f0314d6ec 300
frankvnk 4:d8255a5aad46 301 /**
frankvnk 4:d8255a5aad46 302 * assign a name to a socket
frankvnk 4:d8255a5aad46 303 * This function gives the socket the local address addr.
frankvnk 4:d8255a5aad46 304 * addr is addrlen bytes long. Traditionally, this is called when a
frankvnk 4:d8255a5aad46 305 * socket is created with socket, it exists in a name space (address
frankvnk 4:d8255a5aad46 306 * family) but has no name assigned.
frankvnk 4:d8255a5aad46 307 * It is necessary to assign a local address before a SOCK_STREAM
frankvnk 4:d8255a5aad46 308 * socket may receive connections.
frankvnk 4:d8255a5aad46 309 * @param[in] sd socket descriptor (handle)
frankvnk 4:d8255a5aad46 310 * @param[out] addr specifies the destination address. On this version
frankvnk 4:d8255a5aad46 311 * only AF_INET is supported.
frankvnk 4:d8255a5aad46 312 * @param[out] addrlen contains the size of the structure pointed to by addr.
frankvnk 4:d8255a5aad46 313 * @return On success, zero is returned. On error, -1 is returned.
frankvnk 4:d8255a5aad46 314 * @sa socket ; accept ; listen
frankvnk 4:d8255a5aad46 315 */
frankvnk 0:c44f0314d6ec 316 extern long bind(long sd, const sockaddr *addr, long addrlen);
frankvnk 0:c44f0314d6ec 317
frankvnk 4:d8255a5aad46 318 /**
frankvnk 4:d8255a5aad46 319 * listen for connections on a socket
frankvnk 4:d8255a5aad46 320 * The willingness to accept incoming connections and a queue
frankvnk 4:d8255a5aad46 321 * limit for incoming connections are specified with listen(),
frankvnk 4:d8255a5aad46 322 * and then the connections are accepted with accept.
frankvnk 4:d8255a5aad46 323 * The listen() call applies only to sockets of type SOCK_STREAM
frankvnk 4:d8255a5aad46 324 * The backlog parameter defines the maximum length the queue of
frankvnk 4:d8255a5aad46 325 * pending connections may grow to.
frankvnk 4:d8255a5aad46 326 * @param[in] sd socket descriptor (handle)
frankvnk 4:d8255a5aad46 327 * @param[in] backlog specifies the listen queue depth. On this version
frankvnk 4:d8255a5aad46 328 * backlog is not supported.
frankvnk 4:d8255a5aad46 329 * @return On success, zero is returned. On error, -1 is returned.
frankvnk 4:d8255a5aad46 330 * @sa socket ; accept ; bind
frankvnk 4:d8255a5aad46 331 * @note On this version, backlog is not supported
frankvnk 4:d8255a5aad46 332 */
frankvnk 0:c44f0314d6ec 333 extern long listen(long sd, long backlog);
frankvnk 0:c44f0314d6ec 334
frankvnk 4:d8255a5aad46 335 /**
frankvnk 4:d8255a5aad46 336 * Get host IP by name. Obtain the IP Address of machine on network,
frankvnk 4:d8255a5aad46 337 * @param[in] hostname host name
frankvnk 4:d8255a5aad46 338 * @param[in] usNameLen name length
frankvnk 4:d8255a5aad46 339 * @param[out] out_ip_addr This parameter is filled in with host IP address.
frankvnk 4:d8255a5aad46 340 * In case that host name is not resolved,
frankvnk 4:d8255a5aad46 341 * out_ip_addr is zero.
frankvnk 4:d8255a5aad46 342 * @return On success, positive is returned. On error, negative is returned by its name.
frankvnk 4:d8255a5aad46 343 * @note On this version, only blocking mode is supported. Also note that
frankvnk 4:d8255a5aad46 344 * The function requires DNS server to be configured prior to its usage.
frankvnk 4:d8255a5aad46 345 */
frankvnk 0:c44f0314d6ec 346 #ifndef CC3000_TINY_DRIVER
frankvnk 0:c44f0314d6ec 347 extern int gethostbyname(char * hostname, unsigned short usNameLen, unsigned long* out_ip_addr);
frankvnk 0:c44f0314d6ec 348 #endif
frankvnk 0:c44f0314d6ec 349
frankvnk 0:c44f0314d6ec 350
frankvnk 4:d8255a5aad46 351 /**
frankvnk 4:d8255a5aad46 352 * initiate a connection on a socket
frankvnk 4:d8255a5aad46 353 * Function connects the socket referred to by the socket descriptor
frankvnk 4:d8255a5aad46 354 * sd, to the address specified by addr. The addrlen argument
frankvnk 4:d8255a5aad46 355 * specifies the size of addr. The format of the address in addr is
frankvnk 4:d8255a5aad46 356 * determined by the address space of the socket. If it is of type
frankvnk 4:d8255a5aad46 357 * SOCK_DGRAM, this call specifies the peer with which the socket is
frankvnk 4:d8255a5aad46 358 * to be associated; this address is that to which datagrams are to be
frankvnk 4:d8255a5aad46 359 * sent, and the only address from which datagrams are to be received.
frankvnk 4:d8255a5aad46 360 * If the socket is of type SOCK_STREAM, this call attempts to make a
frankvnk 4:d8255a5aad46 361 * connection to another socket. The other socket is specified by
frankvnk 4:d8255a5aad46 362 * address, which is an address in the communications space of the
frankvnk 4:d8255a5aad46 363 * socket. Note that the function implements only blocking behavior
frankvnk 4:d8255a5aad46 364 * thus the caller will be waiting either for the connection
frankvnk 4:d8255a5aad46 365 * establishment or for the connection establishment failure.
frankvnk 4:d8255a5aad46 366 * @param[in] sd socket descriptor (handle)
frankvnk 4:d8255a5aad46 367 * @param[in] addr specifies the destination addr. On this version
frankvnk 4:d8255a5aad46 368 * only AF_INET is supported.
frankvnk 4:d8255a5aad46 369 * @param[out] addrlen contains the size of the structure pointed to by addr
frankvnk 4:d8255a5aad46 370 * @return On success, zero is returned. On error, -1 is returned
frankvnk 4:d8255a5aad46 371 * @sa socket
frankvnk 4:d8255a5aad46 372 */
frankvnk 0:c44f0314d6ec 373 extern long connect(long sd, const sockaddr *addr, long addrlen);
frankvnk 0:c44f0314d6ec 374
frankvnk 4:d8255a5aad46 375 /**
frankvnk 4:d8255a5aad46 376 * Monitor socket activity
frankvnk 4:d8255a5aad46 377 * Select allow a program to monitor multiple file descriptors,
frankvnk 4:d8255a5aad46 378 * waiting until one or more of the file descriptors become
frankvnk 4:d8255a5aad46 379 *"ready" for some class of I/O operation
frankvnk 4:d8255a5aad46 380 * @param[in] nfds the highest-numbered file descriptor in any of the
frankvnk 4:d8255a5aad46 381 * three sets, plus 1.
frankvnk 4:d8255a5aad46 382 * @param[out] writesds socket descriptors list for write monitoring
frankvnk 4:d8255a5aad46 383 * @param[out] readsds socket descriptors list for read monitoring
frankvnk 4:d8255a5aad46 384 * @param[out] exceptsds socket descriptors list for exception monitoring
frankvnk 4:d8255a5aad46 385 * @param[in] timeout is an upper bound on the amount of time elapsed
frankvnk 4:d8255a5aad46 386 * before select() returns. Null means infinity
frankvnk 4:d8255a5aad46 387 * timeout. The minimum timeout is 5 milliseconds,
frankvnk 4:d8255a5aad46 388 * less than 5 milliseconds will be set
frankvnk 4:d8255a5aad46 389 * automatically to 5 milliseconds.
frankvnk 4:d8255a5aad46 390 * @return On success, select() returns the number of file descriptors
frankvnk 4:d8255a5aad46 391 * contained in the three returned descriptor sets (that is, the
frankvnk 4:d8255a5aad46 392 * total number of bits that are set in readfds, writefds,
frankvnk 4:d8255a5aad46 393 * exceptfds) which may be zero if the timeout expires before
frankvnk 4:d8255a5aad46 394 * anything interesting happens.
frankvnk 4:d8255a5aad46 395 * On error, -1 is returned.
frankvnk 4:d8255a5aad46 396 * *readsds - return the sockets on which Read request will
frankvnk 4:d8255a5aad46 397 * return without delay with valid data.
frankvnk 4:d8255a5aad46 398 * *writesds - return the sockets on which Write request
frankvnk 4:d8255a5aad46 399 * will return without delay.
frankvnk 4:d8255a5aad46 400 * *exceptsds - return the sockets which closed recently.
frankvnk 4:d8255a5aad46 401 * @Note If the timeout value set to less than 5ms it will automatically
frankvnk 4:d8255a5aad46 402 * change to 5ms to prevent overload of the system
frankvnk 4:d8255a5aad46 403 * @sa socket
frankvnk 4:d8255a5aad46 404 */
frankvnk 4:d8255a5aad46 405 extern int select(long nfds, fd_set *readsds, fd_set *writesds, fd_set *exceptsds, struct timeval *timeout);
frankvnk 0:c44f0314d6ec 406
frankvnk 4:d8255a5aad46 407 /**
frankvnk 4:d8255a5aad46 408 * set socket options
frankvnk 4:d8255a5aad46 409 * This function manipulate the options associated with a socket.
frankvnk 4:d8255a5aad46 410 * Options may exist at multiple protocol levels; they are always
frankvnk 4:d8255a5aad46 411 * present at the uppermost socket level.
frankvnk 4:d8255a5aad46 412 * When manipulating socket options the level at which the option
frankvnk 4:d8255a5aad46 413 * resides and the name of the option must be specified.
frankvnk 4:d8255a5aad46 414 * To manipulate options at the socket level, level is specified as
frankvnk 4:d8255a5aad46 415 * SOL_SOCKET. To manipulate options at any other level the protocol
frankvnk 4:d8255a5aad46 416 * number of the appropriate protocol controlling the option is
frankvnk 4:d8255a5aad46 417 * supplied. For example, to indicate that an option is to be
frankvnk 4:d8255a5aad46 418 * interpreted by the TCP protocol, level should be set to the
frankvnk 4:d8255a5aad46 419 * protocol number of TCP;
frankvnk 4:d8255a5aad46 420 * The parameters optval and optlen are used to access optval -
frankvnk 4:d8255a5aad46 421 * use for setsockopt(). For getsockopt() they identify a buffer
frankvnk 4:d8255a5aad46 422 * in which the value for the requested option(s) are to
frankvnk 4:d8255a5aad46 423 * be returned. For getsockopt(), optlen is a value-result
frankvnk 4:d8255a5aad46 424 * parameter, initially containing the size of the buffer
frankvnk 4:d8255a5aad46 425 * pointed to by option_value, and modified on return to
frankvnk 4:d8255a5aad46 426 * indicate the actual size of the value returned. If no option
frankvnk 4:d8255a5aad46 427 * value is to be supplied or returned, option_value may be NULL.
frankvnk 4:d8255a5aad46 428 * @param[in] sd socket handle
frankvnk 4:d8255a5aad46 429 * @param[in] level defines the protocol level for this option
frankvnk 4:d8255a5aad46 430 * @param[in] optname defines the option name to Interrogate
frankvnk 4:d8255a5aad46 431 * @param[in] optval specifies a value for the option
frankvnk 4:d8255a5aad46 432 * @param[in] optlen specifies the length of the option value
frankvnk 4:d8255a5aad46 433 * @return On success, zero is returned. On error, -1 is returned
frankvnk 4:d8255a5aad46 434 *
frankvnk 4:d8255a5aad46 435 * @Note On this version the following two socket options are enabled:
frankvnk 4:d8255a5aad46 436 * The only protocol level supported in this version is SOL_SOCKET (level).
frankvnk 4:d8255a5aad46 437 * 1. SOCKOPT_RECV_TIMEOUT (optname)
frankvnk 4:d8255a5aad46 438 * SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout in milliseconds.
frankvnk 4:d8255a5aad46 439 * In that case optval should be pointer to unsigned long.
frankvnk 4:d8255a5aad46 440 * 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on or off.
frankvnk 4:d8255a5aad46 441 * In that case optval should be SOCK_ON or SOCK_OFF (optval).
frankvnk 4:d8255a5aad46 442 * @sa getsockopt
frankvnk 4:d8255a5aad46 443 */
frankvnk 0:c44f0314d6ec 444 #ifndef CC3000_TINY_DRIVER
frankvnk 4:d8255a5aad46 445 extern int setsockopt(long sd, long level, long optname, const void *optval, socklen_t optlen);
frankvnk 0:c44f0314d6ec 446 #endif
frankvnk 0:c44f0314d6ec 447
frankvnk 4:d8255a5aad46 448 /**
frankvnk 4:d8255a5aad46 449 * get socket options
frankvnk 4:d8255a5aad46 450 * This function manipulate the options associated with a socket.
frankvnk 4:d8255a5aad46 451 * Options may exist at multiple protocol levels; they are always
frankvnk 4:d8255a5aad46 452 * present at the uppermost socket level.
frankvnk 4:d8255a5aad46 453 * When manipulating socket options the level at which the option
frankvnk 4:d8255a5aad46 454 * resides and the name of the option must be specified.
frankvnk 4:d8255a5aad46 455 * To manipulate options at the socket level, level is specified as
frankvnk 4:d8255a5aad46 456 * SOL_SOCKET. To manipulate options at any other level the protocol
frankvnk 4:d8255a5aad46 457 * number of the appropriate protocol controlling the option is
frankvnk 4:d8255a5aad46 458 * supplied. For example, to indicate that an option is to be
frankvnk 4:d8255a5aad46 459 * interpreted by the TCP protocol, level should be set to the
frankvnk 4:d8255a5aad46 460 * protocol number of TCP;
frankvnk 4:d8255a5aad46 461 * The parameters optval and optlen are used to access optval -
frankvnk 4:d8255a5aad46 462 * use for setsockopt(). For getsockopt() they identify a buffer
frankvnk 4:d8255a5aad46 463 * in which the value for the requested option(s) are to
frankvnk 4:d8255a5aad46 464 * be returned. For getsockopt(), optlen is a value-result
frankvnk 4:d8255a5aad46 465 * parameter, initially containing the size of the buffer
frankvnk 4:d8255a5aad46 466 * pointed to by option_value, and modified on return to
frankvnk 4:d8255a5aad46 467 * indicate the actual size of the value returned. If no option
frankvnk 4:d8255a5aad46 468 * value is to be supplied or returned, option_value may be NULL.
frankvnk 4:d8255a5aad46 469 * @param[in] sd socket handle
frankvnk 4:d8255a5aad46 470 * @param[in] level defines the protocol level for this option
frankvnk 4:d8255a5aad46 471 * @param[in] optname defines the option name to Interrogate
frankvnk 4:d8255a5aad46 472 * @param[out] optval specifies a value for the option
frankvnk 4:d8255a5aad46 473 * @param[out] optlen specifies the length of the option value
frankvnk 4:d8255a5aad46 474 * @return On success, zero is returned. On error, -1 is returned
frankvnk 4:d8255a5aad46 475 *
frankvnk 4:d8255a5aad46 476 * @Note On this version the following two socket options are enabled:
frankvnk 4:d8255a5aad46 477 * The only protocol level supported in this version is SOL_SOCKET (level).
frankvnk 4:d8255a5aad46 478 * 1. SOCKOPT_RECV_TIMEOUT (optname)
frankvnk 4:d8255a5aad46 479 * SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout in milliseconds.
frankvnk 4:d8255a5aad46 480 * In that case optval should be pointer to unsigned long.
frankvnk 4:d8255a5aad46 481 * 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on or off.
frankvnk 4:d8255a5aad46 482 * In that case optval should be SOCK_ON or SOCK_OFF (optval).
frankvnk 4:d8255a5aad46 483 * @sa setsockopt
frankvnk 4:d8255a5aad46 484 */
frankvnk 4:d8255a5aad46 485 extern int getsockopt(long sd, long level, long optname, void *optval, socklen_t *optlen);
frankvnk 4:d8255a5aad46 486
frankvnk 4:d8255a5aad46 487 /**
frankvnk 4:d8255a5aad46 488 * Read data from socket (simple_link_recv)
frankvnk 4:d8255a5aad46 489 * Return the length of the message on successful completion.
frankvnk 4:d8255a5aad46 490 * If a message is too long to fit in the supplied buffer, excess bytes may
frankvnk 4:d8255a5aad46 491 * be discarded depending on the type of socket the message is received from.
frankvnk 4:d8255a5aad46 492 * @param sd socket handle
frankvnk 4:d8255a5aad46 493 * @param buf read buffer
frankvnk 4:d8255a5aad46 494 * @param len buffer length
frankvnk 4:d8255a5aad46 495 * @param flags indicates blocking or non-blocking operation
frankvnk 4:d8255a5aad46 496 * @param from pointer to an address structure indicating source address
frankvnk 4:d8255a5aad46 497 * @param fromlen source address structure size
frankvnk 4:d8255a5aad46 498 * @return Return the number of bytes received, or -1 if an error occurred
frankvnk 4:d8255a5aad46 499 */
frankvnk 4:d8255a5aad46 500 int simple_link_recv(long sd, void *buf, long len, long flags, sockaddr *from, socklen_t *fromlen, long opcode);
frankvnk 4:d8255a5aad46 501
frankvnk 4:d8255a5aad46 502 /**
frankvnk 4:d8255a5aad46 503 * Receive a message from a connection-mode socket
frankvnk 4:d8255a5aad46 504 * @param[in] sd socket handle
frankvnk 4:d8255a5aad46 505 * @param[out] buf Points to the buffer where the message should be stored
frankvnk 4:d8255a5aad46 506 * @param[in] len Specifies the length in bytes of the buffer pointed to
frankvnk 4:d8255a5aad46 507 * by the buffer argument.
frankvnk 4:d8255a5aad46 508 * @param[in] flags Specifies the type of message reception.
frankvnk 4:d8255a5aad46 509 * On this version, this parameter is not supported.
frankvnk 4:d8255a5aad46 510 * @return Return the number of bytes received, or -1 if an error occurred
frankvnk 4:d8255a5aad46 511 * @sa recvfrom
frankvnk 4:d8255a5aad46 512 * @Note On this version, only blocking mode is supported.
frankvnk 4:d8255a5aad46 513 */
frankvnk 0:c44f0314d6ec 514 extern int recv(long sd, void *buf, long len, long flags);
frankvnk 0:c44f0314d6ec 515
frankvnk 4:d8255a5aad46 516 /**
frankvnk 4:d8255a5aad46 517 * read data from socket (recvfrom)
frankvnk 4:d8255a5aad46 518 * Receives a message from a connection-mode or connectionless-mode socket.
frankvnk 4:d8255a5aad46 519 * Note that raw sockets are not supported.
frankvnk 4:d8255a5aad46 520 * @param[in] sd socket handle
frankvnk 4:d8255a5aad46 521 * @param[out] buf Points to the buffer where the message should be stored
frankvnk 4:d8255a5aad46 522 * @param[in] len Specifies the length in bytes of the buffer pointed to
frankvnk 4:d8255a5aad46 523 * by the buffer argument.
frankvnk 4:d8255a5aad46 524 * @param[in] flags Specifies the type of message reception.
frankvnk 4:d8255a5aad46 525 * On this version, this parameter is not supported.
frankvnk 4:d8255a5aad46 526 * @param[in] from pointer to an address structure indicating the source
frankvnk 4:d8255a5aad46 527 * address: sockaddr. On this version only AF_INET is
frankvnk 4:d8255a5aad46 528 * supported.
frankvnk 4:d8255a5aad46 529 * @param[in] fromlen source address structure size
frankvnk 4:d8255a5aad46 530 * @return Return the number of bytes received, or -1 if an error occurred
frankvnk 4:d8255a5aad46 531 * @sa recv
frankvnk 4:d8255a5aad46 532 * @Note On this version, only blocking mode is supported.
frankvnk 4:d8255a5aad46 533 */
frankvnk 4:d8255a5aad46 534 extern int recvfrom(long sd, void *buf, long len, long flags, sockaddr *from, socklen_t *fromlen);
frankvnk 0:c44f0314d6ec 535
frankvnk 4:d8255a5aad46 536 /**
frankvnk 4:d8255a5aad46 537 * Transmit a message to another socket (simple_link_send)
frankvnk 4:d8255a5aad46 538 * @param sd socket handle
frankvnk 4:d8255a5aad46 539 * @param buf write buffer
frankvnk 4:d8255a5aad46 540 * @param len buffer length
frankvnk 4:d8255a5aad46 541 * @param flags On this version, this parameter is not supported
frankvnk 4:d8255a5aad46 542 * @param to pointer to an address structure indicating destination address
frankvnk 4:d8255a5aad46 543 * @param tolen destination address structure size
frankvnk 4:d8255a5aad46 544 * @return Return the number of bytes transmitted, or -1 if an error
frankvnk 4:d8255a5aad46 545 * occurred, or -2 in case there are no free buffers available
frankvnk 4:d8255a5aad46 546 * (only when SEND_NON_BLOCKING is enabled)
frankvnk 4:d8255a5aad46 547 */
frankvnk 4:d8255a5aad46 548 int simple_link_send(long sd, const void *buf, long len, long flags, const sockaddr *to, long tolen, long opcode);
frankvnk 0:c44f0314d6ec 549
frankvnk 4:d8255a5aad46 550 /**
frankvnk 4:d8255a5aad46 551 * Transmit a message to another socket (send).
frankvnk 4:d8255a5aad46 552 * @param sd socket handle
frankvnk 4:d8255a5aad46 553 * @param buf Points to a buffer containing the message to be sent
frankvnk 4:d8255a5aad46 554 * @param len message size in bytes
frankvnk 4:d8255a5aad46 555 * @param flags On this version, this parameter is not supported
frankvnk 4:d8255a5aad46 556 * @return Return the number of bytes transmitted, or -1 if an
frankvnk 4:d8255a5aad46 557 * error occurred
frankvnk 4:d8255a5aad46 558 * @Note On this version, only blocking mode is supported.
frankvnk 4:d8255a5aad46 559 * @sa sendto
frankvnk 4:d8255a5aad46 560 */
frankvnk 0:c44f0314d6ec 561 extern int send(long sd, const void *buf, long len, long flags);
frankvnk 0:c44f0314d6ec 562
frankvnk 4:d8255a5aad46 563 /**
frankvnk 4:d8255a5aad46 564 * Transmit a message to another socket (sendto).
frankvnk 4:d8255a5aad46 565 * @param sd socket handle
frankvnk 4:d8255a5aad46 566 * @param buf Points to a buffer containing the message to be sent
frankvnk 4:d8255a5aad46 567 * @param len message size in bytes
frankvnk 4:d8255a5aad46 568 * @param flags On this version, this parameter is not supported
frankvnk 4:d8255a5aad46 569 * @param to pointer to an address structure indicating the destination
frankvnk 4:d8255a5aad46 570 * address: sockaddr. On this version only AF_INET is
frankvnk 4:d8255a5aad46 571 * supported.
frankvnk 4:d8255a5aad46 572 * @param tolen destination address structure size
frankvnk 4:d8255a5aad46 573 * @return Return the number of bytes transmitted, or -1 if an error occurred
frankvnk 4:d8255a5aad46 574 * @Note On this version, only blocking mode is supported.
frankvnk 4:d8255a5aad46 575 * @sa send
frankvnk 4:d8255a5aad46 576 */
frankvnk 4:d8255a5aad46 577 extern int sendto(long sd, const void *buf, long len, long flags, const sockaddr *to, socklen_t tolen);
frankvnk 0:c44f0314d6ec 578
frankvnk 4:d8255a5aad46 579 /**
frankvnk 4:d8255a5aad46 580 * Set CC3000 in mDNS advertiser mode in order to advertise itself.
frankvnk 4:d8255a5aad46 581 * @param[in] mdnsEnabled flag to enable/disable the mDNS feature
frankvnk 4:d8255a5aad46 582 * @param[in] deviceServiceName Service name as part of the published
frankvnk 4:d8255a5aad46 583 * canonical domain name
frankvnk 4:d8255a5aad46 584 * @param[in] deviceServiceNameLength Length of the service name
frankvnk 4:d8255a5aad46 585 * @return On success, zero is returned, return SOC_ERROR if socket was not
frankvnk 4:d8255a5aad46 586 * opened successfully, or if an error occurred.
frankvnk 4:d8255a5aad46 587 */
frankvnk 0:c44f0314d6ec 588 extern int mdnsAdvertiser(unsigned short mdnsEnabled, char * deviceServiceName, unsigned short deviceServiceNameLength);
frankvnk 0:c44f0314d6ec 589
frankvnk 0:c44f0314d6ec 590
frankvnk 0:c44f0314d6ec 591 #ifdef __cplusplus
frankvnk 0:c44f0314d6ec 592 }
frankvnk 0:c44f0314d6ec 593 #endif // __cplusplus
frankvnk 0:c44f0314d6ec 594
frankvnk 0:c44f0314d6ec 595 #endif // __SOCKET_H__
frankvnk 0:c44f0314d6ec 596
frankvnk 0:c44f0314d6ec 597