Revised to prevent DHCPClient::discover from hanging.
Fork of WIZ820ioInterface by
Diff: Wifly/Wifly.cpp
- Revision:
- 2:8e54830d0df7
- Parent:
- 1:fb4494783863
- Child:
- 3:9aa05e19c62e
--- a/Wifly/Wifly.cpp Fri Aug 24 13:48:36 2012 +0000 +++ b/Wifly/Wifly.cpp Sat Nov 24 16:59:36 2012 +0000 @@ -22,7 +22,7 @@ #include <algorithm> //Debug is disabled by default -#if (0 && defined(TARGET_LPC1768)) +#if (0 && !defined(TARGET_LPC11U24)) #define DBG(x, ...) std::printf("[Wifly : DBG]"x"\r\n", ##__VA_ARGS__); #define WARN(x, ...) std::printf("[Wifly : WARN]"x"\r\n", ##__VA_ARGS__); #define ERR(x, ...) std::printf("[Wifly : ERR]"x"\r\n", ##__VA_ARGS__); @@ -32,7 +32,7 @@ #define ERR(x, ...) #endif -#if TARGET_LPC1768 +#if !defined(TARGET_LPC11U24) #define INFO(x, ...) printf("[Wifly : INFO]"x"\r\n", ##__VA_ARGS__); #else #define INFO(x, ...) @@ -70,6 +70,15 @@ char cmd[20]; for (int i= 0; i < MAX_TRY_JOIN; i++) { + + // no auto join + if (!sendCommand("set w j 0\r", "AOK")) + continue; + + //no echo + if (!sendCommand("set u m 1\r", "AOK")) + continue; + // set time if (!sendCommand("set c t 20\r", "AOK")) continue; @@ -93,13 +102,9 @@ // tcp retry if (!sendCommand("set i f 0x7\r", "AOK")) continue; - - //no echo - if (!sendCommand("set u m 1\r", "AOK")) - continue; - - // no auto join - if (!sendCommand("set w j 0\r", "AOK")) + + // set dns server + if (!sendCommand("set d n rn.microchip.com\r", "AOK")) continue; //dhcp @@ -145,16 +150,18 @@ continue; } - //join the network - sprintf(cmd, "join\r"); - if (!sendCommand(cmd, "Associated", NULL, 3000)) - continue; - + //join the network (10s timeout) if (state.dhcp) { - if (!sendCommand("", "DHCP=ON", NULL, 3000)) + if (!sendCommand("join\r", "DHCP=ON", NULL, 10000)) + continue; + } else { + if (!sendCommand("join\r", "Associated", NULL, 10000)) continue; } + if (!sendCommand("save\r", "Stor")) + continue; + exit(); state.associated = true; @@ -211,27 +218,23 @@ char rcv[20]; char cmd[20]; - // get ip from host and set host - if (gethostbyname(host, rcv)) { - sprintf(cmd, "set i h %s\r", rcv); - if (!sendCommand(cmd, "AOK")) - return false; - } else { - return false; + // try to open + sprintf(cmd, "open %s %d\r", host, port); + if (sendCommand(cmd, "OPEN", NULL, 10000)) { + state.tcp = true; + state.cmd_mode = false; + return true; } - // set port - sprintf(cmd, "set i r %d\r", port); - if (!sendCommand(cmd, "AOK")) - return false; - - // open - if (sendCommand("open\r", NULL, rcv)) { + // if failed, retry and parse the response + if (sendCommand(cmd, NULL, rcv, 5000)) { if (strstr(rcv, "OPEN") == NULL) { if (strstr(rcv, "Connected") != NULL) { + wait(0.25); if (!sendCommand("close\r", "CLOS")) return false; - if (!sendCommand("open\r", "OPEN")) + wait(0.25); + if (!sendCommand(cmd, "OPEN", NULL, 10000)) return false; } else { return false; @@ -240,7 +243,7 @@ } else { return false; } - + state.tcp = true; state.cmd_mode = false; @@ -316,9 +319,10 @@ // if already in cmd mode, return if (state.cmd_mode) return true; - + if (send("$$$", 3, "CMD") == -1) { ERR("cannot enter in cmd mode\r\n"); + exit(); return false; } state.cmd_mode = true; @@ -330,11 +334,11 @@ // if already disconnected, return if (!state.associated) return true; - + if (!sendCommand("leave\r", "DeAuth")) return false; exit(); - + state.associated = false; return true; @@ -359,12 +363,12 @@ // if not connected, return if (!state.tcp) return true; - + wait(0.25); if (!sendCommand("close\r", "CLOS")) return false; exit(); - + state.tcp = false; return true; }