GainSpan Wi-Fi library see: http://mbed.org/users/gsfan/notebook/gainspan_wifi/
Dependents: GSwifi_httpd GSwifi_websocket GSwifi_tcpclient GSwifi_tcpserver ... more
Fork of GSwifi by
GainSpan Wi-Fi library
The GS1011 is an ultra low power 802.11b wireless module from GainSpan.
see: http://mbed.org/users/gsfan/notebook/gainspan_wifi/
ゲインスパン Wi-Fi モジュール ライブラリ
ゲインスパン社の低電力 Wi-Fiモジュール(無線LAN) GS1011 シリーズ用のライブラリです。
解説: http://mbed.org/users/gsfan/notebook/gainspan_wifi/
Diff: GSwifi.cpp
- Revision:
- 40:72f70748f6e8
- Parent:
- 39:3360db93c65c
- Child:
- 41:0afda15e9bb4
--- a/GSwifi.cpp Tue Jul 23 02:56:47 2013 +0000 +++ b/GSwifi.cpp Thu Aug 01 15:09:49 2013 +0000 @@ -131,6 +131,7 @@ _escape = 0; resetResponse(GSRES_NONE); _gs_mode = GSMODE_COMMAND; + _dhcp = 0; _ssid = NULL; _pass = NULL; _reconnect = 0; @@ -139,7 +140,7 @@ wait_ms(100); if (! _baud) autobaud(0); _reset.input(); // high - _reset.mode(PullUp); + _reset.mode(PullNone); if (! _baud) autobaud(1); wait_ms(500); } @@ -606,6 +607,34 @@ _gs_flg = -1; } break; + case GSRES_STATUS: + if (_gs_flg == 0 && strncmp(buf, "NOT ASSOCIATED", 14) == 0) { + _connect = false; + for (int i = 0; i < 16; i ++) { + _gs_sock[i].connect = false; + } + _gs_flg = -1; + } + if (_gs_flg == 0 && strncmp(buf, "MODE:", 5) == 0) { + _gs_flg ++; + } else + if (_gs_flg == 1 && strncmp(buf, "BSSID:", 6) == 0) { + char *tmp = strstr(buf, "SECURITY:") + 2; + if (strncmp(tmp, "WEP (OPEN)", 10) == NULL) { + _sec = GSSEC_OPEN; + } else + if (strncmp(tmp, "WEP (SHARED)", 12) == NULL) { + _sec = GSSEC_WEP; + } else + if (strncmp(tmp, "WPA-PERSONAL", 12) == NULL) { + _sec = GSSEC_WPA_PSK; + } else + if (strncmp(tmp, "WPA2-PERSONAL", 13) == NULL) { + _sec = GSSEC_WPA2_PSK; + } + _gs_flg = -1; + } + break; } return; @@ -627,7 +656,7 @@ } } - if (_reconnect && ! _connect) { + if (_reconnect > 0 && ! _connect) { if (_reconnect_count == 0 || (_reconnect_count < _reconnect && _reconnect_time < time(NULL))) { _reconnect_count ++; DBG("reconnect %d/%d\r\n", _reconnect_count, _reconnect); @@ -797,6 +826,7 @@ _reconnect = reconnect; _reconnect_count = 0; _sec = sec; + _dhcp = dhcp; if (_reconnect && ssid) { if (!_ssid) _ssid = (char*)malloc(strlen(ssid) + 1); strcpy(_ssid, ssid); @@ -942,6 +972,9 @@ case GSSEC_WPA_ENT: case GSSEC_WPA2_PSK: case GSSEC_WPA2_ENT: + if (_dhcp) { + command("AT+NDHCP=1," GS_DHCPNAME, GSRES_NORMAL); + } sprintf(cmd, "AT+WA=%s", _ssid); r = command(cmd, GSRES_DHCP, GS_TIMEOUT2); break; @@ -1036,6 +1069,11 @@ } bool GSwifi::isConnected () { +/* + if (_status == GSSTAT_READY) { + command("AT+WSTATUS", GSRES_STATUS); + } +*/ return _connect; } @@ -1102,7 +1140,7 @@ if (_status != GSSTAT_READY && _status != GSSTAT_WAKEUP) return -1; if (_status == GSSTAT_READY) { - command("AT+WRXACTIVE=0", GSRES_NORMAL); +// command("AT+WRXACTIVE=0", GSRES_NORMAL); command("AT+STORENWCONN", GSRES_NORMAL, 100); } else { command("ATE0", GSRES_NORMAL); @@ -1142,9 +1180,10 @@ #ifdef GS_BULK command("AT+BDATA=1", GSRES_NORMAL); #endif - command("AT+RESTORENWCONN", GSRES_NORMAL); + int r = command("AT+RESTORENWCONN", GSRES_NORMAL); wait_ms(100); - return command("AT+WRXACTIVE=1", GSRES_NORMAL); +// return command("AT+WRXACTIVE=1", GSRES_NORMAL); + return r; } else if (_status == GSSTAT_DEEPSLEEP) { _status = GSSTAT_READY;