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

Dependencies:   mbed

Committer:
dflet
Date:
Mon Nov 17 19:38:34 2014 +0000
Revision:
0:bbe98578d4c0
Experimental and a work in progress. Mostly left as TI C code. Does compile and run, but I have seen a few glitches. cc3100_sl_common.h will need your ssid and pass key at line 82.....

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:bbe98578d4c0 1 /*
dflet 0:bbe98578d4c0 2 * netapp.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 __NETAPP_H__
dflet 0:bbe98578d4c0 38 #define __NETAPP_H__
dflet 0:bbe98578d4c0 39
dflet 0:bbe98578d4c0 40 /*****************************************************************************/
dflet 0:bbe98578d4c0 41 /* Include files */
dflet 0:bbe98578d4c0 42 /*****************************************************************************/
dflet 0:bbe98578d4c0 43
dflet 0:bbe98578d4c0 44 #include "cc3100_simplelink.h"
dflet 0:bbe98578d4c0 45
dflet 0:bbe98578d4c0 46
dflet 0:bbe98578d4c0 47 #ifdef __cplusplus
dflet 0:bbe98578d4c0 48 extern "C" {
dflet 0:bbe98578d4c0 49 #endif
dflet 0:bbe98578d4c0 50
dflet 0:bbe98578d4c0 51 /*!
dflet 0:bbe98578d4c0 52
dflet 0:bbe98578d4c0 53 \addtogroup netapp
dflet 0:bbe98578d4c0 54 @{
dflet 0:bbe98578d4c0 55
dflet 0:bbe98578d4c0 56 */
dflet 0:bbe98578d4c0 57
dflet 0:bbe98578d4c0 58 /*****************************************************************************/
dflet 0:bbe98578d4c0 59 /* Macro declarations */
dflet 0:bbe98578d4c0 60 /*****************************************************************************/
dflet 0:bbe98578d4c0 61
dflet 0:bbe98578d4c0 62 /*ERROR code*/
dflet 0:bbe98578d4c0 63 #define SL_ERROR_NETAPP_RX_BUFFER_LENGTH_ERROR (-230)
dflet 0:bbe98578d4c0 64
dflet 0:bbe98578d4c0 65 /* Http Server interface */
dflet 0:bbe98578d4c0 66 #define MAX_INPUT_STRING (64) /* because of WPA */
dflet 0:bbe98578d4c0 67
dflet 0:bbe98578d4c0 68 #define MAX_AUTH_NAME_LEN (20)
dflet 0:bbe98578d4c0 69 #define MAX_AUTH_PASSWORD_LEN (20)
dflet 0:bbe98578d4c0 70 #define MAX_AUTH_REALM_LEN (20)
dflet 0:bbe98578d4c0 71
dflet 0:bbe98578d4c0 72 #define MAX_DEVICE_URN_LEN (15+1)
dflet 0:bbe98578d4c0 73 #define MAX_DOMAIN_NAME_LEN (24+1)
dflet 0:bbe98578d4c0 74
dflet 0:bbe98578d4c0 75 #define MAX_ACTION_LEN (30)
dflet 0:bbe98578d4c0 76 /* Important: in case the max len is changed, make sure the struct sl_NetAppHttpServerSendToken_t in protocol.h is padded correctly! */
dflet 0:bbe98578d4c0 77 #define MAX_TOKEN_NAME_LEN (20)
dflet 0:bbe98578d4c0 78 #define MAX_TOKEN_VALUE_LEN MAX_INPUT_STRING
dflet 0:bbe98578d4c0 79
dflet 0:bbe98578d4c0 80 #define NETAPP_MAX_SERVICE_TEXT_SIZE (256)
dflet 0:bbe98578d4c0 81 #define NETAPP_MAX_SERVICE_NAME_SIZE (60)
dflet 0:bbe98578d4c0 82 #define NETAPP_MAX_SERVICE_HOST_NAME_SIZE (64)
dflet 0:bbe98578d4c0 83
dflet 0:bbe98578d4c0 84
dflet 0:bbe98578d4c0 85 /* Server Responses */
dflet 0:bbe98578d4c0 86 #define SL_NETAPP_RESPONSE_NONE (0)
dflet 0:bbe98578d4c0 87 #define SL_NETAPP_HTTPSETTOKENVALUE (1)
dflet 0:bbe98578d4c0 88
dflet 0:bbe98578d4c0 89 #define SL_NETAPP_FAMILY_MASK (0x80)
dflet 0:bbe98578d4c0 90
dflet 0:bbe98578d4c0 91 /* mDNS types */
dflet 0:bbe98578d4c0 92 #define SL_NET_APP_MASK_IPP_TYPE_OF_SERVICE (0x00000001)
dflet 0:bbe98578d4c0 93 #define SL_NET_APP_MASK_DEVICE_INFO_TYPE_OF_SERVICE (0x00000002)
dflet 0:bbe98578d4c0 94 #define SL_NET_APP_MASK_HTTP_TYPE_OF_SERVICE (0x00000004)
dflet 0:bbe98578d4c0 95 #define SL_NET_APP_MASK_HTTPS_TYPE_OF_SERVICE (0x00000008)
dflet 0:bbe98578d4c0 96 #define SL_NET_APP_MASK_WORKSATION_TYPE_OF_SERVICE (0x00000010)
dflet 0:bbe98578d4c0 97 #define SL_NET_APP_MASK_GUID_TYPE_OF_SERVICE (0x00000020)
dflet 0:bbe98578d4c0 98 #define SL_NET_APP_MASK_H323_TYPE_OF_SERVICE (0x00000040)
dflet 0:bbe98578d4c0 99 #define SL_NET_APP_MASK_NTP_TYPE_OF_SERVICE (0x00000080)
dflet 0:bbe98578d4c0 100 #define SL_NET_APP_MASK_OBJECITVE_TYPE_OF_SERVICE (0x00000100)
dflet 0:bbe98578d4c0 101 #define SL_NET_APP_MASK_RDP_TYPE_OF_SERVICE (0x00000200)
dflet 0:bbe98578d4c0 102 #define SL_NET_APP_MASK_REMOTE_TYPE_OF_SERVICE (0x00000400)
dflet 0:bbe98578d4c0 103 #define SL_NET_APP_MASK_RTSP_TYPE_OF_SERVICE (0x00000800)
dflet 0:bbe98578d4c0 104 #define SL_NET_APP_MASK_SIP_TYPE_OF_SERVICE (0x00001000)
dflet 0:bbe98578d4c0 105 #define SL_NET_APP_MASK_SMB_TYPE_OF_SERVICE (0x00002000)
dflet 0:bbe98578d4c0 106 #define SL_NET_APP_MASK_SOAP_TYPE_OF_SERVICE (0x00004000)
dflet 0:bbe98578d4c0 107 #define SL_NET_APP_MASK_SSH_TYPE_OF_SERVICE (0x00008000)
dflet 0:bbe98578d4c0 108 #define SL_NET_APP_MASK_TELNET_TYPE_OF_SERVICE (0x00010000)
dflet 0:bbe98578d4c0 109 #define SL_NET_APP_MASK_TFTP_TYPE_OF_SERVICE (0x00020000)
dflet 0:bbe98578d4c0 110 #define SL_NET_APP_MASK_XMPP_CLIENT_TYPE_OF_SERVICE (0x00040000)
dflet 0:bbe98578d4c0 111 #define SL_NET_APP_MASK_RAOP_TYPE_OF_SERVICE (0x00080000)
dflet 0:bbe98578d4c0 112 #define SL_NET_APP_MASK_ALL_TYPE_OF_SERVICE (0xFFFFFFFF)
dflet 0:bbe98578d4c0 113
dflet 0:bbe98578d4c0 114 /********************************************************************************************************/
dflet 0:bbe98578d4c0 115 /* sl_NetAppDnsGetHostByName error codes */
dflet 0:bbe98578d4c0 116
dflet 0:bbe98578d4c0 117 #define SL_NET_APP_DNS_QUERY_NO_RESPONSE (-159) /* DNS query failed, no response */
dflet 0:bbe98578d4c0 118 #define SL_NET_APP_DNS_NO_SERVER (-161) /* No DNS server was specified */
dflet 0:bbe98578d4c0 119 #define SL_NET_APP_DNS_PARAM_ERROR (-162) /* mDNS parameters error */
dflet 0:bbe98578d4c0 120 #define SL_NET_APP_DNS_QUERY_FAILED (-163) /* DNS query failed; no DNS server sent an 'answer' */
dflet 0:bbe98578d4c0 121 #define SL_NET_APP_DNS_INTERNAL_1 (-164)
dflet 0:bbe98578d4c0 122 #define SL_NET_APP_DNS_INTERNAL_2 (-165)
dflet 0:bbe98578d4c0 123 #define SL_NET_APP_DNS_MALFORMED_PACKET (-166) /* Improperly formed or corrupted DNS packet received */
dflet 0:bbe98578d4c0 124 #define SL_NET_APP_DNS_INTERNAL_3 (-167)
dflet 0:bbe98578d4c0 125 #define SL_NET_APP_DNS_INTERNAL_4 (-168)
dflet 0:bbe98578d4c0 126 #define SL_NET_APP_DNS_INTERNAL_5 (-169)
dflet 0:bbe98578d4c0 127 #define SL_NET_APP_DNS_INTERNAL_6 (-170)
dflet 0:bbe98578d4c0 128 #define SL_NET_APP_DNS_INTERNAL_7 (-171)
dflet 0:bbe98578d4c0 129 #define SL_NET_APP_DNS_INTERNAL_8 (-172)
dflet 0:bbe98578d4c0 130 #define SL_NET_APP_DNS_INTERNAL_9 (-173)
dflet 0:bbe98578d4c0 131 #define SL_NET_APP_DNS_MISMATCHED_RESPONSE (-174) /* Server response type does not match the query request*/
dflet 0:bbe98578d4c0 132 #define SL_NET_APP_DNS_INTERNAL_10 (-175)
dflet 0:bbe98578d4c0 133 #define SL_NET_APP_DNS_INTERNAL_11 (-176)
dflet 0:bbe98578d4c0 134 #define SL_NET_APP_DNS_NO_ANSWER (-177) /* No response for one-shot query */
dflet 0:bbe98578d4c0 135 #define SL_NET_APP_DNS_NO_KNOWN_ANSWER (-178) /* No known answer for query */
dflet 0:bbe98578d4c0 136 #define SL_NET_APP_DNS_NAME_MISMATCH (-179) /* Illegal service name according to the RFC */
dflet 0:bbe98578d4c0 137 #define SL_NET_APP_DNS_NOT_STARTED (-180) /* mDNS is not running */
dflet 0:bbe98578d4c0 138 #define SL_NET_APP_DNS_HOST_NAME_ERROR (-181) /* Host name error. Host name format is not allowed according to RFC 1033,1034,1035, 6763 */
dflet 0:bbe98578d4c0 139 #define SL_NET_APP_DNS_NO_MORE_ENTRIES (-182) /* No more entries be found. */
dflet 0:bbe98578d4c0 140
dflet 0:bbe98578d4c0 141 #define SL_NET_APP_DNS_MAX_SERVICES_ERROR (-200) /* Maximum advertise services are already configured */
dflet 0:bbe98578d4c0 142 #define SL_NET_APP_DNS_IDENTICAL_SERVICES_ERROR (-201) /* Trying to register a service that is already exists */
dflet 0:bbe98578d4c0 143 #define SL_NET_APP_DNS_NOT_EXISTED_SERVICE_ERROR (-203) /* Trying to delete service that does not existed */
dflet 0:bbe98578d4c0 144 #define SL_NET_APP_DNS_ERROR_SERVICE_NAME_ERROR (-204) /* Illegal service name according to the RFC */
dflet 0:bbe98578d4c0 145 #define SL_NET_APP_DNS_RX_PACKET_ALLOCATION_ERROR (-205) /* Retry request */
dflet 0:bbe98578d4c0 146 #define SL_NET_APP_DNS_BUFFER_SIZE_ERROR (-206) /* List size buffer is bigger than internally allowed in the NWP */
dflet 0:bbe98578d4c0 147 #define SL_NET_APP_DNS_NET_APP_SET_ERROR (-207) /* Illegal length of one of the mDNS Set functions */
dflet 0:bbe98578d4c0 148 #define SL_NET_APP_DNS_GET_SERVICE_LIST_FLAG_ERROR (-208)
dflet 0:bbe98578d4c0 149 #define SL_NET_APP_DNS_NO_CONFIGURATION_ERROR (-209)
dflet 0:bbe98578d4c0 150
dflet 0:bbe98578d4c0 151 /* Set Dev name error codes (NETAPP_SET_GET_DEV_CONF_OPT_DEVICE_URN) */
dflet 0:bbe98578d4c0 152 #define SL_ERROR_DEVICE_NAME_LEN_ERR (-117)
dflet 0:bbe98578d4c0 153 #define SL_ERROR_DEVICE_NAME_INVALID (-118)
dflet 0:bbe98578d4c0 154 /* Set domain name error codes (NETAPP_SET_GET_DEV_CONF_OPT_DOMAIN_NAME) */
dflet 0:bbe98578d4c0 155 #define SL_ERROR_DOMAIN_NAME_LEN_ERR (-119)
dflet 0:bbe98578d4c0 156 #define SL_ERROR_DOMAIN_NAME_INVALID (-120)
dflet 0:bbe98578d4c0 157
dflet 0:bbe98578d4c0 158 /********************************************************************************************************/
dflet 0:bbe98578d4c0 159
dflet 0:bbe98578d4c0 160 /* NetApp application IDs */
dflet 0:bbe98578d4c0 161 #define SL_NET_APP_HTTP_SERVER_ID (1)
dflet 0:bbe98578d4c0 162 #define SL_NET_APP_DHCP_SERVER_ID (2)
dflet 0:bbe98578d4c0 163 #define SL_NET_APP_MDNS_ID (4)
dflet 0:bbe98578d4c0 164 #define SL_NET_APP_DNS_SERVER_ID (8)
dflet 0:bbe98578d4c0 165 #define SL_NET_APP_DEVICE_CONFIG_ID (16)
dflet 0:bbe98578d4c0 166 /* NetApp application set/get options */
dflet 0:bbe98578d4c0 167 #define NETAPP_SET_DHCP_SRV_BASIC_OPT (0)
dflet 0:bbe98578d4c0 168 /* HTTP server set/get options */
dflet 0:bbe98578d4c0 169 #define NETAPP_SET_GET_HTTP_OPT_PORT_NUMBER (0)
dflet 0:bbe98578d4c0 170 #define NETAPP_SET_GET_HTTP_OPT_AUTH_CHECK (1)
dflet 0:bbe98578d4c0 171 #define NETAPP_SET_GET_HTTP_OPT_AUTH_NAME (2)
dflet 0:bbe98578d4c0 172 #define NETAPP_SET_GET_HTTP_OPT_AUTH_PASSWORD (3)
dflet 0:bbe98578d4c0 173 #define NETAPP_SET_GET_HTTP_OPT_AUTH_REALM (4)
dflet 0:bbe98578d4c0 174 #define NETAPP_SET_GET_HTTP_OPT_ROM_PAGES_ACCESS (5)
dflet 0:bbe98578d4c0 175
dflet 0:bbe98578d4c0 176 #define NETAPP_SET_GET_MDNS_CONT_QUERY_OPT (1)
dflet 0:bbe98578d4c0 177 #define NETAPP_SET_GET_MDNS_QEVETN_MASK_OPT (2)
dflet 0:bbe98578d4c0 178 #define NETAPP_SET_GET_MDNS_TIMING_PARAMS_OPT (3)
dflet 0:bbe98578d4c0 179
dflet 0:bbe98578d4c0 180 /* DNS server set/get options */
dflet 0:bbe98578d4c0 181 #define NETAPP_SET_GET_DNS_OPT_DOMAIN_NAME (0)
dflet 0:bbe98578d4c0 182
dflet 0:bbe98578d4c0 183 /* Device Config set/get options */
dflet 0:bbe98578d4c0 184 #define NETAPP_SET_GET_DEV_CONF_OPT_DEVICE_URN (0)
dflet 0:bbe98578d4c0 185 #define NETAPP_SET_GET_DEV_CONF_OPT_DOMAIN_NAME (1)
dflet 0:bbe98578d4c0 186
dflet 0:bbe98578d4c0 187
dflet 0:bbe98578d4c0 188 /*****************************************************************************/
dflet 0:bbe98578d4c0 189 /* Structure/Enum declarations */
dflet 0:bbe98578d4c0 190 /*****************************************************************************/
dflet 0:bbe98578d4c0 191
dflet 0:bbe98578d4c0 192 typedef struct
dflet 0:bbe98578d4c0 193 {
dflet 0:bbe98578d4c0 194 _u32 PacketsSent;
dflet 0:bbe98578d4c0 195 _u32 PacketsReceived;
dflet 0:bbe98578d4c0 196 _u16 MinRoundTime;
dflet 0:bbe98578d4c0 197 _u16 MaxRoundTime;
dflet 0:bbe98578d4c0 198 _u16 AvgRoundTime;
dflet 0:bbe98578d4c0 199 _u32 TestTime;
dflet 0:bbe98578d4c0 200 }SlPingReport_t;
dflet 0:bbe98578d4c0 201
dflet 0:bbe98578d4c0 202 typedef struct
dflet 0:bbe98578d4c0 203 {
dflet 0:bbe98578d4c0 204 _u32 PingIntervalTime; /* delay between pings, in milliseconds */
dflet 0:bbe98578d4c0 205 _u16 PingSize; /* ping packet size in bytes */
dflet 0:bbe98578d4c0 206 _u16 PingRequestTimeout; /* timeout time for every ping in milliseconds */
dflet 0:bbe98578d4c0 207 _u32 TotalNumberOfAttempts; /* max number of ping requests. 0 - forever */
dflet 0:bbe98578d4c0 208 _u32 Flags; /* flag - 0 report only when finished, 1 - return response for every ping, 2 - stop after 1 successful ping. */
dflet 0:bbe98578d4c0 209 _u32 Ip; /* IPv4 address or IPv6 first 4 bytes */
dflet 0:bbe98578d4c0 210 _u32 Ip1OrPaadding;
dflet 0:bbe98578d4c0 211 _u32 Ip2OrPaadding;
dflet 0:bbe98578d4c0 212 _u32 Ip3OrPaadding;
dflet 0:bbe98578d4c0 213 }SlPingStartCommand_t;
dflet 0:bbe98578d4c0 214
dflet 0:bbe98578d4c0 215 typedef struct _slHttpServerString_t
dflet 0:bbe98578d4c0 216 {
dflet 0:bbe98578d4c0 217 _u8 len;
dflet 0:bbe98578d4c0 218 _u8 *data;
dflet 0:bbe98578d4c0 219 } slHttpServerString_t;
dflet 0:bbe98578d4c0 220
dflet 0:bbe98578d4c0 221 typedef struct _slHttpServerData_t
dflet 0:bbe98578d4c0 222 {
dflet 0:bbe98578d4c0 223 _u8 value_len;
dflet 0:bbe98578d4c0 224 _u8 name_len;
dflet 0:bbe98578d4c0 225 _u8 *token_value;
dflet 0:bbe98578d4c0 226 _u8 *token_name;
dflet 0:bbe98578d4c0 227 } slHttpServerData_t;
dflet 0:bbe98578d4c0 228
dflet 0:bbe98578d4c0 229 typedef struct _slHttpServerPostData_t
dflet 0:bbe98578d4c0 230 {
dflet 0:bbe98578d4c0 231 slHttpServerString_t action;
dflet 0:bbe98578d4c0 232 slHttpServerString_t token_name;
dflet 0:bbe98578d4c0 233 slHttpServerString_t token_value;
dflet 0:bbe98578d4c0 234 }slHttpServerPostData_t;
dflet 0:bbe98578d4c0 235
dflet 0:bbe98578d4c0 236 typedef union
dflet 0:bbe98578d4c0 237 {
dflet 0:bbe98578d4c0 238 slHttpServerString_t httpTokenName; /* SL_NETAPP_HTTPGETTOKENVALUE */
dflet 0:bbe98578d4c0 239 slHttpServerPostData_t httpPostData; /* SL_NETAPP_HTTPPOSTTOKENVALUE */
dflet 0:bbe98578d4c0 240 } SlHttpServerEventData_u;
dflet 0:bbe98578d4c0 241
dflet 0:bbe98578d4c0 242 typedef union
dflet 0:bbe98578d4c0 243 {
dflet 0:bbe98578d4c0 244 slHttpServerString_t token_value;
dflet 0:bbe98578d4c0 245 } SlHttpServerResponsedata_u;
dflet 0:bbe98578d4c0 246
dflet 0:bbe98578d4c0 247 typedef struct
dflet 0:bbe98578d4c0 248 {
dflet 0:bbe98578d4c0 249 _u32 Event;
dflet 0:bbe98578d4c0 250 SlHttpServerEventData_u EventData;
dflet 0:bbe98578d4c0 251 }SlHttpServerEvent_t;
dflet 0:bbe98578d4c0 252
dflet 0:bbe98578d4c0 253 typedef struct
dflet 0:bbe98578d4c0 254 {
dflet 0:bbe98578d4c0 255 _u32 Response;
dflet 0:bbe98578d4c0 256 SlHttpServerResponsedata_u ResponseData;
dflet 0:bbe98578d4c0 257 }SlHttpServerResponse_t;
dflet 0:bbe98578d4c0 258
dflet 0:bbe98578d4c0 259
dflet 0:bbe98578d4c0 260 typedef struct
dflet 0:bbe98578d4c0 261 {
dflet 0:bbe98578d4c0 262 _u32 lease_time;
dflet 0:bbe98578d4c0 263 _u32 ipv4_addr_start;
dflet 0:bbe98578d4c0 264 _u32 ipv4_addr_last;
dflet 0:bbe98578d4c0 265 }SlNetAppDhcpServerBasicOpt_t;
dflet 0:bbe98578d4c0 266
dflet 0:bbe98578d4c0 267 /*mDNS parameters*/
dflet 0:bbe98578d4c0 268 typedef enum
dflet 0:bbe98578d4c0 269 {
dflet 0:bbe98578d4c0 270 SL_NET_APP_FULL_SERVICE_WITH_TEXT_IPV4_TYPE = 1,
dflet 0:bbe98578d4c0 271 SL_NET_APP_FULL_SERVICE_IPV4_TYPE,
dflet 0:bbe98578d4c0 272 SL_NET_APP_SHORT_SERVICE_IPV4_TYPE
dflet 0:bbe98578d4c0 273
dflet 0:bbe98578d4c0 274 } SlNetAppGetServiceListType_e;
dflet 0:bbe98578d4c0 275
dflet 0:bbe98578d4c0 276 typedef struct
dflet 0:bbe98578d4c0 277 {
dflet 0:bbe98578d4c0 278 _u32 service_ipv4;
dflet 0:bbe98578d4c0 279 _u16 service_port;
dflet 0:bbe98578d4c0 280 _u16 Reserved;
dflet 0:bbe98578d4c0 281 }SlNetAppGetShortServiceIpv4List_t;
dflet 0:bbe98578d4c0 282
dflet 0:bbe98578d4c0 283 typedef struct
dflet 0:bbe98578d4c0 284 {
dflet 0:bbe98578d4c0 285 _u32 service_ipv4;
dflet 0:bbe98578d4c0 286 _u16 service_port;
dflet 0:bbe98578d4c0 287 _u16 Reserved;
dflet 0:bbe98578d4c0 288 _u8 service_name[NETAPP_MAX_SERVICE_NAME_SIZE];
dflet 0:bbe98578d4c0 289 _u8 service_host[NETAPP_MAX_SERVICE_HOST_NAME_SIZE];
dflet 0:bbe98578d4c0 290 }SlNetAppGetFullServiceIpv4List_t;
dflet 0:bbe98578d4c0 291
dflet 0:bbe98578d4c0 292 typedef struct
dflet 0:bbe98578d4c0 293 {
dflet 0:bbe98578d4c0 294 _u32 service_ipv4;
dflet 0:bbe98578d4c0 295 _u16 service_port;
dflet 0:bbe98578d4c0 296 _u16 Reserved;
dflet 0:bbe98578d4c0 297 _u8 service_name[NETAPP_MAX_SERVICE_NAME_SIZE];
dflet 0:bbe98578d4c0 298 _u8 service_host[NETAPP_MAX_SERVICE_HOST_NAME_SIZE];
dflet 0:bbe98578d4c0 299 _u8 service_text[NETAPP_MAX_SERVICE_TEXT_SIZE];
dflet 0:bbe98578d4c0 300 }SlNetAppGetFullServiceWithTextIpv4List_t;
dflet 0:bbe98578d4c0 301
dflet 0:bbe98578d4c0 302 typedef struct
dflet 0:bbe98578d4c0 303 {
dflet 0:bbe98578d4c0 304 /*The below parameters are used to configure the advertise times and interval
dflet 0:bbe98578d4c0 305 For example:
dflet 0:bbe98578d4c0 306 If:
dflet 0:bbe98578d4c0 307 Period is set to T
dflet 0:bbe98578d4c0 308 Repetitions are set to P
dflet 0:bbe98578d4c0 309 Telescopic factor is K=2
dflet 0:bbe98578d4c0 310 The transmission shall be:
dflet 0:bbe98578d4c0 311 advertise P times
dflet 0:bbe98578d4c0 312 wait T
dflet 0:bbe98578d4c0 313 advertise P times
dflet 0:bbe98578d4c0 314 wait 4 * T
dflet 0:bbe98578d4c0 315 advertise P time
dflet 0:bbe98578d4c0 316 wait 16 * T ... (till max time reached / configuration changed / query issued)
dflet 0:bbe98578d4c0 317 */
dflet 0:bbe98578d4c0 318 _u32 t; /* Number of ticks for the initial period. Default is 100 ticks for 1 second. */
dflet 0:bbe98578d4c0 319 _u32 p; /* Number of repetitions. Default value is 1 */
dflet 0:bbe98578d4c0 320 _u32 k; /* Telescopic factor. Default value is 2. */
dflet 0:bbe98578d4c0 321 _u32 RetransInterval;/* Announcing retransmission interval */
dflet 0:bbe98578d4c0 322 _u32 Maxinterval; /* Announcing max period interval */
dflet 0:bbe98578d4c0 323 _u32 max_time; /* Announcing max time */
dflet 0:bbe98578d4c0 324 }SlNetAppServiceAdvertiseTimingParameters_t;
dflet 0:bbe98578d4c0 325
dflet 0:bbe98578d4c0 326 /*****************************************************************************/
dflet 0:bbe98578d4c0 327 /* Types declarations */
dflet 0:bbe98578d4c0 328 /*****************************************************************************/
dflet 0:bbe98578d4c0 329 typedef void (*P_SL_DEV_PING_CALLBACK)(SlPingReport_t*);
dflet 0:bbe98578d4c0 330
dflet 0:bbe98578d4c0 331 /*****************************************************************************/
dflet 0:bbe98578d4c0 332 /* Function prototypes */
dflet 0:bbe98578d4c0 333 /*****************************************************************************/
dflet 0:bbe98578d4c0 334
dflet 0:bbe98578d4c0 335
dflet 0:bbe98578d4c0 336 /*!
dflet 0:bbe98578d4c0 337 \brief Starts a network application
dflet 0:bbe98578d4c0 338
dflet 0:bbe98578d4c0 339 Gets and starts network application for the current WLAN mode
dflet 0:bbe98578d4c0 340
dflet 0:bbe98578d4c0 341 \param[in] AppBitMap application bitmap, could be one or combination of the following: \n
dflet 0:bbe98578d4c0 342 - SL_NET_APP_HTTP_SERVER_ID
dflet 0:bbe98578d4c0 343 - SL_NET_APP_DHCP_SERVER_ID
dflet 0:bbe98578d4c0 344 - SL_NET_APP_MDNS_ID
dflet 0:bbe98578d4c0 345
dflet 0:bbe98578d4c0 346 \return On error, negative number is returned
dflet 0:bbe98578d4c0 347
dflet 0:bbe98578d4c0 348 \sa Stop one or more the above started applications using sl_NetAppStop
dflet 0:bbe98578d4c0 349 \note This command activates the application for the current WLAN mode (AP or STA)
dflet 0:bbe98578d4c0 350 \warning
dflet 0:bbe98578d4c0 351 \par Example:
dflet 0:bbe98578d4c0 352 \code
dflet 0:bbe98578d4c0 353 For example: Starting internal HTTP server + DHCP server:
dflet 0:bbe98578d4c0 354 sl_NetAppStart(SL_NET_APP_HTTP_SERVER_ID | SL_NET_APP_DHCP_SERVER_ID)
dflet 0:bbe98578d4c0 355
dflet 0:bbe98578d4c0 356 \endcode
dflet 0:bbe98578d4c0 357 */
dflet 0:bbe98578d4c0 358 #if _SL_INCLUDE_FUNC(sl_NetAppStart)
dflet 0:bbe98578d4c0 359 _i16 sl_NetAppStart(_u32 AppBitMap);
dflet 0:bbe98578d4c0 360 #endif
dflet 0:bbe98578d4c0 361 /*!
dflet 0:bbe98578d4c0 362 \brief Stops a network application
dflet 0:bbe98578d4c0 363
dflet 0:bbe98578d4c0 364 Gets and stops network application for the current WLAN mode
dflet 0:bbe98578d4c0 365
dflet 0:bbe98578d4c0 366 \param[in] AppBitMap application id, could be one of the following: \n
dflet 0:bbe98578d4c0 367 - SL_NET_APP_HTTP_SERVER_ID
dflet 0:bbe98578d4c0 368 - SL_NET_APP_DHCP_SERVER_ID
dflet 0:bbe98578d4c0 369 - SL_NET_APP_MDNS_ID
dflet 0:bbe98578d4c0 370
dflet 0:bbe98578d4c0 371 \return On error, negative number is returned
dflet 0:bbe98578d4c0 372
dflet 0:bbe98578d4c0 373 \sa
dflet 0:bbe98578d4c0 374 \note This command disables the application for the current active WLAN mode (AP or STA)
dflet 0:bbe98578d4c0 375 \warning
dflet 0:bbe98578d4c0 376 \par Example:
dflet 0:bbe98578d4c0 377 \code
dflet 0:bbe98578d4c0 378
dflet 0:bbe98578d4c0 379 For example: Stopping internal HTTP server:
dflet 0:bbe98578d4c0 380 sl_NetAppStop(SL_NET_APP_HTTP_SERVER_ID);
dflet 0:bbe98578d4c0 381
dflet 0:bbe98578d4c0 382 \endcode
dflet 0:bbe98578d4c0 383 */
dflet 0:bbe98578d4c0 384 #if _SL_INCLUDE_FUNC(sl_NetAppStop)
dflet 0:bbe98578d4c0 385 _i16 sl_NetAppStop(_u32 AppBitMap);
dflet 0:bbe98578d4c0 386 #endif
dflet 0:bbe98578d4c0 387
dflet 0:bbe98578d4c0 388 /*!
dflet 0:bbe98578d4c0 389 \brief Get host IP by name
dflet 0:bbe98578d4c0 390
dflet 0:bbe98578d4c0 391 Obtain the IP Address of machine on network, by machine name.
dflet 0:bbe98578d4c0 392
dflet 0:bbe98578d4c0 393 \param[in] hostname host name
dflet 0:bbe98578d4c0 394 \param[in] usNameLen name length
dflet 0:bbe98578d4c0 395 \param[out] out_ip_addr This parameter is filled in with
dflet 0:bbe98578d4c0 396 host IP address. In case that host name is not
dflet 0:bbe98578d4c0 397 resolved, out_ip_addr is zero.
dflet 0:bbe98578d4c0 398 \param[in] family protocol family
dflet 0:bbe98578d4c0 399
dflet 0:bbe98578d4c0 400 \return On success, 0 is returned.
dflet 0:bbe98578d4c0 401 On error, negative is returned
dflet 0:bbe98578d4c0 402 SL_POOL_IS_EMPTY may be return in case there are no resources in the system
dflet 0:bbe98578d4c0 403 In this case try again later or increase MAX_CONCURRENT_ACTIONS
dflet 0:bbe98578d4c0 404 Possible DNS error codes:
dflet 0:bbe98578d4c0 405 - SL_NET_APP_DNS_QUERY_NO_RESPONSE
dflet 0:bbe98578d4c0 406 - SL_NET_APP_DNS_NO_SERVER
dflet 0:bbe98578d4c0 407 - SL_NET_APP_DNS_QUERY_FAILED
dflet 0:bbe98578d4c0 408 - SL_NET_APP_DNS_MALFORMED_PACKET
dflet 0:bbe98578d4c0 409 - SL_NET_APP_DNS_MISMATCHED_RESPONSE
dflet 0:bbe98578d4c0 410
dflet 0:bbe98578d4c0 411 \sa
dflet 0:bbe98578d4c0 412 \note Only one sl_NetAppDnsGetHostByName can be handled at a time.
dflet 0:bbe98578d4c0 413 Calling this API while the same command is called from another thread, may result
dflet 0:bbe98578d4c0 414 in one of the two scenarios:
dflet 0:bbe98578d4c0 415 1. The command will wait (internal) until the previous command finish, and then be executed.
dflet 0:bbe98578d4c0 416 2. There are not enough resources and POOL_IS_EMPTY error will return.
dflet 0:bbe98578d4c0 417 In this case, MAX_CONCURRENT_ACTIONS can be increased (result in memory increase) or try
dflet 0:bbe98578d4c0 418 again later to issue the command.
dflet 0:bbe98578d4c0 419 \warning
dflet 0:bbe98578d4c0 420 \par Example:
dflet 0:bbe98578d4c0 421 \code
dflet 0:bbe98578d4c0 422 _u32 DestinationIP;
dflet 0:bbe98578d4c0 423 sl_NetAppDnsGetHostByName("www.google.com", strlen("www.google.com"), &DestinationIP,SL_AF_INET);
dflet 0:bbe98578d4c0 424
dflet 0:bbe98578d4c0 425 Addr.sin_family = SL_AF_INET;
dflet 0:bbe98578d4c0 426 Addr.sin_port = sl_Htons(80);
dflet 0:bbe98578d4c0 427 Addr.sin_addr.s_addr = sl_Htonl(DestinationIP);
dflet 0:bbe98578d4c0 428 AddrSize = sizeof(SlSockAddrIn_t);
dflet 0:bbe98578d4c0 429 SockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);
dflet 0:bbe98578d4c0 430 \endcode
dflet 0:bbe98578d4c0 431 */
dflet 0:bbe98578d4c0 432 #if _SL_INCLUDE_FUNC(sl_NetAppDnsGetHostByName)
dflet 0:bbe98578d4c0 433 _i16 sl_NetAppDnsGetHostByName(_i8 * hostname, _u16 usNameLen, _u32* out_ip_addr,_u8 family );
dflet 0:bbe98578d4c0 434 #endif
dflet 0:bbe98578d4c0 435
dflet 0:bbe98578d4c0 436 /*!
dflet 0:bbe98578d4c0 437 \brief Return service attributes like IP address, port and text according to service name
dflet 0:bbe98578d4c0 438 \par
dflet 0:bbe98578d4c0 439 The user sets a service name Full/Part (see example below), and should get:
dflet 0:bbe98578d4c0 440 - IP of service
dflet 0:bbe98578d4c0 441 - The port of service
dflet 0:bbe98578d4c0 442 - The text of service
dflet 0:bbe98578d4c0 443
dflet 0:bbe98578d4c0 444 Hence it can make a connection to the specific service and use it.
dflet 0:bbe98578d4c0 445 It is similar to get host by name method.
dflet 0:bbe98578d4c0 446 It is done by a single shot query with PTR type on the service name.
dflet 0:bbe98578d4c0 447 The command that is sent is from constant parameters and variables parameters.
dflet 0:bbe98578d4c0 448
dflet 0:bbe98578d4c0 449 \param[in] pService Service name can be full or partial. \n
dflet 0:bbe98578d4c0 450 Example for full service name:
dflet 0:bbe98578d4c0 451 1. PC1._ipp._tcp.local
dflet 0:bbe98578d4c0 452 2. PC2_server._ftp._tcp.local \n
dflet 0:bbe98578d4c0 453 .
dflet 0:bbe98578d4c0 454 Example for partial service name:
dflet 0:bbe98578d4c0 455 1. _ipp._tcp.local
dflet 0:bbe98578d4c0 456 2. _ftp._tcp.local
dflet 0:bbe98578d4c0 457
dflet 0:bbe98578d4c0 458 \param[in] ServiceLen The length of the service name (in_pService).
dflet 0:bbe98578d4c0 459 \param[in] Family IPv4 or IPv6 (SL_AF_INET , SL_AF_INET6).
dflet 0:bbe98578d4c0 460 \param[out] pAddr Contains the IP address of the service.
dflet 0:bbe98578d4c0 461 \param[out] pPort Contains the port of the service.
dflet 0:bbe98578d4c0 462 \param[out] pTextLen Has 2 options. One as Input field and the other one as output:
dflet 0:bbe98578d4c0 463 - Input: \n
dflet 0:bbe98578d4c0 464 Contains the max length of the text that the user wants to get.\n
dflet 0:bbe98578d4c0 465 It means that if the text len of service is bigger that its value than
dflet 0:bbe98578d4c0 466 the text is cut to inout_TextLen value.
dflet 0:bbe98578d4c0 467 - Output: \n
dflet 0:bbe98578d4c0 468 Contain the length of the text that is returned. Can be full text or part of the text (see above).
dflet 0:bbe98578d4c0 469
dflet 0:bbe98578d4c0 470 \param[out] pOut_pText Contains the text of the service full or partial
dflet 0:bbe98578d4c0 471
dflet 0:bbe98578d4c0 472 \return On success, zero is returned
dflet 0:bbe98578d4c0 473 SL_POOL_IS_EMPTY may be return in case there are no resources in the system
dflet 0:bbe98578d4c0 474 In this case try again later or increase MAX_CONCURRENT_ACTIONS
dflet 0:bbe98578d4c0 475 In case No service is found error SL_NET_APP_DNS_NO_ANSWER will be returned
dflet 0:bbe98578d4c0 476
dflet 0:bbe98578d4c0 477 \note The returns attributes belongs to the first service found.
dflet 0:bbe98578d4c0 478 There may be other services with the same service name that will response to the query.
dflet 0:bbe98578d4c0 479 The results of these responses are saved in the peer cache of the Device and should be read by another API.
dflet 0:bbe98578d4c0 480
dflet 0:bbe98578d4c0 481 Only one sl_NetAppDnsGetHostByService can be handled at a time.
dflet 0:bbe98578d4c0 482 Calling this API while the same command is called from another thread, may result
dflet 0:bbe98578d4c0 483 in one of the two scenarios:
dflet 0:bbe98578d4c0 484 1. The command will wait (internal) until the previous command finish, and then be executed.
dflet 0:bbe98578d4c0 485 2. There are not enough resources and SL_POOL_IS_EMPTY error will return.
dflet 0:bbe98578d4c0 486 In this case, MAX_CONCURRENT_ACTIONS can be increased (result in memory increase) or try
dflet 0:bbe98578d4c0 487 again later to issue the command.
dflet 0:bbe98578d4c0 488
dflet 0:bbe98578d4c0 489 \warning Text length can be 120 bytes only
dflet 0:bbe98578d4c0 490 */
dflet 0:bbe98578d4c0 491 #if _SL_INCLUDE_FUNC(sl_NetAppDnsGetHostByService)
dflet 0:bbe98578d4c0 492 _i32 sl_NetAppDnsGetHostByService(_i8 *pServiceName, /* string containing all (or only part): name + subtype + service */
dflet 0:bbe98578d4c0 493 _u8 ServiceLen,
dflet 0:bbe98578d4c0 494 _u8 Family, /* 4-IPv4 , 16-IPv6 */
dflet 0:bbe98578d4c0 495 _u32 pAddr[],
dflet 0:bbe98578d4c0 496 _u32 *pPort,
dflet 0:bbe98578d4c0 497 _u16 *pTextLen, /* in: max len , out: actual len */
dflet 0:bbe98578d4c0 498 _i8 *pText
dflet 0:bbe98578d4c0 499 );
dflet 0:bbe98578d4c0 500
dflet 0:bbe98578d4c0 501 #endif
dflet 0:bbe98578d4c0 502
dflet 0:bbe98578d4c0 503 /*!
dflet 0:bbe98578d4c0 504 \brief Get service List
dflet 0:bbe98578d4c0 505 Insert into out pBuffer a list of peer's services that are the NWP.
dflet 0:bbe98578d4c0 506 The list is in a form of service struct. The user should chose the type
dflet 0:bbe98578d4c0 507 of the service struct like:
dflet 0:bbe98578d4c0 508 - Full service parameters with text.
dflet 0:bbe98578d4c0 509 - Full service parameters.
dflet 0:bbe98578d4c0 510 - Short service parameters (port and IP only) especially for tiny hosts.
dflet 0:bbe98578d4c0 511
dflet 0:bbe98578d4c0 512 The different types of struct are made to give the
dflet 0:bbe98578d4c0 513 Possibility to save memory in the host
dflet 0:bbe98578d4c0 514
dflet 0:bbe98578d4c0 515
dflet 0:bbe98578d4c0 516 The user also chose how many max services to get and start point index
dflet 0:bbe98578d4c0 517 NWP peer cache.
dflet 0:bbe98578d4c0 518 For example:
dflet 0:bbe98578d4c0 519 1. Get max of 3 full services from index 0.Up to 3 full services
dflet 0:bbe98578d4c0 520 from index 0 are inserted into pBuffer (services that are in indexes 0,1,2).
dflet 0:bbe98578d4c0 521 2. Get max of 4 full services from index 3.Up to 4 full services
dflet 0:bbe98578d4c0 522 from index 3 are inserted into pBuffer (services that are in indexes 3,4,5,6).
dflet 0:bbe98578d4c0 523 3. Get max of 2 int services from index 6.Up to 2 int services
dflet 0:bbe98578d4c0 524 from index 6 are inserted into pBuffer (services that are in indexes 6,7).
dflet 0:bbe98578d4c0 525
dflet 0:bbe98578d4c0 526 See below - command parameters.
dflet 0:bbe98578d4c0 527
dflet 0:bbe98578d4c0 528 \param[in] indexOffset - The start index in the peer cache that from it the first service is returned.
dflet 0:bbe98578d4c0 529 \param[in] MaxServiceCount - The Max services that can be returned if existed or if not exceed the max index
dflet 0:bbe98578d4c0 530 in the peer cache
dflet 0:bbe98578d4c0 531 \param[in] Flags - an ENUM number that means which service struct to use (means which types of service to fill)
dflet 0:bbe98578d4c0 532 - use SlNetAppGetFullServiceWithTextIpv4List_t
dflet 0:bbe98578d4c0 533 - use SlNetAppGetFullServiceIpv4List_t
dflet 0:bbe98578d4c0 534 - use SlNetAppGetShortServiceIpv4List_t
dflet 0:bbe98578d4c0 535
dflet 0:bbe98578d4c0 536 \param[out] Buffer - The Services are inserted into this buffer. In the struct form according to the bit that is set in the Flags
dflet 0:bbe98578d4c0 537 input parameter.
dflet 0:bbe98578d4c0 538
dflet 0:bbe98578d4c0 539 \return ServiceFoundCount - The number of the services that were inserted into the buffer. zero means no service is found
dflet 0:bbe98578d4c0 540 negative number means an error
dflet 0:bbe98578d4c0 541 \sa sl_NetAppMDNSRegisterService
dflet 0:bbe98578d4c0 542 \note
dflet 0:bbe98578d4c0 543 \warning
dflet 0:bbe98578d4c0 544 if the out pBuffer size is bigger than an RX packet(1480), than
dflet 0:bbe98578d4c0 545 an error is returned because there
dflet 0:bbe98578d4c0 546 is no place in the RX packet.
dflet 0:bbe98578d4c0 547 The size is a multiply of MaxServiceCount and size of service struct(that is set
dflet 0:bbe98578d4c0 548 according to flag value).
dflet 0:bbe98578d4c0 549 */
dflet 0:bbe98578d4c0 550
dflet 0:bbe98578d4c0 551 #if _SL_INCLUDE_FUNC(sl_NetAppGetServiceList)
dflet 0:bbe98578d4c0 552 _i16 sl_NetAppGetServiceList(_u8 IndexOffest,
dflet 0:bbe98578d4c0 553 _u8 MaxServiceCount,
dflet 0:bbe98578d4c0 554 _u8 Flags,
dflet 0:bbe98578d4c0 555 _i8 *pBuffer,
dflet 0:bbe98578d4c0 556 _u32 RxBufferLength
dflet 0:bbe98578d4c0 557 );
dflet 0:bbe98578d4c0 558
dflet 0:bbe98578d4c0 559 #endif
dflet 0:bbe98578d4c0 560
dflet 0:bbe98578d4c0 561 /*!
dflet 0:bbe98578d4c0 562 \brief Unregister mDNS service
dflet 0:bbe98578d4c0 563 This function deletes the mDNS service from the mDNS package and the database.
dflet 0:bbe98578d4c0 564
dflet 0:bbe98578d4c0 565 The mDNS service that is to be unregistered is a service that the application no longer wishes to provide. \n
dflet 0:bbe98578d4c0 566 The service name should be the full service name according to RFC
dflet 0:bbe98578d4c0 567 of the DNS-SD - meaning the value in name field in the SRV answer.
dflet 0:bbe98578d4c0 568
dflet 0:bbe98578d4c0 569 Examples for service names:
dflet 0:bbe98578d4c0 570 1. PC1._ipp._tcp.local
dflet 0:bbe98578d4c0 571 2. PC2_server._ftp._tcp.local
dflet 0:bbe98578d4c0 572
dflet 0:bbe98578d4c0 573 \param[in] pServiceName Full service name. \n
dflet 0:bbe98578d4c0 574 Example for service name:
dflet 0:bbe98578d4c0 575 1. PC1._ipp._tcp.local
dflet 0:bbe98578d4c0 576 2. PC2_server._ftp._tcp.local
dflet 0:bbe98578d4c0 577 \param[in] ServiceLen The length of the service.
dflet 0:bbe98578d4c0 578 \return On success, zero is returned
dflet 0:bbe98578d4c0 579 \sa sl_NetAppMDNSRegisterService
dflet 0:bbe98578d4c0 580 \note
dflet 0:bbe98578d4c0 581 \warning
dflet 0:bbe98578d4c0 582 The size of the service length should be smaller than 255.
dflet 0:bbe98578d4c0 583 */
dflet 0:bbe98578d4c0 584 #if _SL_INCLUDE_FUNC(sl_NetAppMDNSUnRegisterService)
dflet 0:bbe98578d4c0 585 _i16 sl_NetAppMDNSUnRegisterService(const _i8 *pServiceName,_u8 ServiceNameLen);
dflet 0:bbe98578d4c0 586 #endif
dflet 0:bbe98578d4c0 587
dflet 0:bbe98578d4c0 588 /*!
dflet 0:bbe98578d4c0 589 \brief Register a new mDNS service
dflet 0:bbe98578d4c0 590 \par
dflet 0:bbe98578d4c0 591 This function registers a new mDNS service to the mDNS package and the DB.
dflet 0:bbe98578d4c0 592
dflet 0:bbe98578d4c0 593 This registered service is a service offered by the application.
dflet 0:bbe98578d4c0 594 The service name should be full service name according to RFC
dflet 0:bbe98578d4c0 595 of the DNS-SD - meaning the value in name field in the SRV answer.
dflet 0:bbe98578d4c0 596 Example for service name:
dflet 0:bbe98578d4c0 597 1. PC1._ipp._tcp.local
dflet 0:bbe98578d4c0 598 2. PC2_server._ftp._tcp.local
dflet 0:bbe98578d4c0 599
dflet 0:bbe98578d4c0 600 If the option is_unique is set, mDNS probes the service name to make sure
dflet 0:bbe98578d4c0 601 it is unique before starting to announce the service on the network.
dflet 0:bbe98578d4c0 602 Instance is the instance portion of the service name.
dflet 0:bbe98578d4c0 603
dflet 0:bbe98578d4c0 604 \param[in] ServiceLen The length of the service.
dflet 0:bbe98578d4c0 605 \param[in] TextLen The length of the service should be smaller than 64.
dflet 0:bbe98578d4c0 606 \param[in] port The port on this target host port.
dflet 0:bbe98578d4c0 607 \param[in] TTL The TTL of the service
dflet 0:bbe98578d4c0 608 \param[in] Options bitwise parameters: \n
dflet 0:bbe98578d4c0 609 - bit 0 - service is unique (means that the service needs to be unique)
dflet 0:bbe98578d4c0 610 - bit 31 - for internal use if the service should be added or deleted (set means ADD).
dflet 0:bbe98578d4c0 611 - bit 1-30 for future.
dflet 0:bbe98578d4c0 612
dflet 0:bbe98578d4c0 613 \param[in] pServiceName The service name.
dflet 0:bbe98578d4c0 614 Example for service name: \n
dflet 0:bbe98578d4c0 615 1. PC1._ipp._tcp.local
dflet 0:bbe98578d4c0 616 2. PC2_server._ftp._tcp.local
dflet 0:bbe98578d4c0 617
dflet 0:bbe98578d4c0 618 \param[in] pText The description of the service.
dflet 0:bbe98578d4c0 619 should be as mentioned in the RFC
dflet 0:bbe98578d4c0 620 (according to type of the service IPP,FTP...)
dflet 0:bbe98578d4c0 621
dflet 0:bbe98578d4c0 622 \return On success, zero is returned
dflet 0:bbe98578d4c0 623 Possible error codes:
dflet 0:bbe98578d4c0 624 - Maximum advertise services are already configured.
dflet 0:bbe98578d4c0 625 Delete another existed service that is registered and then register again the new service
dflet 0:bbe98578d4c0 626 - Trying to register a service that is already exists
dflet 0:bbe98578d4c0 627 - Trying to delete service that does not existed
dflet 0:bbe98578d4c0 628 - Illegal service name according to the RFC
dflet 0:bbe98578d4c0 629 - Retry request
dflet 0:bbe98578d4c0 630 - Illegal length of one of the mDNS Set functions
dflet 0:bbe98578d4c0 631 - mDNS is not operational as the device has no IP.Connect the device to an AP to get an IP address.
dflet 0:bbe98578d4c0 632 - mDNS parameters error
dflet 0:bbe98578d4c0 633 - mDNS internal cache error
dflet 0:bbe98578d4c0 634 - mDNS internal error
dflet 0:bbe98578d4c0 635 - Adding a service is not allowed as it is already exist (duplicate service)
dflet 0:bbe98578d4c0 636 - mDNS is not running
dflet 0:bbe98578d4c0 637 - Host name error. Host name format is not allowed according to RFC 1033,1034,1035, 6763
dflet 0:bbe98578d4c0 638 - List size buffer is bigger than internally allowed in the NWP (API get service list),
dflet 0:bbe98578d4c0 639 change the APIs� parameters to decrease the size of the list
dflet 0:bbe98578d4c0 640
dflet 0:bbe98578d4c0 641
dflet 0:bbe98578d4c0 642 \sa sl_NetAppMDNSUnRegisterService
dflet 0:bbe98578d4c0 643
dflet 0:bbe98578d4c0 644 \warning 1) Temporary - there is an allocation on stack of internal buffer.
dflet 0:bbe98578d4c0 645 Its size is NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH. \n
dflet 0:bbe98578d4c0 646 It means that the sum of the text length and service name length cannot be bigger than
dflet 0:bbe98578d4c0 647 NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH.\n
dflet 0:bbe98578d4c0 648 If it is - An error is returned. \n
dflet 0:bbe98578d4c0 649 2) According to now from certain constraints the variables parameters are set in the
dflet 0:bbe98578d4c0 650 attribute part (contain constant parameters)
dflet 0:bbe98578d4c0 651 */
dflet 0:bbe98578d4c0 652 #if _SL_INCLUDE_FUNC(sl_NetAppMDNSRegisterService)
dflet 0:bbe98578d4c0 653 _i16 sl_NetAppMDNSRegisterService( const _i8* pServiceName,
dflet 0:bbe98578d4c0 654 _u8 ServiceNameLen,
dflet 0:bbe98578d4c0 655 const _i8* pText,
dflet 0:bbe98578d4c0 656 _u8 TextLen,
dflet 0:bbe98578d4c0 657 _u16 Port,
dflet 0:bbe98578d4c0 658 _u32 TTL,
dflet 0:bbe98578d4c0 659 _u32 Options);
dflet 0:bbe98578d4c0 660 #endif
dflet 0:bbe98578d4c0 661
dflet 0:bbe98578d4c0 662 /*!
dflet 0:bbe98578d4c0 663 \brief send ICMP ECHO_REQUEST to network hosts
dflet 0:bbe98578d4c0 664
dflet 0:bbe98578d4c0 665 Ping uses the ICMP protocol's mandatory ECHO_REQUEST
dflet 0:bbe98578d4c0 666
dflet 0:bbe98578d4c0 667 \param[in] pPingParams Pointer to the ping request structure: \n
dflet 0:bbe98578d4c0 668 - if flags parameter is set to 0, ping will report back once all requested pings are done (as defined by TotalNumberOfAttempts). \n
dflet 0:bbe98578d4c0 669 - if flags parameter is set to 1, ping will report back after every ping, for TotalNumberOfAttempts.
dflet 0:bbe98578d4c0 670 - if flags parameter is set to 2, ping will stop after the first successful ping, and report back for the successful ping, as well as any preceding failed ones.
dflet 0:bbe98578d4c0 671 For stopping an ongoing ping activity, set parameters IP address to 0
dflet 0:bbe98578d4c0 672
dflet 0:bbe98578d4c0 673 \param[in] family SL_AF_INET or SL_AF_INET6
dflet 0:bbe98578d4c0 674 \param[out] pReport Ping pReport
dflet 0:bbe98578d4c0 675 \param[out] pCallback Callback function upon completion.
dflet 0:bbe98578d4c0 676 If callback is NULL, the API is blocked until data arrives
dflet 0:bbe98578d4c0 677
dflet 0:bbe98578d4c0 678
dflet 0:bbe98578d4c0 679 \return On success, zero is returned. On error, -1 is returned
dflet 0:bbe98578d4c0 680 SL_POOL_IS_EMPTY may be return in case there are no resources in the system
dflet 0:bbe98578d4c0 681 In this case try again later or increase MAX_CONCURRENT_ACTIONS
dflet 0:bbe98578d4c0 682
dflet 0:bbe98578d4c0 683 \sa sl_NetAppPingReport
dflet 0:bbe98578d4c0 684 \note Only one sl_NetAppPingStart can be handled at a time.
dflet 0:bbe98578d4c0 685 Calling this API while the same command is called from another thread, may result
dflet 0:bbe98578d4c0 686 in one of the two scenarios:
dflet 0:bbe98578d4c0 687 1. The command will wait (internal) until the previous command finish, and then be executed.
dflet 0:bbe98578d4c0 688 2. There are not enough resources and SL_POOL_IS_EMPTY error will return.
dflet 0:bbe98578d4c0 689 In this case, MAX_CONCURRENT_ACTIONS can be increased (result in memory increase) or try
dflet 0:bbe98578d4c0 690 again later to issue the command.
dflet 0:bbe98578d4c0 691 \warning
dflet 0:bbe98578d4c0 692 \par Example:
dflet 0:bbe98578d4c0 693 \code
dflet 0:bbe98578d4c0 694
dflet 0:bbe98578d4c0 695 An example of sending 20 ping requests and reporting results to a callback routine when
dflet 0:bbe98578d4c0 696 all requests are sent:
dflet 0:bbe98578d4c0 697
dflet 0:bbe98578d4c0 698 // callback routine
dflet 0:bbe98578d4c0 699 void pingRes(SlPingReport_t* pReport)
dflet 0:bbe98578d4c0 700 {
dflet 0:bbe98578d4c0 701 // handle ping results
dflet 0:bbe98578d4c0 702 }
dflet 0:bbe98578d4c0 703
dflet 0:bbe98578d4c0 704 // ping activation
dflet 0:bbe98578d4c0 705 void PingTest()
dflet 0:bbe98578d4c0 706 {
dflet 0:bbe98578d4c0 707 SlPingReport_t report;
dflet 0:bbe98578d4c0 708 SlPingStartCommand_t pingCommand;
dflet 0:bbe98578d4c0 709
dflet 0:bbe98578d4c0 710 pingCommand.Ip = SL_IPV4_VAL(10,1,1,200); // destination IP address is 10.1.1.200
dflet 0:bbe98578d4c0 711 pingCommand.PingSize = 150; // size of ping, in bytes
dflet 0:bbe98578d4c0 712 pingCommand.PingIntervalTime = 100; // delay between pings, in milliseconds
dflet 0:bbe98578d4c0 713 pingCommand.PingRequestTimeout = 1000; // timeout for every ping in milliseconds
dflet 0:bbe98578d4c0 714 pingCommand.TotalNumberOfAttempts = 20; // max number of ping requests. 0 - forever
dflet 0:bbe98578d4c0 715 pingCommand.Flags = 0; // report only when finished
dflet 0:bbe98578d4c0 716
dflet 0:bbe98578d4c0 717 sl_NetAppPingStart( &pingCommand, SL_AF_INET, &report, pingRes ) ;
dflet 0:bbe98578d4c0 718 }
dflet 0:bbe98578d4c0 719
dflet 0:bbe98578d4c0 720 \endcode
dflet 0:bbe98578d4c0 721 */
dflet 0:bbe98578d4c0 722 #if _SL_INCLUDE_FUNC(sl_NetAppPingStart)
dflet 0:bbe98578d4c0 723 _i16 sl_NetAppPingStart(SlPingStartCommand_t* pPingParams,_u8 family,SlPingReport_t *pReport,const P_SL_DEV_PING_CALLBACK pPingCallback);
dflet 0:bbe98578d4c0 724 #endif
dflet 0:bbe98578d4c0 725
dflet 0:bbe98578d4c0 726 /*!
dflet 0:bbe98578d4c0 727 \brief Internal function for setting network application configurations
dflet 0:bbe98578d4c0 728
dflet 0:bbe98578d4c0 729 \return On success, zero is returned. On error, -1 is
dflet 0:bbe98578d4c0 730 returned
dflet 0:bbe98578d4c0 731
dflet 0:bbe98578d4c0 732 \param[in] AppId Application id, could be one of the following: \n
dflet 0:bbe98578d4c0 733 - SL_NET_APP_HTTP_SERVER_ID
dflet 0:bbe98578d4c0 734 - SL_NET_APP_DHCP_SERVER_ID
dflet 0:bbe98578d4c0 735 - SL_NET_APP_DHCP_SERVER_ID
dflet 0:bbe98578d4c0 736
dflet 0:bbe98578d4c0 737 \param[in] SetOptions set option, could be one of the following: \n
dflet 0:bbe98578d4c0 738 NETAPP_SET_BASIC_OPT
dflet 0:bbe98578d4c0 739
dflet 0:bbe98578d4c0 740 \param[in] OptionLen option structure length
dflet 0:bbe98578d4c0 741
dflet 0:bbe98578d4c0 742 \param[in] pOptionValues pointer to the option structure
dflet 0:bbe98578d4c0 743 \sa
dflet 0:bbe98578d4c0 744 \note
dflet 0:bbe98578d4c0 745 \warning
dflet 0:bbe98578d4c0 746 \par
dflet 0:bbe98578d4c0 747 \code
dflet 0:bbe98578d4c0 748 Set DHCP Server (AP mode) parameters example:
dflet 0:bbe98578d4c0 749
dflet 0:bbe98578d4c0 750 SlNetAppDhcpServerBasicOpt_t dhcpParams;
dflet 0:bbe98578d4c0 751 _u8 outLen = sizeof(SlNetAppDhcpServerBasicOpt_t);
dflet 0:bbe98578d4c0 752 dhcpParams.lease_time = 4096; // lease time (in seconds) of the IP Address
dflet 0:bbe98578d4c0 753 dhcpParams.ipv4_addr_start = SL_IPV4_VAL(192,168,1,10); // first IP Address for allocation. IP Address should be set as Hex number - i.e. 0A0B0C01 for (10.11.12.1)
dflet 0:bbe98578d4c0 754 dhcpParams.ipv4_addr_last = SL_IPV4_VAL(192,168,1,16); // last IP Address for allocation. IP Address should be set as Hex number - i.e. 0A0B0C01 for (10.11.12.1)
dflet 0:bbe98578d4c0 755 sl_NetAppStop(SL_NET_APP_DHCP_SERVER_ID); // Stop DHCP server before settings
dflet 0:bbe98578d4c0 756 sl_NetAppSet(SL_NET_APP_DHCP_SERVER_ID, NETAPP_SET_DHCP_SRV_BASIC_OPT, outLen, (_u8* )&dhcpParams); // set parameters
dflet 0:bbe98578d4c0 757 sl_NetAppStart(SL_NET_APP_DHCP_SERVER_ID); // Start DHCP server with new settings
dflet 0:bbe98578d4c0 758 \endcode
dflet 0:bbe98578d4c0 759 \code
dflet 0:bbe98578d4c0 760 Set Device URN name example:
dflet 0:bbe98578d4c0 761
dflet 0:bbe98578d4c0 762 Device name, maximum length of 33 characters
dflet 0:bbe98578d4c0 763 Device name affects URN name, own SSID name in AP mode, and WPS file "device name" in WPS I.E (STA-WPS / P2P)
dflet 0:bbe98578d4c0 764 In case no device URN name set, the default name is "mysimplelink"
dflet 0:bbe98578d4c0 765 Allowed characters in device name are: 'a - z' , 'A - Z' , '0-9' and '-'
dflet 0:bbe98578d4c0 766
dflet 0:bbe98578d4c0 767 _u8 *my_device = "MY-SIMPLELINK-DEV";
dflet 0:bbe98578d4c0 768 sl_NetAppSet (SL_NET_APP_DEVICE_CONFIG_ID, NETAPP_SET_GET_DEV_CONF_OPT_DEVICE_URN, strlen(my_device), (_u8 *) my_device);
dflet 0:bbe98578d4c0 769 \endcode
dflet 0:bbe98578d4c0 770
dflet 0:bbe98578d4c0 771 */
dflet 0:bbe98578d4c0 772 #if _SL_INCLUDE_FUNC(sl_NetAppSet)
dflet 0:bbe98578d4c0 773 _i32 sl_NetAppSet(_u8 AppId ,_u8 Option,_u8 OptionLen, _u8 *pOptionValue);
dflet 0:bbe98578d4c0 774 #endif
dflet 0:bbe98578d4c0 775
dflet 0:bbe98578d4c0 776 /*!
dflet 0:bbe98578d4c0 777 \brief Internal function for getting network applications configurations
dflet 0:bbe98578d4c0 778
dflet 0:bbe98578d4c0 779 \return On success, zero is returned. On error, -1 is
dflet 0:bbe98578d4c0 780 returned
dflet 0:bbe98578d4c0 781
dflet 0:bbe98578d4c0 782 \param[in] AppId Application id, could be one of the following: \n
dflet 0:bbe98578d4c0 783 - SL_NET_APP_HTTP_SERVER_ID
dflet 0:bbe98578d4c0 784 - SL_NET_APP_DHCP_SERVER_ID
dflet 0:bbe98578d4c0 785
dflet 0:bbe98578d4c0 786 \param[in] Options Get option, could be one of the following: \n
dflet 0:bbe98578d4c0 787 NETAPP_SET_BASIC_OPT
dflet 0:bbe98578d4c0 788
dflet 0:bbe98578d4c0 789 \param[in] OptionLen The length of the allocated memory as input, when the
dflet 0:bbe98578d4c0 790 function complete, the value of this parameter would be
dflet 0:bbe98578d4c0 791 the len that actually read from the device.
dflet 0:bbe98578d4c0 792 If the device return length that is longer from the input
dflet 0:bbe98578d4c0 793 value, the function will cut the end of the returned structure
dflet 0:bbe98578d4c0 794 and will return ESMALLBUF
dflet 0:bbe98578d4c0 795
dflet 0:bbe98578d4c0 796 \param[out] pValues pointer to the option structure which will be filled with the response from the device
dflet 0:bbe98578d4c0 797
dflet 0:bbe98578d4c0 798 \sa
dflet 0:bbe98578d4c0 799 \note
dflet 0:bbe98578d4c0 800 \warning
dflet 0:bbe98578d4c0 801 \par
dflet 0:bbe98578d4c0 802 \code
dflet 0:bbe98578d4c0 803 Get DHCP Server parameters example:
dflet 0:bbe98578d4c0 804
dflet 0:bbe98578d4c0 805 SlNetAppDhcpServerBasicOpt_t dhcpParams;
dflet 0:bbe98578d4c0 806 _u8 outLen = sizeof(SlNetAppDhcpServerBasicOpt_t);
dflet 0:bbe98578d4c0 807 sl_NetAppGet(SL_NET_APP_DHCP_SERVER_ID, NETAPP_SET_DHCP_SRV_BASIC_OPT, &outLen, (_u8* )&dhcpParams);
dflet 0:bbe98578d4c0 808
dflet 0:bbe98578d4c0 809 printf("DHCP Start IP %d.%d.%d.%d End IP %d.%d.%d.%d Lease time seconds %d\n",
dflet 0:bbe98578d4c0 810 SL_IPV4_BYTE(dhcpParams.ipv4_addr_start,3),SL_IPV4_BYTE(dhcpParams.ipv4_addr_start,2),
dflet 0:bbe98578d4c0 811 SL_IPV4_BYTE(dhcpParams.ipv4_addr_start,1),SL_IPV4_BYTE(dhcpParams.ipv4_addr_start,0),
dflet 0:bbe98578d4c0 812 SL_IPV4_BYTE(dhcpParams.ipv4_addr_last,3),SL_IPV4_BYTE(dhcpParams.ipv4_addr_last,2),
dflet 0:bbe98578d4c0 813 SL_IPV4_BYTE(dhcpParams.ipv4_addr_last,1),SL_IPV4_BYTE(dhcpParams.ipv4_addr_last,0),
dflet 0:bbe98578d4c0 814 dhcpParams.lease_time);
dflet 0:bbe98578d4c0 815 \endcode
dflet 0:bbe98578d4c0 816 \code
dflet 0:bbe98578d4c0 817 Get Device URN name example:
dflet 0:bbe98578d4c0 818 Maximum length of 33 characters of device name.
dflet 0:bbe98578d4c0 819 Device name affects URN name, own SSID name in AP mode, and WPS file "device name" in WPS I.E (STA-WPS / P2P)
dflet 0:bbe98578d4c0 820 in case no device URN name set, the default name is "mysimplelink"
dflet 0:bbe98578d4c0 821
dflet 0:bbe98578d4c0 822 _u8 my_device_name[35];
dflet 0:bbe98578d4c0 823 sl_NetAppGet (SL_NET_APP_DEVICE_CONFIG_ID, NETAPP_SET_GET_DEV_CONF_OPT_DEVICE_URN, strlen(my_device_name), (_u8 *)my_device_name);
dflet 0:bbe98578d4c0 824 \endcode
dflet 0:bbe98578d4c0 825 */
dflet 0:bbe98578d4c0 826 #if _SL_INCLUDE_FUNC(sl_NetAppGet)
dflet 0:bbe98578d4c0 827 _i32 sl_NetAppGet(_u8 AppId, _u8 Option,_u8 *pOptionLen, _u8 *pOptionValue);
dflet 0:bbe98578d4c0 828 #endif
dflet 0:bbe98578d4c0 829
dflet 0:bbe98578d4c0 830
dflet 0:bbe98578d4c0 831
dflet 0:bbe98578d4c0 832 /*!
dflet 0:bbe98578d4c0 833
dflet 0:bbe98578d4c0 834 Close the Doxygen group.
dflet 0:bbe98578d4c0 835 @}
dflet 0:bbe98578d4c0 836
dflet 0:bbe98578d4c0 837 */
dflet 0:bbe98578d4c0 838
dflet 0:bbe98578d4c0 839
dflet 0:bbe98578d4c0 840 #ifdef __cplusplus
dflet 0:bbe98578d4c0 841 }
dflet 0:bbe98578d4c0 842 #endif /* __cplusplus */
dflet 0:bbe98578d4c0 843
dflet 0:bbe98578d4c0 844 #endif /* __NETAPP_H__ */
dflet 0:bbe98578d4c0 845
dflet 0:bbe98578d4c0 846