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:
- 28:fbba4c58d14c
- Parent:
- 26:b347ee3a1087
- Child:
- 29:1c4419512941
--- a/GSwifi.cpp Fri Feb 22 01:10:17 2013 +0000 +++ b/GSwifi.cpp Fri Feb 22 03:07:43 2013 +0000 @@ -99,7 +99,7 @@ _alarm->write(0); wait_ms(10); _alarm->input(); // high - _alarm->mode(PullNone); + _alarm->mode(PullUp); wait_ms(10); } _reset.output(); // low @@ -118,7 +118,7 @@ wait_ms(10); _reset.input(); // high - _reset.mode(PullNone); + _reset.mode(PullUp); wait_ms(500); } @@ -356,13 +356,9 @@ if (cmd == NULL) { // dummy CR+LF -printf("1\r\n"); _gs.printf("\r\n"); -printf("2\r\n"); wait_ms(100); -printf("3\r\n"); _buf_cmd.flush(); -printf("4\r\n"); return 0; } @@ -417,7 +413,6 @@ command(NULL, GSRES_NORMAL); if (command("ATE0", GSRES_NORMAL)) return -1; if (_rts) { - command("AT&K0", GSRES_NORMAL); command("AT&R1", GSRES_NORMAL); } command("AT+NMAC=?", GSRES_MACADDRESS); @@ -454,10 +449,11 @@ } break; case GSSEC_WPA_PSK: + case GSSEC_WPA_ENT: case GSSEC_WPA2_PSK: + case GSSEC_WPA2_ENT: command("AT+WAUTH=0", GSRES_NORMAL); // sprintf(cmd, "AT+WWPA=%s", pass); -// command(cmd, GSRES_NORMAL); sprintf(cmd, "AT+WPAPSK=%s,%s", ssid, pass); command(cmd, GSRES_NORMAL, GS_TIMEOUT2); wait_ms(100); @@ -477,6 +473,15 @@ r = command("AT+NDHCP=1", GSRES_DHCP, GS_TIMEOUT2); } break; + case GSSEC_WPS_PIN: + command("AT+WAUTH=0", GSRES_NORMAL); + sprintf(cmd, "AT+WWPS=2,%s", pass); + r = command(cmd, GSRES_WPS, GS_TIMEOUT2); + if (r) break; + if (dhcp) { + r = command("AT+NDHCP=1", GSRES_DHCP, GS_TIMEOUT2); + } + break; default: DBG("Can't use security\r\n"); r = -1; @@ -493,8 +498,15 @@ _connect = true; _reconnect = reconnect; _reconnect_count = 0; - if (!_ssid) _ssid = new char[sizeof(ssid) + 1]; - strcpy(_ssid, ssid); + _sec = sec; + if (ssid) { + if (!_ssid) _ssid = new char[sizeof(ssid) + 1]; + strcpy(_ssid, ssid); + } + if (pass) { + if (!_pass) _pass = new char[sizeof(pass) + 1]; + strcpy(_pass, pass); + } } return r; } @@ -508,7 +520,6 @@ command(NULL, GSRES_NORMAL); if (command("ATE0", GSRES_NORMAL)) return -1; if (_rts) { - command("AT&K0", GSRES_NORMAL); command("AT&R1", GSRES_NORMAL); } disconnect(); @@ -555,7 +566,6 @@ command(NULL, GSRES_NORMAL); if (command("ATE0", GSRES_NORMAL)) return -1; if (_rts) { - command("AT&K0", GSRES_NORMAL); command("AT&R1", GSRES_NORMAL); } disconnect(); @@ -614,6 +624,37 @@ return 0; } +int GSwifi::reconnect () { + int r; + char cmd[GS_CMD_SIZE]; + + if (_connect || _status != GSSTAT_READY) return -1; + if (!_ssid) return -1; + + switch (_sec) { + case GSSEC_WPS_BUTTON: + case GSSEC_WPS_PIN: + sprintf(cmd, "AT+WPAPSK=%s,%s", _ssid, _pass); + command(cmd, GSRES_NORMAL, GS_TIMEOUT2); + wait_ms(100); + case GSSEC_NONE: + case GSSEC_OPEN: + case GSSEC_WEP: + case GSSEC_WPA_PSK: + case GSSEC_WPA_ENT: + case GSSEC_WPA2_PSK: + case GSSEC_WPA2_ENT: + sprintf(cmd, "AT+WA=%s", _ssid); + r = command(cmd, GSRES_DHCP, GS_TIMEOUT2); + break; + default: + DBG("Can't use security\r\n"); + r = -1; + break; + } + return r; +} + int GSwifi::setAddress () { if (command("AT+NDHCP=1", GSRES_DHCP), GS_TIMEOUT2) return -1; @@ -738,7 +779,7 @@ } timeout.stop(); _alarm->input(); // high - _alarm->mode(PullNone); + _alarm->mode(PullUp); } if (_status == GSSTAT_WAKEUP) { @@ -1026,13 +1067,9 @@ if ((!_connect) && _reconnect_count < _reconnect && _ssid) { // re-connrct - int r; - char cmd[GS_CMD_SIZE]; _reconnect_count ++; DBG("re-connect %d\r\n", _reconnect_count); - sprintf(cmd, "AT+WA=%s", _ssid); - r = command(cmd, GSRES_DHCP, GS_TIMEOUT2); - if (r == 0) { + if (reconnect() == 0) { _connect = true; _reconnect_count = 0; }