RC

Dependents:   WizFi250_AP_HelloWorld

Fork of WizFi250Interface by DongEun Koak

Committer:
DongEun Koak
Date:
Fri Nov 14 15:27:47 2014 +0900
Revision:
7:ba28fe711055
Parent:
5:8a0702aa91e3
Child:
9:12ecb377f63f
Fixed bug in init function of WizFi250.
Removed sendCommand for operating polling in order to wait response.
Fixed some bug.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kaizen 0:f2039204c8f6 1 /*
DongEun Koak 4:085e7efeae47 2 * Copyright (C) 2013 gsfan, MIT License
kaizen 0:f2039204c8f6 3 *
kaizen 0:f2039204c8f6 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
kaizen 0:f2039204c8f6 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
kaizen 0:f2039204c8f6 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
kaizen 0:f2039204c8f6 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
kaizen 0:f2039204c8f6 8 * furnished to do so, subject to the following conditions:
kaizen 0:f2039204c8f6 9 *
kaizen 0:f2039204c8f6 10 * The above copyright notice and this permission notice shall be included in all copies or
kaizen 0:f2039204c8f6 11 * substantial portions of the Software.
kaizen 0:f2039204c8f6 12 *
kaizen 0:f2039204c8f6 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
kaizen 0:f2039204c8f6 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
kaizen 0:f2039204c8f6 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kaizen 0:f2039204c8f6 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kaizen 0:f2039204c8f6 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kaizen 0:f2039204c8f6 18 */
kaizen 0:f2039204c8f6 19 /* Copyright (C) 2014 Wiznet, MIT License
kaizen 0:f2039204c8f6 20 * port to the Wiznet Module WizFi250
kaizen 0:f2039204c8f6 21 */
kaizen 0:f2039204c8f6 22
kaizen 0:f2039204c8f6 23
kaizen 0:f2039204c8f6 24 #include "WizFi250.h"
kaizen 0:f2039204c8f6 25
kaizen 0:f2039204c8f6 26
kaizen 0:f2039204c8f6 27
kaizen 0:f2039204c8f6 28 void WizFi250::clearFlags()
kaizen 0:f2039204c8f6 29 {
kaizen 0:f2039204c8f6 30 _state.ok = false;
kaizen 0:f2039204c8f6 31 _state.failure = false;
kaizen 0:f2039204c8f6 32 _state.res = RES_NULL;
kaizen 0:f2039204c8f6 33 _state.n = 0;
kaizen 0:f2039204c8f6 34 }
kaizen 0:f2039204c8f6 35
kaizen 0:f2039204c8f6 36
kaizen 0:f2039204c8f6 37 int WizFi250::sendCommand(const char * cmd, Response res, int timeout, int opt)
kaizen 0:f2039204c8f6 38 {
DongEun Koak 7:ba28fe711055 39 unsigned int i;
kaizen 0:f2039204c8f6 40 Timer t;
kaizen 0:f2039204c8f6 41
kaizen 0:f2039204c8f6 42 if (lockUart(timeout)) return -1;
kaizen 0:f2039204c8f6 43
kaizen 0:f2039204c8f6 44 clearFlags();
kaizen 0:f2039204c8f6 45 _state.res = res;
kaizen 0:f2039204c8f6 46
DongEun Koak 5:8a0702aa91e3 47 WIZ_INFO("%s", cmd)
kaizen 0:f2039204c8f6 48 for (i=0; i< strlen(cmd); i++)
kaizen 0:f2039204c8f6 49 {
kaizen 0:f2039204c8f6 50 putUart(cmd[i]);
kaizen 0:f2039204c8f6 51 }
kaizen 0:f2039204c8f6 52
DongEun Koak 7:ba28fe711055 53 if(opt == 1)
kaizen 0:f2039204c8f6 54 {
kaizen 0:f2039204c8f6 55 putUart('\r');
kaizen 0:f2039204c8f6 56 }
DongEun Koak 7:ba28fe711055 57 else if(opt == 2)
kaizen 0:f2039204c8f6 58 {
kaizen 0:f2039204c8f6 59 putUart('\r');
kaizen 0:f2039204c8f6 60 putUart('\n');
kaizen 0:f2039204c8f6 61 }
kaizen 0:f2039204c8f6 62 unlockUart();
kaizen 0:f2039204c8f6 63
kaizen 0:f2039204c8f6 64 if(timeout)
kaizen 0:f2039204c8f6 65 {
kaizen 0:f2039204c8f6 66 t.start();
kaizen 0:f2039204c8f6 67 for(;;)
kaizen 0:f2039204c8f6 68 {
kaizen 0:f2039204c8f6 69 if (_state.ok && _state.res == RES_NULL){
kaizen 0:f2039204c8f6 70 break;
kaizen 0:f2039204c8f6 71 }
kaizen 0:f2039204c8f6 72 if (_state.failure || t.read_ms() > timeout)
kaizen 0:f2039204c8f6 73 {
DongEun Koak 5:8a0702aa91e3 74 WIZ_WARN("failure of timeout[%d]ms\r\n",t.read_ms());
kaizen 0:f2039204c8f6 75 _state.res = RES_NULL;
DongEun Koak 7:ba28fe711055 76 t.stop();
kaizen 0:f2039204c8f6 77 return -1;
kaizen 0:f2039204c8f6 78 }
kaizen 0:f2039204c8f6 79 }
kaizen 0:f2039204c8f6 80
kaizen 0:f2039204c8f6 81 t.stop();
kaizen 0:f2039204c8f6 82 }
kaizen 0:f2039204c8f6 83
DongEun Koak 5:8a0702aa91e3 84 WIZ_INFO("[OK]\r\n");
kaizen 0:f2039204c8f6 85 _state.res = RES_NULL;
kaizen 0:f2039204c8f6 86
kaizen 0:f2039204c8f6 87 return 0;
kaizen 0:f2039204c8f6 88 }
kaizen 0:f2039204c8f6 89
kaizen 0:f2039204c8f6 90 int WizFi250::cmdAT()
kaizen 0:f2039204c8f6 91 {
kaizen 0:f2039204c8f6 92 int resp;
kaizen 0:f2039204c8f6 93
kaizen 0:f2039204c8f6 94 resp = sendCommand("AT");
kaizen 0:f2039204c8f6 95
kaizen 0:f2039204c8f6 96 return resp;
kaizen 0:f2039204c8f6 97 }
kaizen 0:f2039204c8f6 98
kaizen 0:f2039204c8f6 99 int WizFi250::cmdMECHO(bool flg)
kaizen 0:f2039204c8f6 100 {
kaizen 0:f2039204c8f6 101 int status;
kaizen 0:f2039204c8f6 102 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 103
kaizen 0:f2039204c8f6 104 sprintf(cmd,"AT+MECHO=%d",flg);
kaizen 0:f2039204c8f6 105 status = sendCommand(cmd);
kaizen 0:f2039204c8f6 106
kaizen 0:f2039204c8f6 107 return status;
kaizen 0:f2039204c8f6 108 }
kaizen 0:f2039204c8f6 109
kaizen 0:f2039204c8f6 110 int WizFi250::cmdUSET(int baud, char *flow)
kaizen 0:f2039204c8f6 111 {
kaizen 0:f2039204c8f6 112 int status;
kaizen 0:f2039204c8f6 113 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 114
kaizen 0:f2039204c8f6 115 sprintf(cmd,"AT+USET=%d,N,8,1,%s",baud, flow);
kaizen 0:f2039204c8f6 116 status = sendCommand(cmd);
kaizen 0:f2039204c8f6 117
kaizen 0:f2039204c8f6 118 if(status == 0)
kaizen 0:f2039204c8f6 119 {
kaizen 0:f2039204c8f6 120 wait(1);
kaizen 0:f2039204c8f6 121 _state.buf->flush();
kaizen 0:f2039204c8f6 122 }
kaizen 0:f2039204c8f6 123
kaizen 0:f2039204c8f6 124 return status;
kaizen 0:f2039204c8f6 125 }
kaizen 0:f2039204c8f6 126
kaizen 0:f2039204c8f6 127 int WizFi250::cmdMMAC(const char *mac)
kaizen 0:f2039204c8f6 128 {
kaizen 0:f2039204c8f6 129 int resp;
kaizen 0:f2039204c8f6 130 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 131 const char xmac[] = "00:08:DC:00:00:00";
kaizen 0:f2039204c8f6 132
kaizen 0:f2039204c8f6 133 if (mac)
kaizen 0:f2039204c8f6 134 {
kaizen 0:f2039204c8f6 135 sprintf(cmd, "AT+MMAC=%s",mac);
kaizen 0:f2039204c8f6 136 resp = sendCommand(cmd);
kaizen 0:f2039204c8f6 137 }
kaizen 0:f2039204c8f6 138 else
kaizen 0:f2039204c8f6 139 {
kaizen 0:f2039204c8f6 140 sprintf(cmd, "AT+MMAC=?");
kaizen 0:f2039204c8f6 141 resp = sendCommand(cmd, RES_MACADDRESS);
kaizen 0:f2039204c8f6 142 }
kaizen 0:f2039204c8f6 143
kaizen 0:f2039204c8f6 144 return resp;
kaizen 0:f2039204c8f6 145 }
kaizen 0:f2039204c8f6 146
kaizen 0:f2039204c8f6 147 int WizFi250::cmdWSET(WiFiMode mode, const char *ssid, const char *bssid, int channel)
kaizen 0:f2039204c8f6 148 {
kaizen 0:f2039204c8f6 149 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 150
kaizen 0:f2039204c8f6 151 if(*bssid == NULL)
kaizen 0:f2039204c8f6 152 {
kaizen 0:f2039204c8f6 153 sprintf(cmd, "AT+WSET=%d,%s",mode, ssid);
kaizen 0:f2039204c8f6 154 }
kaizen 0:f2039204c8f6 155 else
kaizen 0:f2039204c8f6 156 {
kaizen 0:f2039204c8f6 157 sprintf(cmd, "AT+WSET=%d,%s,%s,%d",mode, ssid, bssid, channel);
kaizen 0:f2039204c8f6 158 }
kaizen 0:f2039204c8f6 159
kaizen 0:f2039204c8f6 160 return sendCommand(cmd);
kaizen 0:f2039204c8f6 161 }
kaizen 0:f2039204c8f6 162
kaizen 0:f2039204c8f6 163 int WizFi250::cmdWSEC(WiFiMode mode, const char *key, const char *sec)
kaizen 0:f2039204c8f6 164 {
kaizen 0:f2039204c8f6 165 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 166
kaizen 0:f2039204c8f6 167 if(*sec == NULL)
kaizen 0:f2039204c8f6 168 {
kaizen 0:f2039204c8f6 169 sprintf(cmd, "AT+WSEC=%d,,%s",mode, key);
kaizen 0:f2039204c8f6 170 }
kaizen 0:f2039204c8f6 171 else
kaizen 0:f2039204c8f6 172 {
kaizen 0:f2039204c8f6 173 sprintf(cmd, "AT+WSEC=%d,%s,%s",mode, sec, key);
kaizen 0:f2039204c8f6 174 }
kaizen 0:f2039204c8f6 175
kaizen 0:f2039204c8f6 176 return sendCommand(cmd);
kaizen 0:f2039204c8f6 177 }
kaizen 0:f2039204c8f6 178
kaizen 0:f2039204c8f6 179 int WizFi250::cmdWJOIN()
kaizen 0:f2039204c8f6 180 {
kaizen 0:f2039204c8f6 181
DongEun Koak 5:8a0702aa91e3 182 if( sendCommand("AT+WJOIN", RES_WJOIN, CFG_JOIN_TIMEOUT) ) return -1;
DongEun Koak 5:8a0702aa91e3 183
DongEun Koak 5:8a0702aa91e3 184 WIZ_INFO("IP : %s",_state.ip);
DongEun Koak 5:8a0702aa91e3 185 WIZ_INFO("Gateway : %s",_state.gateway);
DongEun Koak 5:8a0702aa91e3 186 WIZ_INFO("WizFi250 is successfully join to AP");
kaizen 0:f2039204c8f6 187
kaizen 0:f2039204c8f6 188 return 0;
kaizen 0:f2039204c8f6 189 }
kaizen 0:f2039204c8f6 190
kaizen 0:f2039204c8f6 191 int WizFi250::cmdSCON ( const char *openType, const char *socketType, int localPort, const char *dataMode)
kaizen 0:f2039204c8f6 192 {
kaizen 0:f2039204c8f6 193 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 194
kaizen 0:f2039204c8f6 195 sprintf(cmd,"AT+SCON=%s,%s,,,%d,%s",openType, socketType, localPort, dataMode);
kaizen 0:f2039204c8f6 196 return sendCommand(cmd);
kaizen 0:f2039204c8f6 197 }
kaizen 0:f2039204c8f6 198
kaizen 0:f2039204c8f6 199 int WizFi250::cmdSCON ( const char *openType, const char *socketType, const char *remoteIp, int remotePort, int localPort, const char *dataMode)
kaizen 0:f2039204c8f6 200 {
kaizen 0:f2039204c8f6 201 int resp;
kaizen 0:f2039204c8f6 202 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 203
kaizen 0:f2039204c8f6 204 if(localPort == NULL)
kaizen 0:f2039204c8f6 205 sprintf(cmd,"AT+SCON=%s,%s,%s,%d,%s,%s",openType, socketType, remoteIp, remotePort, "", dataMode);
kaizen 0:f2039204c8f6 206 else
kaizen 0:f2039204c8f6 207 sprintf(cmd,"AT+SCON=%s,%s,%s,%d,%d,%s",openType, socketType, remoteIp, remotePort, localPort, dataMode);
kaizen 0:f2039204c8f6 208
kaizen 0:f2039204c8f6 209 resp = sendCommand(cmd, RES_CONNECT, 5000 );
DongEun Koak 5:8a0702aa91e3 210 WIZ_DBG("Create CID : %s",_state.dummyBuf);
kaizen 0:f2039204c8f6 211
kaizen 0:f2039204c8f6 212 return resp;
kaizen 0:f2039204c8f6 213 }
kaizen 0:f2039204c8f6 214
kaizen 0:f2039204c8f6 215 int WizFi250::cmdSSEND ( const char *data, int cid, int sendSize, const char *remoteIp, int remotePort, int Timeout )
kaizen 0:f2039204c8f6 216 {
kaizen 0:f2039204c8f6 217 int i, resp;
kaizen 0:f2039204c8f6 218 Timer t;
kaizen 0:f2039204c8f6 219 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 220
kaizen 0:f2039204c8f6 221
kaizen 0:f2039204c8f6 222 if (lockUart(Timeout)) return -1;
kaizen 0:f2039204c8f6 223
kaizen 0:f2039204c8f6 224 clearFlags();
kaizen 0:f2039204c8f6 225 if(remotePort == NULL)
kaizen 0:f2039204c8f6 226 {
kaizen 0:f2039204c8f6 227 sprintf(cmd,"AT+SSEND=%d,%s,,%d",cid, remoteIp, sendSize);
kaizen 0:f2039204c8f6 228 }
kaizen 0:f2039204c8f6 229 else
kaizen 0:f2039204c8f6 230 {
kaizen 0:f2039204c8f6 231 sprintf(cmd,"AT+SSEND=%d,%s,%d,%d",cid, remoteIp, remotePort, sendSize);
kaizen 0:f2039204c8f6 232 }
kaizen 0:f2039204c8f6 233
kaizen 0:f2039204c8f6 234 _con[cid].send_length = sendSize;
kaizen 0:f2039204c8f6 235
kaizen 0:f2039204c8f6 236 resp = sendCommand(cmd, RES_SSEND, 2000, 1);
kaizen 0:f2039204c8f6 237 unlockUart();
kaizen 0:f2039204c8f6 238 if(resp){
DongEun Koak 5:8a0702aa91e3 239 WIZ_DBG("Fail cmdSSEND")
DongEun Koak 7:ba28fe711055 240 return -1;
kaizen 0:f2039204c8f6 241 }
kaizen 0:f2039204c8f6 242
kaizen 0:f2039204c8f6 243 for(i=0; i<sendSize; i++)
kaizen 0:f2039204c8f6 244 {
kaizen 0:f2039204c8f6 245 putUart(data[i]);
kaizen 0:f2039204c8f6 246 }
kaizen 0:f2039204c8f6 247 unlockUart();
kaizen 0:f2039204c8f6 248
kaizen 0:f2039204c8f6 249 if(Timeout)
kaizen 0:f2039204c8f6 250 {
kaizen 0:f2039204c8f6 251 t.start();
kaizen 0:f2039204c8f6 252 for(;;)
kaizen 0:f2039204c8f6 253 {
kaizen 0:f2039204c8f6 254 if (_state.ok) break;
kaizen 0:f2039204c8f6 255 if (_state.failure || t.read_ms() > Timeout)
kaizen 0:f2039204c8f6 256 {
DongEun Koak 5:8a0702aa91e3 257 WIZ_WARN("failure or timeout\r\n");
kaizen 0:f2039204c8f6 258 return -1;
kaizen 0:f2039204c8f6 259 }
kaizen 0:f2039204c8f6 260 }
kaizen 0:f2039204c8f6 261 t.stop();
kaizen 0:f2039204c8f6 262 }
kaizen 0:f2039204c8f6 263
DongEun Koak 5:8a0702aa91e3 264 //WIZ_INFO("data: '%s' size : %d\r\n",data, sendSize);
kaizen 0:f2039204c8f6 265
kaizen 0:f2039204c8f6 266 return i;
kaizen 0:f2039204c8f6 267 }
kaizen 0:f2039204c8f6 268
kaizen 0:f2039204c8f6 269
kaizen 0:f2039204c8f6 270 int WizFi250::cmdCLOSE ( int cid )
kaizen 0:f2039204c8f6 271 {
kaizen 0:f2039204c8f6 272 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 273
kaizen 0:f2039204c8f6 274 sprintf(cmd,"AT+SMGMT=%d",cid);
kaizen 0:f2039204c8f6 275 return sendCommand(cmd);
kaizen 0:f2039204c8f6 276 }
kaizen 0:f2039204c8f6 277
kaizen 0:f2039204c8f6 278
kaizen 0:f2039204c8f6 279 int WizFi250::cmdFDNS (const char *host)
kaizen 0:f2039204c8f6 280 {
kaizen 0:f2039204c8f6 281 char cmd[CFG_CMD_SIZE];
kaizen 0:f2039204c8f6 282 int resp;
kaizen 0:f2039204c8f6 283
kaizen 0:f2039204c8f6 284 sprintf(cmd,"AT+FDNS=%s,1000",host);
DongEun Koak 7:ba28fe711055 285 resp = sendCommand(cmd, RES_FDNS);
kaizen 0:f2039204c8f6 286
DongEun Koak 5:8a0702aa91e3 287 WIZ_DBG("%s",_state.resolv);
kaizen 0:f2039204c8f6 288 return resp;
kaizen 0:f2039204c8f6 289 }
kaizen 0:f2039204c8f6 290
kaizen 0:f2039204c8f6 291 int WizFi250::cmdSMGMT ( int cid )
kaizen 0:f2039204c8f6 292 {
kaizen 0:f2039204c8f6 293 int resp;
kaizen 0:f2039204c8f6 294
kaizen 0:f2039204c8f6 295 resp = sendCommand("AT+SMGMT=?", RES_SMGMT);
kaizen 0:f2039204c8f6 296 return resp;
kaizen 0:f2039204c8f6 297 }