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/
Revision 28:fbba4c58d14c, committed 2013-02-22
- Comitter:
- gsfan
- Date:
- Fri Feb 22 03:07:43 2013 +0000
- Parent:
- 27:5802e39041c5
- Child:
- 29:1c4419512941
- Commit message:
- modifyed call back function
Changed in this revision
--- 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; }
--- a/GSwifi.h Fri Feb 22 01:10:17 2013 +0000 +++ b/GSwifi.h Fri Feb 22 03:07:43 2013 +0000 @@ -72,6 +72,7 @@ GSSEC_WPA_ENT = 16, GSSEC_WPA2_ENT = 32, GSSEC_WPS_BUTTON = 64, + GSSEC_WPS_PIN, }; /** @@ -243,6 +244,10 @@ * unassociate */ int disconnect (); + /** + * re-connect + */ + int reconnect (); /** * use DHCP @@ -360,38 +365,36 @@ * tcp/udp client * @return CID, -1:failure */ - int open (Host &host, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL); -/* - int open (Host &host, GSPROTOCOL pro, void (*ponGsReceive)(int, int) = NULL); - template<class T> - int open (Host &host, GSPROTOCOL pro, T* pItem, void (T::*ponGsReceive)(int, int)); -*/ + int open (Host &host, GSPROTOCOL pro); + + int open (Host &host, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive) { + int cid = open(host, pro); + if (cid >= 0) _gs_sock[cid].onGsReceive.attach(ponGsReceive); + return cid; + } + template<typename T> + int open (Host &host, GSPROTOCOL pro, T *object, void (T::*member)(int, int)) { + int cid = open(host, pro); + if (cid >= 0) _gs_sock[cid].onGsReceive.attach(object, member); + return cid; + } /** * tcp/udp server * @return CID, -1:failure */ - int listen (int port, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL); -/* - int listen (int port, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL); + int listen (int port, GSPROTOCOL pro); + + int listen (int port, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive) { + int cid = listen(port, pro); + if (cid >= 0) _gs_sock[cid].onGsReceive.attach(ponGsReceive); + return cid; + } template<typename T> - int listen (int port, GSPROTOCOL pro, T* pItem, onGsReceiveFunc ponGsReceive) { - void *_object; - char _member[16]; - onGsReceiveFunc *_membercaller; - - _object = static_cast<void*(int, int)>(object); - memcpy(_member, (char*)&ponGsReceive, sizeof(ponGsReceive)); - _membercaller = &FunctionPointer::membercaller<T>; + int listen (int port, GSPROTOCOL pro, T *object, void (T::*member)(int, int)) { + int cid = listen(port, pro); + if (cid >= 0) _gs_sock[cid].onGsReceive.attach(object, member); + return cid; } -*/ -/* - template<typename T> - int listen2 (T* tptr, int port, GSPROTOCOL pro, void (T::*mptr)(int,int)) { - if((mptr != NULL) && (tptr != NULL)) { - return listen(port, pro, reinterpret_cast<onGsReceiveFunc>(mptr)); - } - } -*/ /** * close client/server */ @@ -506,12 +509,12 @@ void newSock (int cid, GSTYPE type, GSPROTOCOL pro); void newSock (int cid, GSTYPE type, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive) { - newSock (cid, type, pro); + newSock(cid, type, pro); _gs_sock[cid].onGsReceive.attach(ponGsReceive); } template<typename T> void newSock (int cid, GSTYPE type, GSPROTOCOL pro, T *object, void (T::*member)(int, int)) { - newSock (cid, type, pro); + newSock(cid, type, pro); _gs_sock[cid].onGsReceive.attach(object, member); } @@ -545,6 +548,7 @@ CircBuffer<char> _buf_cmd; struct GS_Socket _gs_sock[16]; time_t _time; + GSSECURITY _sec; char *_ssid, *_pass; int _reconnect, _reconnect_count;
--- a/GSwifi_sock.cpp Fri Feb 22 01:10:17 2013 +0000 +++ b/GSwifi_sock.cpp Fri Feb 22 03:07:43 2013 +0000 @@ -25,7 +25,6 @@ #include "GSwifi.h" -//void GSwifi::newSock (int cid, GSTYPE type, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive) { void GSwifi::newSock (int cid, GSTYPE type, GSPROTOCOL pro) { _gs_sock[cid].type = type; _gs_sock[cid].protocol = pro; @@ -39,7 +38,7 @@ _gs_sock[cid].received = false; } -int GSwifi::open (Host &host, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive) { +int GSwifi::open (Host &host, GSPROTOCOL pro) { char cmd[GS_CMD_SIZE]; if (! _connect || _status != GSSTAT_READY) return -1; @@ -54,11 +53,11 @@ } if (command(cmd, GSRES_CONNECT)) return -1; - newSock(_cid, GSTYPE_CLIENT, pro, ponGsReceive); + newSock(_cid, GSTYPE_CLIENT, pro); return _cid; } -int GSwifi::listen (int port, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive) { +int GSwifi::listen (int port, GSPROTOCOL pro) { char cmd[GS_CMD_SIZE]; if (! _connect || _status != GSSTAT_READY) return -1; @@ -73,7 +72,7 @@ } if (command(cmd, GSRES_CONNECT)) return -1; - newSock(_cid, GSTYPE_SERVER, pro, ponGsReceive); + newSock(_cid, GSTYPE_SERVER, pro); return _cid; }
--- a/dbg.h Fri Feb 22 01:10:17 2013 +0000 +++ b/dbg.h Fri Feb 22 03:07:43 2013 +0000 @@ -1,4 +1,4 @@ -#define DEBUG +//#define DEBUG //#define DEBUG_VIEW #ifdef DEBUG