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:
22:9b077e2823ce
Parent:
20:151b5a4fdd29
Child:
23:a783c62c36d0
--- a/GSwifi.cpp	Thu Nov 08 01:35:37 2012 +0000
+++ b/GSwifi.cpp	Wed Dec 26 08:41:43 2012 +0000
@@ -494,6 +494,7 @@
 #endif
 
     disconnect();
+    command("AT+WREGDOMAIN=" GS_WREGDOMAIN, GSRES_NORMAL);
     command("AT+WM=0", GSRES_NORMAL); // infrastructure
     wait_ms(100);
     if (dhcp && sec != GSSEC_WPS_BUTTON) {
@@ -504,21 +505,15 @@
 
     switch (sec) {
     case GSSEC_NONE:
-        command("AT+WAUTH=0", GSRES_NORMAL);
-        sprintf(cmd, "AT+WA=%s", ssid);
-        r = command(cmd, GSRES_DHCP, GS_TIMEOUT2);
-        if (r) {
-            DBG("retry\r\n");
-            r = command(cmd, GSRES_DHCP, GS_TIMEOUT2); // retry
-        }
-        break;
     case GSSEC_OPEN:
     case GSSEC_WEP:
         sprintf(cmd, "AT+WAUTH=%d", sec);
         command(cmd, GSRES_NORMAL);
-        sprintf(cmd, "AT+WWEP1=%s", pass);
-        command(cmd, GSRES_NORMAL);
-        wait_ms(100);
+        if (sec != GSSEC_NONE) {
+            sprintf(cmd, "AT+WWEP1=%s", pass);
+            command(cmd, GSRES_NORMAL);
+            wait_ms(100);
+        }
         sprintf(cmd, "AT+WA=%s", ssid);
         r = command(cmd, GSRES_DHCP, GS_TIMEOUT2);
         if (r) {
@@ -583,6 +578,7 @@
     command("AT+BDATA=1", GSRES_NORMAL);
 #endif
 
+    command("AT+WREGDOMAIN=" GS_WREGDOMAIN, GSRES_NORMAL);
     command("AT+WM=1", GSRES_NORMAL); // adhock
     wait_ms(100);
     command("AT+NDHCP=0", GSRES_NORMAL);
@@ -590,17 +586,15 @@
 
     switch (sec) {
     case GSSEC_NONE:
-        command("AT+WAUTH=0", GSRES_NORMAL);
-        sprintf(cmd, "AT+WA=%s", ssid);
-        r = command(cmd, GSRES_NORMAL, GS_TIMEOUT2);
-        break;
     case GSSEC_OPEN:
     case GSSEC_WEP:
         sprintf(cmd, "AT+WAUTH=%d", sec);
         command(cmd, GSRES_NORMAL);
-        sprintf(cmd, "AT+WWEP1=%s", pass);
-        command(cmd, GSRES_NORMAL);
-        wait_ms(100);
+        if (sec != GSSEC_NONE) {
+            sprintf(cmd, "AT+WWEP1=%s", pass);
+            command(cmd, GSRES_NORMAL);
+            wait_ms(100);
+        }
         sprintf(cmd, "AT+WA=%s", ssid);
         r = command(cmd, GSRES_NORMAL, GS_TIMEOUT2);
         break;
@@ -614,7 +608,7 @@
     return r;
 }
 
-int GSwifi::limitedap (GSSECURITY sec, const char *ssid, const char *pass, IpAddr ipaddr, IpAddr netmask, bool prov) {
+int GSwifi::limitedap (GSSECURITY sec, const char *ssid, const char *pass, IpAddr ipaddr, IpAddr netmask, char *dns) {
     int r;
     char cmd[GS_CMD_SIZE];
     
@@ -632,26 +626,30 @@
     command("AT+BDATA=1", GSRES_NORMAL);
 #endif
 
+    command("AT+WREGDOMAIN=" GS_WREGDOMAIN, GSRES_NORMAL);
     command("AT+WM=2", GSRES_NORMAL); // limited ap
     wait_ms(1000);
     command("AT+NDHCP=0", GSRES_NORMAL);
     setAddress(ipaddr, netmask, ipaddr, ipaddr);
     if (command("AT+DHCPSRVR=1", GSRES_NORMAL)) return -1;
-    if (command("AT+DNS=1,setup.local", GSRES_NORMAL)) return -1;
+    if (dns) {
+        sprintf(cmd, "AT+DNS=1,%s", dns);
+    } else {
+        strcpy(cmd, "AT+DNS=1," GS_DNSNAME);
+    }
+    if (command(cmd, GSRES_NORMAL)) return -1;
 
     switch (sec) {
     case GSSEC_NONE:
-        command("AT+WAUTH=0", GSRES_NORMAL);
-        sprintf(cmd, "AT+WA=%s", ssid);
-        r = command(cmd, GSRES_NORMAL, GS_TIMEOUT2);
-        break;
     case GSSEC_OPEN:
     case GSSEC_WEP:
         sprintf(cmd, "AT+WAUTH=%d", sec);
         command(cmd, GSRES_NORMAL);
-        sprintf(cmd, "AT+WWEP1=%s", pass);
-        command(cmd, GSRES_NORMAL);
-        wait_ms(100);
+        if (sec != GSSEC_NONE) {
+            sprintf(cmd, "AT+WWEP1=%s", pass);
+            command(cmd, GSRES_NORMAL);
+            wait_ms(100);
+        }
         sprintf(cmd, "AT+WA=%s", ssid);
         r = command(cmd, GSRES_NORMAL, GS_TIMEOUT2);
         break;
@@ -661,10 +659,6 @@
         break;
     }
 
-    if (r == 0 && prov) {
-        command("AT+WEBPROV=admin,password", GSRES_NORMAL);
-    }
-
     if (r == 0) _connect = true;
     return r;
 }
@@ -1299,6 +1293,30 @@
     return cmdResponse(GSRES_NORMAL, GS_TIMEOUT);
 }
 
+int GSwifi::provisioning (char *user, char *pass) {
+    char cmd[GS_CMD_SIZE];
+
+    if (_status != GSSTAT_READY) return -1;
+
+    sprintf(cmd, "AT+WEBPROV=%s,%s", user, pass);
+    return command(cmd, GSRES_NORMAL);
+}
+
+int GSwifi::setBaud (int baud) {
+    char cmd[GS_CMD_SIZE];
+
+    if (_status != GSSTAT_READY) return -1;
+
+    _gs.printf("ATB=%d\r\n", baud);
+    _gs.baud(baud);
+    for (int i = 0; i < 10; i ++) {
+        wait_ms(10);
+        poll_cmd();
+        _buf_cmd.clear();
+    }
+    return 0;
+}
+
 int GSwifi::base64encode (char *input, int length, char *output, int len) {
     // code from 
     // Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
@@ -1401,7 +1419,7 @@
 }
 
 
-#ifdef DEBUF
+#ifdef DEBUG
 // for test
 
 void GSwifi::test () {