TI's CC3100 host driver and demo. Experimental and a work in progress.

Dependencies:   mbed

Committer:
dflet
Date:
Wed Nov 19 23:04:04 2014 +0000
Revision:
2:a3e52cf86086
Parent:
0:bbe98578d4c0
Added more boards!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:bbe98578d4c0 1 /*
dflet 0:bbe98578d4c0 2 * socket.h - CC31xx/CC32xx Host Driver Implementation
dflet 0:bbe98578d4c0 3 *
dflet 0:bbe98578d4c0 4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:bbe98578d4c0 5 *
dflet 0:bbe98578d4c0 6 *
dflet 0:bbe98578d4c0 7 * Redistribution and use in source and binary forms, with or without
dflet 0:bbe98578d4c0 8 * modification, are permitted provided that the following conditions
dflet 0:bbe98578d4c0 9 * are met:
dflet 0:bbe98578d4c0 10 *
dflet 0:bbe98578d4c0 11 * Redistributions of source code must retain the above copyright
dflet 0:bbe98578d4c0 12 * notice, this list of conditions and the following disclaimer.
dflet 0:bbe98578d4c0 13 *
dflet 0:bbe98578d4c0 14 * Redistributions in binary form must reproduce the above copyright
dflet 0:bbe98578d4c0 15 * notice, this list of conditions and the following disclaimer in the
dflet 0:bbe98578d4c0 16 * documentation and/or other materials provided with the
dflet 0:bbe98578d4c0 17 * distribution.
dflet 0:bbe98578d4c0 18 *
dflet 0:bbe98578d4c0 19 * Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:bbe98578d4c0 20 * its contributors may be used to endorse or promote products derived
dflet 0:bbe98578d4c0 21 * from this software without specific prior written permission.
dflet 0:bbe98578d4c0 22 *
dflet 0:bbe98578d4c0 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:bbe98578d4c0 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:bbe98578d4c0 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:bbe98578d4c0 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:bbe98578d4c0 27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:bbe98578d4c0 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:bbe98578d4c0 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:bbe98578d4c0 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:bbe98578d4c0 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:bbe98578d4c0 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:bbe98578d4c0 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:bbe98578d4c0 34 *
dflet 0:bbe98578d4c0 35 */
dflet 0:bbe98578d4c0 36
dflet 0:bbe98578d4c0 37 #ifndef __SL_SOCKET_H__
dflet 0:bbe98578d4c0 38 #define __SL_SOCKET_H__
dflet 0:bbe98578d4c0 39
dflet 0:bbe98578d4c0 40 /*****************************************************************************/
dflet 0:bbe98578d4c0 41 /* Include files */
dflet 0:bbe98578d4c0 42 /*****************************************************************************/
dflet 0:bbe98578d4c0 43 #include "cc3100_simplelink.h"
dflet 0:bbe98578d4c0 44
dflet 0:bbe98578d4c0 45
dflet 0:bbe98578d4c0 46 #ifdef __cplusplus
dflet 0:bbe98578d4c0 47 extern "C" {
dflet 0:bbe98578d4c0 48 #endif
dflet 0:bbe98578d4c0 49
dflet 0:bbe98578d4c0 50 /*!
dflet 0:bbe98578d4c0 51
dflet 0:bbe98578d4c0 52 \addtogroup socket
dflet 0:bbe98578d4c0 53 @{
dflet 0:bbe98578d4c0 54
dflet 0:bbe98578d4c0 55 */
dflet 0:bbe98578d4c0 56
dflet 0:bbe98578d4c0 57 /*****************************************************************************/
dflet 0:bbe98578d4c0 58 /* Macro declarations */
dflet 0:bbe98578d4c0 59 /*****************************************************************************/
dflet 0:bbe98578d4c0 60
dflet 0:bbe98578d4c0 61 #define SL_FD_SETSIZE SL_MAX_SOCKETS /* Number of sockets to select on - same is max sockets! */
dflet 0:bbe98578d4c0 62 #define BSD_SOCKET_ID_MASK (0x0F) /* Index using the LBS 4 bits for socket id 0-7 */
dflet 0:bbe98578d4c0 63 /* Define some BSD protocol constants. */
dflet 0:bbe98578d4c0 64 #define SL_SOCK_STREAM (1) /* TCP Socket */
dflet 0:bbe98578d4c0 65 #define SL_SOCK_DGRAM (2) /* UDP Socket */
dflet 0:bbe98578d4c0 66 #define SL_SOCK_RAW (3) /* Raw socket */
dflet 0:bbe98578d4c0 67 #define SL_IPPROTO_TCP (6) /* TCP Raw Socket */
dflet 0:bbe98578d4c0 68 #define SL_IPPROTO_UDP (17) /* UDP Raw Socket */
dflet 0:bbe98578d4c0 69 #define SL_IPPROTO_RAW (255) /* Raw Socket */
dflet 0:bbe98578d4c0 70 #define SL_SEC_SOCKET (100) /* Secured Socket Layer (SSL,TLS) */
dflet 0:bbe98578d4c0 71
dflet 0:bbe98578d4c0 72 /* Address families. */
dflet 0:bbe98578d4c0 73 #define SL_AF_INET (2) /* IPv4 socket (UDP, TCP, etc) */
dflet 0:bbe98578d4c0 74 #define SL_AF_INET6 (3) /* IPv6 socket (UDP, TCP, etc) */
dflet 0:bbe98578d4c0 75 #define SL_AF_INET6_EUI_48 (9)
dflet 0:bbe98578d4c0 76 #define SL_AF_RF (6) /* data include RF parameter, All layer by user (Wifi could be disconnected) */
dflet 0:bbe98578d4c0 77 #define SL_AF_PACKET (17)
dflet 0:bbe98578d4c0 78 /* Protocol families, same as address families. */
dflet 0:bbe98578d4c0 79 #define SL_PF_INET AF_INET
dflet 0:bbe98578d4c0 80 #define SL_PF_INET6 AF_INET6
dflet 0:bbe98578d4c0 81 #define SL_INADDR_ANY (0) /* bind any address */
dflet 0:bbe98578d4c0 82
dflet 0:bbe98578d4c0 83 /* error codes */
dflet 0:bbe98578d4c0 84 #define SL_SOC_ERROR (-1) /* Failure. */
dflet 0:bbe98578d4c0 85 #define SL_SOC_OK ( 0) /* Success. */
dflet 0:bbe98578d4c0 86 #define SL_INEXE (-8) /* socket command in execution */
dflet 0:bbe98578d4c0 87 #define SL_EBADF (-9) /* Bad file number */
dflet 0:bbe98578d4c0 88 #define SL_ENSOCK (-10) /* The system limit on the total number of open socket, has been reached */
dflet 0:bbe98578d4c0 89 #define SL_EAGAIN (-11) /* Try again */
dflet 0:bbe98578d4c0 90 #define SL_EWOULDBLOCK SL_EAGAIN
dflet 0:bbe98578d4c0 91 #define SL_ENOMEM (-12) /* Out of memory */
dflet 0:bbe98578d4c0 92 #define SL_EACCES (-13) /* Permission denied */
dflet 0:bbe98578d4c0 93 #define SL_EFAULT (-14) /* Bad address */
dflet 0:bbe98578d4c0 94 #define SL_ECLOSE (-15) /* close socket operation failed to transmit all queued packets */
dflet 0:bbe98578d4c0 95 #define SL_EALREADY_ENABLED (-21) /* Transceiver - Transceiver already ON. there could be only one */
dflet 0:bbe98578d4c0 96 #define SL_EINVAL (-22) /* Invalid argument */
dflet 0:bbe98578d4c0 97 #define SL_EAUTO_CONNECT_OR_CONNECTING (-69) /* Transceiver - During connection, connected or auto mode started */
dflet 0:bbe98578d4c0 98 #define SL_CONNECTION_PENDING (-72) /* Transceiver - Device is connected, disconnect first to open transceiver */
dflet 0:bbe98578d4c0 99 #define SL_EUNSUPPORTED_ROLE (-86) /* Transceiver - Trying to start when WLAN role is AP or P2P GO */
dflet 0:bbe98578d4c0 100 #define SL_EDESTADDRREQ (-89) /* Destination address required */
dflet 0:bbe98578d4c0 101 #define SL_EPROTOTYPE (-91) /* Protocol wrong type for socket */
dflet 0:bbe98578d4c0 102 #define SL_ENOPROTOOPT (-92) /* Protocol not available */
dflet 0:bbe98578d4c0 103 #define SL_EPROTONOSUPPORT (-93) /* Protocol not supported */
dflet 0:bbe98578d4c0 104 #define SL_ESOCKTNOSUPPORT (-94) /* Socket type not supported */
dflet 0:bbe98578d4c0 105 #define SL_EOPNOTSUPP (-95) /* Operation not supported on transport endpoint */
dflet 0:bbe98578d4c0 106 #define SL_EAFNOSUPPORT (-97) /* Address family not supported by protocol */
dflet 0:bbe98578d4c0 107 #define SL_EADDRINUSE (-98) /* Address already in use */
dflet 0:bbe98578d4c0 108 #define SL_EADDRNOTAVAIL (-99) /* Cannot assign requested address */
dflet 0:bbe98578d4c0 109 #define SL_ENETUNREACH (-101) /* Network is unreachable */
dflet 0:bbe98578d4c0 110 #define SL_ENOBUFS (-105) /* No buffer space available */
dflet 0:bbe98578d4c0 111 #define SL_EOBUFF SL_ENOBUFS
dflet 0:bbe98578d4c0 112 #define SL_EISCONN (-106) /* Transport endpoint is already connected */
dflet 0:bbe98578d4c0 113 #define SL_ENOTCONN (-107) /* Transport endpoint is not connected */
dflet 0:bbe98578d4c0 114 #define SL_ETIMEDOUT (-110) /* Connection timed out */
dflet 0:bbe98578d4c0 115 #define SL_ECONNREFUSED (-111) /* Connection refused */
dflet 0:bbe98578d4c0 116 #define SL_EALREADY (-114) /* Non blocking connect in progress, try again */
dflet 0:bbe98578d4c0 117
dflet 0:bbe98578d4c0 118 #define SL_ESEC_RSA_WRONG_TYPE_E (-130) /* RSA wrong block type for RSA function */
dflet 0:bbe98578d4c0 119 #define SL_ESEC_RSA_BUFFER_E (-131) /* RSA buffer error, output too small or */
dflet 0:bbe98578d4c0 120 #define SL_ESEC_BUFFER_E (-132) /* output buffer too small or input too large */
dflet 0:bbe98578d4c0 121 #define SL_ESEC_ALGO_ID_E (-133) /* setting algo id error */
dflet 0:bbe98578d4c0 122 #define SL_ESEC_PUBLIC_KEY_E (-134) /* setting public key error */
dflet 0:bbe98578d4c0 123 #define SL_ESEC_DATE_E (-135) /* setting date validity error */
dflet 0:bbe98578d4c0 124 #define SL_ESEC_SUBJECT_E (-136) /* setting subject name error */
dflet 0:bbe98578d4c0 125 #define SL_ESEC_ISSUER_E (-137) /* setting issuer name error */
dflet 0:bbe98578d4c0 126 #define SL_ESEC_CA_TRUE_E (-138) /* setting CA basic constraint true error */
dflet 0:bbe98578d4c0 127 #define SL_ESEC_EXTENSIONS_E (-139) /* setting extensions error */
dflet 0:bbe98578d4c0 128 #define SL_ESEC_ASN_PARSE_E (-140) /* ASN parsing error, invalid input */
dflet 0:bbe98578d4c0 129 #define SL_ESEC_ASN_VERSION_E (-141) /* ASN version error, invalid number */
dflet 0:bbe98578d4c0 130 #define SL_ESEC_ASN_GETINT_E (-142) /* ASN get big _i16 error, invalid data */
dflet 0:bbe98578d4c0 131 #define SL_ESEC_ASN_RSA_KEY_E (-143) /* ASN key init error, invalid input */
dflet 0:bbe98578d4c0 132 #define SL_ESEC_ASN_OBJECT_ID_E (-144) /* ASN object id error, invalid id */
dflet 0:bbe98578d4c0 133 #define SL_ESEC_ASN_TAG_NULL_E (-145) /* ASN tag error, not null */
dflet 0:bbe98578d4c0 134 #define SL_ESEC_ASN_EXPECT_0_E (-146) /* ASN expect error, not zero */
dflet 0:bbe98578d4c0 135 #define SL_ESEC_ASN_BITSTR_E (-147) /* ASN bit string error, wrong id */
dflet 0:bbe98578d4c0 136 #define SL_ESEC_ASN_UNKNOWN_OID_E (-148) /* ASN oid error, unknown sum id */
dflet 0:bbe98578d4c0 137 #define SL_ESEC_ASN_DATE_SZ_E (-149) /* ASN date error, bad size */
dflet 0:bbe98578d4c0 138 #define SL_ESEC_ASN_BEFORE_DATE_E (-150) /* ASN date error, current date before */
dflet 0:bbe98578d4c0 139 #define SL_ESEC_ASN_AFTER_DATE_E (-151) /* ASN date error, current date after */
dflet 0:bbe98578d4c0 140 #define SL_ESEC_ASN_SIG_OID_E (-152) /* ASN signature error, mismatched oid */
dflet 0:bbe98578d4c0 141 #define SL_ESEC_ASN_TIME_E (-153) /* ASN time error, unknown time type */
dflet 0:bbe98578d4c0 142 #define SL_ESEC_ASN_INPUT_E (-154) /* ASN input error, not enough data */
dflet 0:bbe98578d4c0 143 #define SL_ESEC_ASN_SIG_CONFIRM_E (-155) /* ASN sig error, confirm failure */
dflet 0:bbe98578d4c0 144 #define SL_ESEC_ASN_SIG_HASH_E (-156) /* ASN sig error, unsupported hash type */
dflet 0:bbe98578d4c0 145 #define SL_ESEC_ASN_SIG_KEY_E (-157) /* ASN sig error, unsupported key type */
dflet 0:bbe98578d4c0 146 #define SL_ESEC_ASN_DH_KEY_E (-158) /* ASN key init error, invalid input */
dflet 0:bbe98578d4c0 147 #define SL_ESEC_ASN_NTRU_KEY_E (-159) /* ASN ntru key decode error, invalid input */
dflet 0:bbe98578d4c0 148 #define SL_ESEC_ECC_BAD_ARG_E (-170) /* ECC input argument of wrong type */
dflet 0:bbe98578d4c0 149 #define SL_ESEC_ASN_ECC_KEY_E (-171) /* ASN ECC bad input */
dflet 0:bbe98578d4c0 150 #define SL_ESEC_ECC_CURVE_OID_E (-172) /* Unsupported ECC OID curve type */
dflet 0:bbe98578d4c0 151 #define SL_ESEC_BAD_FUNC_ARG (-173) /* Bad function argument provided */
dflet 0:bbe98578d4c0 152 #define SL_ESEC_NOT_COMPILED_IN (-174) /* Feature not compiled in */
dflet 0:bbe98578d4c0 153 #define SL_ESEC_UNICODE_SIZE_E (-175) /* Unicode password too big */
dflet 0:bbe98578d4c0 154 #define SL_ESEC_NO_PASSWORD (-176) /* no password provided by user */
dflet 0:bbe98578d4c0 155 #define SL_ESEC_ALT_NAME_E (-177) /* alt name size problem, too big */
dflet 0:bbe98578d4c0 156 #define SL_ESEC_AES_GCM_AUTH_E (-180) /* AES-GCM Authentication check failure */
dflet 0:bbe98578d4c0 157 #define SL_ESEC_AES_CCM_AUTH_E (-181) /* AES-CCM Authentication check failure */
dflet 0:bbe98578d4c0 158 /* ssl tls security start with -300 offset */
dflet 0:bbe98578d4c0 159 #define SL_ESEC_CLOSE_NOTIFY (-300) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 160 #define SL_ESEC_UNEXPECTED_MESSAGE (-310) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 161 #define SL_ESEC_BAD_RECORD_MAC (-320) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 162 #define SL_ESEC_DECRYPTION_FAILED (-321) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 163 #define SL_ESEC_RECORD_OVERFLOW (-322) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 164 #define SL_ESEC_DECOMPRESSION_FAILURE (-330) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 165 #define SL_ESEC_HANDSHAKE_FAILURE (-340) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 166 #define SL_ESEC_NO_CERTIFICATE (-341) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 167 #define SL_ESEC_BAD_CERTIFICATE (-342) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 168 #define SL_ESEC_UNSUPPORTED_CERTIFICATE (-343) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 169 #define SL_ESEC_CERTIFICATE_REVOKED (-344) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 170 #define SL_ESEC_CERTIFICATE_EXPIRED (-345) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 171 #define SL_ESEC_CERTIFICATE_UNKNOWN (-346) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 172 #define SL_ESEC_ILLEGAL_PARAMETER (-347) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 173 #define SL_ESEC_UNKNOWN_CA (-348) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 174 #define SL_ESEC_ACCESS_DENIED (-349) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 175 #define SL_ESEC_DECODE_ERROR (-350) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 176 #define SL_ESEC_DECRYPT_ERROR (-351) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 177 #define SL_ESEC_EXPORT_RESTRICTION (-360) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 178 #define SL_ESEC_PROTOCOL_VERSION (-370) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 179 #define SL_ESEC_INSUFFICIENT_SECURITY (-371) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 180 #define SL_ESEC_INTERNAL_ERROR (-380) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 181 #define SL_ESEC_USER_CANCELLED (-390) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 182 #define SL_ESEC_NO_RENEGOTIATION (-400) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 183 #define SL_ESEC_UNSUPPORTED_EXTENSION (-410) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 184 #define SL_ESEC_CERTIFICATE_UNOBTAINABLE (-411) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 185 #define SL_ESEC_UNRECOGNIZED_NAME (-412) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 186 #define SL_ESEC_BAD_CERTIFICATE_STATUS_RESPONSE (-413) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 187 #define SL_ESEC_BAD_CERTIFICATE_HASH_VALUE (-414) /* ssl/tls alerts */
dflet 0:bbe98578d4c0 188 /* propierty secure */
dflet 0:bbe98578d4c0 189 #define SL_ESECGENERAL (-450) /* error secure level general error */
dflet 0:bbe98578d4c0 190 #define SL_ESECDECRYPT (-451) /* error secure level, decrypt recv packet fail */
dflet 0:bbe98578d4c0 191 #define SL_ESECCLOSED (-452) /* secure layrer is closed by other size , tcp is still connected */
dflet 0:bbe98578d4c0 192 #define SL_ESECSNOVERIFY (-453) /* Connected without server verification */
dflet 0:bbe98578d4c0 193 #define SL_ESECNOCAFILE (-454) /* error secure level CA file not found*/
dflet 0:bbe98578d4c0 194 #define SL_ESECMEMORY (-455) /* error secure level No memory space available */
dflet 0:bbe98578d4c0 195 #define SL_ESECBADCAFILE (-456) /* error secure level bad CA file */
dflet 0:bbe98578d4c0 196 #define SL_ESECBADCERTFILE (-457) /* error secure level bad Certificate file */
dflet 0:bbe98578d4c0 197 #define SL_ESECBADPRIVATEFILE (-458) /* error secure level bad private file */
dflet 0:bbe98578d4c0 198 #define SL_ESECBADDHFILE (-459) /* error secure level bad DH file */
dflet 0:bbe98578d4c0 199 #define SL_ESECT00MANYSSLOPENED (-460) /* MAX SSL Sockets are opened */
dflet 0:bbe98578d4c0 200 #define SL_ESECDATEERROR (-461) /* connected with certificate date verification error */
dflet 0:bbe98578d4c0 201 #define SL_ESECHANDSHAKETIMEDOUT (-462) /* connection timed out due to handshake time */
dflet 0:bbe98578d4c0 202
dflet 0:bbe98578d4c0 203 /* end error codes */
dflet 0:bbe98578d4c0 204
dflet 0:bbe98578d4c0 205 /* Max payload size by protocol */
dflet 0:bbe98578d4c0 206 #define SL_SOCKET_PAYLOAD_TYPE_MASK (0xF0) /*4 bits type, 4 bits sockets id */
dflet 0:bbe98578d4c0 207 #define SL_SOCKET_PAYLOAD_TYPE_UDP_IPV4 (0x00) /* 1472 bytes */
dflet 0:bbe98578d4c0 208 #define SL_SOCKET_PAYLOAD_TYPE_TCP_IPV4 (0x10) /* 1460 bytes */
dflet 0:bbe98578d4c0 209 #define SL_SOCKET_PAYLOAD_TYPE_UDP_IPV6 (0x20) /* 1452 bytes */
dflet 0:bbe98578d4c0 210 #define SL_SOCKET_PAYLOAD_TYPE_TCP_IPV6 (0x30) /* 1440 bytes */
dflet 0:bbe98578d4c0 211 #define SL_SOCKET_PAYLOAD_TYPE_UDP_IPV4_SECURE (0x40) /* */
dflet 0:bbe98578d4c0 212 #define SL_SOCKET_PAYLOAD_TYPE_TCP_IPV4_SECURE (0x50) /* */
dflet 0:bbe98578d4c0 213 #define SL_SOCKET_PAYLOAD_TYPE_UDP_IPV6_SECURE (0x60) /* */
dflet 0:bbe98578d4c0 214 #define SL_SOCKET_PAYLOAD_TYPE_TCP_IPV6_SECURE (0x70) /* */
dflet 0:bbe98578d4c0 215 #define SL_SOCKET_PAYLOAD_TYPE_RAW_TRANCEIVER (0x80) /* 1536 bytes */
dflet 0:bbe98578d4c0 216 #define SL_SOCKET_PAYLOAD_TYPE_RAW_PACKET (0x90) /* 1536 bytes */
dflet 0:bbe98578d4c0 217 #define SL_SOCKET_PAYLOAD_TYPE_RAW_IP4 (0xa0)
dflet 0:bbe98578d4c0 218 #define SL_SOCKET_PAYLOAD_TYPE_RAW_IP6 (SL_SOCKET_PAYLOAD_TYPE_RAW_IP4 )
dflet 0:bbe98578d4c0 219
dflet 0:bbe98578d4c0 220
dflet 0:bbe98578d4c0 221
dflet 0:bbe98578d4c0 222 #define SL_SOL_SOCKET (1) /* Define the socket option category. */
dflet 0:bbe98578d4c0 223 #define SL_IPPROTO_IP (2) /* Define the IP option category. */
dflet 0:bbe98578d4c0 224 #define SL_SOL_PHY_OPT (3) /* Define the PHY option category. */
dflet 0:bbe98578d4c0 225
dflet 0:bbe98578d4c0 226 #define SL_SO_RCVBUF (8) /* Setting TCP receive buffer size */
dflet 0:bbe98578d4c0 227 #define SL_SO_KEEPALIVE (9) /* Connections are kept alive with periodic messages */
dflet 0:bbe98578d4c0 228 #define SL_SO_RCVTIMEO (20) /* Enable receive timeout */
dflet 0:bbe98578d4c0 229 #define SL_SO_NONBLOCKING (24) /* Enable . disable nonblocking mode */
dflet 0:bbe98578d4c0 230 #define SL_SO_SECMETHOD (25) /* security metohd */
dflet 0:bbe98578d4c0 231 #define SL_SO_SECURE_MASK (26) /* security mask */
dflet 0:bbe98578d4c0 232 #define SL_SO_SECURE_FILES (27) /* security files */
dflet 0:bbe98578d4c0 233 #define SL_SO_CHANGE_CHANNEL (28) /* This option is available only when transceiver started */
dflet 0:bbe98578d4c0 234 #define SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME (30) /* This option used to configue secure file */
dflet 0:bbe98578d4c0 235 #define SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME (31) /* This option used to configue secure file */
dflet 0:bbe98578d4c0 236 #define SL_SO_SECURE_FILES_CA_FILE_NAME (32) /* This option used to configue secure file */
dflet 0:bbe98578d4c0 237 #define SL_SO_SECURE_FILES_DH_KEY_FILE_NAME (33) /* This option used to configue secure file */
dflet 0:bbe98578d4c0 238
dflet 0:bbe98578d4c0 239 #define SL_IP_MULTICAST_IF (60) /* Specify outgoing multicast interface */
dflet 0:bbe98578d4c0 240 #define SL_IP_MULTICAST_TTL (61) /* Specify the TTL value to use for outgoing multicast packet. */
dflet 0:bbe98578d4c0 241 #define SL_IP_ADD_MEMBERSHIP (65) /* Join IPv4 multicast membership */
dflet 0:bbe98578d4c0 242 #define SL_IP_DROP_MEMBERSHIP (66) /* Leave IPv4 multicast membership */
dflet 0:bbe98578d4c0 243 #define SL_IP_HDRINCL (67) /* Raw socket IPv4 header included. */
dflet 0:bbe98578d4c0 244 #define SL_IP_RAW_RX_NO_HEADER (68) /* Proprietary socket option that does not includeIPv4/IPv6 header (and extension headers) on received raw sockets*/
dflet 0:bbe98578d4c0 245 #define SL_IP_RAW_IPV6_HDRINCL (69) /* Transmitted buffer over IPv6 socket contains IPv6 header. */
dflet 0:bbe98578d4c0 246
dflet 0:bbe98578d4c0 247 #define SL_SO_PHY_RATE (100) /* WLAN Transmit rate */
dflet 0:bbe98578d4c0 248 #define SL_SO_PHY_TX_POWER (101) /* TX Power level */
dflet 0:bbe98578d4c0 249 #define SL_SO_PHY_NUM_FRAMES_TO_TX (102) /* Number of frames to transmit */
dflet 0:bbe98578d4c0 250 #define SL_SO_PHY_PREAMBLE (103) /* Preamble for transmission */
dflet 0:bbe98578d4c0 251
dflet 0:bbe98578d4c0 252 #define SL_SO_SEC_METHOD_SSLV3 (0) /* security metohd SSL v3*/
dflet 0:bbe98578d4c0 253 #define SL_SO_SEC_METHOD_TLSV1 (1) /* security metohd TLS v1*/
dflet 0:bbe98578d4c0 254 #define SL_SO_SEC_METHOD_TLSV1_1 (2) /* security metohd TLS v1_1*/
dflet 0:bbe98578d4c0 255 #define SL_SO_SEC_METHOD_TLSV1_2 (3) /* security metohd TLS v1_2*/
dflet 0:bbe98578d4c0 256 #define SL_SO_SEC_METHOD_SSLv3_TLSV1_2 (4) /* use highest possible version from SSLv3 - TLS 1.2*/
dflet 0:bbe98578d4c0 257 #define SL_SO_SEC_METHOD_DLSV1 (5) /* security metohd DTL v1 */
dflet 0:bbe98578d4c0 258
dflet 0:bbe98578d4c0 259 #define SL_SEC_MASK_SSL_RSA_WITH_RC4_128_SHA (1 << 0)
dflet 0:bbe98578d4c0 260 #define SL_SEC_MASK_SSL_RSA_WITH_RC4_128_MD5 (1 << 1)
dflet 0:bbe98578d4c0 261 #define SL_SEC_MASK_TLS_RSA_WITH_AES_256_CBC_SHA (1 << 2)
dflet 0:bbe98578d4c0 262 #define SL_SEC_MASK_TLS_DHE_RSA_WITH_AES_256_CBC_SHA (1 << 3)
dflet 0:bbe98578d4c0 263 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (1 << 4)
dflet 0:bbe98578d4c0 264 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_RC4_128_SHA (1 << 5)
dflet 0:bbe98578d4c0 265 #define SL_SEC_MASK_SECURE_DEFAULT ((SEC_MASK_TLS_ECDHE_RSA_WITH_RC4_128_SHA << 1) - 1)
dflet 0:bbe98578d4c0 266
dflet 0:bbe98578d4c0 267 #define SL_MSG_DONTWAIT (0x00000008) /* Nonblocking IO */
dflet 0:bbe98578d4c0 268
dflet 0:bbe98578d4c0 269 /* AP DHCP Server - IP Release reason code */
dflet 0:bbe98578d4c0 270 #define SL_IP_LEASE_PEER_RELEASE (0)
dflet 0:bbe98578d4c0 271 #define SL_IP_LEASE_PEER_DECLINE (1)
dflet 0:bbe98578d4c0 272 #define SL_IP_LEASE_EXPIRED (2)
dflet 0:bbe98578d4c0 273
dflet 0:bbe98578d4c0 274 /* possible types when receiving SL_SOCKET_ASYNC_EVENT*/
dflet 0:bbe98578d4c0 275 #define SSL_ACCEPT (1) /* accept failed due to ssl issue ( tcp pass) */
dflet 0:bbe98578d4c0 276 #define RX_FRAGMENTATION_TOO_BIG (2) /* connection less mode, rx packet fragmentation > 16K, packet is being released */
dflet 0:bbe98578d4c0 277 #define OTHER_SIDE_CLOSE_SSL_DATA_NOT_ENCRYPTED (3) /* remote side down from secure to unsecure */
dflet 0:bbe98578d4c0 278
dflet 0:bbe98578d4c0 279
dflet 0:bbe98578d4c0 280
dflet 0:bbe98578d4c0 281 #ifdef SL_INC_STD_BSD_API_NAMING
dflet 0:bbe98578d4c0 282
dflet 0:bbe98578d4c0 283 #define FD_SETSIZE SL_FD_SETSIZE
dflet 0:bbe98578d4c0 284
dflet 0:bbe98578d4c0 285 #define SOCK_STREAM SL_SOCK_STREAM
dflet 0:bbe98578d4c0 286 #define SOCK_DGRAM SL_SOCK_DGRAM
dflet 0:bbe98578d4c0 287 #define SOCK_RAW SL_SOCK_RAW
dflet 0:bbe98578d4c0 288 #define IPPROTO_TCP SL_IPPROTO_TCP
dflet 0:bbe98578d4c0 289 #define IPPROTO_UDP SL_IPPROTO_UDP
dflet 0:bbe98578d4c0 290 #define IPPROTO_RAW SL_IPPROTO_RAW
dflet 0:bbe98578d4c0 291
dflet 0:bbe98578d4c0 292 #define AF_INET SL_AF_INET
dflet 0:bbe98578d4c0 293 #define AF_INET6 SL_AF_INET6
dflet 0:bbe98578d4c0 294 #define AF_INET6_EUI_48 SL_AF_INET6_EUI_48
dflet 0:bbe98578d4c0 295 #define AF_RF SL_AF_RF
dflet 0:bbe98578d4c0 296 #define AF_PACKET SL_AF_PACKET
dflet 0:bbe98578d4c0 297
dflet 0:bbe98578d4c0 298 #define PF_INET SL_PF_INET
dflet 0:bbe98578d4c0 299 #define PF_INET6 SL_PF_INET6
dflet 0:bbe98578d4c0 300
dflet 0:bbe98578d4c0 301 #define INADDR_ANY SL_INADDR_ANY
dflet 0:bbe98578d4c0 302 #define ERROR SL_SOC_ERROR
dflet 0:bbe98578d4c0 303 #define INEXE SL_INEXE
dflet 0:bbe98578d4c0 304 #define EBADF SL_EBADF
dflet 0:bbe98578d4c0 305 #define ENSOCK SL_ENSOCK
dflet 0:bbe98578d4c0 306 #define EAGAIN SL_EAGAIN
dflet 0:bbe98578d4c0 307 #define EWOULDBLOCK SL_EWOULDBLOCK
dflet 0:bbe98578d4c0 308 #define ENOMEM SL_ENOMEM
dflet 0:bbe98578d4c0 309 #define EACCES SL_EACCES
dflet 0:bbe98578d4c0 310 #define EFAULT SL_EFAULT
dflet 0:bbe98578d4c0 311 #define EINVAL SL_EINVAL
dflet 0:bbe98578d4c0 312 #define EDESTADDRREQ SL_EDESTADDRREQ
dflet 0:bbe98578d4c0 313 #define EPROTOTYPE SL_EPROTOTYPE
dflet 0:bbe98578d4c0 314 #define ENOPROTOOPT SL_ENOPROTOOPT
dflet 0:bbe98578d4c0 315 #define EPROTONOSUPPORT SL_EPROTONOSUPPORT
dflet 0:bbe98578d4c0 316 #define ESOCKTNOSUPPORT SL_ESOCKTNOSUPPORT
dflet 0:bbe98578d4c0 317 #define EOPNOTSUPP SL_EOPNOTSUPP
dflet 0:bbe98578d4c0 318 #define EAFNOSUPPORT SL_EAFNOSUPPORT
dflet 0:bbe98578d4c0 319 #define EADDRINUSE SL_EADDRINUSE
dflet 0:bbe98578d4c0 320 #define EADDRNOTAVAIL SL_EADDRNOTAVAIL
dflet 0:bbe98578d4c0 321 #define ENETUNREACH SL_ENETUNREACH
dflet 0:bbe98578d4c0 322 #define ENOBUFS SL_ENOBUFS
dflet 0:bbe98578d4c0 323 #define EOBUFF SL_EOBUFF
dflet 0:bbe98578d4c0 324 #define EISCONN SL_EISCONN
dflet 0:bbe98578d4c0 325 #define ENOTCONN SL_ENOTCONN
dflet 0:bbe98578d4c0 326 #define ETIMEDOUT SL_ETIMEDOUT
dflet 0:bbe98578d4c0 327 #define ECONNREFUSED SL_ECONNREFUSED
dflet 0:bbe98578d4c0 328
dflet 0:bbe98578d4c0 329 #define SOL_SOCKET SL_SOL_SOCKET
dflet 0:bbe98578d4c0 330 #define IPPROTO_IP SL_IPPROTO_IP
dflet 0:bbe98578d4c0 331 #define SO_KEEPALIVE SL_SO_KEEPALIVE
dflet 0:bbe98578d4c0 332
dflet 0:bbe98578d4c0 333 #define SO_RCVTIMEO SL_SO_RCVTIMEO
dflet 0:bbe98578d4c0 334 #define SO_NONBLOCKING SL_SO_NONBLOCKING
dflet 0:bbe98578d4c0 335
dflet 0:bbe98578d4c0 336 #define IP_MULTICAST_IF SL_IP_MULTICAST_IF
dflet 0:bbe98578d4c0 337 #define IP_MULTICAST_TTL SL_IP_MULTICAST_TTL
dflet 0:bbe98578d4c0 338 #define IP_ADD_MEMBERSHIP SL_IP_ADD_MEMBERSHIP
dflet 0:bbe98578d4c0 339 #define IP_DROP_MEMBERSHIP SL_IP_DROP_MEMBERSHIP
dflet 0:bbe98578d4c0 340
dflet 0:bbe98578d4c0 341 #define socklen_t SlSocklen_t
dflet 0:bbe98578d4c0 342 #define timeval SlTimeval_t
dflet 0:bbe98578d4c0 343 #define sockaddr SlSockAddr_t
dflet 0:bbe98578d4c0 344 #define in6_addr SlIn6Addr_t
dflet 0:bbe98578d4c0 345 #define sockaddr_in6 SlSockAddrIn6_t
dflet 0:bbe98578d4c0 346 #define in_addr SlInAddr_t
dflet 0:bbe98578d4c0 347 #define sockaddr_in SlSockAddrIn_t
dflet 0:bbe98578d4c0 348
dflet 0:bbe98578d4c0 349 #define MSG_DONTWAIT SL_MSG_DONTWAIT
dflet 0:bbe98578d4c0 350
dflet 0:bbe98578d4c0 351 #define FD_SET SL_FD_SET
dflet 0:bbe98578d4c0 352 #define FD_CLR SL_FD_CLR
dflet 0:bbe98578d4c0 353 #define FD_ISSET SL_FD_ISSET
dflet 0:bbe98578d4c0 354 #define FD_ZERO SL_FD_ZERO
dflet 0:bbe98578d4c0 355 #define fd_set SlFdSet_t
dflet 0:bbe98578d4c0 356
dflet 0:bbe98578d4c0 357 #define socket sl_Socket
dflet 0:bbe98578d4c0 358 #define close sl_Close
dflet 0:bbe98578d4c0 359 #define accept sl_Accept
dflet 0:bbe98578d4c0 360 #define bind sl_Bind
dflet 0:bbe98578d4c0 361 #define listen sl_Listen
dflet 0:bbe98578d4c0 362 #define connect sl_Connect
dflet 0:bbe98578d4c0 363 #define select sl_Select
dflet 0:bbe98578d4c0 364 #define setsockopt sl_SetSockOpt
dflet 0:bbe98578d4c0 365 #define getsockopt sl_GetSockOpt
dflet 0:bbe98578d4c0 366 #define recv sl_Recv
dflet 0:bbe98578d4c0 367 #define recvfrom sl_RecvFrom
dflet 0:bbe98578d4c0 368 #define _write sl_Write //Changed write to _write
dflet 0:bbe98578d4c0 369 #define send sl_Send
dflet 0:bbe98578d4c0 370 #define sendto sl_SendTo
dflet 0:bbe98578d4c0 371 #define gethostbyname sl_NetAppDnsGetHostByName
dflet 0:bbe98578d4c0 372 #define htonl sl_Htonl
dflet 0:bbe98578d4c0 373 #define ntohl sl_Ntohl
dflet 0:bbe98578d4c0 374 #define htons sl_Htons
dflet 0:bbe98578d4c0 375 #define ntohs sl_Ntohs
dflet 0:bbe98578d4c0 376 #endif
dflet 0:bbe98578d4c0 377
dflet 0:bbe98578d4c0 378 /*****************************************************************************/
dflet 0:bbe98578d4c0 379 /* Structure/Enum declarations */
dflet 0:bbe98578d4c0 380 /*****************************************************************************/
dflet 0:bbe98578d4c0 381
dflet 0:bbe98578d4c0 382 /* Internet address */
dflet 0:bbe98578d4c0 383 typedef struct SlInAddr_t
dflet 0:bbe98578d4c0 384 {
dflet 0:bbe98578d4c0 385 #ifndef s_addr
dflet 0:bbe98578d4c0 386 _u32 s_addr; /* Internet address 32 bits */
dflet 0:bbe98578d4c0 387 #else
dflet 0:bbe98578d4c0 388 union S_un {
dflet 0:bbe98578d4c0 389 struct { _u8 s_b1,s_b2,s_b3,s_b4; } S_un_b;
dflet 0:bbe98578d4c0 390 struct { _u8 s_w1,s_w2; } S_un_w;
dflet 0:bbe98578d4c0 391 _u32 S_addr;
dflet 0:bbe98578d4c0 392 } S_un;
dflet 0:bbe98578d4c0 393 #endif
dflet 0:bbe98578d4c0 394 }SlInAddr_t;
dflet 0:bbe98578d4c0 395
dflet 0:bbe98578d4c0 396
dflet 0:bbe98578d4c0 397 /* sockopt */
dflet 0:bbe98578d4c0 398 typedef struct
dflet 0:bbe98578d4c0 399 {
dflet 0:bbe98578d4c0 400 _u32 KeepaliveEnabled; /* 0 = disabled;1 = enabled; default = 1*/
dflet 0:bbe98578d4c0 401 }SlSockKeepalive_t;
dflet 0:bbe98578d4c0 402
dflet 0:bbe98578d4c0 403 typedef struct
dflet 0:bbe98578d4c0 404 {
dflet 0:bbe98578d4c0 405 _u32 ReuseaddrEnabled; /* 0 = disabled; 1 = enabled; default = 1*/
dflet 0:bbe98578d4c0 406 }SlSockReuseaddr_t;
dflet 0:bbe98578d4c0 407
dflet 0:bbe98578d4c0 408 typedef struct
dflet 0:bbe98578d4c0 409 {
dflet 0:bbe98578d4c0 410 _u32 Winsize; /* receive window size for tcp sockets */
dflet 0:bbe98578d4c0 411 }SlSockWinsize_t;
dflet 0:bbe98578d4c0 412
dflet 0:bbe98578d4c0 413 typedef struct
dflet 0:bbe98578d4c0 414 {
dflet 0:bbe98578d4c0 415 _u32 NonblockingEnabled;/* 0 = disabled;1 = enabled;default = 1*/
dflet 0:bbe98578d4c0 416 }SlSockNonblocking_t;
dflet 0:bbe98578d4c0 417
dflet 0:bbe98578d4c0 418 typedef struct
dflet 0:bbe98578d4c0 419 {
dflet 0:bbe98578d4c0 420 _u8 sd;
dflet 0:bbe98578d4c0 421 _u8 type;
dflet 0:bbe98578d4c0 422 _u16 val;
dflet 0:bbe98578d4c0 423 } SlSocketAsyncEvent_t;
dflet 0:bbe98578d4c0 424
dflet 0:bbe98578d4c0 425 typedef struct
dflet 0:bbe98578d4c0 426 {
dflet 0:bbe98578d4c0 427 _i16 status;
dflet 0:bbe98578d4c0 428 _u16 sd;
dflet 0:bbe98578d4c0 429 SlSocketAsyncEvent_t socketAsyncEvent;
dflet 0:bbe98578d4c0 430 } SlSockEventData_t;
dflet 0:bbe98578d4c0 431
dflet 0:bbe98578d4c0 432
dflet 0:bbe98578d4c0 433 typedef struct
dflet 0:bbe98578d4c0 434 {
dflet 0:bbe98578d4c0 435 _u32 Event;
dflet 0:bbe98578d4c0 436 SlSockEventData_t EventData;
dflet 0:bbe98578d4c0 437 } SlSockEvent_t;
dflet 0:bbe98578d4c0 438
dflet 0:bbe98578d4c0 439
dflet 0:bbe98578d4c0 440 typedef struct
dflet 0:bbe98578d4c0 441 {
dflet 0:bbe98578d4c0 442 _u32 secureMask;
dflet 0:bbe98578d4c0 443 } SlSockSecureMask;
dflet 0:bbe98578d4c0 444
dflet 0:bbe98578d4c0 445 typedef struct
dflet 0:bbe98578d4c0 446 {
dflet 0:bbe98578d4c0 447 _u8 secureMethod;
dflet 0:bbe98578d4c0 448 } SlSockSecureMethod;
dflet 0:bbe98578d4c0 449
dflet 0:bbe98578d4c0 450 typedef enum
dflet 0:bbe98578d4c0 451 {
dflet 0:bbe98578d4c0 452 SL_BSD_SECURED_PRIVATE_KEY_IDX = 0,
dflet 0:bbe98578d4c0 453 SL_BSD_SECURED_CERTIFICATE_IDX,
dflet 0:bbe98578d4c0 454 SL_BSD_SECURED_CA_IDX,
dflet 0:bbe98578d4c0 455 SL_BSD_SECURED_DH_IDX
dflet 0:bbe98578d4c0 456 }slBsd_secureSocketFilesIndex_e;
dflet 0:bbe98578d4c0 457
dflet 0:bbe98578d4c0 458 typedef struct
dflet 0:bbe98578d4c0 459 {
dflet 0:bbe98578d4c0 460 SlInAddr_t imr_multiaddr; /* The IPv4 multicast address to join */
dflet 0:bbe98578d4c0 461 SlInAddr_t imr_interface; /* The interface to use for this group */
dflet 0:bbe98578d4c0 462 } SlSockIpMreq;
dflet 0:bbe98578d4c0 463
dflet 0:bbe98578d4c0 464
dflet 0:bbe98578d4c0 465 /* sockopt */
dflet 0:bbe98578d4c0 466 typedef _u32 SlTime_t;
dflet 0:bbe98578d4c0 467 typedef _u32 SlSuseconds_t;
dflet 0:bbe98578d4c0 468
dflet 0:bbe98578d4c0 469 typedef struct SlTimeval_t
dflet 0:bbe98578d4c0 470 {
dflet 0:bbe98578d4c0 471 SlTime_t tv_sec; /* Seconds */
dflet 0:bbe98578d4c0 472 SlSuseconds_t tv_usec; /* Microseconds */
dflet 0:bbe98578d4c0 473 }SlTimeval_t;
dflet 0:bbe98578d4c0 474
dflet 0:bbe98578d4c0 475 typedef _u16 SlSocklen_t;
dflet 0:bbe98578d4c0 476
dflet 0:bbe98578d4c0 477 /* IpV4 socket address */
dflet 0:bbe98578d4c0 478 typedef struct SlSockAddr_t
dflet 0:bbe98578d4c0 479 {
dflet 0:bbe98578d4c0 480 _u16 sa_family; /* Address family (e.g. , AF_INET) */
dflet 0:bbe98578d4c0 481 _u8 sa_data[14]; /* Protocol- specific address information*/
dflet 0:bbe98578d4c0 482 }SlSockAddr_t;
dflet 0:bbe98578d4c0 483
dflet 0:bbe98578d4c0 484
dflet 0:bbe98578d4c0 485 /* IpV6 or Ipv6 EUI64 */
dflet 0:bbe98578d4c0 486 typedef struct SlIn6Addr_t
dflet 0:bbe98578d4c0 487 {
dflet 0:bbe98578d4c0 488 union
dflet 0:bbe98578d4c0 489 {
dflet 0:bbe98578d4c0 490 _u8 _S6_u8[16];
dflet 0:bbe98578d4c0 491 _u32 _S6_u32[4];
dflet 0:bbe98578d4c0 492 } _S6_un;
dflet 0:bbe98578d4c0 493 }SlIn6Addr_t;
dflet 0:bbe98578d4c0 494
dflet 0:bbe98578d4c0 495 typedef struct SlSockAddrIn6_t
dflet 0:bbe98578d4c0 496 {
dflet 0:bbe98578d4c0 497 _u16 sin6_family; /* AF_INET6 || AF_INET6_EUI_48*/
dflet 0:bbe98578d4c0 498 _u16 sin6_port; /* Transport layer port. */
dflet 0:bbe98578d4c0 499 _u32 sin6_flowinfo; /* IPv6 flow information. */
dflet 0:bbe98578d4c0 500 SlIn6Addr_t sin6_addr; /* IPv6 address. */
dflet 0:bbe98578d4c0 501 _u32 sin6_scope_id; /* set of interfaces for a scope. */
dflet 0:bbe98578d4c0 502 }SlSockAddrIn6_t;
dflet 0:bbe98578d4c0 503
dflet 0:bbe98578d4c0 504 /* Socket address, Internet style. */
dflet 0:bbe98578d4c0 505
dflet 0:bbe98578d4c0 506 typedef struct SlSockAddrIn_t
dflet 0:bbe98578d4c0 507 {
dflet 0:bbe98578d4c0 508 _u16 sin_family; /* Internet Protocol (AF_INET). */
dflet 0:bbe98578d4c0 509 _u16 sin_port; /* Address port (16 bits). */
dflet 0:bbe98578d4c0 510 SlInAddr_t sin_addr; /* Internet address (32 bits). */
dflet 0:bbe98578d4c0 511 _i8 sin_zero[8]; /* Not used. */
dflet 0:bbe98578d4c0 512 }SlSockAddrIn_t;
dflet 0:bbe98578d4c0 513
dflet 0:bbe98578d4c0 514 typedef struct
dflet 0:bbe98578d4c0 515 {
dflet 0:bbe98578d4c0 516 _u32 ip;
dflet 0:bbe98578d4c0 517 _u32 gateway;
dflet 0:bbe98578d4c0 518 _u32 dns;
dflet 0:bbe98578d4c0 519 }SlIpV4AcquiredAsync_t;
dflet 0:bbe98578d4c0 520
dflet 0:bbe98578d4c0 521 typedef struct
dflet 0:bbe98578d4c0 522 {
dflet 0:bbe98578d4c0 523 _u32 type;
dflet 0:bbe98578d4c0 524 _u32 ip[4];
dflet 0:bbe98578d4c0 525 _u32 gateway[4];
dflet 0:bbe98578d4c0 526 _u32 dns[4];
dflet 0:bbe98578d4c0 527 }SlIpV6AcquiredAsync_t;
dflet 0:bbe98578d4c0 528
dflet 0:bbe98578d4c0 529 typedef struct
dflet 0:bbe98578d4c0 530 {
dflet 0:bbe98578d4c0 531 _u32 ip_address;
dflet 0:bbe98578d4c0 532 _u32 lease_time;
dflet 0:bbe98578d4c0 533 _u8 mac[6];
dflet 0:bbe98578d4c0 534 _u16 padding;
dflet 0:bbe98578d4c0 535 }SlIpLeasedAsync_t;
dflet 0:bbe98578d4c0 536
dflet 0:bbe98578d4c0 537 typedef struct
dflet 0:bbe98578d4c0 538 {
dflet 0:bbe98578d4c0 539 _u32 ip_address;
dflet 0:bbe98578d4c0 540 _u8 mac[6];
dflet 0:bbe98578d4c0 541 _u16 reason;
dflet 0:bbe98578d4c0 542 }SlIpReleasedAsync_t;
dflet 0:bbe98578d4c0 543
dflet 0:bbe98578d4c0 544
dflet 0:bbe98578d4c0 545 typedef union
dflet 0:bbe98578d4c0 546 {
dflet 0:bbe98578d4c0 547 SlIpV4AcquiredAsync_t ipAcquiredV4; /*SL_NETAPP_IPV4_IPACQUIRED_EVENT*/
dflet 0:bbe98578d4c0 548 SlIpV6AcquiredAsync_t ipAcquiredV6; /*SL_NETAPP_IPV6_IPACQUIRED_EVENT*/
dflet 0:bbe98578d4c0 549 _u32 sd; /*SL_SOCKET_TX_FAILED_EVENT*/
dflet 0:bbe98578d4c0 550 SlIpLeasedAsync_t ipLeased; /* SL_NETAPP_IP_LEASED_EVENT */
dflet 0:bbe98578d4c0 551 SlIpReleasedAsync_t ipReleased; /* SL_NETAPP_IP_RELEASED_EVENT */
dflet 0:bbe98578d4c0 552 } SlNetAppEventData_u;
dflet 0:bbe98578d4c0 553
dflet 0:bbe98578d4c0 554 typedef struct
dflet 0:bbe98578d4c0 555 {
dflet 0:bbe98578d4c0 556 _u32 Event;
dflet 0:bbe98578d4c0 557 SlNetAppEventData_u EventData;
dflet 0:bbe98578d4c0 558 }SlNetAppEvent_t;
dflet 0:bbe98578d4c0 559
dflet 0:bbe98578d4c0 560
dflet 0:bbe98578d4c0 561 typedef struct sock_secureFiles
dflet 0:bbe98578d4c0 562 {
dflet 0:bbe98578d4c0 563 _u8 secureFiles[4];
dflet 0:bbe98578d4c0 564 }SlSockSecureFiles_t;
dflet 0:bbe98578d4c0 565
dflet 0:bbe98578d4c0 566
dflet 0:bbe98578d4c0 567 typedef struct SlFdSet_t /* The select socket array manager */
dflet 0:bbe98578d4c0 568 {
dflet 0:bbe98578d4c0 569 _u32 fd_array[(SL_FD_SETSIZE + 31)/32]; /* Bit map of SOCKET Descriptors */
dflet 0:bbe98578d4c0 570 } SlFdSet_t;
dflet 0:bbe98578d4c0 571
dflet 0:bbe98578d4c0 572 typedef struct
dflet 0:bbe98578d4c0 573 {
dflet 0:bbe98578d4c0 574 _u8 rate; /* Recevied Rate */
dflet 0:bbe98578d4c0 575 _u8 channel; /* The received channel*/
dflet 0:bbe98578d4c0 576 _i8 rssi; /* The computed RSSI value in db of current frame */
dflet 0:bbe98578d4c0 577 _u8 padding; /* pad to align to 32 bits */
dflet 0:bbe98578d4c0 578 _u32 timestamp; /* Timestamp in microseconds, */
dflet 0:bbe98578d4c0 579 }SlTransceiverRxOverHead_t;
dflet 0:bbe98578d4c0 580
dflet 0:bbe98578d4c0 581
dflet 0:bbe98578d4c0 582
dflet 0:bbe98578d4c0 583 /*****************************************************************************/
dflet 0:bbe98578d4c0 584 /* Function prototypes */
dflet 0:bbe98578d4c0 585 /*****************************************************************************/
dflet 0:bbe98578d4c0 586
dflet 0:bbe98578d4c0 587 /*!
dflet 0:bbe98578d4c0 588
dflet 0:bbe98578d4c0 589 \brief create an endpoint for communication
dflet 0:bbe98578d4c0 590
dflet 0:bbe98578d4c0 591 The socket function creates a new socket of a certain socket type, identified
dflet 0:bbe98578d4c0 592 by an integer number, and allocates system resources to it.
dflet 0:bbe98578d4c0 593 This function is called by the application layer to obtain a socket handle.
dflet 0:bbe98578d4c0 594
dflet 0:bbe98578d4c0 595 \param[in] domain specifies the protocol family of the created socket.
dflet 0:bbe98578d4c0 596 For example:
dflet 0:bbe98578d4c0 597 AF_INET for network protocol IPv4
dflet 0:bbe98578d4c0 598 AF_RF for starting transceiver mode. Notes:
dflet 0:bbe98578d4c0 599 - sending and receiving any packet overriding 802.11 header
dflet 0:bbe98578d4c0 600 - for optimized power consumption the socket will be started in TX
dflet 0:bbe98578d4c0 601 only mode until receive command is activated
dflet 0:bbe98578d4c0 602 AF_INET6 for IPv6
dflet 0:bbe98578d4c0 603
dflet 0:bbe98578d4c0 604
dflet 0:bbe98578d4c0 605 \param[in] type specifies the communication semantic, one of:
dflet 0:bbe98578d4c0 606 SOCK_STREAM (reliable stream-oriented service or Stream Sockets)
dflet 0:bbe98578d4c0 607 SOCK_DGRAM (datagram service or Datagram Sockets)
dflet 0:bbe98578d4c0 608 SOCK_RAW (raw protocols atop the network layer)
dflet 0:bbe98578d4c0 609 when used with AF_RF:
dflet 0:bbe98578d4c0 610 SOCK_DGRAM - L2 socket
dflet 0:bbe98578d4c0 611 SOCK_RAW - L1 socket - bypass WLAN CCA (Clear Channel Assessment)
dflet 0:bbe98578d4c0 612
dflet 0:bbe98578d4c0 613 \param[in] protocol specifies a particular transport to be used with
dflet 0:bbe98578d4c0 614 the socket.
dflet 0:bbe98578d4c0 615 The most common are IPPROTO_TCP, IPPROTO_SCTP, IPPROTO_UDP,
dflet 0:bbe98578d4c0 616 IPPROTO_DCCP.
dflet 0:bbe98578d4c0 617 The value 0 may be used to select a default
dflet 0:bbe98578d4c0 618 protocol from the selected domain and type
dflet 0:bbe98578d4c0 619
dflet 0:bbe98578d4c0 620
dflet 0:bbe98578d4c0 621 \return On success, socket handle that is used for consequent socket operations.
dflet 0:bbe98578d4c0 622 A successful return code should be a positive number (int16)
dflet 0:bbe98578d4c0 623 On error, a negative (int16) value will be returned specifying the error code.
dflet 0:bbe98578d4c0 624 SL_EAFNOSUPPORT - illegal domain parameter
dflet 0:bbe98578d4c0 625 SL_EPROTOTYPE - illegal type parameter
dflet 0:bbe98578d4c0 626 SL_EACCES - permission denied
dflet 0:bbe98578d4c0 627 SL_ENSOCK - exceeded maximal number of socket
dflet 0:bbe98578d4c0 628 SL_ENOMEM - memory allocation error
dflet 0:bbe98578d4c0 629 SL_EINVAL - error in socket configuration
dflet 0:bbe98578d4c0 630 SL_EPROTONOSUPPORT - illegal protocol parameter
dflet 0:bbe98578d4c0 631 SL_EOPNOTSUPP - illegal combination of protocol and type parameters
dflet 0:bbe98578d4c0 632
dflet 0:bbe98578d4c0 633
dflet 0:bbe98578d4c0 634 \sa sl_Close
dflet 0:bbe98578d4c0 635 \note belongs to \ref basic_api
dflet 0:bbe98578d4c0 636 \warning
dflet 0:bbe98578d4c0 637 */
dflet 0:bbe98578d4c0 638 #if _SL_INCLUDE_FUNC(sl_Socket)
dflet 0:bbe98578d4c0 639 _i16 sl_Socket(_i16 Domain, _i16 Type, _i16 Protocol);
dflet 0:bbe98578d4c0 640 #endif
dflet 0:bbe98578d4c0 641
dflet 0:bbe98578d4c0 642 /*!
dflet 0:bbe98578d4c0 643 \brief gracefully close socket
dflet 0:bbe98578d4c0 644
dflet 0:bbe98578d4c0 645 This function causes the system to release resources allocated to a socket. \n
dflet 0:bbe98578d4c0 646 In case of TCP, the connection is terminated.
dflet 0:bbe98578d4c0 647
dflet 0:bbe98578d4c0 648 \param[in] sd socket handle (received in sl_Socket)
dflet 0:bbe98578d4c0 649
dflet 0:bbe98578d4c0 650 \return On success, zero is returned.
dflet 0:bbe98578d4c0 651 On error, a negative number is returned.
dflet 0:bbe98578d4c0 652
dflet 0:bbe98578d4c0 653 \sa sl_Socket
dflet 0:bbe98578d4c0 654 \note belongs to \ref ext_api
dflet 0:bbe98578d4c0 655 \warning
dflet 0:bbe98578d4c0 656 */
dflet 0:bbe98578d4c0 657 #if _SL_INCLUDE_FUNC(sl_Close)
dflet 0:bbe98578d4c0 658 _i16 sl_Close(_i16 sd);
dflet 0:bbe98578d4c0 659 #endif
dflet 0:bbe98578d4c0 660
dflet 0:bbe98578d4c0 661 /*!
dflet 0:bbe98578d4c0 662 \brief Accept a connection on a socket
dflet 0:bbe98578d4c0 663
dflet 0:bbe98578d4c0 664 This function is used with connection-based socket types (SOCK_STREAM).
dflet 0:bbe98578d4c0 665 It extracts the first connection request on the queue of pending
dflet 0:bbe98578d4c0 666 connections, creates a new connected socket, and returns a new file
dflet 0:bbe98578d4c0 667 descriptor referring to that socket.
dflet 0:bbe98578d4c0 668 The newly created socket is not in the listening state. The
dflet 0:bbe98578d4c0 669 original socket sd is unaffected by this call.
dflet 0:bbe98578d4c0 670 The argument sd is a socket that has been created with
dflet 0:bbe98578d4c0 671 sl_Socket(), bound to a local address with sl_Bind(), and is
dflet 0:bbe98578d4c0 672 listening for connections after a sl_Listen(). The argument \b
dflet 0:bbe98578d4c0 673 \e addr is a pointer to a sockaddr structure. This structure
dflet 0:bbe98578d4c0 674 is filled in with the address of the peer socket, as known to
dflet 0:bbe98578d4c0 675 the communications layer. The exact format of the address
dflet 0:bbe98578d4c0 676 returned addr is determined by the socket's address family.
dflet 0:bbe98578d4c0 677 The \b \e addrlen argument is a value-result argument: it
dflet 0:bbe98578d4c0 678 should initially contain the size of the structure pointed to
dflet 0:bbe98578d4c0 679 by addr, on return it will contain the actual length (in
dflet 0:bbe98578d4c0 680 bytes) of the address returned.
dflet 0:bbe98578d4c0 681
dflet 0:bbe98578d4c0 682 \param[in] sd socket descriptor (handle)
dflet 0:bbe98578d4c0 683 \param[out] addr the argument addr is a pointer
dflet 0:bbe98578d4c0 684 to a sockaddr structure. This
dflet 0:bbe98578d4c0 685 structure is filled in with the
dflet 0:bbe98578d4c0 686 address of the peer socket, as
dflet 0:bbe98578d4c0 687 known to the communications
dflet 0:bbe98578d4c0 688 layer. The exact format of the
dflet 0:bbe98578d4c0 689 address returned addr is
dflet 0:bbe98578d4c0 690 determined by the socket's
dflet 0:bbe98578d4c0 691 address\n
dflet 0:bbe98578d4c0 692 sockaddr:\n - code for the
dflet 0:bbe98578d4c0 693 address format. On this version
dflet 0:bbe98578d4c0 694 only AF_INET is supported.\n -
dflet 0:bbe98578d4c0 695 socket address, the length
dflet 0:bbe98578d4c0 696 depends on the code format
dflet 0:bbe98578d4c0 697 \param[out] addrlen the addrlen argument is a value-result
dflet 0:bbe98578d4c0 698 argument: it should initially contain the
dflet 0:bbe98578d4c0 699 size of the structure pointed to by addr
dflet 0:bbe98578d4c0 700
dflet 0:bbe98578d4c0 701 \return On success, a socket handle.
dflet 0:bbe98578d4c0 702 On a non-blocking accept a possible negative value is SL_EAGAIN.
dflet 0:bbe98578d4c0 703 On failure, negative value.
dflet 0:bbe98578d4c0 704 SL_POOL_IS_EMPTY may be return in case there are no resources in the system
dflet 0:bbe98578d4c0 705 In this case try again later or increase MAX_CONCURRENT_ACTIONS
dflet 0:bbe98578d4c0 706
dflet 0:bbe98578d4c0 707 \sa sl_Socket sl_Bind sl_Listen
dflet 0:bbe98578d4c0 708 \note belongs to \ref server_side
dflet 0:bbe98578d4c0 709 \warning
dflet 0:bbe98578d4c0 710 */
dflet 0:bbe98578d4c0 711 #if _SL_INCLUDE_FUNC(sl_Accept)
dflet 0:bbe98578d4c0 712 _i16 sl_Accept(_i16 sd, SlSockAddr_t *addr, SlSocklen_t *addrlen);
dflet 0:bbe98578d4c0 713 #endif
dflet 0:bbe98578d4c0 714
dflet 0:bbe98578d4c0 715 /*!
dflet 0:bbe98578d4c0 716 \brief assign a name to a socket
dflet 0:bbe98578d4c0 717
dflet 0:bbe98578d4c0 718 This function gives the socket the local address addr.
dflet 0:bbe98578d4c0 719 addr is addrlen bytes long. Traditionally, this is called
dflet 0:bbe98578d4c0 720 When a socket is created with socket, it exists in a name
dflet 0:bbe98578d4c0 721 space (address family) but has no name assigned.
dflet 0:bbe98578d4c0 722 It is necessary to assign a local address before a SOCK_STREAM
dflet 0:bbe98578d4c0 723 socket may receive connections.
dflet 0:bbe98578d4c0 724
dflet 0:bbe98578d4c0 725 \param[in] sd socket descriptor (handle)
dflet 0:bbe98578d4c0 726 \param[in] addr specifies the destination
dflet 0:bbe98578d4c0 727 addrs\n sockaddr:\n - code for
dflet 0:bbe98578d4c0 728 the address format. On this
dflet 0:bbe98578d4c0 729 version only AF_INET is
dflet 0:bbe98578d4c0 730 supported.\n - socket address,
dflet 0:bbe98578d4c0 731 the length depends on the code
dflet 0:bbe98578d4c0 732 format
dflet 0:bbe98578d4c0 733 \param[in] addrlen contains the size of the structure pointed to by addr
dflet 0:bbe98578d4c0 734
dflet 0:bbe98578d4c0 735 \return On success, zero is returned. On error, a negative error code is returned.
dflet 0:bbe98578d4c0 736
dflet 0:bbe98578d4c0 737 \sa sl_Socket sl_Accept sl_Listen
dflet 0:bbe98578d4c0 738 \note belongs to \ref basic_api
dflet 0:bbe98578d4c0 739 \warning
dflet 0:bbe98578d4c0 740 */
dflet 0:bbe98578d4c0 741 #if _SL_INCLUDE_FUNC(sl_Bind)
dflet 0:bbe98578d4c0 742 _i16 sl_Bind(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen);
dflet 0:bbe98578d4c0 743 #endif
dflet 0:bbe98578d4c0 744
dflet 0:bbe98578d4c0 745 /*!
dflet 0:bbe98578d4c0 746 \brief listen for connections on a socket
dflet 0:bbe98578d4c0 747
dflet 0:bbe98578d4c0 748 The willingness to accept incoming connections and a queue
dflet 0:bbe98578d4c0 749 limit for incoming connections are specified with listen(),
dflet 0:bbe98578d4c0 750 and then the connections are accepted with accept.
dflet 0:bbe98578d4c0 751 The listen() call applies only to sockets of type SOCK_STREAM
dflet 0:bbe98578d4c0 752 The backlog parameter defines the maximum length the queue of
dflet 0:bbe98578d4c0 753 pending connections may grow to.
dflet 0:bbe98578d4c0 754
dflet 0:bbe98578d4c0 755 \param[in] sd socket descriptor (handle)
dflet 0:bbe98578d4c0 756 \param[in] backlog specifies the listen queue depth.
dflet 0:bbe98578d4c0 757
dflet 0:bbe98578d4c0 758
dflet 0:bbe98578d4c0 759 \return On success, zero is returned. On error, a negative error code is returned.
dflet 0:bbe98578d4c0 760
dflet 0:bbe98578d4c0 761 \sa sl_Socket sl_Accept sl_Bind
dflet 0:bbe98578d4c0 762 \note belongs to \ref server_side
dflet 0:bbe98578d4c0 763 \warning
dflet 0:bbe98578d4c0 764 */
dflet 0:bbe98578d4c0 765 #if _SL_INCLUDE_FUNC(sl_Listen)
dflet 0:bbe98578d4c0 766 _i16 sl_Listen(_i16 sd, _i16 backlog);
dflet 0:bbe98578d4c0 767 #endif
dflet 0:bbe98578d4c0 768
dflet 0:bbe98578d4c0 769 /*!
dflet 0:bbe98578d4c0 770 \brief Initiate a connection on a socket
dflet 0:bbe98578d4c0 771
dflet 0:bbe98578d4c0 772 Function connects the socket referred to by the socket
dflet 0:bbe98578d4c0 773 descriptor sd, to the address specified by addr. The addrlen
dflet 0:bbe98578d4c0 774 argument specifies the size of addr. The format of the
dflet 0:bbe98578d4c0 775 address in addr is determined by the address space of the
dflet 0:bbe98578d4c0 776 socket. If it is of type SOCK_DGRAM, this call specifies the
dflet 0:bbe98578d4c0 777 peer with which the socket is to be associated; this address
dflet 0:bbe98578d4c0 778 is that to which datagrams are to be sent, and the only
dflet 0:bbe98578d4c0 779 address from which datagrams are to be received. If the
dflet 0:bbe98578d4c0 780 socket is of type SOCK_STREAM, this call attempts to make a
dflet 0:bbe98578d4c0 781 connection to another socket. The other socket is specified
dflet 0:bbe98578d4c0 782 by address, which is an address in the communications space
dflet 0:bbe98578d4c0 783 of the socket.
dflet 0:bbe98578d4c0 784
dflet 0:bbe98578d4c0 785
dflet 0:bbe98578d4c0 786 \param[in] sd socket descriptor (handle)
dflet 0:bbe98578d4c0 787 \param[in] addr specifies the destination addr\n
dflet 0:bbe98578d4c0 788 sockaddr:\n - code for the
dflet 0:bbe98578d4c0 789 address format. On this version
dflet 0:bbe98578d4c0 790 only AF_INET is supported.\n -
dflet 0:bbe98578d4c0 791 socket address, the length
dflet 0:bbe98578d4c0 792 depends on the code format
dflet 0:bbe98578d4c0 793
dflet 0:bbe98578d4c0 794 \param[in] addrlen contains the size of the structure pointed
dflet 0:bbe98578d4c0 795 to by addr
dflet 0:bbe98578d4c0 796
dflet 0:bbe98578d4c0 797 \return On success, a socket handle.
dflet 0:bbe98578d4c0 798 On a non-blocking connect a possible negative value is SL_EALREADY.
dflet 0:bbe98578d4c0 799 On failure, negative value.
dflet 0:bbe98578d4c0 800 SL_POOL_IS_EMPTY may be return in case there are no resources in the system
dflet 0:bbe98578d4c0 801 In this case try again later or increase MAX_CONCURRENT_ACTIONS
dflet 0:bbe98578d4c0 802
dflet 0:bbe98578d4c0 803 \sa sl_Socket
dflet 0:bbe98578d4c0 804 \note belongs to \ref client_side
dflet 0:bbe98578d4c0 805 \warning
dflet 0:bbe98578d4c0 806 */
dflet 0:bbe98578d4c0 807 #if _SL_INCLUDE_FUNC(sl_Connect)
dflet 0:bbe98578d4c0 808 _i16 sl_Connect(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen);
dflet 0:bbe98578d4c0 809 #endif
dflet 0:bbe98578d4c0 810
dflet 0:bbe98578d4c0 811 /*!
dflet 0:bbe98578d4c0 812 \brief Monitor socket activity
dflet 0:bbe98578d4c0 813
dflet 0:bbe98578d4c0 814 Select allow a program to monitor multiple file descriptors,
dflet 0:bbe98578d4c0 815 waiting until one or more of the file descriptors become
dflet 0:bbe98578d4c0 816 "ready" for some class of I/O operation
dflet 0:bbe98578d4c0 817
dflet 0:bbe98578d4c0 818
dflet 0:bbe98578d4c0 819 \param[in] nfds the highest-numbered file descriptor in any of the
dflet 0:bbe98578d4c0 820 three sets, plus 1.
dflet 0:bbe98578d4c0 821 \param[out] readsds socket descriptors list for read monitoring and accept monitoring
dflet 0:bbe98578d4c0 822 \param[out] writesds socket descriptors list for connect monitoring only, write monitoring is not supported
dflet 0:bbe98578d4c0 823 \param[out] exceptsds socket descriptors list for exception monitoring, not supported.
dflet 0:bbe98578d4c0 824 \param[in] timeout is an upper bound on the amount of time elapsed
dflet 0:bbe98578d4c0 825 before select() returns. Null or above 0xffff seconds means
dflet 0:bbe98578d4c0 826 infinity timeout. The minimum timeout is 10 milliseconds,
dflet 0:bbe98578d4c0 827 less than 10 milliseconds will be set automatically to 10 milliseconds.
dflet 0:bbe98578d4c0 828 Max microseconds supported is 0xfffc00.
dflet 0:bbe98578d4c0 829
dflet 0:bbe98578d4c0 830 \return On success, select() returns the number of
dflet 0:bbe98578d4c0 831 file descriptors contained in the three returned
dflet 0:bbe98578d4c0 832 descriptor sets (that is, the total number of bits that
dflet 0:bbe98578d4c0 833 are set in readfds, writefds, exceptfds) which may be
dflet 0:bbe98578d4c0 834 zero if the timeout expires before anything interesting
dflet 0:bbe98578d4c0 835 happens. On error, a negative value is returned.
dflet 0:bbe98578d4c0 836 readsds - return the sockets on which Read request will
dflet 0:bbe98578d4c0 837 return without delay with valid data.
dflet 0:bbe98578d4c0 838 writesds - return the sockets on which Write request
dflet 0:bbe98578d4c0 839 will return without delay.
dflet 0:bbe98578d4c0 840 exceptsds - return the sockets closed recently.
dflet 0:bbe98578d4c0 841 SL_POOL_IS_EMPTY may be return in case there are no resources in the system
dflet 0:bbe98578d4c0 842 In this case try again later or increase MAX_CONCURRENT_ACTIONS
dflet 0:bbe98578d4c0 843
dflet 0:bbe98578d4c0 844 \sa sl_Socket
dflet 0:bbe98578d4c0 845 \note If the timeout value set to less than 5ms it will automatically set
dflet 0:bbe98578d4c0 846 to 5ms to prevent overload of the system
dflet 0:bbe98578d4c0 847 belongs to \ref basic_api
dflet 0:bbe98578d4c0 848
dflet 0:bbe98578d4c0 849 Only one sl_Select can be handled at a time.
dflet 0:bbe98578d4c0 850 Calling this API while the same command is called from another thread, may result
dflet 0:bbe98578d4c0 851 in one of the two scenarios:
dflet 0:bbe98578d4c0 852 1. The command will wait (internal) until the previous command finish, and then be executed.
dflet 0:bbe98578d4c0 853 2. There are not enough resources and SL_POOL_IS_EMPTY error will return.
dflet 0:bbe98578d4c0 854 In this case, MAX_CONCURRENT_ACTIONS can be increased (result in memory increase) or try
dflet 0:bbe98578d4c0 855 again later to issue the command.
dflet 0:bbe98578d4c0 856
dflet 0:bbe98578d4c0 857 \warning
dflet 0:bbe98578d4c0 858 */
dflet 0:bbe98578d4c0 859 #if _SL_INCLUDE_FUNC(sl_Select)
dflet 0:bbe98578d4c0 860 _i16 sl_Select(_i16 nfds, SlFdSet_t *readsds, SlFdSet_t *writesds, SlFdSet_t *exceptsds, struct SlTimeval_t *timeout);
dflet 0:bbe98578d4c0 861
dflet 0:bbe98578d4c0 862
dflet 0:bbe98578d4c0 863 /*!
dflet 0:bbe98578d4c0 864 \brief Select's SlFdSet_t SET function
dflet 0:bbe98578d4c0 865
dflet 0:bbe98578d4c0 866 Sets current socket descriptor on SlFdSet_t container
dflet 0:bbe98578d4c0 867 */
dflet 0:bbe98578d4c0 868 void SL_FD_SET(_i16 fd, SlFdSet_t *fdset);
dflet 0:bbe98578d4c0 869
dflet 0:bbe98578d4c0 870 /*!
dflet 0:bbe98578d4c0 871 \brief Select's SlFdSet_t CLR function
dflet 0:bbe98578d4c0 872
dflet 0:bbe98578d4c0 873 Clears current socket descriptor on SlFdSet_t container
dflet 0:bbe98578d4c0 874 */
dflet 0:bbe98578d4c0 875 void SL_FD_CLR(_i16 fd, SlFdSet_t *fdset);
dflet 0:bbe98578d4c0 876
dflet 0:bbe98578d4c0 877
dflet 0:bbe98578d4c0 878 /*!
dflet 0:bbe98578d4c0 879 \brief Select's SlFdSet_t ISSET function
dflet 0:bbe98578d4c0 880
dflet 0:bbe98578d4c0 881 Checks if current socket descriptor is set (TRUE/FALSE)
dflet 0:bbe98578d4c0 882
dflet 0:bbe98578d4c0 883 \return Returns TRUE if set, FALSE if unset
dflet 0:bbe98578d4c0 884
dflet 0:bbe98578d4c0 885 */
dflet 0:bbe98578d4c0 886 _i16 SL_FD_ISSET(_i16 fd, SlFdSet_t *fdset);
dflet 0:bbe98578d4c0 887
dflet 0:bbe98578d4c0 888 /*!
dflet 0:bbe98578d4c0 889 \brief Select's SlFdSet_t ZERO function
dflet 0:bbe98578d4c0 890
dflet 0:bbe98578d4c0 891 Clears all socket descriptors from SlFdSet_t
dflet 0:bbe98578d4c0 892 */
dflet 0:bbe98578d4c0 893 void SL_FD_ZERO(SlFdSet_t *fdset);
dflet 0:bbe98578d4c0 894
dflet 0:bbe98578d4c0 895
dflet 0:bbe98578d4c0 896
dflet 0:bbe98578d4c0 897 #endif
dflet 0:bbe98578d4c0 898
dflet 0:bbe98578d4c0 899 /*!
dflet 0:bbe98578d4c0 900 \brief set socket options
dflet 0:bbe98578d4c0 901
dflet 0:bbe98578d4c0 902 This function manipulate the options associated with a socket.
dflet 0:bbe98578d4c0 903 Options may exist at multiple protocol levels; they are always
dflet 0:bbe98578d4c0 904 present at the uppermost socket level.
dflet 0:bbe98578d4c0 905
dflet 0:bbe98578d4c0 906 When manipulating socket options the level at which the option resides
dflet 0:bbe98578d4c0 907 and the name of the option must be specified. To manipulate options at
dflet 0:bbe98578d4c0 908 the socket level, level is specified as SOL_SOCKET. To manipulate
dflet 0:bbe98578d4c0 909 options at any other level the protocol number of the appropriate proto-
dflet 0:bbe98578d4c0 910 col controlling the option is supplied. For example, to indicate that an
dflet 0:bbe98578d4c0 911 option is to be interpreted by the TCP protocol, level should be set to
dflet 0:bbe98578d4c0 912 the protocol number of TCP;
dflet 0:bbe98578d4c0 913
dflet 0:bbe98578d4c0 914 The parameters optval and optlen are used to access optval -
dflet 0:bbe98578d4c0 915 ues for setsockopt(). For getsockopt() they identify a
dflet 0:bbe98578d4c0 916 buffer in which the value for the requested option(s) are to
dflet 0:bbe98578d4c0 917 be returned. For getsockopt(), optlen is a value-result
dflet 0:bbe98578d4c0 918 parameter, initially containing the size of the buffer
dflet 0:bbe98578d4c0 919 pointed to by option_value, and modified on return to
dflet 0:bbe98578d4c0 920 indicate the actual size of the value returned. If no option
dflet 0:bbe98578d4c0 921 value is to be supplied or returned, option_value may be
dflet 0:bbe98578d4c0 922 NULL.
dflet 0:bbe98578d4c0 923
dflet 0:bbe98578d4c0 924 \param[in] sd socket handle
dflet 0:bbe98578d4c0 925 \param[in] level defines the protocol level for this option
dflet 0:bbe98578d4c0 926 - <b>SL_SOL_SOCKET</b> Socket level configurations (L4, transport layer)
dflet 0:bbe98578d4c0 927 - <b>SL_IPPROTO_IP</b> IP level configurations (L3, network layer)
dflet 0:bbe98578d4c0 928 - <b>SL_SOL_PHY_OPT</b> Link level configurations (L2, link layer)
dflet 0:bbe98578d4c0 929 \param[in] optname defines the option name to interrogate
dflet 0:bbe98578d4c0 930 - <b>SL_SOL_SOCKET</b>
dflet 0:bbe98578d4c0 931 - <b>SL_SO_KEEPALIVE</b> \n
dflet 0:bbe98578d4c0 932 Enable/Disable periodic keep alive.
dflet 0:bbe98578d4c0 933 Keeps TCP connections active by enabling the periodic transmission of messages \n
dflet 0:bbe98578d4c0 934 Timeout is 5 minutes.\n
dflet 0:bbe98578d4c0 935 Default: Enabled \n
dflet 0:bbe98578d4c0 936 This options takes SlSockKeepalive_t struct as parameter
dflet 0:bbe98578d4c0 937 - <b>SL_SO_RCVTIMEO</b> \n
dflet 0:bbe98578d4c0 938 Sets the timeout value that specifies the maximum amount of time an input function waits until it completes. \n
dflet 0:bbe98578d4c0 939 Default: No timeout \n
dflet 0:bbe98578d4c0 940 This options takes SlTimeval_t struct as parameter
dflet 0:bbe98578d4c0 941 - <b>SL_SO_RCVBUF</b> \n
dflet 0:bbe98578d4c0 942 Sets tcp max recv window size. \n
dflet 0:bbe98578d4c0 943 This options takes SlSockWinsize_t struct as parameter
dflet 0:bbe98578d4c0 944 - <b>SL_SO_NONBLOCKING</b> \n
dflet 0:bbe98578d4c0 945 Sets socket to non-blocking operation Impacts: connect, accept, send, sendto, recv and recvfrom. \n
dflet 0:bbe98578d4c0 946 Default: Blocking.
dflet 0:bbe98578d4c0 947 This options takes SlSockNonblocking_t struct as parameter
dflet 0:bbe98578d4c0 948 - <b>SL_SO_SECMETHOD</b> \n
dflet 0:bbe98578d4c0 949 Sets method to tcp secured socket (SL_SEC_SOCKET) \n
dflet 0:bbe98578d4c0 950 Default: SL_SO_SEC_METHOD_SSLv3_TLSV1_2 \n
dflet 0:bbe98578d4c0 951 This options takes SlSockSecureMethod struct as parameter
dflet 0:bbe98578d4c0 952 - <b>SL_SO_SEC_MASK</b> \n
dflet 0:bbe98578d4c0 953 Sets specific cipher to tcp secured socket (SL_SEC_SOCKET) \n
dflet 0:bbe98578d4c0 954 Default: "Best" cipher suitable to method \n
dflet 0:bbe98578d4c0 955 This options takes SlSockSecureMask struct as parameter
dflet 0:bbe98578d4c0 956 - <b>SL_SO_SECURE_FILES_CA_FILE_NAME</b> \n
dflet 0:bbe98578d4c0 957 Map secured socket to CA file by name \n
dflet 0:bbe98578d4c0 958 This options takes <b>_u8</b> buffer as parameter
dflet 0:bbe98578d4c0 959 - <b>SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME</b> \n
dflet 0:bbe98578d4c0 960 Map secured socket to private key by name \n
dflet 0:bbe98578d4c0 961 This options takes <b>_u8</b> buffer as parameter
dflet 0:bbe98578d4c0 962 - <b>SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME</b> \n
dflet 0:bbe98578d4c0 963 Map secured socket to certificate file by name \n
dflet 0:bbe98578d4c0 964 This options takes <b>_u8</b> buffer as parameter
dflet 0:bbe98578d4c0 965 - <b>SL_SO_SECURE_FILES_DH_KEY_FILE_NAME</b> \n
dflet 0:bbe98578d4c0 966 Map secured socket to Diffie Hellman file by name \n
dflet 0:bbe98578d4c0 967 This options takes <b>_u8</b> buffer as parameter
dflet 0:bbe98578d4c0 968 - <b>SL_SO_CHANGE_CHANNEL</b> \n
dflet 0:bbe98578d4c0 969 Sets channel in transceiver mode.
dflet 0:bbe98578d4c0 970 This options takes <b>_u32</b> as channel number parameter
dflet 0:bbe98578d4c0 971 - <b>SL_IPPROTO_IP</b>
dflet 0:bbe98578d4c0 972 - <b>SL_IP_MULTICAST_TTL</b> \n
dflet 0:bbe98578d4c0 973 Set the time-to-live value of outgoing multicast packets for this socket. \n
dflet 0:bbe98578d4c0 974 This options takes <b>_u8</b> as parameter
dflet 0:bbe98578d4c0 975 - <b>SL_IP_ADD_MEMBERSHIP</b> \n
dflet 0:bbe98578d4c0 976 UDP socket, Join a multicast group. \n
dflet 0:bbe98578d4c0 977 This options takes SlSockIpMreq struct as parameter
dflet 0:bbe98578d4c0 978 - <b>SL_IP_DROP_MEMBERSHIP</b> \n
dflet 0:bbe98578d4c0 979 UDP socket, Leave a multicast group \n
dflet 0:bbe98578d4c0 980 This options takes SlSockIpMreq struct as parameter
dflet 0:bbe98578d4c0 981 - <b>SL_IP_RAW_RX_NO_HEADER</b> \n
dflet 0:bbe98578d4c0 982 Raw socket remove IP header from received data. \n
dflet 0:bbe98578d4c0 983 Default: data includes ip header \n
dflet 0:bbe98578d4c0 984 This options takes <b>_u32</b> as parameter
dflet 0:bbe98578d4c0 985 - <b>SL_IP_HDRINCL</b> \n
dflet 0:bbe98578d4c0 986 RAW socket only, the IPv4 layer generates an IP header when sending a packet unless \n
dflet 0:bbe98578d4c0 987 the IP_HDRINCL socket option is enabled on the socket. \n
dflet 0:bbe98578d4c0 988 When it is enabled, the packet must contain an IP header. \n
dflet 0:bbe98578d4c0 989 Default: disabled, IPv4 header generated by Network Stack \n
dflet 0:bbe98578d4c0 990 This options takes <b>_u32</b> as parameter
dflet 0:bbe98578d4c0 991 - <b>SL_IP_RAW_IPV6_HDRINCL</b> (inactive) \n
dflet 0:bbe98578d4c0 992 RAW socket only, the IPv6 layer generates an IP header when sending a packet unless \n
dflet 0:bbe98578d4c0 993 the IP_HDRINCL socket option is enabled on the socket. When it is enabled, the packet must contain an IP header \n
dflet 0:bbe98578d4c0 994 Default: disabled, IPv4 header generated by Network Stack \n
dflet 0:bbe98578d4c0 995 This options takes <b>_u32</b> as parameter
dflet 0:bbe98578d4c0 996 - <b>SL_SOL_PHY_OPT</b>
dflet 0:bbe98578d4c0 997 - <b>SL_SO_PHY_RATE</b> \n
dflet 0:bbe98578d4c0 998 RAW socket, set WLAN PHY transmit rate \n
dflet 0:bbe98578d4c0 999 The values are based on RateIndex_e \n
dflet 0:bbe98578d4c0 1000 This options takes <b>_u32</b> as parameter
dflet 0:bbe98578d4c0 1001 - <b>SL_SO_PHY_TX_POWER</b> \n
dflet 0:bbe98578d4c0 1002 RAW socket, set WLAN PHY TX power \n
dflet 0:bbe98578d4c0 1003 Valid rage is 1-15 \n
dflet 0:bbe98578d4c0 1004 This options takes <b>_u32</b> as parameter
dflet 0:bbe98578d4c0 1005 - <b>SL_SO_PHY_NUM_FRAMES_TO_TX</b> \n
dflet 0:bbe98578d4c0 1006 RAW socket, set number of frames to transmit in transceiver mode.
dflet 0:bbe98578d4c0 1007 Default: 1 packet
dflet 0:bbe98578d4c0 1008 This options takes <b>_u32</b> as parameter
dflet 0:bbe98578d4c0 1009 - <b>SL_SO_PHY_PREAMBLE</b> \n
dflet 0:bbe98578d4c0 1010 RAW socket, set WLAN PHY preamble for Long/Short\n
dflet 0:bbe98578d4c0 1011 This options takes <b>_u32</b> as parameter
dflet 0:bbe98578d4c0 1012
dflet 0:bbe98578d4c0 1013 \param[in] optval specifies a value for the option
dflet 0:bbe98578d4c0 1014 \param[in] optlen specifies the length of the
dflet 0:bbe98578d4c0 1015 option value
dflet 0:bbe98578d4c0 1016
dflet 0:bbe98578d4c0 1017 \return On success, zero is returned.
dflet 0:bbe98578d4c0 1018 On error, a negative value is returned.
dflet 0:bbe98578d4c0 1019 \sa sl_getsockopt
dflet 0:bbe98578d4c0 1020 \note belongs to \ref basic_api
dflet 0:bbe98578d4c0 1021 \warning
dflet 0:bbe98578d4c0 1022 \par Examples:
dflet 0:bbe98578d4c0 1023 \par
dflet 0:bbe98578d4c0 1024 <b> SL_SO_KEEPALIVE: </b>(disable Keepalive)
dflet 0:bbe98578d4c0 1025 \code
dflet 0:bbe98578d4c0 1026 SlSockKeepalive_t enableOption;
dflet 0:bbe98578d4c0 1027 enableOption.KeepaliveEnabled = 0;
dflet 0:bbe98578d4c0 1028 sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_KEEPALIVE, (_u8 *)&enableOption,sizeof(enableOption));
dflet 0:bbe98578d4c0 1029 \endcode
dflet 0:bbe98578d4c0 1030 \par
dflet 0:bbe98578d4c0 1031 <b> SL_SO_RCVTIMEO: </b>
dflet 0:bbe98578d4c0 1032 \code
dflet 0:bbe98578d4c0 1033 struct SlTimeval_t timeVal;
dflet 0:bbe98578d4c0 1034 timeVal.tv_sec = 1; // Seconds
dflet 0:bbe98578d4c0 1035 timeVal.tv_usec = 0; // Microseconds. 10000 microseconds resolution
dflet 0:bbe98578d4c0 1036 sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_RCVTIMEO, (_u8 *)&timeVal, sizeof(timeVal)); // Enable receive timeout
dflet 0:bbe98578d4c0 1037 \endcode
dflet 0:bbe98578d4c0 1038 \par
dflet 0:bbe98578d4c0 1039 <b> SL_SO_RCVBUF: </b>
dflet 0:bbe98578d4c0 1040 \code
dflet 0:bbe98578d4c0 1041 SlSockWinsize_t size;
dflet 0:bbe98578d4c0 1042 size.Winsize = 3000; // bytes
dflet 0:bbe98578d4c0 1043 sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_RCVBUF, (_u8 *)&size, sizeof(size));
dflet 0:bbe98578d4c0 1044 \endcode
dflet 0:bbe98578d4c0 1045 \par
dflet 0:bbe98578d4c0 1046 <b> SL_SO_NONBLOCKING: </b>
dflet 0:bbe98578d4c0 1047 \code
dflet 0:bbe98578d4c0 1048 SlSockNonblocking_t enableOption;
dflet 0:bbe98578d4c0 1049 enableOption.NonblockingEnabled = 1;
dflet 0:bbe98578d4c0 1050 sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_NONBLOCKING, (_u8 *)&enableOption,sizeof(enableOption)); // Enable/disable nonblocking mode
dflet 0:bbe98578d4c0 1051 \endcode
dflet 0:bbe98578d4c0 1052 \par
dflet 0:bbe98578d4c0 1053 <b> SL_SO_SECMETHOD:</b>
dflet 0:bbe98578d4c0 1054 \code
dflet 0:bbe98578d4c0 1055 SlSockSecureMethod method;
dflet 0:bbe98578d4c0 1056 method.secureMethod = SL_SO_SEC_METHOD_SSLV3; // security method we want to use
dflet 0:bbe98578d4c0 1057 SockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, SL_SEC_SOCKET);
dflet 0:bbe98578d4c0 1058 sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_SECMETHOD, (_u8 *)&method, sizeof(method));
dflet 0:bbe98578d4c0 1059 \endcode
dflet 0:bbe98578d4c0 1060 \par
dflet 0:bbe98578d4c0 1061 <b> SL_SO_SECURE_MASK:</b>
dflet 0:bbe98578d4c0 1062 \code
dflet 0:bbe98578d4c0 1063 SlSockSecureMask cipher;
dflet 0:bbe98578d4c0 1064 cipher.secureMask = SL_SEC_MASK_SSL_RSA_WITH_RC4_128_SHA; // cipher type
dflet 0:bbe98578d4c0 1065 SockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, SL_SEC_SOCKET);
dflet 0:bbe98578d4c0 1066 sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_SEC_MASK,(_u8 *)&cipher, sizeof(cipher));
dflet 0:bbe98578d4c0 1067 \endcode
dflet 0:bbe98578d4c0 1068 \par
dflet 0:bbe98578d4c0 1069 <b> SL_SO_SECURE_FILES_CA_FILE_NAME:</b>
dflet 0:bbe98578d4c0 1070 \code
dflet 0:bbe98578d4c0 1071 sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_SECURE_FILES_CA_FILE_NAME,"exuifaxCaCert.der",strlen("exuifaxCaCert.der"));
dflet 0:bbe98578d4c0 1072 \endcode
dflet 0:bbe98578d4c0 1073
dflet 0:bbe98578d4c0 1074 \par
dflet 0:bbe98578d4c0 1075 <b> SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME:</b>
dflet 0:bbe98578d4c0 1076 \code
dflet 0:bbe98578d4c0 1077 sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME,"myPrivateKey.der",strlen("myPrivateKey.der"));
dflet 0:bbe98578d4c0 1078 \endcode
dflet 0:bbe98578d4c0 1079
dflet 0:bbe98578d4c0 1080 \par
dflet 0:bbe98578d4c0 1081 <b> SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME:</b>
dflet 0:bbe98578d4c0 1082 \code
dflet 0:bbe98578d4c0 1083 sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME,"myCertificate.der",strlen("myCertificate.der"));
dflet 0:bbe98578d4c0 1084 \endcode
dflet 0:bbe98578d4c0 1085
dflet 0:bbe98578d4c0 1086 \par
dflet 0:bbe98578d4c0 1087 <b> SL_SO_SECURE_FILES_DH_KEY_FILE_NAME:</b>
dflet 0:bbe98578d4c0 1088 \code
dflet 0:bbe98578d4c0 1089 sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_SECURE_FILES_DH_KEY_FILE_NAME,"myDHinServerMode.der",strlen("myDHinServerMode.der"));
dflet 0:bbe98578d4c0 1090 \endcode
dflet 0:bbe98578d4c0 1091
dflet 0:bbe98578d4c0 1092 \par
dflet 0:bbe98578d4c0 1093 <b> SL_IP_MULTICAST_TTL:</b>
dflet 0:bbe98578d4c0 1094 \code
dflet 0:bbe98578d4c0 1095 _u8 ttl = 20;
dflet 0:bbe98578d4c0 1096 sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_MULTICAST_TTL, &ttl, sizeof(ttl));
dflet 0:bbe98578d4c0 1097 \endcode
dflet 0:bbe98578d4c0 1098
dflet 0:bbe98578d4c0 1099 \par
dflet 0:bbe98578d4c0 1100 <b> SL_IP_ADD_MEMBERSHIP:</b>
dflet 0:bbe98578d4c0 1101 \code
dflet 0:bbe98578d4c0 1102 SlSockIpMreq mreq;
dflet 0:bbe98578d4c0 1103 sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
dflet 0:bbe98578d4c0 1104 \endcode
dflet 0:bbe98578d4c0 1105
dflet 0:bbe98578d4c0 1106 \par
dflet 0:bbe98578d4c0 1107 <b> SL_IP_DROP_MEMBERSHIP:</b>
dflet 0:bbe98578d4c0 1108 \code
dflet 0:bbe98578d4c0 1109 SlSockIpMreq mreq;
dflet 0:bbe98578d4c0 1110 sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
dflet 0:bbe98578d4c0 1111 \endcode
dflet 0:bbe98578d4c0 1112
dflet 0:bbe98578d4c0 1113 \par
dflet 0:bbe98578d4c0 1114 <b> SL_SO_CHANGE_CHANNEL:</b>
dflet 0:bbe98578d4c0 1115 \code
dflet 0:bbe98578d4c0 1116 _u32 newChannel = 6; // range is 1-13
dflet 0:bbe98578d4c0 1117 sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_CHANGE_CHANNEL, &newChannel, sizeof(newChannel));
dflet 0:bbe98578d4c0 1118 \endcode
dflet 0:bbe98578d4c0 1119
dflet 0:bbe98578d4c0 1120 \par
dflet 0:bbe98578d4c0 1121 <b> SL_IP_RAW_RX_NO_HEADER:</b>
dflet 0:bbe98578d4c0 1122 \code
dflet 0:bbe98578d4c0 1123 _u32 header = 1; // remove ip header
dflet 0:bbe98578d4c0 1124 sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_RAW_RX_NO_HEADER, &header, sizeof(header));
dflet 0:bbe98578d4c0 1125 \endcode
dflet 0:bbe98578d4c0 1126
dflet 0:bbe98578d4c0 1127 \par
dflet 0:bbe98578d4c0 1128 <b> SL_IP_HDRINCL:</b>
dflet 0:bbe98578d4c0 1129 \code
dflet 0:bbe98578d4c0 1130 _u32 header = 1;
dflet 0:bbe98578d4c0 1131 sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_HDRINCL, &header, sizeof(header));
dflet 0:bbe98578d4c0 1132 \endcode
dflet 0:bbe98578d4c0 1133 \par
dflet 0:bbe98578d4c0 1134 <b> SL_IP_RAW_IPV6_HDRINCL:</b>
dflet 0:bbe98578d4c0 1135 \code
dflet 0:bbe98578d4c0 1136 _u32 header = 1;
dflet 0:bbe98578d4c0 1137 sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_RAW_IPV6_HDRINCL, &header, sizeof(header));
dflet 0:bbe98578d4c0 1138 \endcode
dflet 0:bbe98578d4c0 1139
dflet 0:bbe98578d4c0 1140 \par
dflet 0:bbe98578d4c0 1141 <b> SL_SO_PHY_RATE:</b>
dflet 0:bbe98578d4c0 1142 \code
dflet 0:bbe98578d4c0 1143 _u32 rate = 6; // see wlan.h RateIndex_e for values
dflet 0:bbe98578d4c0 1144 sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_RATE, &rate, sizeof(rate));
dflet 0:bbe98578d4c0 1145 \endcode
dflet 0:bbe98578d4c0 1146
dflet 0:bbe98578d4c0 1147 \par
dflet 0:bbe98578d4c0 1148 <b> SL_SO_PHY_TX_POWER:</b>
dflet 0:bbe98578d4c0 1149 \code
dflet 0:bbe98578d4c0 1150 _u32 txpower = 1; // valid range is 1-15
dflet 0:bbe98578d4c0 1151 sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_TX_POWER, &txpower, sizeof(txpower));
dflet 0:bbe98578d4c0 1152 \endcode
dflet 0:bbe98578d4c0 1153
dflet 0:bbe98578d4c0 1154 \par
dflet 0:bbe98578d4c0 1155 <b> SL_SO_PHY_NUM_FRAMES_TO_TX:</b>
dflet 0:bbe98578d4c0 1156 \code
dflet 0:bbe98578d4c0 1157 _u32 numframes = 1;
dflet 0:bbe98578d4c0 1158 sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_NUM_FRAMES_TO_TX, &numframes, sizeof(numframes));
dflet 0:bbe98578d4c0 1159 \endcode
dflet 0:bbe98578d4c0 1160
dflet 0:bbe98578d4c0 1161 \par
dflet 0:bbe98578d4c0 1162 <b> SL_SO_PHY_PREAMBLE:</b>
dflet 0:bbe98578d4c0 1163 \code
dflet 0:bbe98578d4c0 1164 _u32 preamble = 1;
dflet 0:bbe98578d4c0 1165 sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_PREAMBLE, &preamble, sizeof(preamble));
dflet 0:bbe98578d4c0 1166 \endcode
dflet 0:bbe98578d4c0 1167
dflet 0:bbe98578d4c0 1168 */
dflet 0:bbe98578d4c0 1169 #if _SL_INCLUDE_FUNC(sl_SetSockOpt)
dflet 0:bbe98578d4c0 1170 _i16 sl_SetSockOpt(_i16 sd, _i16 level, _i16 optname, const void *optval, SlSocklen_t optlen);
dflet 0:bbe98578d4c0 1171 #endif
dflet 0:bbe98578d4c0 1172
dflet 0:bbe98578d4c0 1173 /*!
dflet 0:bbe98578d4c0 1174 \brief Get socket options
dflet 0:bbe98578d4c0 1175
dflet 0:bbe98578d4c0 1176 This function manipulate the options associated with a socket.
dflet 0:bbe98578d4c0 1177 Options may exist at multiple protocol levels; they are always
dflet 0:bbe98578d4c0 1178 present at the uppermost socket level.
dflet 0:bbe98578d4c0 1179
dflet 0:bbe98578d4c0 1180 When manipulating socket options the level at which the option resides
dflet 0:bbe98578d4c0 1181 and the name of the option must be specified. To manipulate options at
dflet 0:bbe98578d4c0 1182 the socket level, level is specified as SOL_SOCKET. To manipulate
dflet 0:bbe98578d4c0 1183 options at any other level the protocol number of the appropriate proto-
dflet 0:bbe98578d4c0 1184 col controlling the option is supplied. For example, to indicate that an
dflet 0:bbe98578d4c0 1185 option is to be interpreted by the TCP protocol, level should be set to
dflet 0:bbe98578d4c0 1186 the protocol number of TCP;
dflet 0:bbe98578d4c0 1187
dflet 0:bbe98578d4c0 1188 The parameters optval and optlen are used to access optval -
dflet 0:bbe98578d4c0 1189 ues for setsockopt(). For getsockopt() they identify a
dflet 0:bbe98578d4c0 1190 buffer in which the value for the requested option(s) are to
dflet 0:bbe98578d4c0 1191 be returned. For getsockopt(), optlen is a value-result
dflet 0:bbe98578d4c0 1192 parameter, initially containing the size of the buffer
dflet 0:bbe98578d4c0 1193 pointed to by option_value, and modified on return to
dflet 0:bbe98578d4c0 1194 indicate the actual size of the value returned. If no option
dflet 0:bbe98578d4c0 1195 value is to be supplied or returned, option_value may be
dflet 0:bbe98578d4c0 1196 NULL.
dflet 0:bbe98578d4c0 1197
dflet 0:bbe98578d4c0 1198
dflet 0:bbe98578d4c0 1199 \param[in] sd socket handle
dflet 0:bbe98578d4c0 1200 \param[in] level defines the protocol level for this option
dflet 0:bbe98578d4c0 1201 \param[in] optname defines the option name to interrogate
dflet 0:bbe98578d4c0 1202 \param[out] optval specifies a value for the option
dflet 0:bbe98578d4c0 1203 \param[out] optlen specifies the length of the
dflet 0:bbe98578d4c0 1204 option value
dflet 0:bbe98578d4c0 1205
dflet 0:bbe98578d4c0 1206 \return On success, zero is returned.
dflet 0:bbe98578d4c0 1207 On error, a negative value is returned.
dflet 0:bbe98578d4c0 1208 \sa sl_SetSockOpt
dflet 0:bbe98578d4c0 1209 \note See sl_SetSockOpt
dflet 0:bbe98578d4c0 1210 belongs to \ref ext_api
dflet 0:bbe98578d4c0 1211 \warning
dflet 0:bbe98578d4c0 1212 */
dflet 0:bbe98578d4c0 1213 #if _SL_INCLUDE_FUNC(sl_GetSockOpt)
dflet 0:bbe98578d4c0 1214 _i16 sl_GetSockOpt(_i16 sd, _i16 level, _i16 optname, void *optval, SlSocklen_t *optlen);
dflet 0:bbe98578d4c0 1215 #endif
dflet 0:bbe98578d4c0 1216
dflet 0:bbe98578d4c0 1217 /*!
dflet 0:bbe98578d4c0 1218 \brief read data from TCP socket
dflet 0:bbe98578d4c0 1219
dflet 0:bbe98578d4c0 1220 function receives a message from a connection-mode socket
dflet 0:bbe98578d4c0 1221
dflet 0:bbe98578d4c0 1222 \param[in] sd socket handle
dflet 0:bbe98578d4c0 1223 \param[out] buf Points to the buffer where the
dflet 0:bbe98578d4c0 1224 message should be stored.
dflet 0:bbe98578d4c0 1225 \param[in] Len Specifies the length in bytes of
dflet 0:bbe98578d4c0 1226 the buffer pointed to by the buffer argument.
dflet 0:bbe98578d4c0 1227 Range: 1-16000 bytes
dflet 0:bbe98578d4c0 1228 \param[in] flags Specifies the type of message
dflet 0:bbe98578d4c0 1229 reception. On this version, this parameter is not
dflet 0:bbe98578d4c0 1230 supported.
dflet 0:bbe98578d4c0 1231
dflet 0:bbe98578d4c0 1232 \return return the number of bytes received,
dflet 0:bbe98578d4c0 1233 or a negative value if an error occurred.
dflet 0:bbe98578d4c0 1234 using a non-blocking recv a possible negative value is SL_EAGAIN.
dflet 0:bbe98578d4c0 1235 SL_POOL_IS_EMPTY may be return in case there are no resources in the system
dflet 0:bbe98578d4c0 1236 In this case try again later or increase MAX_CONCURRENT_ACTIONS
dflet 0:bbe98578d4c0 1237
dflet 0:bbe98578d4c0 1238 \sa sl_RecvFrom
dflet 0:bbe98578d4c0 1239 \note belongs to \ref recv_api
dflet 0:bbe98578d4c0 1240 \warning
dflet 0:bbe98578d4c0 1241 \par Examples:
dflet 0:bbe98578d4c0 1242 \code An example of receiving data using TCP socket:
dflet 0:bbe98578d4c0 1243
dflet 0:bbe98578d4c0 1244 SlSockAddrIn_t Addr;
dflet 0:bbe98578d4c0 1245 SlSockAddrIn_t LocalAddr;
dflet 0:bbe98578d4c0 1246 _i16 AddrSize = sizeof(SlSockAddrIn_t);
dflet 0:bbe98578d4c0 1247 _i16 SockID, newSockID;
dflet 0:bbe98578d4c0 1248 _i16 Status;
dflet 0:bbe98578d4c0 1249 _i8 Buf[RECV_BUF_LEN];
dflet 0:bbe98578d4c0 1250
dflet 0:bbe98578d4c0 1251 LocalAddr.sin_family = SL_AF_INET;
dflet 0:bbe98578d4c0 1252 LocalAddr.sin_port = sl_Htons(5001);
dflet 0:bbe98578d4c0 1253 LocalAddr.sin_addr.s_addr = 0;
dflet 0:bbe98578d4c0 1254
dflet 0:bbe98578d4c0 1255 Addr.sin_family = SL_AF_INET;
dflet 0:bbe98578d4c0 1256 Addr.sin_port = sl_Htons(5001);
dflet 0:bbe98578d4c0 1257 Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(10,1,1,200));
dflet 0:bbe98578d4c0 1258
dflet 0:bbe98578d4c0 1259 SockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);
dflet 0:bbe98578d4c0 1260 Status = sl_Bind(SockID, (SlSockAddr_t *)&LocalAddr, AddrSize);
dflet 0:bbe98578d4c0 1261 Status = sl_Listen(SockID, 0);
dflet 0:bbe98578d4c0 1262 newSockID = sl_Accept(SockID, (SlSockAddr_t*)&Addr, (SlSocklen_t*) &AddrSize);
dflet 0:bbe98578d4c0 1263 Status = sl_Recv(newSockID, Buf, 1460, 0);
dflet 0:bbe98578d4c0 1264 \endcode
dflet 0:bbe98578d4c0 1265 \code Example code for Rx transceiver mode using a raw socket
dflet 0:bbe98578d4c0 1266 _i8 buffer[1536];
dflet 0:bbe98578d4c0 1267 _i16 sd;
dflet 0:bbe98578d4c0 1268 _u16 size;
dflet 0:bbe98578d4c0 1269 SlTransceiverRxOverHead_t *transHeader;
dflet 0:bbe98578d4c0 1270 sd = sl_Socket(SL_AF_RF,SL_SOCK_RAW,11); // channel 11
dflet 0:bbe98578d4c0 1271 while(1)
dflet 0:bbe98578d4c0 1272 {
dflet 0:bbe98578d4c0 1273 size = sl_Recv(sd,buffer,1536,0);
dflet 0:bbe98578d4c0 1274 transHeader = (SlTransceiverRxOverHead_t *)buffer;
dflet 0:bbe98578d4c0 1275 printf("RSSI is %d frame type is 0x%x size %d\n",transHeader->rssi,buffer[sizeof(SlTransceiverRxOverHead_t)],size);
dflet 0:bbe98578d4c0 1276 }
dflet 0:bbe98578d4c0 1277 \endcode
dflet 0:bbe98578d4c0 1278 */
dflet 0:bbe98578d4c0 1279 #if _SL_INCLUDE_FUNC(sl_Recv)
dflet 0:bbe98578d4c0 1280 _i16 sl_Recv(_i16 sd, void *buf, _i16 Len, _i16 flags);
dflet 0:bbe98578d4c0 1281 #endif
dflet 0:bbe98578d4c0 1282
dflet 0:bbe98578d4c0 1283 /*!
dflet 0:bbe98578d4c0 1284 \brief read data from socket
dflet 0:bbe98578d4c0 1285
dflet 0:bbe98578d4c0 1286 function receives a message from a connection-mode or
dflet 0:bbe98578d4c0 1287 connectionless-mode socket
dflet 0:bbe98578d4c0 1288
dflet 0:bbe98578d4c0 1289 \param[in] sd socket handle
dflet 0:bbe98578d4c0 1290 \param[out] buf Points to the buffer where the message should be stored.
dflet 0:bbe98578d4c0 1291 \param[in] Len Specifies the length in bytes of the buffer pointed to by the buffer argument.
dflet 0:bbe98578d4c0 1292 Range: 1-16000 bytes
dflet 0:bbe98578d4c0 1293 \param[in] flags Specifies the type of message
dflet 0:bbe98578d4c0 1294 reception. On this version, this parameter is not
dflet 0:bbe98578d4c0 1295 supported.
dflet 0:bbe98578d4c0 1296 \param[in] from pointer to an address structure
dflet 0:bbe98578d4c0 1297 indicating the source
dflet 0:bbe98578d4c0 1298 address.\n sockaddr:\n - code
dflet 0:bbe98578d4c0 1299 for the address format. On this
dflet 0:bbe98578d4c0 1300 version only AF_INET is
dflet 0:bbe98578d4c0 1301 supported.\n - socket address,
dflet 0:bbe98578d4c0 1302 the length depends on the code
dflet 0:bbe98578d4c0 1303 format
dflet 0:bbe98578d4c0 1304 \param[in] fromlen source address structure
dflet 0:bbe98578d4c0 1305 size. This parameter MUST be set to the size of the structure pointed to by addr.
dflet 0:bbe98578d4c0 1306
dflet 0:bbe98578d4c0 1307
dflet 0:bbe98578d4c0 1308 \return return the number of bytes received,
dflet 0:bbe98578d4c0 1309 or a negative value if an error occurred.
dflet 0:bbe98578d4c0 1310 using a non-blocking recv a possible negative value is SL_EAGAIN.
dflet 0:bbe98578d4c0 1311 SL_RET_CODE_INVALID_INPUT (-2) will be returned if fromlen has incorrect length.
dflet 0:bbe98578d4c0 1312 SL_POOL_IS_EMPTY may be return in case there are no resources in the system
dflet 0:bbe98578d4c0 1313 In this case try again later or increase MAX_CONCURRENT_ACTIONS
dflet 0:bbe98578d4c0 1314
dflet 0:bbe98578d4c0 1315 \sa sl_Recv
dflet 0:bbe98578d4c0 1316 \note belongs to \ref recv_api
dflet 0:bbe98578d4c0 1317 \warning
dflet 0:bbe98578d4c0 1318 \par Example:
dflet 0:bbe98578d4c0 1319 \code An example of receiving data:
dflet 0:bbe98578d4c0 1320
dflet 0:bbe98578d4c0 1321 SlSockAddrIn_t Addr;
dflet 0:bbe98578d4c0 1322 SlSockAddrIn_t LocalAddr;
dflet 0:bbe98578d4c0 1323 _i16 AddrSize = sizeof(SlSockAddrIn_t);
dflet 0:bbe98578d4c0 1324 _i16 SockID;
dflet 0:bbe98578d4c0 1325 _i16 Status;
dflet 0:bbe98578d4c0 1326 _i8 Buf[RECV_BUF_LEN];
dflet 0:bbe98578d4c0 1327
dflet 0:bbe98578d4c0 1328 LocalAddr.sin_family = SL_AF_INET;
dflet 0:bbe98578d4c0 1329 LocalAddr.sin_port = sl_Htons(5001);
dflet 0:bbe98578d4c0 1330 LocalAddr.sin_addr.s_addr = 0;
dflet 0:bbe98578d4c0 1331
dflet 0:bbe98578d4c0 1332 SockID = sl_Socket(SL_AF_INET,SL_SOCK_DGRAM, 0);
dflet 0:bbe98578d4c0 1333 Status = sl_Bind(SockID, (SlSockAddr_t *)&LocalAddr, AddrSize);
dflet 0:bbe98578d4c0 1334 Status = sl_RecvFrom(SockID, Buf, 1472, 0, (SlSockAddr_t *)&Addr, (SlSocklen_t*)&AddrSize);
dflet 0:bbe98578d4c0 1335
dflet 0:bbe98578d4c0 1336 \endcode
dflet 0:bbe98578d4c0 1337 */
dflet 0:bbe98578d4c0 1338 #if _SL_INCLUDE_FUNC(sl_RecvFrom)
dflet 0:bbe98578d4c0 1339 _i16 sl_RecvFrom(_i16 sd, void *buf, _i16 Len, _i16 flags, SlSockAddr_t *from, SlSocklen_t *fromlen);
dflet 0:bbe98578d4c0 1340 #endif
dflet 0:bbe98578d4c0 1341
dflet 0:bbe98578d4c0 1342 /*!
dflet 0:bbe98578d4c0 1343 \brief write data to TCP socket
dflet 0:bbe98578d4c0 1344
dflet 0:bbe98578d4c0 1345 This function is used to transmit a message to another socket.
dflet 0:bbe98578d4c0 1346 Returns immediately after sending data to device.
dflet 0:bbe98578d4c0 1347 In case of TCP failure an async event SL_SOCKET_TX_FAILED_EVENT is going to
dflet 0:bbe98578d4c0 1348 be received.
dflet 0:bbe98578d4c0 1349 In case of a RAW socket (transceiver mode), extra 4 bytes should be reserved at the end of the
dflet 0:bbe98578d4c0 1350 frame data buffer for WLAN FCS
dflet 0:bbe98578d4c0 1351
dflet 0:bbe98578d4c0 1352 \param[in] sd socket handle
dflet 0:bbe98578d4c0 1353 \param[in] buf Points to a buffer containing
dflet 0:bbe98578d4c0 1354 the message to be sent
dflet 0:bbe98578d4c0 1355 \param[in] Len message size in bytes. Range: 1-1460 bytes
dflet 0:bbe98578d4c0 1356 \param[in] flags Specifies the type of message
dflet 0:bbe98578d4c0 1357 transmission. On this version, this parameter is not
dflet 0:bbe98578d4c0 1358 supported for TCP.
dflet 0:bbe98578d4c0 1359 For transceiver mode, the SL_RAW_RF_TX_PARAMS macro can be used to determine
dflet 0:bbe98578d4c0 1360 transmission parameters (channel,rate,tx_power,preamble)
dflet 0:bbe98578d4c0 1361
dflet 0:bbe98578d4c0 1362
dflet 0:bbe98578d4c0 1363 \return Return the number of bytes transmitted,
dflet 0:bbe98578d4c0 1364 or -1 if an error occurred
dflet 0:bbe98578d4c0 1365
dflet 0:bbe98578d4c0 1366 \sa sl_SendTo
dflet 0:bbe98578d4c0 1367 \note belongs to \ref send_api
dflet 0:bbe98578d4c0 1368 \warning
dflet 0:bbe98578d4c0 1369 \par Example:
dflet 0:bbe98578d4c0 1370 \code An example of sending data:
dflet 0:bbe98578d4c0 1371
dflet 0:bbe98578d4c0 1372 SlSockAddrIn_t Addr;
dflet 0:bbe98578d4c0 1373 _i16 AddrSize = sizeof(SlSockAddrIn_t);
dflet 0:bbe98578d4c0 1374 _i16 SockID;
dflet 0:bbe98578d4c0 1375 _i16 Status;
dflet 0:bbe98578d4c0 1376 _i8 Buf[SEND_BUF_LEN];
dflet 0:bbe98578d4c0 1377
dflet 0:bbe98578d4c0 1378 Addr.sin_family = SL_AF_INET;
dflet 0:bbe98578d4c0 1379 Addr.sin_port = sl_Htons(5001);
dflet 0:bbe98578d4c0 1380 Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(10,1,1,200));
dflet 0:bbe98578d4c0 1381
dflet 0:bbe98578d4c0 1382 SockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);
dflet 0:bbe98578d4c0 1383 Status = sl_Connect(SockID, (SlSockAddr_t *)&Addr, AddrSize);
dflet 0:bbe98578d4c0 1384 Status = sl_Send(SockID, Buf, 1460, 0 );
dflet 0:bbe98578d4c0 1385
dflet 0:bbe98578d4c0 1386 \endcode
dflet 0:bbe98578d4c0 1387 */
dflet 0:bbe98578d4c0 1388 #if _SL_INCLUDE_FUNC(sl_Send )
dflet 0:bbe98578d4c0 1389 _i16 sl_Send(_i16 sd, const void *buf, _i16 Len, _i16 flags);
dflet 0:bbe98578d4c0 1390 #endif
dflet 0:bbe98578d4c0 1391
dflet 0:bbe98578d4c0 1392 /*!
dflet 0:bbe98578d4c0 1393 \brief write data to socket
dflet 0:bbe98578d4c0 1394
dflet 0:bbe98578d4c0 1395 This function is used to transmit a message to another socket
dflet 0:bbe98578d4c0 1396 (connection less socket SOCK_DGRAM, SOCK_RAW).
dflet 0:bbe98578d4c0 1397 Returns immediately after sending data to device.
dflet 0:bbe98578d4c0 1398 In case of transmission failure an async event SL_SOCKET_TX_FAILED_EVENT is going to
dflet 0:bbe98578d4c0 1399 be received.
dflet 0:bbe98578d4c0 1400
dflet 0:bbe98578d4c0 1401 \param[in] sd socket handle
dflet 0:bbe98578d4c0 1402 \param[in] buf Points to a buffer containing
dflet 0:bbe98578d4c0 1403 the message to be sent
dflet 0:bbe98578d4c0 1404 \param[in] Len message size in bytes. Range: 1-1460 bytes
dflet 0:bbe98578d4c0 1405 \param[in] flags Specifies the type of message
dflet 0:bbe98578d4c0 1406 transmission. On this version, this parameter is not
dflet 0:bbe98578d4c0 1407 supported
dflet 0:bbe98578d4c0 1408 \param[in] to pointer to an address structure
dflet 0:bbe98578d4c0 1409 indicating the destination
dflet 0:bbe98578d4c0 1410 address.\n sockaddr:\n - code
dflet 0:bbe98578d4c0 1411 for the address format. On this
dflet 0:bbe98578d4c0 1412 version only AF_INET is
dflet 0:bbe98578d4c0 1413 supported.\n - socket address,
dflet 0:bbe98578d4c0 1414 the length depends on the code
dflet 0:bbe98578d4c0 1415 format
dflet 0:bbe98578d4c0 1416 \param[in] tolen destination address structure size
dflet 0:bbe98578d4c0 1417
dflet 0:bbe98578d4c0 1418 \return Return the number of transmitted bytes,
dflet 0:bbe98578d4c0 1419 or -1 if an error occurred
dflet 0:bbe98578d4c0 1420
dflet 0:bbe98578d4c0 1421 \sa sl_Send
dflet 0:bbe98578d4c0 1422 \note belongs to \ref send_api
dflet 0:bbe98578d4c0 1423 \warning
dflet 0:bbe98578d4c0 1424 \par Example:
dflet 0:bbe98578d4c0 1425 \code An example of sending data:
dflet 0:bbe98578d4c0 1426
dflet 0:bbe98578d4c0 1427 SlSockAddrIn_t Addr;
dflet 0:bbe98578d4c0 1428 _i16 AddrSize = sizeof(SlSockAddrIn_t);
dflet 0:bbe98578d4c0 1429 _i16 SockID;
dflet 0:bbe98578d4c0 1430 _i16 Status;
dflet 0:bbe98578d4c0 1431 _i8 Buf[SEND_BUF_LEN];
dflet 0:bbe98578d4c0 1432
dflet 0:bbe98578d4c0 1433 Addr.sin_family = SL_AF_INET;
dflet 0:bbe98578d4c0 1434 Addr.sin_port = sl_Htons(5001);
dflet 0:bbe98578d4c0 1435 Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(10,1,1,200));
dflet 0:bbe98578d4c0 1436
dflet 0:bbe98578d4c0 1437 SockID = sl_Socket(SL_AF_INET,SL_SOCK_DGRAM, 0);
dflet 0:bbe98578d4c0 1438 Status = sl_SendTo(SockID, Buf, 1472, 0, (SlSockAddr_t *)&Addr, AddrSize);
dflet 0:bbe98578d4c0 1439
dflet 0:bbe98578d4c0 1440 \endcode
dflet 0:bbe98578d4c0 1441 */
dflet 0:bbe98578d4c0 1442 #if _SL_INCLUDE_FUNC(sl_SendTo)
dflet 0:bbe98578d4c0 1443 _i16 sl_SendTo(_i16 sd, const void *buf, _i16 Len, _i16 flags, const SlSockAddr_t *to, SlSocklen_t tolen);
dflet 0:bbe98578d4c0 1444 #endif
dflet 0:bbe98578d4c0 1445
dflet 0:bbe98578d4c0 1446 /*!
dflet 0:bbe98578d4c0 1447 \brief Reorder the bytes of a 32-bit unsigned value
dflet 0:bbe98578d4c0 1448
dflet 0:bbe98578d4c0 1449 This function is used to Reorder the bytes of a 32-bit unsigned value from processor order to network order.
dflet 0:bbe98578d4c0 1450
dflet 0:bbe98578d4c0 1451 \param[in] var variable to reorder
dflet 0:bbe98578d4c0 1452
dflet 0:bbe98578d4c0 1453 \return Return the reorder variable,
dflet 0:bbe98578d4c0 1454
dflet 0:bbe98578d4c0 1455 \sa sl_SendTo sl_Bind sl_Connect sl_RecvFrom sl_Accept
dflet 0:bbe98578d4c0 1456 \note belongs to \ref send_api
dflet 0:bbe98578d4c0 1457 \warning
dflet 0:bbe98578d4c0 1458 */
dflet 0:bbe98578d4c0 1459 #if _SL_INCLUDE_FUNC(sl_Htonl )
dflet 0:bbe98578d4c0 1460 _u32 sl_Htonl( _u32 val );
dflet 0:bbe98578d4c0 1461
dflet 0:bbe98578d4c0 1462 #define sl_Ntohl sl_Htonl /* Reorder the bytes of a 16-bit unsigned value from network order to processor orde. */
dflet 0:bbe98578d4c0 1463 #endif
dflet 0:bbe98578d4c0 1464
dflet 0:bbe98578d4c0 1465 /*!
dflet 0:bbe98578d4c0 1466 \brief Reorder the bytes of a 16-bit unsigned value
dflet 0:bbe98578d4c0 1467
dflet 0:bbe98578d4c0 1468 This function is used to Reorder the bytes of a 16-bit unsigned value from processor order to network order.
dflet 0:bbe98578d4c0 1469
dflet 0:bbe98578d4c0 1470 \param[in] var variable to reorder
dflet 0:bbe98578d4c0 1471
dflet 0:bbe98578d4c0 1472 \return Return the reorder variable,
dflet 0:bbe98578d4c0 1473
dflet 0:bbe98578d4c0 1474 \sa sl_SendTo sl_Bind sl_Connect sl_RecvFrom sl_Accept
dflet 0:bbe98578d4c0 1475 \note belongs to \ref send_api
dflet 0:bbe98578d4c0 1476 \warning
dflet 0:bbe98578d4c0 1477 */
dflet 0:bbe98578d4c0 1478 #if _SL_INCLUDE_FUNC(sl_Htons )
dflet 0:bbe98578d4c0 1479 _u16 sl_Htons( _u16 val );
dflet 0:bbe98578d4c0 1480
dflet 0:bbe98578d4c0 1481 #define sl_Ntohs sl_Htons /* Reorder the bytes of a 16-bit unsigned value from network order to processor orde. */
dflet 0:bbe98578d4c0 1482 #endif
dflet 0:bbe98578d4c0 1483
dflet 0:bbe98578d4c0 1484 /*!
dflet 0:bbe98578d4c0 1485
dflet 0:bbe98578d4c0 1486 Close the Doxygen group.
dflet 0:bbe98578d4c0 1487 @}
dflet 0:bbe98578d4c0 1488
dflet 0:bbe98578d4c0 1489 */
dflet 0:bbe98578d4c0 1490
dflet 0:bbe98578d4c0 1491
dflet 0:bbe98578d4c0 1492 #ifdef __cplusplus
dflet 0:bbe98578d4c0 1493 }
dflet 0:bbe98578d4c0 1494 #endif /* __cplusplus */
dflet 0:bbe98578d4c0 1495
dflet 0:bbe98578d4c0 1496 #endif /* __SOCKET_H__ */
dflet 0:bbe98578d4c0 1497
dflet 0:bbe98578d4c0 1498
dflet 0:bbe98578d4c0 1499