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 gs fan

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/

/media/uploads/gsfan/gs_im_002.jpg /media/uploads/gsfan/gs1011m_2.jpg

ゲインスパン Wi-Fi モジュール ライブラリ

ゲインスパン社の低電力 Wi-Fiモジュール(無線LAN) GS1011 シリーズ用のライブラリです。

解説: http://mbed.org/users/gsfan/notebook/gainspan_wifi/

Revision:
26:b347ee3a1087
Parent:
25:f6e5622d2930
Child:
28:fbba4c58d14c
diff -r f6e5622d2930 -r b347ee3a1087 GSwifi.h
--- 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