Host library for controlling a WiConnect enabled Wi-Fi module.

Dependents:   wiconnect-ota_example wiconnect-web_setup_example wiconnect-test-console wiconnect-tcp_server_example ... more

Committer:
dan_ackme
Date:
Sat Sep 06 20:34:01 2014 -0700
Revision:
24:e27e23297f02
Parent:
21:17bb3eddcbae
add api to get/set module settings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan_ackme 24:e27e23297f02 1 /**
dan_ackme 24:e27e23297f02 2 * ACKme WiConnect Host Library is licensed under the BSD licence:
dan_ackme 24:e27e23297f02 3 *
dan_ackme 24:e27e23297f02 4 * Copyright (c)2014 ACKme Networks.
dan_ackme 24:e27e23297f02 5 * All rights reserved.
dan_ackme 24:e27e23297f02 6 *
dan_ackme 24:e27e23297f02 7 * Redistribution and use in source and binary forms, with or without modification,
dan_ackme 24:e27e23297f02 8 * are permitted provided that the following conditions are met:
dan_ackme 24:e27e23297f02 9 *
dan_ackme 24:e27e23297f02 10 * 1. Redistributions of source code must retain the above copyright notice,
dan_ackme 24:e27e23297f02 11 * this list of conditions and the following disclaimer.
dan_ackme 24:e27e23297f02 12 * 2. Redistributions in binary form must reproduce the above copyright notice,
dan_ackme 24:e27e23297f02 13 * this list of conditions and the following disclaimer in the documentation
dan_ackme 24:e27e23297f02 14 * and/or other materials provided with the distribution.
dan_ackme 24:e27e23297f02 15 * 3. The name of the author may not be used to endorse or promote products
dan_ackme 24:e27e23297f02 16 * derived from this software without specific prior written permission.
dan_ackme 24:e27e23297f02 17 *
dan_ackme 24:e27e23297f02 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED
dan_ackme 24:e27e23297f02 19 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
dan_ackme 24:e27e23297f02 20 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
dan_ackme 24:e27e23297f02 21 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
dan_ackme 24:e27e23297f02 22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
dan_ackme 24:e27e23297f02 23 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
dan_ackme 24:e27e23297f02 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
dan_ackme 24:e27e23297f02 25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
dan_ackme 24:e27e23297f02 26 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
dan_ackme 24:e27e23297f02 27 * OF SUCH DAMAGE.
dan_ackme 0:ea85c4bb5e1f 28 */
dan_ackme 24:e27e23297f02 29
dan_ackme 21:17bb3eddcbae 30 #include <string.h>
dan_ackme 0:ea85c4bb5e1f 31 #include "Wiconnect.h"
dan_ackme 0:ea85c4bb5e1f 32 #include "internal/common.h"
dan_ackme 0:ea85c4bb5e1f 33 #include "StringUtil.h"
dan_ackme 0:ea85c4bb5e1f 34
dan_ackme 0:ea85c4bb5e1f 35 #include "types/SocketIrqHandlerMap.h"
dan_ackme 0:ea85c4bb5e1f 36
dan_ackme 0:ea85c4bb5e1f 37
dan_ackme 0:ea85c4bb5e1f 38
dan_ackme 0:ea85c4bb5e1f 39
dan_ackme 0:ea85c4bb5e1f 40 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 41 SocketInterface::SocketInterface(Wiconnect *wiconnect_)
dan_ackme 0:ea85c4bb5e1f 42 {
dan_ackme 24:e27e23297f02 43 wiconnect = wiconnect_;
dan_ackme 21:17bb3eddcbae 44 memset((void*)serverConnectedClientList, 0, sizeof(serverConnectedClientList));
dan_ackme 24:e27e23297f02 45 }
dan_ackme 24:e27e23297f02 46
dan_ackme 24:e27e23297f02 47 /*************************************************************************************************/
dan_ackme 24:e27e23297f02 48 SocketInterface::~SocketInterface()
dan_ackme 24:e27e23297f02 49 {
dan_ackme 0:ea85c4bb5e1f 50 }
dan_ackme 0:ea85c4bb5e1f 51
dan_ackme 0:ea85c4bb5e1f 52 /*************************************************************************************************/
dan_ackme 17:7268f365676b 53 WiconnectResult SocketInterface::connect(WiconnectSocket &socket, SocketType type, const char *host, uint16_t remortPort, uint16_t localPort, const void *args, Pin irqPin)
dan_ackme 0:ea85c4bb5e1f 54 {
dan_ackme 0:ea85c4bb5e1f 55 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 56 int32_t handle;
dan_ackme 0:ea85c4bb5e1f 57 char cmdBuffer[WICONNECT_MAX_CMD_SIZE];
dan_ackme 0:ea85c4bb5e1f 58
dan_ackme 0:ea85c4bb5e1f 59 if(WICONNECT_IS_IDLE())
dan_ackme 0:ea85c4bb5e1f 60 {
dan_ackme 0:ea85c4bb5e1f 61 char gpioOption[8] = "";
dan_ackme 0:ea85c4bb5e1f 62
dan_ackme 21:17bb3eddcbae 63 if(irqPin != PIN_NC)
dan_ackme 0:ea85c4bb5e1f 64 {
dan_ackme 0:ea85c4bb5e1f 65 PinToGpioMapper mapper = wiconnect->pinToGpioMapper;
dan_ackme 0:ea85c4bb5e1f 66 if(mapper == NULL)
dan_ackme 0:ea85c4bb5e1f 67 {
dan_ackme 0:ea85c4bb5e1f 68 return WICONNECT_PINNAME_TO_GPIO_MAPPER_NULL;
dan_ackme 0:ea85c4bb5e1f 69 }
dan_ackme 0:ea85c4bb5e1f 70 int8_t gpio = mapper(irqPin);
dan_ackme 0:ea85c4bb5e1f 71 if(gpio == -1)
dan_ackme 0:ea85c4bb5e1f 72 {
dan_ackme 0:ea85c4bb5e1f 73 return WICONNECT_PINNAME_TO_GPIO_NO_MAPPING;
dan_ackme 0:ea85c4bb5e1f 74 }
dan_ackme 0:ea85c4bb5e1f 75 else if(!irqHandlers.pinIsRegistered(irqPin))
dan_ackme 0:ea85c4bb5e1f 76 {
dan_ackme 0:ea85c4bb5e1f 77 return WICONNECT_NOT_FOUND;
dan_ackme 0:ea85c4bb5e1f 78 }
dan_ackme 0:ea85c4bb5e1f 79
dan_ackme 0:ea85c4bb5e1f 80 sprintf(gpioOption, "-g %d ", gpio);
dan_ackme 0:ea85c4bb5e1f 81 }
dan_ackme 0:ea85c4bb5e1f 82
dan_ackme 0:ea85c4bb5e1f 83
dan_ackme 0:ea85c4bb5e1f 84 switch(type)
dan_ackme 0:ea85c4bb5e1f 85 {
dan_ackme 0:ea85c4bb5e1f 86 case SOCKET_TYPE_TCP:
dan_ackme 0:ea85c4bb5e1f 87 sprintf(cmdBuffer, "tcpc %s%s %d", gpioOption, host, remortPort);
dan_ackme 0:ea85c4bb5e1f 88 break;
dan_ackme 0:ea85c4bb5e1f 89
dan_ackme 0:ea85c4bb5e1f 90 case SOCKET_TYPE_UDP: {
dan_ackme 0:ea85c4bb5e1f 91 char tmp[16];
dan_ackme 0:ea85c4bb5e1f 92 sprintf(cmdBuffer, "udpc %s%s %d %s", gpioOption, host, remortPort,
dan_ackme 0:ea85c4bb5e1f 93 (localPort != SOCKET_ANY_PORT) ? StringUtil::uint32ToStr(tmp, localPort) : "");
dan_ackme 0:ea85c4bb5e1f 94 } break;
dan_ackme 0:ea85c4bb5e1f 95
dan_ackme 0:ea85c4bb5e1f 96 case SOCKET_TYPE_TLS:
dan_ackme 0:ea85c4bb5e1f 97 sprintf(cmdBuffer, "tlsc %s%s %d %s", gpioOption, host, remortPort,
dan_ackme 0:ea85c4bb5e1f 98 (args != NULL) ? (char*)args : "");
dan_ackme 0:ea85c4bb5e1f 99 break;
dan_ackme 0:ea85c4bb5e1f 100
dan_ackme 0:ea85c4bb5e1f 101 case SOCKET_TYPE_HTTP: {
dan_ackme 0:ea85c4bb5e1f 102 const HttpSocketArgs *httpArgs = (const HttpSocketArgs*)args;
dan_ackme 0:ea85c4bb5e1f 103 switch(httpArgs->type)
dan_ackme 0:ea85c4bb5e1f 104 {
dan_ackme 0:ea85c4bb5e1f 105 case SOCKET_HTTP_GET:
dan_ackme 0:ea85c4bb5e1f 106 sprintf(cmdBuffer, "http_get %s%s %s", httpArgs->openOnly ? "-o " : "",
dan_ackme 0:ea85c4bb5e1f 107 host,
dan_ackme 0:ea85c4bb5e1f 108 (httpArgs->certName != NULL) ? httpArgs->certName : "");
dan_ackme 0:ea85c4bb5e1f 109 break;
dan_ackme 0:ea85c4bb5e1f 110
dan_ackme 0:ea85c4bb5e1f 111 case SOCKET_HTTP_HEAD:
dan_ackme 0:ea85c4bb5e1f 112 sprintf(cmdBuffer, "http_head %s%s %s", httpArgs->openOnly ? "-o " : "",
dan_ackme 0:ea85c4bb5e1f 113 host,
dan_ackme 0:ea85c4bb5e1f 114 (httpArgs->certName != NULL) ? httpArgs->certName : "");
dan_ackme 0:ea85c4bb5e1f 115 break;
dan_ackme 0:ea85c4bb5e1f 116
dan_ackme 0:ea85c4bb5e1f 117 case SOCKET_HTTP_POST:
dan_ackme 0:ea85c4bb5e1f 118 sprintf(cmdBuffer, "http_post %s%s %s %s", httpArgs->openOnly ? "-o " : "",
dan_ackme 0:ea85c4bb5e1f 119 host,
dan_ackme 0:ea85c4bb5e1f 120 httpArgs->contextType,
dan_ackme 0:ea85c4bb5e1f 121 (httpArgs->certName != NULL) ? httpArgs->certName : "");
dan_ackme 0:ea85c4bb5e1f 122 break;
dan_ackme 0:ea85c4bb5e1f 123
dan_ackme 0:ea85c4bb5e1f 124 default:
dan_ackme 0:ea85c4bb5e1f 125 return WICONNECT_BAD_ARG;
dan_ackme 0:ea85c4bb5e1f 126 }
dan_ackme 0:ea85c4bb5e1f 127
dan_ackme 0:ea85c4bb5e1f 128 } break;
dan_ackme 0:ea85c4bb5e1f 129 default:
dan_ackme 0:ea85c4bb5e1f 130 return WICONNECT_BAD_ARG;
dan_ackme 0:ea85c4bb5e1f 131 }
dan_ackme 0:ea85c4bb5e1f 132 }
dan_ackme 0:ea85c4bb5e1f 133
dan_ackme 0:ea85c4bb5e1f 134 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 135
dan_ackme 0:ea85c4bb5e1f 136 if(WICONNECT_SUCCEEDED(result, wiconnect->sendCommand(cmdBuffer)))
dan_ackme 0:ea85c4bb5e1f 137 {
dan_ackme 0:ea85c4bb5e1f 138 if(!WICONNECT_FAILED(result, wiconnect->responseToInt32(&handle)))
dan_ackme 0:ea85c4bb5e1f 139 {
dan_ackme 0:ea85c4bb5e1f 140 socket.init(handle, type, host, remortPort, localPort);
dan_ackme 0:ea85c4bb5e1f 141 }
dan_ackme 0:ea85c4bb5e1f 142 }
dan_ackme 0:ea85c4bb5e1f 143
dan_ackme 0:ea85c4bb5e1f 144 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 145
dan_ackme 0:ea85c4bb5e1f 146 return result;
dan_ackme 0:ea85c4bb5e1f 147 }
dan_ackme 0:ea85c4bb5e1f 148
dan_ackme 0:ea85c4bb5e1f 149 /*************************************************************************************************/
dan_ackme 17:7268f365676b 150 WiconnectResult SocketInterface::tcpConnect(WiconnectSocket &socket, const char *host, uint16_t remortPort, Pin irqPin)
dan_ackme 0:ea85c4bb5e1f 151 {
dan_ackme 0:ea85c4bb5e1f 152 return connect(socket, SOCKET_TYPE_TCP, host, remortPort, SOCKET_ANY_PORT, NULL, irqPin);
dan_ackme 0:ea85c4bb5e1f 153 }
dan_ackme 0:ea85c4bb5e1f 154
dan_ackme 0:ea85c4bb5e1f 155 /*************************************************************************************************/
dan_ackme 17:7268f365676b 156 WiconnectResult SocketInterface::tlsConnect(WiconnectSocket &socket, const char *host, uint16_t remortPort, const char *certFilename, Pin irqPin)
dan_ackme 0:ea85c4bb5e1f 157 {
dan_ackme 0:ea85c4bb5e1f 158 return connect(socket, SOCKET_TYPE_TLS, host, remortPort, SOCKET_ANY_PORT, certFilename, irqPin);
dan_ackme 0:ea85c4bb5e1f 159 }
dan_ackme 0:ea85c4bb5e1f 160
dan_ackme 0:ea85c4bb5e1f 161 /*************************************************************************************************/
dan_ackme 17:7268f365676b 162 WiconnectResult SocketInterface::udpConnect(WiconnectSocket &socket, const char *host, uint16_t remortPort, uint16_t localPort, Pin irqPin)
dan_ackme 0:ea85c4bb5e1f 163 {
dan_ackme 0:ea85c4bb5e1f 164 return connect(socket, SOCKET_TYPE_UDP, host, remortPort, localPort, NULL, irqPin);
dan_ackme 0:ea85c4bb5e1f 165 }
dan_ackme 0:ea85c4bb5e1f 166
dan_ackme 0:ea85c4bb5e1f 167 /*************************************************************************************************/
dan_ackme 17:7268f365676b 168 WiconnectResult SocketInterface::httpConnect(WiconnectSocket &socket, const char *url, const HttpSocketArgs *args)
dan_ackme 0:ea85c4bb5e1f 169 {
dan_ackme 0:ea85c4bb5e1f 170 return connect(socket, SOCKET_TYPE_HTTP, url, SOCKET_ANY_PORT, SOCKET_ANY_PORT, args, NC);
dan_ackme 0:ea85c4bb5e1f 171 }
dan_ackme 0:ea85c4bb5e1f 172
dan_ackme 0:ea85c4bb5e1f 173 /*************************************************************************************************/
dan_ackme 17:7268f365676b 174 WiconnectResult SocketInterface::httpGet(WiconnectSocket &socket, const char *url, bool openOnly, const char *certFilename)
dan_ackme 0:ea85c4bb5e1f 175 {
dan_ackme 4:c0966143aa22 176 const HttpSocketArgs args =
dan_ackme 0:ea85c4bb5e1f 177 {
dan_ackme 0:ea85c4bb5e1f 178 NULL,
dan_ackme 0:ea85c4bb5e1f 179 certFilename,
dan_ackme 0:ea85c4bb5e1f 180 openOnly,
dan_ackme 0:ea85c4bb5e1f 181 SOCKET_HTTP_GET
dan_ackme 0:ea85c4bb5e1f 182 };
dan_ackme 0:ea85c4bb5e1f 183 return httpConnect(socket, url, &args);
dan_ackme 0:ea85c4bb5e1f 184 }
dan_ackme 0:ea85c4bb5e1f 185
dan_ackme 0:ea85c4bb5e1f 186 /*************************************************************************************************/
dan_ackme 17:7268f365676b 187 WiconnectResult SocketInterface::httpPost(WiconnectSocket &socket, const char *url, const char *contextType, bool openOnly, const char *certFilename)
dan_ackme 0:ea85c4bb5e1f 188 {
dan_ackme 2:05e20e184e7e 189 const HttpSocketArgs args =
dan_ackme 0:ea85c4bb5e1f 190 {
dan_ackme 0:ea85c4bb5e1f 191 contextType,
dan_ackme 0:ea85c4bb5e1f 192 certFilename,
dan_ackme 0:ea85c4bb5e1f 193 openOnly,
dan_ackme 0:ea85c4bb5e1f 194 SOCKET_HTTP_POST
dan_ackme 0:ea85c4bb5e1f 195 };
dan_ackme 0:ea85c4bb5e1f 196 return httpConnect(socket, url, &args);
dan_ackme 0:ea85c4bb5e1f 197 }
dan_ackme 0:ea85c4bb5e1f 198
dan_ackme 0:ea85c4bb5e1f 199 /*************************************************************************************************/
dan_ackme 17:7268f365676b 200 WiconnectResult SocketInterface::httpHead(WiconnectSocket &socket, const char *url, const char *certFilename)
dan_ackme 0:ea85c4bb5e1f 201 {
dan_ackme 2:05e20e184e7e 202 const HttpSocketArgs args =
dan_ackme 0:ea85c4bb5e1f 203 {
dan_ackme 0:ea85c4bb5e1f 204 NULL,
dan_ackme 0:ea85c4bb5e1f 205 certFilename,
dan_ackme 0:ea85c4bb5e1f 206 false,
dan_ackme 0:ea85c4bb5e1f 207 SOCKET_HTTP_HEAD
dan_ackme 0:ea85c4bb5e1f 208 };
dan_ackme 0:ea85c4bb5e1f 209 return httpConnect(socket, url, &args);
dan_ackme 0:ea85c4bb5e1f 210 }
dan_ackme 0:ea85c4bb5e1f 211
dan_ackme 0:ea85c4bb5e1f 212 /*************************************************************************************************/
dan_ackme 17:7268f365676b 213 WiconnectResult SocketInterface::httpAddHeader(WiconnectSocket &socket, const char *key, const char *value)
dan_ackme 0:ea85c4bb5e1f 214 {
dan_ackme 0:ea85c4bb5e1f 215 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 216 char cmdBuffer[WICONNECT_MAX_CMD_SIZE];
dan_ackme 0:ea85c4bb5e1f 217
dan_ackme 0:ea85c4bb5e1f 218 if(WICONNECT_IS_IDLE())
dan_ackme 0:ea85c4bb5e1f 219 {
dan_ackme 0:ea85c4bb5e1f 220 sprintf(cmdBuffer, "http_add_header %d %s %s", socket.getHandle(), key, value);
dan_ackme 0:ea85c4bb5e1f 221 }
dan_ackme 0:ea85c4bb5e1f 222
dan_ackme 0:ea85c4bb5e1f 223 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 224
dan_ackme 0:ea85c4bb5e1f 225 result = wiconnect->sendCommand(cmdBuffer);
dan_ackme 0:ea85c4bb5e1f 226
dan_ackme 0:ea85c4bb5e1f 227 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 228
dan_ackme 0:ea85c4bb5e1f 229 return result;
dan_ackme 0:ea85c4bb5e1f 230 }
dan_ackme 0:ea85c4bb5e1f 231
dan_ackme 0:ea85c4bb5e1f 232 /*************************************************************************************************/
dan_ackme 17:7268f365676b 233 WiconnectResult SocketInterface::httpGetStatus(WiconnectSocket &socket, uint32_t *statusCodePtr)
dan_ackme 0:ea85c4bb5e1f 234 {
dan_ackme 0:ea85c4bb5e1f 235 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 236
dan_ackme 0:ea85c4bb5e1f 237 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 238
dan_ackme 0:ea85c4bb5e1f 239 result = wiconnect->sendCommand("http_read_status %d", socket.getHandle());
dan_ackme 0:ea85c4bb5e1f 240
dan_ackme 0:ea85c4bb5e1f 241 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 242
dan_ackme 0:ea85c4bb5e1f 243 return result;
dan_ackme 0:ea85c4bb5e1f 244 }
dan_ackme 0:ea85c4bb5e1f 245
dan_ackme 0:ea85c4bb5e1f 246 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 247 WiconnectResult SocketInterface::closeAllSockets()
dan_ackme 0:ea85c4bb5e1f 248 {
dan_ackme 0:ea85c4bb5e1f 249 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 250
dan_ackme 0:ea85c4bb5e1f 251 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 252
dan_ackme 0:ea85c4bb5e1f 253 result = wiconnect->sendCommand("close all");
dan_ackme 0:ea85c4bb5e1f 254
dan_ackme 0:ea85c4bb5e1f 255 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 256
dan_ackme 0:ea85c4bb5e1f 257 return result;
dan_ackme 0:ea85c4bb5e1f 258 }
dan_ackme 0:ea85c4bb5e1f 259
dan_ackme 0:ea85c4bb5e1f 260
dan_ackme 0:ea85c4bb5e1f 261 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 262 WiconnectResult SocketInterface::registerSocketIrqHandler(Pin irqPin, const Callback &handler)
dan_ackme 0:ea85c4bb5e1f 263 {
dan_ackme 0:ea85c4bb5e1f 264 PinToGpioMapper mapper = wiconnect->pinToGpioMapper;
dan_ackme 0:ea85c4bb5e1f 265 if(irqHandlers.pinIsRegistered(irqPin))
dan_ackme 0:ea85c4bb5e1f 266 {
dan_ackme 0:ea85c4bb5e1f 267 return WICONNECT_DUPLICATE;
dan_ackme 0:ea85c4bb5e1f 268 }
dan_ackme 0:ea85c4bb5e1f 269 else if(mapper == NULL)
dan_ackme 0:ea85c4bb5e1f 270 {
dan_ackme 0:ea85c4bb5e1f 271 return WICONNECT_PINNAME_TO_GPIO_MAPPER_NULL;
dan_ackme 0:ea85c4bb5e1f 272 }
dan_ackme 0:ea85c4bb5e1f 273 int8_t gpio = mapper(irqPin);
dan_ackme 0:ea85c4bb5e1f 274 if(gpio == -1)
dan_ackme 0:ea85c4bb5e1f 275 {
dan_ackme 0:ea85c4bb5e1f 276 return WICONNECT_PINNAME_TO_GPIO_NO_MAPPING;
dan_ackme 0:ea85c4bb5e1f 277 }
dan_ackme 0:ea85c4bb5e1f 278
dan_ackme 0:ea85c4bb5e1f 279 return irqHandlers.registerHandler(irqPin, handler);
dan_ackme 0:ea85c4bb5e1f 280 }
dan_ackme 0:ea85c4bb5e1f 281
dan_ackme 0:ea85c4bb5e1f 282 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 283 WiconnectResult SocketInterface::unregisterSocketIrqHandler(Pin irqPin)
dan_ackme 0:ea85c4bb5e1f 284 {
dan_ackme 0:ea85c4bb5e1f 285 return irqHandlers.unregisterHandler(irqPin);
dan_ackme 0:ea85c4bb5e1f 286 }
dan_ackme 24:e27e23297f02 287
dan_ackme 24:e27e23297f02 288 /*************************************************************************************************/
dan_ackme 24:e27e23297f02 289 void SocketInterface::socketClosedCallback(const WiconnectSocket *socket)
dan_ackme 24:e27e23297f02 290 {
dan_ackme 24:e27e23297f02 291 if(serverConnectedClientList[socket->handle])
dan_ackme 24:e27e23297f02 292 {
dan_ackme 24:e27e23297f02 293 serverConnectedClientList[socket->handle] = false;
dan_ackme 24:e27e23297f02 294 }
dan_ackme 24:e27e23297f02 295 }