test

Fork of WizFi250Interface by WIZnet

Committer:
cliff1
Date:
Fri Aug 18 04:50:17 2017 +0000
Revision:
1:116433d24e91
Parent:
0:e3dc9e54a15b
Test 5.5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kaizen 0:e3dc9e54a15b 1 /*
kaizen 0:e3dc9e54a15b 2 /* Copyright (C) 2013 gsfan, MIT License
kaizen 0:e3dc9e54a15b 3 *
kaizen 0:e3dc9e54a15b 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
kaizen 0:e3dc9e54a15b 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
kaizen 0:e3dc9e54a15b 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
kaizen 0:e3dc9e54a15b 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
kaizen 0:e3dc9e54a15b 8 * furnished to do so, subject to the following conditions:
kaizen 0:e3dc9e54a15b 9 *
kaizen 0:e3dc9e54a15b 10 * The above copyright notice and this permission notice shall be included in all copies or
kaizen 0:e3dc9e54a15b 11 * substantial portions of the Software.
kaizen 0:e3dc9e54a15b 12 *
kaizen 0:e3dc9e54a15b 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
kaizen 0:e3dc9e54a15b 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
kaizen 0:e3dc9e54a15b 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kaizen 0:e3dc9e54a15b 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kaizen 0:e3dc9e54a15b 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kaizen 0:e3dc9e54a15b 18 */
kaizen 0:e3dc9e54a15b 19 /* Copyright (C) 2014 Wiznet, MIT License
kaizen 0:e3dc9e54a15b 20 * port to the Wiznet Module WizFi250
kaizen 0:e3dc9e54a15b 21 */
kaizen 0:e3dc9e54a15b 22
kaizen 0:e3dc9e54a15b 23 #include "WizFi250.h"
kaizen 0:e3dc9e54a15b 24
kaizen 0:e3dc9e54a15b 25 #ifdef CFG_ENABLE_RTOS
kaizen 0:e3dc9e54a15b 26 #undef WIZ_DBG
kaizen 0:e3dc9e54a15b 27 #define WIZ_DBG(x, ...)
kaizen 0:e3dc9e54a15b 28 #endif
kaizen 0:e3dc9e54a15b 29
kaizen 0:e3dc9e54a15b 30 // This function is operating in ISR. So you can't use debug message.
kaizen 0:e3dc9e54a15b 31 void WizFi250::recvData ( char c )
kaizen 0:e3dc9e54a15b 32 {
kaizen 0:e3dc9e54a15b 33 static int cid, sub, len, count;
kaizen 0:e3dc9e54a15b 34
kaizen 0:e3dc9e54a15b 35 switch(_state.mode)
kaizen 0:e3dc9e54a15b 36 {
kaizen 0:e3dc9e54a15b 37 case MODE_COMMAND:
kaizen 0:e3dc9e54a15b 38 switch(c)
kaizen 0:e3dc9e54a15b 39 {
kaizen 0:e3dc9e54a15b 40 case 0:
kaizen 0:e3dc9e54a15b 41 case 0x0a: // LF
kaizen 0:e3dc9e54a15b 42 case 0x0d: // CR
kaizen 0:e3dc9e54a15b 43 break;
kaizen 0:e3dc9e54a15b 44
kaizen 0:e3dc9e54a15b 45 case '{':
kaizen 0:e3dc9e54a15b 46 _state.buf->flush();
kaizen 0:e3dc9e54a15b 47 _state.mode = MODE_DATA_RX;
kaizen 0:e3dc9e54a15b 48 sub = 0;
kaizen 0:e3dc9e54a15b 49 break;
kaizen 0:e3dc9e54a15b 50
kaizen 0:e3dc9e54a15b 51 default:
kaizen 0:e3dc9e54a15b 52 _state.buf->flush();
kaizen 0:e3dc9e54a15b 53 _state.buf->queue(c);
kaizen 0:e3dc9e54a15b 54 _state.mode = MODE_CMDRESP;
kaizen 0:e3dc9e54a15b 55 break;
kaizen 0:e3dc9e54a15b 56 }
kaizen 0:e3dc9e54a15b 57 break;
kaizen 0:e3dc9e54a15b 58
kaizen 0:e3dc9e54a15b 59 case MODE_CMDRESP:
kaizen 0:e3dc9e54a15b 60 switch(c)
kaizen 0:e3dc9e54a15b 61 {
kaizen 0:e3dc9e54a15b 62 case 0:
kaizen 0:e3dc9e54a15b 63 break;
kaizen 0:e3dc9e54a15b 64 case 0x0a: // LF
kaizen 0:e3dc9e54a15b 65 break;
kaizen 0:e3dc9e54a15b 66 case 0x0d: // CR
kaizen 0:e3dc9e54a15b 67 if (_flow == 2) setRts(false); // block
kaizen 0:e3dc9e54a15b 68 _state.mode = MODE_COMMAND;
kaizen 0:e3dc9e54a15b 69 parseMessage();
kaizen 0:e3dc9e54a15b 70 if (_flow == 2) setRts(true); // release
kaizen 0:e3dc9e54a15b 71 break;
kaizen 0:e3dc9e54a15b 72 default:
kaizen 0:e3dc9e54a15b 73 _state.buf->queue(c);
kaizen 0:e3dc9e54a15b 74 break;
kaizen 0:e3dc9e54a15b 75 }
kaizen 0:e3dc9e54a15b 76 break;
kaizen 0:e3dc9e54a15b 77
kaizen 0:e3dc9e54a15b 78 case MODE_DATA_RX:
kaizen 0:e3dc9e54a15b 79 switch(sub)
kaizen 0:e3dc9e54a15b 80 {
kaizen 0:e3dc9e54a15b 81 case 0:
kaizen 0:e3dc9e54a15b 82 // cid
kaizen 0:e3dc9e54a15b 83 if( (c >= '0') && (c <= '9') )
kaizen 0:e3dc9e54a15b 84 {
kaizen 0:e3dc9e54a15b 85 cid = x2i(c);
kaizen 0:e3dc9e54a15b 86 }
kaizen 0:e3dc9e54a15b 87 else if ( c == ',' )
kaizen 0:e3dc9e54a15b 88 {
kaizen 0:e3dc9e54a15b 89 sub++;
kaizen 0:e3dc9e54a15b 90 count = 0;
kaizen 0:e3dc9e54a15b 91 len = 0;
kaizen 0:e3dc9e54a15b 92 }
kaizen 0:e3dc9e54a15b 93 else
kaizen 0:e3dc9e54a15b 94 {
kaizen 0:e3dc9e54a15b 95 _state.mode = MODE_COMMAND;
kaizen 0:e3dc9e54a15b 96 }
kaizen 0:e3dc9e54a15b 97 break;
kaizen 0:e3dc9e54a15b 98
kaizen 0:e3dc9e54a15b 99 case 1:
kaizen 0:e3dc9e54a15b 100 // ip
kaizen 0:e3dc9e54a15b 101 if ((c >= '0' && c <= '9') || c == '.')
kaizen 0:e3dc9e54a15b 102 {
kaizen 0:e3dc9e54a15b 103 _con[cid].ip[count] = c;
kaizen 0:e3dc9e54a15b 104 count++;
kaizen 0:e3dc9e54a15b 105 }
kaizen 0:e3dc9e54a15b 106 else if( c == ',' )
kaizen 0:e3dc9e54a15b 107 {
kaizen 0:e3dc9e54a15b 108 _con[cid].ip[count] = '\0';
kaizen 0:e3dc9e54a15b 109 _con[cid].port = 0;
kaizen 0:e3dc9e54a15b 110 sub++;
kaizen 0:e3dc9e54a15b 111 }
kaizen 0:e3dc9e54a15b 112 else
kaizen 0:e3dc9e54a15b 113 {
kaizen 0:e3dc9e54a15b 114 _state.mode = MODE_COMMAND;
kaizen 0:e3dc9e54a15b 115 }
kaizen 0:e3dc9e54a15b 116 break;
kaizen 0:e3dc9e54a15b 117
kaizen 0:e3dc9e54a15b 118 case 2:
kaizen 0:e3dc9e54a15b 119 // port
kaizen 0:e3dc9e54a15b 120 if ( c >= '0' && c <= '9' )
kaizen 0:e3dc9e54a15b 121 {
kaizen 0:e3dc9e54a15b 122 _con[cid].port = (_con[cid].port * 10) + ( c - '0' );
kaizen 0:e3dc9e54a15b 123 }
kaizen 0:e3dc9e54a15b 124 else if( c == ',')
kaizen 0:e3dc9e54a15b 125 {
kaizen 0:e3dc9e54a15b 126 sub++;
kaizen 0:e3dc9e54a15b 127 count = 0;
kaizen 0:e3dc9e54a15b 128 }
kaizen 0:e3dc9e54a15b 129 else
kaizen 0:e3dc9e54a15b 130 {
kaizen 0:e3dc9e54a15b 131 _state.mode = MODE_COMMAND;
kaizen 0:e3dc9e54a15b 132 }
kaizen 0:e3dc9e54a15b 133 break;
kaizen 0:e3dc9e54a15b 134
kaizen 0:e3dc9e54a15b 135 case 3:
kaizen 0:e3dc9e54a15b 136 // data length
kaizen 0:e3dc9e54a15b 137 if ( c >= '0' && c <= '9' )
kaizen 0:e3dc9e54a15b 138 {
kaizen 0:e3dc9e54a15b 139 //_con[cid].recv_length = (_con[cid].recv_length * 10) + (c - '0');
kaizen 0:e3dc9e54a15b 140 len = (len * 10) + (c - '0');
kaizen 0:e3dc9e54a15b 141 }
kaizen 0:e3dc9e54a15b 142 else if( c == '}' )
kaizen 0:e3dc9e54a15b 143 {
kaizen 0:e3dc9e54a15b 144 sub++;
kaizen 0:e3dc9e54a15b 145 count = 0;
kaizen 0:e3dc9e54a15b 146 _con[cid].recv_length = len;
kaizen 0:e3dc9e54a15b 147 }
kaizen 0:e3dc9e54a15b 148 else
kaizen 0:e3dc9e54a15b 149 {
kaizen 0:e3dc9e54a15b 150 _state.mode = MODE_COMMAND;
kaizen 0:e3dc9e54a15b 151 }
kaizen 0:e3dc9e54a15b 152 break;
kaizen 0:e3dc9e54a15b 153
kaizen 0:e3dc9e54a15b 154 default:
kaizen 0:e3dc9e54a15b 155 if(_con[cid].buf != NULL)
kaizen 0:e3dc9e54a15b 156 {
kaizen 0:e3dc9e54a15b 157 _con[cid].buf->queue(c);
kaizen 0:e3dc9e54a15b 158 if(_con[cid].buf->available() > CFG_DATA_SIZE - 16 )
kaizen 0:e3dc9e54a15b 159 {
kaizen 0:e3dc9e54a15b 160 setRts(false); // blcok
kaizen 0:e3dc9e54a15b 161 _con[cid].received = true;
kaizen 0:e3dc9e54a15b 162 WIZ_WARN("buf full");
kaizen 0:e3dc9e54a15b 163 }
kaizen 0:e3dc9e54a15b 164 }
kaizen 0:e3dc9e54a15b 165 _con[cid].recv_length--;
kaizen 0:e3dc9e54a15b 166 if(_con[cid].recv_length == 0)
kaizen 0:e3dc9e54a15b 167 {
kaizen 0:e3dc9e54a15b 168 //WIZ_DBG("recv cid: %d, count : %d, len : %d",cid, count, len);
kaizen 0:e3dc9e54a15b 169 _con[cid].received = true;
kaizen 0:e3dc9e54a15b 170 _state.mode = MODE_COMMAND;
kaizen 0:e3dc9e54a15b 171 }
kaizen 0:e3dc9e54a15b 172 break;
kaizen 0:e3dc9e54a15b 173 }
kaizen 0:e3dc9e54a15b 174 break;
kaizen 0:e3dc9e54a15b 175 }
kaizen 0:e3dc9e54a15b 176 }
kaizen 0:e3dc9e54a15b 177
kaizen 0:e3dc9e54a15b 178
kaizen 0:e3dc9e54a15b 179 #define MSG_TABLE_NUM 6
kaizen 0:e3dc9e54a15b 180 #define RES_TABLE_NUM 7
kaizen 0:e3dc9e54a15b 181 int WizFi250::parseMessage () {
kaizen 0:e3dc9e54a15b 182 int i;
kaizen 0:e3dc9e54a15b 183 char buf[128];
kaizen 0:e3dc9e54a15b 184
kaizen 0:e3dc9e54a15b 185 static const struct MSG_TABLE {
kaizen 0:e3dc9e54a15b 186 const char msg[24];
kaizen 0:e3dc9e54a15b 187 void (WizFi250::*func)(const char *);
kaizen 0:e3dc9e54a15b 188 } msg_table[MSG_TABLE_NUM] = {
kaizen 0:e3dc9e54a15b 189 {"[OK]", &WizFi250::msgOk},
kaizen 0:e3dc9e54a15b 190 {"[ERROR]", &WizFi250::msgError},
kaizen 0:e3dc9e54a15b 191 {"[ERROR:INVALIDINPUT]", &WizFi250::msgError},
kaizen 0:e3dc9e54a15b 192 {"[CONNECT ", &WizFi250::msgConnect},
kaizen 0:e3dc9e54a15b 193 {"[DISCONNECT ", &WizFi250::msgDisconnect},
kaizen 0:e3dc9e54a15b 194 {"[LISTEN ", &WizFi250::msgListen},
kaizen 0:e3dc9e54a15b 195 };
kaizen 0:e3dc9e54a15b 196 static const struct RES_TABLE{
kaizen 0:e3dc9e54a15b 197 const Response res;
kaizen 0:e3dc9e54a15b 198 void (WizFi250::*func)(const char *);
kaizen 0:e3dc9e54a15b 199 }res_table[RES_TABLE_NUM]={
kaizen 0:e3dc9e54a15b 200 {RES_NULL, NULL},
kaizen 0:e3dc9e54a15b 201 {RES_MACADDRESS, &WizFi250::resMacAddress},
kaizen 0:e3dc9e54a15b 202 // {RES_WJOIN, &WizFi250::resWJOIN},
kaizen 0:e3dc9e54a15b 203 {RES_CONNECT, &WizFi250::resConnect},
kaizen 0:e3dc9e54a15b 204 {RES_SSEND, &WizFi250::resSSEND},
kaizen 0:e3dc9e54a15b 205 {RES_FDNS, &WizFi250::resFDNS},
kaizen 0:e3dc9e54a15b 206 {RES_SMGMT, &WizFi250::resSMGMT},
kaizen 0:e3dc9e54a15b 207 {RES_WSTATUS, &WizFi250::resWSTATUS},
kaizen 0:e3dc9e54a15b 208 };
kaizen 0:e3dc9e54a15b 209
kaizen 0:e3dc9e54a15b 210
kaizen 0:e3dc9e54a15b 211 for( i=0; i<sizeof(buf); i++ )
kaizen 0:e3dc9e54a15b 212 {
kaizen 0:e3dc9e54a15b 213 if( _state.buf->dequeue(&buf[i]) == false ) break;
kaizen 0:e3dc9e54a15b 214 }
kaizen 0:e3dc9e54a15b 215
kaizen 0:e3dc9e54a15b 216 buf[i] = '\0';
kaizen 0:e3dc9e54a15b 217 //strncpy(_state.dbgRespBuf, buf, sizeof(buf) );
kaizen 0:e3dc9e54a15b 218 //WIZ_DBG("%s\r\n",_state.dbgRespBuf);
kaizen 0:e3dc9e54a15b 219
kaizen 0:e3dc9e54a15b 220 if(_state.res != RES_NULL)
kaizen 0:e3dc9e54a15b 221 {
kaizen 0:e3dc9e54a15b 222 for( i=0; i<RES_TABLE_NUM; i++)
kaizen 0:e3dc9e54a15b 223 {
kaizen 0:e3dc9e54a15b 224 if(res_table[i].res == _state.res)
kaizen 0:e3dc9e54a15b 225 {
kaizen 0:e3dc9e54a15b 226 //WIZ_DBG("parse res %d '%s'\r\n", i, buf);
kaizen 0:e3dc9e54a15b 227 if(res_table[i].func != NULL)
kaizen 0:e3dc9e54a15b 228 {
kaizen 0:e3dc9e54a15b 229 (this->*(res_table[i].func))(buf);
kaizen 0:e3dc9e54a15b 230 }
kaizen 0:e3dc9e54a15b 231
kaizen 0:e3dc9e54a15b 232 if(res_table[i].res == RES_CONNECT && _state.n < 2)
kaizen 0:e3dc9e54a15b 233 return -1;
kaizen 0:e3dc9e54a15b 234 }
kaizen 0:e3dc9e54a15b 235 }
kaizen 0:e3dc9e54a15b 236 }
kaizen 0:e3dc9e54a15b 237
kaizen 0:e3dc9e54a15b 238 for( i=0; i<MSG_TABLE_NUM; i++)
kaizen 0:e3dc9e54a15b 239 {
kaizen 0:e3dc9e54a15b 240 if( strncmp(buf, msg_table[i].msg, strlen(msg_table[i].msg)) == 0 )
kaizen 0:e3dc9e54a15b 241 {
kaizen 0:e3dc9e54a15b 242 //WIZ_DBG("parse msg '%s'\r\n", buf);
kaizen 0:e3dc9e54a15b 243 if(msg_table[i].func != NULL)
kaizen 0:e3dc9e54a15b 244 {
kaizen 0:e3dc9e54a15b 245 (this->*(msg_table[i].func))(buf);
kaizen 0:e3dc9e54a15b 246 }
kaizen 0:e3dc9e54a15b 247 return 0;
kaizen 0:e3dc9e54a15b 248 }
kaizen 0:e3dc9e54a15b 249 }
kaizen 0:e3dc9e54a15b 250
kaizen 0:e3dc9e54a15b 251 return -1;
kaizen 0:e3dc9e54a15b 252 }
kaizen 0:e3dc9e54a15b 253
kaizen 0:e3dc9e54a15b 254
kaizen 0:e3dc9e54a15b 255 void WizFi250::msgOk (const char *buf)
kaizen 0:e3dc9e54a15b 256 {
kaizen 0:e3dc9e54a15b 257 _state.ok = true;
kaizen 0:e3dc9e54a15b 258 }
kaizen 0:e3dc9e54a15b 259
kaizen 0:e3dc9e54a15b 260 void WizFi250::msgError (const char *buf)
kaizen 0:e3dc9e54a15b 261 {
kaizen 0:e3dc9e54a15b 262 _state.failure = true;
kaizen 0:e3dc9e54a15b 263 }
kaizen 0:e3dc9e54a15b 264
kaizen 0:e3dc9e54a15b 265 void WizFi250::msgConnect (const char *buf)
kaizen 0:e3dc9e54a15b 266 {
kaizen 0:e3dc9e54a15b 267 int cid;
kaizen 0:e3dc9e54a15b 268
kaizen 0:e3dc9e54a15b 269 if (buf[9] < '0' || buf[9] > '8' || buf[10] != ']') return;
kaizen 0:e3dc9e54a15b 270
kaizen 0:e3dc9e54a15b 271 cid = x2i(buf[9]);
kaizen 0:e3dc9e54a15b 272
kaizen 0:e3dc9e54a15b 273 initCon(cid, true);
kaizen 0:e3dc9e54a15b 274 _state.cid = cid;
kaizen 0:e3dc9e54a15b 275 _con[cid].accept = true;
kaizen 0:e3dc9e54a15b 276 _con[cid].parent = cid;
kaizen 0:e3dc9e54a15b 277 }
kaizen 0:e3dc9e54a15b 278
kaizen 0:e3dc9e54a15b 279 void WizFi250::msgDisconnect (const char *buf)
kaizen 0:e3dc9e54a15b 280 {
kaizen 0:e3dc9e54a15b 281 int cid;
kaizen 0:e3dc9e54a15b 282
kaizen 0:e3dc9e54a15b 283 if(buf[12] < '0' || buf[12] > '8' || buf[13] != ']') return;
kaizen 0:e3dc9e54a15b 284
kaizen 0:e3dc9e54a15b 285 cid = x2i(buf[12]);
kaizen 0:e3dc9e54a15b 286 _con[cid].connected = false;
kaizen 0:e3dc9e54a15b 287 }
kaizen 0:e3dc9e54a15b 288
kaizen 0:e3dc9e54a15b 289 void WizFi250::msgListen (const char *buf)
kaizen 0:e3dc9e54a15b 290 {
kaizen 0:e3dc9e54a15b 291 int cid;
kaizen 0:e3dc9e54a15b 292
kaizen 0:e3dc9e54a15b 293 if(buf[8] < '0' || buf[8] > '8' || buf[9] != ']') return;
kaizen 0:e3dc9e54a15b 294
kaizen 0:e3dc9e54a15b 295 cid = x2i(buf[8]);
kaizen 0:e3dc9e54a15b 296 _state.cid = cid;
kaizen 0:e3dc9e54a15b 297 }
kaizen 0:e3dc9e54a15b 298
kaizen 0:e3dc9e54a15b 299 void WizFi250::resMacAddress (const char *buf)
kaizen 0:e3dc9e54a15b 300 {
kaizen 0:e3dc9e54a15b 301 if( buf[2] == ':' && buf[5] == ':')
kaizen 0:e3dc9e54a15b 302 {
kaizen 0:e3dc9e54a15b 303 strncpy(_state.mac, buf, sizeof(_state.mac));
kaizen 0:e3dc9e54a15b 304 _state.mac[17] = 0;
kaizen 0:e3dc9e54a15b 305 _state.res = RES_NULL;
kaizen 0:e3dc9e54a15b 306
kaizen 0:e3dc9e54a15b 307 if(strncmp(_state.mac,CFG_DEFAULT_MAC,sizeof(CFG_DEFAULT_MAC)) == 0)
kaizen 0:e3dc9e54a15b 308 _state.ok = false;
kaizen 0:e3dc9e54a15b 309 _state.ok = true;
kaizen 0:e3dc9e54a15b 310 }
kaizen 0:e3dc9e54a15b 311 }
kaizen 0:e3dc9e54a15b 312
kaizen 0:e3dc9e54a15b 313 void WizFi250::resConnect (const char *buf)
kaizen 0:e3dc9e54a15b 314 {
kaizen 0:e3dc9e54a15b 315 int cid;
kaizen 0:e3dc9e54a15b 316
kaizen 0:e3dc9e54a15b 317 if (buf[0] == '[' && buf[1] == 'O' && buf[2] == 'K' && buf[3] == ']')
kaizen 0:e3dc9e54a15b 318 {
kaizen 0:e3dc9e54a15b 319 _state.n++;
kaizen 0:e3dc9e54a15b 320 }
kaizen 0:e3dc9e54a15b 321 else if( buf[0] == '[' && buf[1] == 'C' && buf[2] == 'O' && buf[3] == 'N' &&
kaizen 0:e3dc9e54a15b 322 buf[4] == 'N' && buf[5] == 'E' && buf[6] == 'C' && buf[7] == 'T')
kaizen 0:e3dc9e54a15b 323 {
kaizen 0:e3dc9e54a15b 324 cid = x2i(buf[9]);
kaizen 0:e3dc9e54a15b 325 _state.cid = cid;
kaizen 0:e3dc9e54a15b 326 _state.n++;
kaizen 0:e3dc9e54a15b 327 }
kaizen 0:e3dc9e54a15b 328
kaizen 0:e3dc9e54a15b 329 if(_state.n >= 2)
kaizen 0:e3dc9e54a15b 330 {
kaizen 0:e3dc9e54a15b 331 _state.res = RES_NULL;
kaizen 0:e3dc9e54a15b 332 _state.ok = true;
kaizen 0:e3dc9e54a15b 333 }
kaizen 0:e3dc9e54a15b 334 }
kaizen 0:e3dc9e54a15b 335
kaizen 0:e3dc9e54a15b 336 void WizFi250::resSSEND (const char *buf)
kaizen 0:e3dc9e54a15b 337 {
kaizen 0:e3dc9e54a15b 338 if(_state.cid != -1)
kaizen 0:e3dc9e54a15b 339 {
kaizen 0:e3dc9e54a15b 340 _state.res = RES_NULL;
kaizen 0:e3dc9e54a15b 341 _state.ok = true;
kaizen 0:e3dc9e54a15b 342 }
kaizen 0:e3dc9e54a15b 343 }
kaizen 0:e3dc9e54a15b 344
kaizen 0:e3dc9e54a15b 345 void WizFi250::resFDNS (const char *buf)
kaizen 0:e3dc9e54a15b 346 {
kaizen 0:e3dc9e54a15b 347 int i;
kaizen 0:e3dc9e54a15b 348
kaizen 0:e3dc9e54a15b 349 for(i=0; i<strlen(buf); i++)
kaizen 0:e3dc9e54a15b 350 {
kaizen 0:e3dc9e54a15b 351 if( (buf[i] < '0' || buf[i] > '9') && buf[i] != '.' )
kaizen 0:e3dc9e54a15b 352 {
kaizen 0:e3dc9e54a15b 353 return;
kaizen 0:e3dc9e54a15b 354 }
kaizen 0:e3dc9e54a15b 355 }
kaizen 0:e3dc9e54a15b 356
kaizen 0:e3dc9e54a15b 357 strncpy(_state.resolv, buf, sizeof(_state.resolv));
kaizen 0:e3dc9e54a15b 358 _state.res = RES_NULL;
kaizen 0:e3dc9e54a15b 359 }
kaizen 0:e3dc9e54a15b 360
kaizen 0:e3dc9e54a15b 361 void WizFi250::resSMGMT (const char *buf)
kaizen 0:e3dc9e54a15b 362 {
kaizen 0:e3dc9e54a15b 363 int cid, i;
kaizen 0:e3dc9e54a15b 364 char *c;
kaizen 0:e3dc9e54a15b 365
kaizen 0:e3dc9e54a15b 366 if( (buf[0] < '0' || buf[0] > '8') ) return;
kaizen 0:e3dc9e54a15b 367
kaizen 0:e3dc9e54a15b 368 cid = x2i(buf[0]);
kaizen 0:e3dc9e54a15b 369 if( cid != _state.cid ) return;
kaizen 0:e3dc9e54a15b 370
kaizen 0:e3dc9e54a15b 371 // IP
kaizen 0:e3dc9e54a15b 372 c = (char*)(buf+6);
kaizen 0:e3dc9e54a15b 373 for( i=0; i<16; i++ )
kaizen 0:e3dc9e54a15b 374 {
kaizen 0:e3dc9e54a15b 375 if( *(c+i) == ':')
kaizen 0:e3dc9e54a15b 376 {
kaizen 0:e3dc9e54a15b 377 _con[cid].ip[i] = '\0';
kaizen 0:e3dc9e54a15b 378 i++;
kaizen 0:e3dc9e54a15b 379 break;
kaizen 0:e3dc9e54a15b 380 }
kaizen 0:e3dc9e54a15b 381 if( ( *(c+i) < '0' || *(c+i) > '9') && *(c+i) != '.' ) return;
kaizen 0:e3dc9e54a15b 382 _con[cid].ip[i] = *(c+i);
kaizen 0:e3dc9e54a15b 383 }
kaizen 0:e3dc9e54a15b 384
kaizen 0:e3dc9e54a15b 385 // Port
kaizen 0:e3dc9e54a15b 386 c = (c+i);
kaizen 0:e3dc9e54a15b 387 _con[cid].port = 0;
kaizen 0:e3dc9e54a15b 388 for( i=0; i<5; i++ )
kaizen 0:e3dc9e54a15b 389 {
kaizen 0:e3dc9e54a15b 390 if( *(c+i) == '/') break;
kaizen 0:e3dc9e54a15b 391 if( *(c+i) < '0' || *(c+i) > '9' ) return;
kaizen 0:e3dc9e54a15b 392
kaizen 0:e3dc9e54a15b 393 _con[cid].port = (_con[cid].port * 10) + ( *(c+i) - '0' );
kaizen 0:e3dc9e54a15b 394 }
kaizen 0:e3dc9e54a15b 395
kaizen 0:e3dc9e54a15b 396 _state.res = RES_NULL;
kaizen 0:e3dc9e54a15b 397 }
kaizen 0:e3dc9e54a15b 398
kaizen 0:e3dc9e54a15b 399 void WizFi250::resWSTATUS (const char *buf)
kaizen 0:e3dc9e54a15b 400 {
kaizen 0:e3dc9e54a15b 401 int idx=0,sep_cnt=0;
kaizen 0:e3dc9e54a15b 402 int ip_idx=0,gw_idx=0;
kaizen 0:e3dc9e54a15b 403
kaizen 0:e3dc9e54a15b 404 if(_state.n == 0)
kaizen 0:e3dc9e54a15b 405 {
kaizen 0:e3dc9e54a15b 406 _state.n++;
kaizen 0:e3dc9e54a15b 407 }
kaizen 0:e3dc9e54a15b 408 else if(_state.n == 1)
kaizen 0:e3dc9e54a15b 409 {
kaizen 0:e3dc9e54a15b 410 for(idx=0;buf[idx]!='\r';idx++)
kaizen 0:e3dc9e54a15b 411 {
kaizen 0:e3dc9e54a15b 412 if(buf[idx] =='/')
kaizen 0:e3dc9e54a15b 413 {
kaizen 0:e3dc9e54a15b 414 sep_cnt++;
kaizen 0:e3dc9e54a15b 415 continue;
kaizen 0:e3dc9e54a15b 416 }
kaizen 0:e3dc9e54a15b 417
kaizen 0:e3dc9e54a15b 418 if( sep_cnt == 2) // IP Address
kaizen 0:e3dc9e54a15b 419 {
kaizen 0:e3dc9e54a15b 420 _state.ip[ip_idx++] = buf[idx];
kaizen 0:e3dc9e54a15b 421 }
kaizen 0:e3dc9e54a15b 422 else if(sep_cnt == 3)
kaizen 0:e3dc9e54a15b 423 {
kaizen 0:e3dc9e54a15b 424 _state.gateway[gw_idx++] = buf[idx];
kaizen 0:e3dc9e54a15b 425 }
kaizen 0:e3dc9e54a15b 426 }
kaizen 0:e3dc9e54a15b 427 _state.ip[ip_idx] = '\0';
kaizen 0:e3dc9e54a15b 428 _state.gateway[gw_idx] = '\0';
kaizen 0:e3dc9e54a15b 429 _state.res = RES_NULL;
kaizen 0:e3dc9e54a15b 430 }
kaizen 0:e3dc9e54a15b 431 }