wifi test

Dependencies:   X_NUCLEO_IKS01A2 mbed-http

Committer:
JMF
Date:
Wed Sep 05 14:28:24 2018 +0000
Revision:
0:24d3eb812fd4
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JMF 0:24d3eb812fd4 1 /* ISM43362 Example
JMF 0:24d3eb812fd4 2 *
JMF 0:24d3eb812fd4 3 * Copyright (c) STMicroelectronics 2018
JMF 0:24d3eb812fd4 4 *
JMF 0:24d3eb812fd4 5 * Licensed under the Apache License, Version 2.0 (the "License");
JMF 0:24d3eb812fd4 6 * you may not use this file except in compliance with the License.
JMF 0:24d3eb812fd4 7 * You may obtain a copy of the License at
JMF 0:24d3eb812fd4 8 *
JMF 0:24d3eb812fd4 9 * http://www.apache.org/licenses/LICENSE-2.0
JMF 0:24d3eb812fd4 10 *
JMF 0:24d3eb812fd4 11 * Unless required by applicable law or agreed to in writing, software
JMF 0:24d3eb812fd4 12 * distributed under the License is distributed on an "AS IS" BASIS,
JMF 0:24d3eb812fd4 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
JMF 0:24d3eb812fd4 14 * See the License for the specific language governing permissions and
JMF 0:24d3eb812fd4 15 * limitations under the License.
JMF 0:24d3eb812fd4 16 */
JMF 0:24d3eb812fd4 17 #include <string.h>
JMF 0:24d3eb812fd4 18 #include "ISM43362.h"
JMF 0:24d3eb812fd4 19 #include "mbed_debug.h"
JMF 0:24d3eb812fd4 20
JMF 0:24d3eb812fd4 21 // activate / de-activate debug
JMF 0:24d3eb812fd4 22 #define ism_debug 0
JMF 0:24d3eb812fd4 23
JMF 0:24d3eb812fd4 24 ISM43362::ISM43362(PinName mosi, PinName miso, PinName sclk, PinName nss, PinName resetpin, PinName datareadypin, PinName wakeup, bool debug)
JMF 0:24d3eb812fd4 25 : _bufferspi(mosi, miso, sclk, nss, datareadypin),
JMF 0:24d3eb812fd4 26 _parser(_bufferspi),
JMF 0:24d3eb812fd4 27 _resetpin(resetpin),
JMF 0:24d3eb812fd4 28 _packets(0), _packets_end(&_packets)
JMF 0:24d3eb812fd4 29 {
JMF 0:24d3eb812fd4 30 DigitalOut wakeup_pin(wakeup);
JMF 0:24d3eb812fd4 31 _bufferspi.format(16, 0); /* 16bits, ploarity low, phase 1Edge, master mode */
JMF 0:24d3eb812fd4 32 _bufferspi.frequency(20000000); /* up to 20 MHz */
JMF 0:24d3eb812fd4 33 _active_id = 0xFF;
JMF 0:24d3eb812fd4 34 _FwVersionId = 0;
JMF 0:24d3eb812fd4 35
JMF 0:24d3eb812fd4 36 _ism_debug = debug || ism_debug;
JMF 0:24d3eb812fd4 37 reset();
JMF 0:24d3eb812fd4 38 }
JMF 0:24d3eb812fd4 39
JMF 0:24d3eb812fd4 40 /**
JMF 0:24d3eb812fd4 41 * @brief Parses and returns number from string.
JMF 0:24d3eb812fd4 42 * @param ptr: pointer to string
JMF 0:24d3eb812fd4 43 * @param cnt: pointer to the number of parsed digit
JMF 0:24d3eb812fd4 44 * @retval integer value.
JMF 0:24d3eb812fd4 45 */
JMF 0:24d3eb812fd4 46 #define CHARISHEXNUM(x) (((x) >= '0' && (x) <= '9') || \
JMF 0:24d3eb812fd4 47 ((x) >= 'a' && (x) <= 'f') || \
JMF 0:24d3eb812fd4 48 ((x) >= 'A' && (x) <= 'F'))
JMF 0:24d3eb812fd4 49 #define CHARISNUM(x) ((x) >= '0' && (x) <= '9')
JMF 0:24d3eb812fd4 50 #define CHAR2NUM(x) ((x) - '0')
JMF 0:24d3eb812fd4 51
JMF 0:24d3eb812fd4 52
JMF 0:24d3eb812fd4 53 extern "C" int32_t ParseNumber(char *ptr, uint8_t *cnt)
JMF 0:24d3eb812fd4 54 {
JMF 0:24d3eb812fd4 55 uint8_t minus = 0, i = 0;
JMF 0:24d3eb812fd4 56 int32_t sum = 0;
JMF 0:24d3eb812fd4 57
JMF 0:24d3eb812fd4 58 if (*ptr == '-') { /* Check for minus character */
JMF 0:24d3eb812fd4 59 minus = 1;
JMF 0:24d3eb812fd4 60 ptr++;
JMF 0:24d3eb812fd4 61 i++;
JMF 0:24d3eb812fd4 62 }
JMF 0:24d3eb812fd4 63 if (*ptr == 'C') { /* input string from get_firmware_version is Cx.x.x.x */
JMF 0:24d3eb812fd4 64 ptr++;
JMF 0:24d3eb812fd4 65 }
JMF 0:24d3eb812fd4 66
JMF 0:24d3eb812fd4 67 while (CHARISNUM(*ptr) || (*ptr == '.')) { /* Parse number */
JMF 0:24d3eb812fd4 68 if (*ptr == '.') {
JMF 0:24d3eb812fd4 69 ptr++; // next char
JMF 0:24d3eb812fd4 70 } else {
JMF 0:24d3eb812fd4 71 sum = 10 * sum + CHAR2NUM(*ptr);
JMF 0:24d3eb812fd4 72 ptr++;
JMF 0:24d3eb812fd4 73 i++;
JMF 0:24d3eb812fd4 74 }
JMF 0:24d3eb812fd4 75 }
JMF 0:24d3eb812fd4 76
JMF 0:24d3eb812fd4 77 if (cnt != NULL) { /* Save number of characters used for number */
JMF 0:24d3eb812fd4 78 *cnt = i;
JMF 0:24d3eb812fd4 79 }
JMF 0:24d3eb812fd4 80 if (minus) { /* Minus detected */
JMF 0:24d3eb812fd4 81 return 0 - sum;
JMF 0:24d3eb812fd4 82 }
JMF 0:24d3eb812fd4 83 return sum; /* Return number */
JMF 0:24d3eb812fd4 84 }
JMF 0:24d3eb812fd4 85
JMF 0:24d3eb812fd4 86 uint32_t ISM43362::get_firmware_version(void)
JMF 0:24d3eb812fd4 87 {
JMF 0:24d3eb812fd4 88 char tmp_buffer[250];
JMF 0:24d3eb812fd4 89 char *ptr, *ptr2;
JMF 0:24d3eb812fd4 90 char _fw_version[16];
JMF 0:24d3eb812fd4 91
JMF 0:24d3eb812fd4 92 /* Use %[^\n] instead of %s to allow having spaces in the string */
JMF 0:24d3eb812fd4 93 if (!(_parser.send("I?") && _parser.recv("%[^\n^\r]\r\n", tmp_buffer) && check_response())) {
JMF 0:24d3eb812fd4 94 debug_if(_ism_debug, "ISM43362: get_firmware_version is FAIL\r\n");
JMF 0:24d3eb812fd4 95 return 0;
JMF 0:24d3eb812fd4 96 }
JMF 0:24d3eb812fd4 97 debug_if(_ism_debug, "ISM43362: get_firmware_version = %s\r\n", tmp_buffer);
JMF 0:24d3eb812fd4 98
JMF 0:24d3eb812fd4 99 // Get the first version in the string
JMF 0:24d3eb812fd4 100 ptr = strtok((char *)tmp_buffer, ",");
JMF 0:24d3eb812fd4 101 ptr = strtok(NULL, ",");
JMF 0:24d3eb812fd4 102 ptr2 = strtok(NULL, ",");
JMF 0:24d3eb812fd4 103 if (ptr == NULL) {
JMF 0:24d3eb812fd4 104 debug_if(_ism_debug, "ISM43362: get_firmware_version decoding is FAIL\r\n");
JMF 0:24d3eb812fd4 105 return 0;
JMF 0:24d3eb812fd4 106 }
JMF 0:24d3eb812fd4 107 strncpy(_fw_version, ptr, ptr2 - ptr);
JMF 0:24d3eb812fd4 108 _FwVersionId = ParseNumber(_fw_version, NULL);
JMF 0:24d3eb812fd4 109
JMF 0:24d3eb812fd4 110 return _FwVersionId;
JMF 0:24d3eb812fd4 111 }
JMF 0:24d3eb812fd4 112
JMF 0:24d3eb812fd4 113 bool ISM43362::reset(void)
JMF 0:24d3eb812fd4 114 {
JMF 0:24d3eb812fd4 115 char tmp_buffer[100];
JMF 0:24d3eb812fd4 116 debug_if(_ism_debug, "ISM43362: Reset Module\r\n");
JMF 0:24d3eb812fd4 117 _resetpin = 0;
JMF 0:24d3eb812fd4 118 wait_ms(10);
JMF 0:24d3eb812fd4 119 _resetpin = 1;
JMF 0:24d3eb812fd4 120 wait_ms(500);
JMF 0:24d3eb812fd4 121
JMF 0:24d3eb812fd4 122 /* Wait for prompt line : the string is "> ". */
JMF 0:24d3eb812fd4 123 /* As the space char is not detected by sscanf function in parser.recv, */
JMF 0:24d3eb812fd4 124 /* we need to use %[\n] */
JMF 0:24d3eb812fd4 125 if (!_parser.recv(">%[^\n]", tmp_buffer)) {
JMF 0:24d3eb812fd4 126 debug_if(_ism_debug, "ISM43362: Reset Module failed\r\n");
JMF 0:24d3eb812fd4 127 return false;
JMF 0:24d3eb812fd4 128 }
JMF 0:24d3eb812fd4 129 return true;
JMF 0:24d3eb812fd4 130 }
JMF 0:24d3eb812fd4 131
JMF 0:24d3eb812fd4 132 void ISM43362::print_rx_buff(void)
JMF 0:24d3eb812fd4 133 {
JMF 0:24d3eb812fd4 134 char tmp[150] = {0};
JMF 0:24d3eb812fd4 135 uint16_t i = 0;
JMF 0:24d3eb812fd4 136 debug_if(_ism_debug, "ISM43362: ");
JMF 0:24d3eb812fd4 137 while (i < 150) {
JMF 0:24d3eb812fd4 138 int c = _parser.getc();
JMF 0:24d3eb812fd4 139 if (c < 0) {
JMF 0:24d3eb812fd4 140 break;
JMF 0:24d3eb812fd4 141 }
JMF 0:24d3eb812fd4 142 tmp[i] = c;
JMF 0:24d3eb812fd4 143 debug_if(_ism_debug, "0x%2X ", c);
JMF 0:24d3eb812fd4 144 i++;
JMF 0:24d3eb812fd4 145 }
JMF 0:24d3eb812fd4 146 debug_if(_ism_debug, "\n");
JMF 0:24d3eb812fd4 147 debug_if(_ism_debug, "ISM43362: Buffer content =====%s=====\r\n", tmp);
JMF 0:24d3eb812fd4 148 }
JMF 0:24d3eb812fd4 149
JMF 0:24d3eb812fd4 150 /* checks the standard OK response of the WIFI module, shouldbe:
JMF 0:24d3eb812fd4 151 * \r\nDATA\r\nOK\r\n>sp
JMF 0:24d3eb812fd4 152 * or
JMF 0:24d3eb812fd4 153 * \r\nERROR\r\nUSAGE\r\n>sp
JMF 0:24d3eb812fd4 154 * function returns true if OK, false otherwise. In case of error,
JMF 0:24d3eb812fd4 155 * print error content then flush buffer */
JMF 0:24d3eb812fd4 156 bool ISM43362::check_response(void)
JMF 0:24d3eb812fd4 157 {
JMF 0:24d3eb812fd4 158 char tmp_buffer[100];
JMF 0:24d3eb812fd4 159 if (!_parser.recv("OK\r\n")) {
JMF 0:24d3eb812fd4 160 print_rx_buff();
JMF 0:24d3eb812fd4 161 _parser.flush();
JMF 0:24d3eb812fd4 162 return false;
JMF 0:24d3eb812fd4 163 }
JMF 0:24d3eb812fd4 164
JMF 0:24d3eb812fd4 165 /* Then we should get the prompt: "> " */
JMF 0:24d3eb812fd4 166 /* As the space char is not detected by sscanf function in parser.recv, */
JMF 0:24d3eb812fd4 167 /* we need to use %[\n] */
JMF 0:24d3eb812fd4 168 if (!_parser.recv(">%[^\n]", tmp_buffer)) {
JMF 0:24d3eb812fd4 169 debug_if(_ism_debug, "ISM43362: Missing prompt in WIFI resp\r\n");
JMF 0:24d3eb812fd4 170 print_rx_buff();
JMF 0:24d3eb812fd4 171 _parser.flush();
JMF 0:24d3eb812fd4 172 return false;
JMF 0:24d3eb812fd4 173 }
JMF 0:24d3eb812fd4 174
JMF 0:24d3eb812fd4 175 /* Inventek module do stuffing / padding of data with 0x15,
JMF 0:24d3eb812fd4 176 * in case buffer contains such */
JMF 0:24d3eb812fd4 177 while (1) {
JMF 0:24d3eb812fd4 178 int c = _parser.getc();
JMF 0:24d3eb812fd4 179 if (c == 0x15) {
JMF 0:24d3eb812fd4 180 // debug_if(_ism_debug, "ISM43362: Flush char 0x%x\n", c);
JMF 0:24d3eb812fd4 181 continue;
JMF 0:24d3eb812fd4 182 } else {
JMF 0:24d3eb812fd4 183 /* How to put it back if needed ? */
JMF 0:24d3eb812fd4 184 break;
JMF 0:24d3eb812fd4 185 }
JMF 0:24d3eb812fd4 186 }
JMF 0:24d3eb812fd4 187 return true;
JMF 0:24d3eb812fd4 188 }
JMF 0:24d3eb812fd4 189
JMF 0:24d3eb812fd4 190 bool ISM43362::dhcp(bool enabled)
JMF 0:24d3eb812fd4 191 {
JMF 0:24d3eb812fd4 192 return (_parser.send("C4=%d", enabled ? 1 : 0) && check_response());
JMF 0:24d3eb812fd4 193 }
JMF 0:24d3eb812fd4 194
JMF 0:24d3eb812fd4 195 int ISM43362::connect(const char *ap, const char *passPhrase, ism_security_t ap_sec)
JMF 0:24d3eb812fd4 196 {
JMF 0:24d3eb812fd4 197 char tmp[256];
JMF 0:24d3eb812fd4 198
JMF 0:24d3eb812fd4 199 if (!(_parser.send("C1=%s", ap) && check_response())) {
JMF 0:24d3eb812fd4 200 return NSAPI_ERROR_PARAMETER;
JMF 0:24d3eb812fd4 201 }
JMF 0:24d3eb812fd4 202
JMF 0:24d3eb812fd4 203 if (!(_parser.send("C2=%s", passPhrase) && check_response())) {
JMF 0:24d3eb812fd4 204 return NSAPI_ERROR_PARAMETER;
JMF 0:24d3eb812fd4 205 }
JMF 0:24d3eb812fd4 206
JMF 0:24d3eb812fd4 207 /* Check security level is acceptable */
JMF 0:24d3eb812fd4 208 if (ap_sec > ISM_SECURITY_WPA_WPA2) {
JMF 0:24d3eb812fd4 209 debug_if(_ism_debug, "ISM43362: Unsupported security level %d\n", ap_sec);
JMF 0:24d3eb812fd4 210 return NSAPI_ERROR_UNSUPPORTED;
JMF 0:24d3eb812fd4 211 }
JMF 0:24d3eb812fd4 212
JMF 0:24d3eb812fd4 213 if (!(_parser.send("C3=%d", ap_sec) && check_response())) {
JMF 0:24d3eb812fd4 214 return NSAPI_ERROR_PARAMETER;
JMF 0:24d3eb812fd4 215 }
JMF 0:24d3eb812fd4 216
JMF 0:24d3eb812fd4 217 if (_parser.send("C0")) {
JMF 0:24d3eb812fd4 218 while (_parser.recv("%[^\n]\n", tmp)) {
JMF 0:24d3eb812fd4 219 if (strstr(tmp, "OK")) {
JMF 0:24d3eb812fd4 220 _parser.flush();
JMF 0:24d3eb812fd4 221 return NSAPI_ERROR_OK;
JMF 0:24d3eb812fd4 222 }
JMF 0:24d3eb812fd4 223 if (strstr(tmp, "JOIN")) {
JMF 0:24d3eb812fd4 224 if (strstr(tmp, "Failed")) {
JMF 0:24d3eb812fd4 225 _parser.flush();
JMF 0:24d3eb812fd4 226 return NSAPI_ERROR_AUTH_FAILURE;
JMF 0:24d3eb812fd4 227 }
JMF 0:24d3eb812fd4 228 }
JMF 0:24d3eb812fd4 229 }
JMF 0:24d3eb812fd4 230 }
JMF 0:24d3eb812fd4 231
JMF 0:24d3eb812fd4 232 return NSAPI_ERROR_NO_CONNECTION;
JMF 0:24d3eb812fd4 233 }
JMF 0:24d3eb812fd4 234
JMF 0:24d3eb812fd4 235 bool ISM43362::disconnect(void)
JMF 0:24d3eb812fd4 236 {
JMF 0:24d3eb812fd4 237 return (_parser.send("CD") && check_response());
JMF 0:24d3eb812fd4 238 }
JMF 0:24d3eb812fd4 239
JMF 0:24d3eb812fd4 240 const char *ISM43362::getIPAddress(void)
JMF 0:24d3eb812fd4 241 {
JMF 0:24d3eb812fd4 242 char tmp_ip_buffer[250];
JMF 0:24d3eb812fd4 243 char *ptr, *ptr2;
JMF 0:24d3eb812fd4 244
JMF 0:24d3eb812fd4 245 /* Use %[^\n] instead of %s to allow having spaces in the string */
JMF 0:24d3eb812fd4 246 if (!(_parser.send("C?")
JMF 0:24d3eb812fd4 247 && _parser.recv("%[^\n^\r]\r\n", tmp_ip_buffer)
JMF 0:24d3eb812fd4 248 && check_response())) {
JMF 0:24d3eb812fd4 249 debug_if(_ism_debug, "ISM43362: getIPAddress LINE KO: %s\n", tmp_ip_buffer);
JMF 0:24d3eb812fd4 250 return 0;
JMF 0:24d3eb812fd4 251 }
JMF 0:24d3eb812fd4 252
JMF 0:24d3eb812fd4 253 /* Get the IP address in the result */
JMF 0:24d3eb812fd4 254 /* TODO : check if the begining of the string is always = "eS-WiFi_AP_C47F51011231," */
JMF 0:24d3eb812fd4 255 ptr = strtok((char *)tmp_ip_buffer, ",");
JMF 0:24d3eb812fd4 256 ptr = strtok(NULL, ",");
JMF 0:24d3eb812fd4 257 ptr = strtok(NULL, ",");
JMF 0:24d3eb812fd4 258 ptr = strtok(NULL, ",");
JMF 0:24d3eb812fd4 259 ptr = strtok(NULL, ",");
JMF 0:24d3eb812fd4 260 ptr = strtok(NULL, ",");
JMF 0:24d3eb812fd4 261 ptr2 = strtok(NULL, ",");
JMF 0:24d3eb812fd4 262 if (ptr == NULL) {
JMF 0:24d3eb812fd4 263 return 0;
JMF 0:24d3eb812fd4 264 }
JMF 0:24d3eb812fd4 265 strncpy(_ip_buffer, ptr, ptr2 - ptr);
JMF 0:24d3eb812fd4 266
JMF 0:24d3eb812fd4 267 tmp_ip_buffer[59] = 0;
JMF 0:24d3eb812fd4 268 debug_if(_ism_debug, "ISM43362: receivedIPAddress: %s\n", _ip_buffer);
JMF 0:24d3eb812fd4 269
JMF 0:24d3eb812fd4 270 return _ip_buffer;
JMF 0:24d3eb812fd4 271 }
JMF 0:24d3eb812fd4 272
JMF 0:24d3eb812fd4 273 const char *ISM43362::getMACAddress(void)
JMF 0:24d3eb812fd4 274 {
JMF 0:24d3eb812fd4 275 if (!(_parser.send("Z5") && _parser.recv("%s\r\n", _mac_buffer) && check_response())) {
JMF 0:24d3eb812fd4 276 debug_if(_ism_debug, "ISM43362: receivedMacAddress LINE KO: %s\n", _mac_buffer);
JMF 0:24d3eb812fd4 277 return 0;
JMF 0:24d3eb812fd4 278 }
JMF 0:24d3eb812fd4 279
JMF 0:24d3eb812fd4 280 debug_if(_ism_debug, "ISM43362: receivedMacAddress:%s, size=%d\r\n", _mac_buffer, sizeof(_mac_buffer));
JMF 0:24d3eb812fd4 281
JMF 0:24d3eb812fd4 282 return _mac_buffer;
JMF 0:24d3eb812fd4 283 }
JMF 0:24d3eb812fd4 284
JMF 0:24d3eb812fd4 285 const char *ISM43362::getGateway()
JMF 0:24d3eb812fd4 286 {
JMF 0:24d3eb812fd4 287 char tmp[250];
JMF 0:24d3eb812fd4 288 /* Use %[^\n] instead of %s to allow having spaces in the string */
JMF 0:24d3eb812fd4 289 if (!(_parser.send("C?") && _parser.recv("%[^\n^\r]\r\n", tmp) && check_response())) {
JMF 0:24d3eb812fd4 290 debug_if(_ism_debug, "ISM43362: getGateway LINE KO: %s\r\n", tmp);
JMF 0:24d3eb812fd4 291 return 0;
JMF 0:24d3eb812fd4 292 }
JMF 0:24d3eb812fd4 293
JMF 0:24d3eb812fd4 294 /* Extract the Gateway in the received buffer */
JMF 0:24d3eb812fd4 295 char *ptr;
JMF 0:24d3eb812fd4 296 ptr = strtok(tmp, ",");
JMF 0:24d3eb812fd4 297 for (int i = 0; i < 7; i++) {
JMF 0:24d3eb812fd4 298 if (ptr == NULL) {
JMF 0:24d3eb812fd4 299 break;
JMF 0:24d3eb812fd4 300 }
JMF 0:24d3eb812fd4 301 ptr = strtok(NULL, ",");
JMF 0:24d3eb812fd4 302 }
JMF 0:24d3eb812fd4 303
JMF 0:24d3eb812fd4 304 strncpy(_gateway_buffer, ptr, sizeof(_gateway_buffer));
JMF 0:24d3eb812fd4 305
JMF 0:24d3eb812fd4 306 debug_if(_ism_debug, "ISM43362: getGateway: %s\r\n", _gateway_buffer);
JMF 0:24d3eb812fd4 307
JMF 0:24d3eb812fd4 308 return _gateway_buffer;
JMF 0:24d3eb812fd4 309 }
JMF 0:24d3eb812fd4 310
JMF 0:24d3eb812fd4 311 const char *ISM43362::getNetmask()
JMF 0:24d3eb812fd4 312 {
JMF 0:24d3eb812fd4 313 char tmp[250];
JMF 0:24d3eb812fd4 314 /* Use %[^\n] instead of %s to allow having spaces in the string */
JMF 0:24d3eb812fd4 315 if (!(_parser.send("C?") && _parser.recv("%[^\n^\r]\r\n", tmp) && check_response())) {
JMF 0:24d3eb812fd4 316 debug_if(_ism_debug, "ISM43362: getNetmask LINE KO: %s\n", tmp);
JMF 0:24d3eb812fd4 317 return 0;
JMF 0:24d3eb812fd4 318 }
JMF 0:24d3eb812fd4 319
JMF 0:24d3eb812fd4 320 /* Extract Netmask in the received buffer */
JMF 0:24d3eb812fd4 321 char *ptr;
JMF 0:24d3eb812fd4 322 ptr = strtok(tmp, ",");
JMF 0:24d3eb812fd4 323 for (int i = 0; i < 6; i++) {
JMF 0:24d3eb812fd4 324 if (ptr == NULL) {
JMF 0:24d3eb812fd4 325 break;
JMF 0:24d3eb812fd4 326 }
JMF 0:24d3eb812fd4 327 ptr = strtok(NULL, ",");
JMF 0:24d3eb812fd4 328 }
JMF 0:24d3eb812fd4 329
JMF 0:24d3eb812fd4 330 strncpy(_netmask_buffer, ptr, sizeof(_netmask_buffer));
JMF 0:24d3eb812fd4 331
JMF 0:24d3eb812fd4 332 debug_if(_ism_debug, "ISM43362: getNetmask: %s\r\n", _netmask_buffer);
JMF 0:24d3eb812fd4 333
JMF 0:24d3eb812fd4 334 return _netmask_buffer;
JMF 0:24d3eb812fd4 335 }
JMF 0:24d3eb812fd4 336
JMF 0:24d3eb812fd4 337 int8_t ISM43362::getRSSI()
JMF 0:24d3eb812fd4 338 {
JMF 0:24d3eb812fd4 339 int8_t rssi;
JMF 0:24d3eb812fd4 340 char tmp[25];
JMF 0:24d3eb812fd4 341
JMF 0:24d3eb812fd4 342 if (!(_parser.send("CR") && _parser.recv("%s\r\n", tmp) && check_response())) {
JMF 0:24d3eb812fd4 343 debug_if(_ism_debug, "ISM43362: getRSSI LINE KO: %s\r\n", tmp);
JMF 0:24d3eb812fd4 344 return 0;
JMF 0:24d3eb812fd4 345 }
JMF 0:24d3eb812fd4 346
JMF 0:24d3eb812fd4 347 rssi = ParseNumber(tmp, NULL);
JMF 0:24d3eb812fd4 348
JMF 0:24d3eb812fd4 349 debug_if(_ism_debug, "ISM43362: getRSSI: %d\r\n", rssi);
JMF 0:24d3eb812fd4 350
JMF 0:24d3eb812fd4 351 return rssi;
JMF 0:24d3eb812fd4 352 }
JMF 0:24d3eb812fd4 353 /**
JMF 0:24d3eb812fd4 354 * @brief Parses Security type.
JMF 0:24d3eb812fd4 355 * @param ptr: pointer to string
JMF 0:24d3eb812fd4 356 * @retval Encryption type.
JMF 0:24d3eb812fd4 357 */
JMF 0:24d3eb812fd4 358 extern "C" nsapi_security_t ParseSecurity(char *ptr)
JMF 0:24d3eb812fd4 359 {
JMF 0:24d3eb812fd4 360 if (strstr(ptr, "Open")) {
JMF 0:24d3eb812fd4 361 return NSAPI_SECURITY_NONE;
JMF 0:24d3eb812fd4 362 } else if (strstr(ptr, "WEP")) {
JMF 0:24d3eb812fd4 363 return NSAPI_SECURITY_WEP;
JMF 0:24d3eb812fd4 364 } else if (strstr(ptr, "WPA2 AES")) {
JMF 0:24d3eb812fd4 365 return NSAPI_SECURITY_WPA2;
JMF 0:24d3eb812fd4 366 } else if (strstr(ptr, "WPA WPA2")) {
JMF 0:24d3eb812fd4 367 return NSAPI_SECURITY_WPA_WPA2;
JMF 0:24d3eb812fd4 368 } else if (strstr(ptr, "WPA2 TKIP")) {
JMF 0:24d3eb812fd4 369 return NSAPI_SECURITY_UNKNOWN; // no match in mbed
JMF 0:24d3eb812fd4 370 } else if (strstr(ptr, "WPA2")) {
JMF 0:24d3eb812fd4 371 return NSAPI_SECURITY_WPA2; // catch any other WPA2 formula
JMF 0:24d3eb812fd4 372 } else if (strstr(ptr, "WPA")) {
JMF 0:24d3eb812fd4 373 return NSAPI_SECURITY_WPA;
JMF 0:24d3eb812fd4 374 } else {
JMF 0:24d3eb812fd4 375 return NSAPI_SECURITY_UNKNOWN;
JMF 0:24d3eb812fd4 376 }
JMF 0:24d3eb812fd4 377 }
JMF 0:24d3eb812fd4 378
JMF 0:24d3eb812fd4 379 /**
JMF 0:24d3eb812fd4 380 * @brief Convert char in Hex format to integer.
JMF 0:24d3eb812fd4 381 * @param a: character to convert
JMF 0:24d3eb812fd4 382 * @retval integer value.
JMF 0:24d3eb812fd4 383 */
JMF 0:24d3eb812fd4 384 extern "C" uint8_t Hex2Num(char a)
JMF 0:24d3eb812fd4 385 {
JMF 0:24d3eb812fd4 386 if (a >= '0' && a <= '9') { /* Char is num */
JMF 0:24d3eb812fd4 387 return a - '0';
JMF 0:24d3eb812fd4 388 } else if (a >= 'a' && a <= 'f') { /* Char is lowercase character A - Z (hex) */
JMF 0:24d3eb812fd4 389 return (a - 'a') + 10;
JMF 0:24d3eb812fd4 390 } else if (a >= 'A' && a <= 'F') { /* Char is uppercase character A - Z (hex) */
JMF 0:24d3eb812fd4 391 return (a - 'A') + 10;
JMF 0:24d3eb812fd4 392 }
JMF 0:24d3eb812fd4 393
JMF 0:24d3eb812fd4 394 return 0;
JMF 0:24d3eb812fd4 395 }
JMF 0:24d3eb812fd4 396
JMF 0:24d3eb812fd4 397 /**
JMF 0:24d3eb812fd4 398 * @brief Extract a hex number from a string.
JMF 0:24d3eb812fd4 399 * @param ptr: pointer to string
JMF 0:24d3eb812fd4 400 * @param cnt: pointer to the number of parsed digit
JMF 0:24d3eb812fd4 401 * @retval Hex value.
JMF 0:24d3eb812fd4 402 */
JMF 0:24d3eb812fd4 403 extern "C" uint32_t ParseHexNumber(char *ptr, uint8_t *cnt)
JMF 0:24d3eb812fd4 404 {
JMF 0:24d3eb812fd4 405 uint32_t sum = 0;
JMF 0:24d3eb812fd4 406 uint8_t i = 0;
JMF 0:24d3eb812fd4 407
JMF 0:24d3eb812fd4 408 while (CHARISHEXNUM(*ptr)) { /* Parse number */
JMF 0:24d3eb812fd4 409 sum <<= 4;
JMF 0:24d3eb812fd4 410 sum += Hex2Num(*ptr);
JMF 0:24d3eb812fd4 411 ptr++;
JMF 0:24d3eb812fd4 412 i++;
JMF 0:24d3eb812fd4 413 }
JMF 0:24d3eb812fd4 414
JMF 0:24d3eb812fd4 415 if (cnt != NULL) { /* Save number of characters used for number */
JMF 0:24d3eb812fd4 416 *cnt = i;
JMF 0:24d3eb812fd4 417 }
JMF 0:24d3eb812fd4 418 return sum; /* Return number */
JMF 0:24d3eb812fd4 419 }
JMF 0:24d3eb812fd4 420
JMF 0:24d3eb812fd4 421 bool ISM43362::isConnected(void)
JMF 0:24d3eb812fd4 422 {
JMF 0:24d3eb812fd4 423 return getIPAddress() != 0;
JMF 0:24d3eb812fd4 424 }
JMF 0:24d3eb812fd4 425
JMF 0:24d3eb812fd4 426 int ISM43362::scan(WiFiAccessPoint *res, unsigned limit)
JMF 0:24d3eb812fd4 427 {
JMF 0:24d3eb812fd4 428 unsigned cnt = 0, num = 0;
JMF 0:24d3eb812fd4 429 char *ptr;
JMF 0:24d3eb812fd4 430 char tmp[256];
JMF 0:24d3eb812fd4 431
JMF 0:24d3eb812fd4 432 if (!(_parser.send("F0"))) {
JMF 0:24d3eb812fd4 433 debug_if(_ism_debug, "ISM43362: scan error\r\n");
JMF 0:24d3eb812fd4 434 return 0;
JMF 0:24d3eb812fd4 435 }
JMF 0:24d3eb812fd4 436
JMF 0:24d3eb812fd4 437 /* Parse the received buffer and fill AP buffer */
JMF 0:24d3eb812fd4 438 /* Use %[^\n] instead of %s to allow having spaces in the string */
JMF 0:24d3eb812fd4 439 while (_parser.recv("#%[^\n]\n", tmp)) {
JMF 0:24d3eb812fd4 440 if (limit != 0 && cnt >= limit) {
JMF 0:24d3eb812fd4 441 /* reached end */
JMF 0:24d3eb812fd4 442 break;
JMF 0:24d3eb812fd4 443 }
JMF 0:24d3eb812fd4 444 nsapi_wifi_ap_t ap = {0};
JMF 0:24d3eb812fd4 445 debug_if(_ism_debug, "ISM43362: received:%s\n", tmp);
JMF 0:24d3eb812fd4 446 ptr = strtok(tmp, ",");
JMF 0:24d3eb812fd4 447 num = 0;
JMF 0:24d3eb812fd4 448 while (ptr != NULL) {
JMF 0:24d3eb812fd4 449 switch (num++) {
JMF 0:24d3eb812fd4 450 case 0: /* Ignore index */
JMF 0:24d3eb812fd4 451 case 4: /* Ignore Max Rate */
JMF 0:24d3eb812fd4 452 case 5: /* Ignore Network Type */
JMF 0:24d3eb812fd4 453 case 7: /* Ignore Radio Band */
JMF 0:24d3eb812fd4 454 break;
JMF 0:24d3eb812fd4 455 case 1:
JMF 0:24d3eb812fd4 456 ptr[strlen(ptr) - 1] = 0;
JMF 0:24d3eb812fd4 457 strncpy((char *)ap.ssid, ptr + 1, 32);
JMF 0:24d3eb812fd4 458 break;
JMF 0:24d3eb812fd4 459 case 2:
JMF 0:24d3eb812fd4 460 for (int i = 0; i < 6; i++) {
JMF 0:24d3eb812fd4 461 ap.bssid[i] = ParseHexNumber(ptr + (i * 3), NULL);
JMF 0:24d3eb812fd4 462 }
JMF 0:24d3eb812fd4 463 break;
JMF 0:24d3eb812fd4 464 case 3:
JMF 0:24d3eb812fd4 465 ap.rssi = ParseNumber(ptr, NULL);
JMF 0:24d3eb812fd4 466 break;
JMF 0:24d3eb812fd4 467 case 6:
JMF 0:24d3eb812fd4 468 ap.security = ParseSecurity(ptr);
JMF 0:24d3eb812fd4 469 break;
JMF 0:24d3eb812fd4 470 case 8:
JMF 0:24d3eb812fd4 471 ap.channel = ParseNumber(ptr, NULL);
JMF 0:24d3eb812fd4 472 num = 1;
JMF 0:24d3eb812fd4 473 break;
JMF 0:24d3eb812fd4 474 default:
JMF 0:24d3eb812fd4 475 break;
JMF 0:24d3eb812fd4 476 }
JMF 0:24d3eb812fd4 477 ptr = strtok(NULL, ",");
JMF 0:24d3eb812fd4 478 }
JMF 0:24d3eb812fd4 479 if (res != NULL) {
JMF 0:24d3eb812fd4 480 res[cnt] = WiFiAccessPoint(ap);
JMF 0:24d3eb812fd4 481 }
JMF 0:24d3eb812fd4 482 cnt++;
JMF 0:24d3eb812fd4 483 }
JMF 0:24d3eb812fd4 484
JMF 0:24d3eb812fd4 485 /* We may stop before having read all the APs list, so flush the rest of
JMF 0:24d3eb812fd4 486 * it as well as OK commands */
JMF 0:24d3eb812fd4 487 _parser.flush();
JMF 0:24d3eb812fd4 488
JMF 0:24d3eb812fd4 489 debug_if(_ism_debug, "ISM43362: End of Scan: cnt=%d\n", cnt);
JMF 0:24d3eb812fd4 490
JMF 0:24d3eb812fd4 491 return cnt;
JMF 0:24d3eb812fd4 492
JMF 0:24d3eb812fd4 493 }
JMF 0:24d3eb812fd4 494
JMF 0:24d3eb812fd4 495 bool ISM43362::open(const char *type, int id, const char *addr, int port)
JMF 0:24d3eb812fd4 496 {
JMF 0:24d3eb812fd4 497 /* TODO : This is the implementation for the client socket, need to check if need to create openserver too */
JMF 0:24d3eb812fd4 498 //IDs only 0-3
JMF 0:24d3eb812fd4 499 if ((id < 0) || (id > 3)) {
JMF 0:24d3eb812fd4 500 debug_if(_ism_debug, "ISM43362: open: wrong id\n");
JMF 0:24d3eb812fd4 501 return false;
JMF 0:24d3eb812fd4 502 }
JMF 0:24d3eb812fd4 503 /* Set communication socket */
JMF 0:24d3eb812fd4 504 _active_id = id;
JMF 0:24d3eb812fd4 505 if (!(_parser.send("P0=%d", id) && check_response())) {
JMF 0:24d3eb812fd4 506 debug_if(_ism_debug, "ISM43362: open: P0 issue\n");
JMF 0:24d3eb812fd4 507 return false;
JMF 0:24d3eb812fd4 508 }
JMF 0:24d3eb812fd4 509 /* Set protocol */
JMF 0:24d3eb812fd4 510 if (!(_parser.send("P1=%s", type) && check_response())) {
JMF 0:24d3eb812fd4 511 debug_if(_ism_debug, "ISM43362: open: P1 issue\n");
JMF 0:24d3eb812fd4 512 return false;
JMF 0:24d3eb812fd4 513 }
JMF 0:24d3eb812fd4 514 /* Set address */
JMF 0:24d3eb812fd4 515 if (!(_parser.send("P3=%s", addr) && check_response())) {
JMF 0:24d3eb812fd4 516 debug_if(_ism_debug, "ISM43362: open: P3 issue\n");
JMF 0:24d3eb812fd4 517 return false;
JMF 0:24d3eb812fd4 518 }
JMF 0:24d3eb812fd4 519 if (!(_parser.send("P4=%d", port) && check_response())) {
JMF 0:24d3eb812fd4 520 debug_if(_ism_debug, "ISM43362: open: P4 issue\n");
JMF 0:24d3eb812fd4 521 return false;
JMF 0:24d3eb812fd4 522 }
JMF 0:24d3eb812fd4 523 /* Start client */
JMF 0:24d3eb812fd4 524 if (!(_parser.send("P6=1") && check_response())) {
JMF 0:24d3eb812fd4 525 debug_if(_ism_debug, "ISM43362: open: P6 issue\n");
JMF 0:24d3eb812fd4 526 return false;
JMF 0:24d3eb812fd4 527 }
JMF 0:24d3eb812fd4 528
JMF 0:24d3eb812fd4 529 /* request as much data as possible - i.e. module max size */
JMF 0:24d3eb812fd4 530 if (!(_parser.send("R1=%d", ES_WIFI_MAX_RX_PACKET_SIZE) && check_response())) {
JMF 0:24d3eb812fd4 531 debug_if(_ism_debug, "ISM43362: open: R1 issue\n");
JMF 0:24d3eb812fd4 532 return -1;
JMF 0:24d3eb812fd4 533 }
JMF 0:24d3eb812fd4 534
JMF 0:24d3eb812fd4 535 /* Non blocking mode : set Read Transport Timeout to 1ms */
JMF 0:24d3eb812fd4 536 if (!(_parser.send("R2=1") && check_response())) {
JMF 0:24d3eb812fd4 537 debug_if(_ism_debug, "ISM43362: open: R2 issue\n");
JMF 0:24d3eb812fd4 538 return -1;
JMF 0:24d3eb812fd4 539 }
JMF 0:24d3eb812fd4 540
JMF 0:24d3eb812fd4 541 debug_if(_ism_debug, "ISM43362: open ok with id %d type %s addr %s port %d\n", id, type, addr, port);
JMF 0:24d3eb812fd4 542
JMF 0:24d3eb812fd4 543 return true;
JMF 0:24d3eb812fd4 544 }
JMF 0:24d3eb812fd4 545
JMF 0:24d3eb812fd4 546 bool ISM43362::dns_lookup(const char *name, char *ip)
JMF 0:24d3eb812fd4 547 {
JMF 0:24d3eb812fd4 548 char tmp[30];
JMF 0:24d3eb812fd4 549
JMF 0:24d3eb812fd4 550 if (!(_parser.send("D0=%s", name) && _parser.recv("%s\r\n", tmp)
JMF 0:24d3eb812fd4 551 && check_response())) {
JMF 0:24d3eb812fd4 552 debug_if(_ism_debug, "ISM43362 dns_lookup: D0 issue: %s\n", tmp);
JMF 0:24d3eb812fd4 553 return 0;
JMF 0:24d3eb812fd4 554 }
JMF 0:24d3eb812fd4 555
JMF 0:24d3eb812fd4 556 strncpy(ip, tmp, sizeof(tmp));
JMF 0:24d3eb812fd4 557
JMF 0:24d3eb812fd4 558 debug_if(_ism_debug, "ISM43362 dns_lookup: %s ok\n", ip);
JMF 0:24d3eb812fd4 559 return 1;
JMF 0:24d3eb812fd4 560 }
JMF 0:24d3eb812fd4 561
JMF 0:24d3eb812fd4 562 bool ISM43362::send(int id, const void *data, uint32_t amount)
JMF 0:24d3eb812fd4 563 {
JMF 0:24d3eb812fd4 564 // The Size limit has to be checked on caller side.
JMF 0:24d3eb812fd4 565 if (amount > ES_WIFI_MAX_TX_PACKET_SIZE) {
JMF 0:24d3eb812fd4 566 debug_if(_ism_debug, "ISM43362 send: max issue\n");
JMF 0:24d3eb812fd4 567 return false;
JMF 0:24d3eb812fd4 568 }
JMF 0:24d3eb812fd4 569
JMF 0:24d3eb812fd4 570 /* Activate the socket id in the wifi module */
JMF 0:24d3eb812fd4 571 if ((id < 0) || (id > 3)) {
JMF 0:24d3eb812fd4 572 return false;
JMF 0:24d3eb812fd4 573 }
JMF 0:24d3eb812fd4 574 if (_active_id != id) {
JMF 0:24d3eb812fd4 575 _active_id = id;
JMF 0:24d3eb812fd4 576 if (!(_parser.send("P0=%d", id) && check_response())) {
JMF 0:24d3eb812fd4 577 debug_if(_ism_debug, "ISM43362 send: P0 issue\n");
JMF 0:24d3eb812fd4 578 return false;
JMF 0:24d3eb812fd4 579 }
JMF 0:24d3eb812fd4 580 }
JMF 0:24d3eb812fd4 581
JMF 0:24d3eb812fd4 582 /* set Write Transport Packet Size */
JMF 0:24d3eb812fd4 583 int i = _parser.printf("S3=%d\r", (int)amount);
JMF 0:24d3eb812fd4 584 if (i < 0) {
JMF 0:24d3eb812fd4 585 debug_if(_ism_debug, "ISM43362 send: S3 issue\n");
JMF 0:24d3eb812fd4 586 return false;
JMF 0:24d3eb812fd4 587 }
JMF 0:24d3eb812fd4 588 i = _parser.write((const char *)data, amount, i);
JMF 0:24d3eb812fd4 589 if (i < 0) {
JMF 0:24d3eb812fd4 590 return false;
JMF 0:24d3eb812fd4 591 }
JMF 0:24d3eb812fd4 592
JMF 0:24d3eb812fd4 593 if (!check_response()) {
JMF 0:24d3eb812fd4 594 return false;
JMF 0:24d3eb812fd4 595 }
JMF 0:24d3eb812fd4 596
JMF 0:24d3eb812fd4 597 debug_if(_ism_debug, "ISM43362 send: id %d amount %d\n", id, amount);
JMF 0:24d3eb812fd4 598 return true;
JMF 0:24d3eb812fd4 599 }
JMF 0:24d3eb812fd4 600
JMF 0:24d3eb812fd4 601 int ISM43362::check_recv_status(int id, void *data)
JMF 0:24d3eb812fd4 602 {
JMF 0:24d3eb812fd4 603 int read_amount;
JMF 0:24d3eb812fd4 604
JMF 0:24d3eb812fd4 605 debug_if(_ism_debug, "ISM43362 check_recv_status: id %d\r\n", id);
JMF 0:24d3eb812fd4 606
JMF 0:24d3eb812fd4 607 /* Activate the socket id in the wifi module */
JMF 0:24d3eb812fd4 608 if ((id < 0) || (id > 3)) {
JMF 0:24d3eb812fd4 609 debug_if(_ism_debug, "ISM43362 check_recv_status: ERROR with id %d\r\n", id);
JMF 0:24d3eb812fd4 610 return -1;
JMF 0:24d3eb812fd4 611 }
JMF 0:24d3eb812fd4 612
JMF 0:24d3eb812fd4 613 if (_active_id != id) {
JMF 0:24d3eb812fd4 614 _active_id = id;
JMF 0:24d3eb812fd4 615 if (!(_parser.send("P0=%d", id) && check_response())) {
JMF 0:24d3eb812fd4 616 return -1;
JMF 0:24d3eb812fd4 617 }
JMF 0:24d3eb812fd4 618 }
JMF 0:24d3eb812fd4 619
JMF 0:24d3eb812fd4 620
JMF 0:24d3eb812fd4 621 if (!_parser.send("R0")) {
JMF 0:24d3eb812fd4 622 return -1;
JMF 0:24d3eb812fd4 623 }
JMF 0:24d3eb812fd4 624 read_amount = _parser.read((char *)data);
JMF 0:24d3eb812fd4 625
JMF 0:24d3eb812fd4 626 if (read_amount < 0) {
JMF 0:24d3eb812fd4 627 debug_if(_ism_debug, "ISM43362 check_recv_status: ERROR in data RECV, timeout?\r\n");
JMF 0:24d3eb812fd4 628 return -1; /* nothing to read */
JMF 0:24d3eb812fd4 629 }
JMF 0:24d3eb812fd4 630
JMF 0:24d3eb812fd4 631 /* If there are spurious 0x15 at the end of the data, this is an error
JMF 0:24d3eb812fd4 632 * we hall can get rid off of them :-(
JMF 0:24d3eb812fd4 633 * This should not happen, but let's try to clean-up anyway
JMF 0:24d3eb812fd4 634 */
JMF 0:24d3eb812fd4 635 char *cleanup = (char *) data;
JMF 0:24d3eb812fd4 636 while ((read_amount > 0) && (cleanup[read_amount - 1] == 0x15)) {
JMF 0:24d3eb812fd4 637 // debug_if(_ism_debug, "ISM43362 check_recv_status: spurious 0X15 trashed\r\n");
JMF 0:24d3eb812fd4 638 /* Remove the trailling char then search again */
JMF 0:24d3eb812fd4 639 read_amount--;
JMF 0:24d3eb812fd4 640 }
JMF 0:24d3eb812fd4 641
JMF 0:24d3eb812fd4 642 if ((read_amount >= 6) && (strncmp("OK\r\n> ", (char *)data, 6) == 0)) {
JMF 0:24d3eb812fd4 643 // debug_if(_ism_debug, "ISM43362 check_recv_status: recv 2 nothing to read=%d\r\n", read_amount);
JMF 0:24d3eb812fd4 644 // read_amount -= 6;
JMF 0:24d3eb812fd4 645 return 0; /* nothing to read */
JMF 0:24d3eb812fd4 646 } else if ((read_amount >= 8) && (strncmp((char *)((uint32_t) data + read_amount - 8), "\r\nOK\r\n> ", 8)) == 0) {
JMF 0:24d3eb812fd4 647 /* bypass ""\r\nOK\r\n> " if present at the end of the chain */
JMF 0:24d3eb812fd4 648 read_amount -= 8;
JMF 0:24d3eb812fd4 649 } else {
JMF 0:24d3eb812fd4 650 debug_if(_ism_debug, "ISM43362 check_recv_status: ERROR, flushing %d bytes: ", read_amount);
JMF 0:24d3eb812fd4 651 // for (int i = 0; i < read_amount; i++) {
JMF 0:24d3eb812fd4 652 // debug_if(_ism_debug, "%2X ", cleanup[i]);
JMF 0:24d3eb812fd4 653 // }
JMF 0:24d3eb812fd4 654 // debug_if(_ism_debug, "\r\n (ASCII)", cleanup);
JMF 0:24d3eb812fd4 655 cleanup[read_amount] = 0;
JMF 0:24d3eb812fd4 656 debug_if(_ism_debug, "%s\r\n", cleanup);
JMF 0:24d3eb812fd4 657 return -1; /* nothing to read */
JMF 0:24d3eb812fd4 658 }
JMF 0:24d3eb812fd4 659
JMF 0:24d3eb812fd4 660 debug_if(_ism_debug, "ISM43362 check_recv_status: id %d read_amount=%d\r\n", id, read_amount);
JMF 0:24d3eb812fd4 661 return read_amount;
JMF 0:24d3eb812fd4 662 }
JMF 0:24d3eb812fd4 663
JMF 0:24d3eb812fd4 664 bool ISM43362::close(int id)
JMF 0:24d3eb812fd4 665 {
JMF 0:24d3eb812fd4 666 if ((id < 0) || (id > 3)) {
JMF 0:24d3eb812fd4 667 debug_if(_ism_debug, "ISM43362: Wrong socket number\n");
JMF 0:24d3eb812fd4 668 return false;
JMF 0:24d3eb812fd4 669 }
JMF 0:24d3eb812fd4 670 /* Set connection on this socket */
JMF 0:24d3eb812fd4 671 debug_if(_ism_debug, "ISM43362: CLOSE socket id=%d\n", id);
JMF 0:24d3eb812fd4 672 _active_id = id;
JMF 0:24d3eb812fd4 673 if (!(_parser.send("P0=%d", id) && check_response())) {
JMF 0:24d3eb812fd4 674 return false;
JMF 0:24d3eb812fd4 675 }
JMF 0:24d3eb812fd4 676 /* close this socket */
JMF 0:24d3eb812fd4 677 if (!(_parser.send("P6=0") && check_response())) {
JMF 0:24d3eb812fd4 678 return false;
JMF 0:24d3eb812fd4 679 }
JMF 0:24d3eb812fd4 680 return true;
JMF 0:24d3eb812fd4 681 }
JMF 0:24d3eb812fd4 682
JMF 0:24d3eb812fd4 683 bool ISM43362::readable()
JMF 0:24d3eb812fd4 684 {
JMF 0:24d3eb812fd4 685 /* not applicable with SPI api */
JMF 0:24d3eb812fd4 686 return true;
JMF 0:24d3eb812fd4 687 }
JMF 0:24d3eb812fd4 688
JMF 0:24d3eb812fd4 689 bool ISM43362::writeable()
JMF 0:24d3eb812fd4 690 {
JMF 0:24d3eb812fd4 691 /* not applicable with SPI api */
JMF 0:24d3eb812fd4 692 return true;
JMF 0:24d3eb812fd4 693 }
JMF 0:24d3eb812fd4 694
JMF 0:24d3eb812fd4 695 void ISM43362::attach(Callback<void()> func)
JMF 0:24d3eb812fd4 696 {
JMF 0:24d3eb812fd4 697 /* not applicable with SPI api */
JMF 0:24d3eb812fd4 698 }
JMF 0:24d3eb812fd4 699