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.h
- Revision:
- 26:b347ee3a1087
- Parent:
- 25:f6e5622d2930
- Child:
- 28:fbba4c58d14c
--- a/GSwifi.h Mon Feb 11 06:01:46 2013 +0000 +++ b/GSwifi.h Fri Feb 22 01:05:10 2013 +0000 @@ -23,32 +23,16 @@ #ifndef _GSWIFI_H_ #define _GSWIFI_H_ +#include "dbg.h" #include "mbed.h" -#include "GSwifi_net.h" #include "CBuffer.h" +#include "GSFunctionPointer.h" #include "host.h" #include "ipaddr.h" +#include "GSwifi_conf.h" #include <ctype.h> -#define GS_BAUD 9600 - -#define GS_UART_DIRECT -#define GS_BULK - -#define GS_DNSNAME "setup.local" -#define GS_WREGDOMAIN 2 // 0:FCC, 1:ETSI, 2:TELEC - -#define GS_TIMEOUT 10000 // ms -#define GS_TIMEOUT2 30000 // ms -#define GS_CMD_SIZE 100 -#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) -//#define GS_DATA_SIZE 1500 -#define GS_DATA_SIZE 1000 -#elif defined(TARGET_LPC11U24) -#define GS_DATA_SIZE 500 -#endif - #ifdef GS_UART_DIRECT #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) #define _gs_getc() LPC_UART1->RBR @@ -62,6 +46,13 @@ #define _gs_putc(c) _gs.putc(c) #endif +#ifdef GS_SYSLOG +#define LOG(...) printf("" __VA_ARGS__) +#else +#define LOG(...) +#endif + + /** * GSwifi class */ @@ -143,10 +134,52 @@ Host host; CircBuffer<char> *data; int lcid; - int received; - onGsReceiveFunc onGsReceive; + bool received; +// onGsReceiveFunc onGsReceive; + GSFunctionPointer onGsReceive; +}; + +#ifdef GS_USE_HTTPD +enum GSHTTPDMODE { + GSHTTPDMODE_REQUEST, + GSHTTPDMODE_HEAD, + GSHTTPDMODE_SPACE, + GSHTTPDMODE_BODY, + GSHTTPDMODE_ERROR, + GSHTTPDMODE_WEBSOCKET, + GSHTTPDMODE_WEBSOCKET_MASK, + GSHTTPDMODE_WEBSOCKET_BODY, }; +struct GS_httpd { + GSHTTPDMODE mode; + int type; + char *buf; // body + int len; // length of buf + char *uri; + char *file; + char *query; + int length; // content-length + int keepalive; + Host host; +#ifdef GS_USE_WEBSOCKET + int websocket; + char *websocket_key; + int websocket_flg; + char websocket_mask[4]; + int websocket_payload; +#endif +}; + +typedef void (*onHttpdCgiFunc)(int cid, GS_httpd *gshttpd); + +struct GS_httpd_handler { + char *uri; + char *dir; + onHttpdCgiFunc onHttpCgi; +}; +#endif // GS_USE_HTTPD + // ----- GSwifi.cpp ----- /** * default constructor @@ -165,9 +198,13 @@ */ int command (const char *cmd, GSRESPONCE res, int timeout = GS_TIMEOUT); /** - * recv responce + * reset recv responce */ - int cmdResponse (GSRESPONCE res, int ms); + void resetResponse (GSRESPONCE res); + /** + * wait recv responce + */ + int waitResponse (int ms); /** * associate infrastructure * @param sec GSSEC_OPEN, GSSEC_WEP, GSSEC_WPA_PSK, GSSEC_WPA2_PSK, GSSEC_WPS_BUTTON @@ -220,6 +257,10 @@ */ int getAddress (IpAddr &ipaddr, IpAddr &netmask, IpAddr &gateway, IpAddr &nameserver); /** + * get mac address + */ + int getMac (char *mac); + /** * resolv hostname * @param name hostname * @param addr resolved ip address @@ -320,12 +361,30 @@ * @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)); +*/ /** * 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); + 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>; + } +*/ +/* template<typename T> int listen2 (T* tptr, int port, GSPROTOCOL pro, void (T::*mptr)(int,int)) { if((mptr != NULL) && (tptr != NULL)) { @@ -435,14 +494,26 @@ #endif protected: - void poll_cmd (); + void parseResponse (); + void parseCmdResponse (char *buf); + int x2i (char c); char i2x (int i); void isr_recv (); int from_hex (int ch); int to_hex (int code); - void newSock (int cid, GSTYPE type, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive); + void newSock (int cid, GSTYPE type, GSPROTOCOL pro); + + void newSock (int cid, GSTYPE type, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive) { + 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); + _gs_sock[cid].onGsReceive.attach(object, member); + } #ifdef GS_USE_SMTP int wait_smtp (int cid, int code); @@ -458,14 +529,15 @@ private: Serial _gs; bool _rts; - DigitalOut _reset; - DigitalOut *_alarm; + DigitalInOut _reset; + DigitalInOut *_alarm; volatile bool _connect; volatile GSSTATUS _status; - volatile int _gs_ok, _gs_failure, _gs_enter; - volatile GSRESPONCE _response; + volatile bool _gs_ok, _gs_failure; + volatile int _gs_flg; + volatile GSRESPONCE _gs_res; GSMODE _gs_mode; - int _escape; + bool _escape; int _cid, _rssi; IpAddr _ipaddr, _netmask, _gateway, _nameserver, _resolv; Host _from, _to; @@ -473,7 +545,7 @@ CircBuffer<char> _buf_cmd; struct GS_Socket _gs_sock[16]; time_t _time; - char *_ssid; + char *_ssid, *_pass; int _reconnect, _reconnect_count; #ifdef GS_USE_HTTPD