GSwifiInterface library (interface for GainSpan Wi-Fi GS1011 modules) Please see https://mbed.org/users/gsfan/notebook/GSwifiInterface/

Dependents:   GSwifiInterface_HelloWorld GSwifiInterface_HelloServo GSwifiInterface_UDPEchoServer GSwifiInterface_UDPEchoClient ... more

Fork of WiflyInterface by mbed official

GainSpan Wi-Fi library

The GS1011/GS2100 is an ultra low power 802.11b wireless module from GainSpan.

mbed RTOS supported.

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

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

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

mbed RTOS に対応しています。(mbed2.0)

Revision:
8:64184a968e3b
Parent:
5:78943b3945b5
Child:
11:71d67fea5ace
--- a/Socket/TCPSocketConnection.cpp	Wed Jan 30 05:52:14 2013 +0000
+++ b/Socket/TCPSocketConnection.cpp	Thu Oct 31 06:41:45 2013 +0000
@@ -26,66 +26,45 @@
 
 int TCPSocketConnection::connect(const char* host, const int port)
 {  
-    char cmd[CFG_CMD_SIZE];
-    char ip[16];
+    if (set_address(host, port) != 0) return -1;
 
-    if (_cid < 0 || !_wifi->is_connected(_cid)) {
-        // Socket open
-        if (_wifi->gethostbyname(host, ip) == false) return -1;
-        _server = false;
-        sprintf(cmd, "AT+NCTCP=%s,%d", ip, port);
-        if (_wifi->sendCommand(cmd, GSwifi::RES_CONNECT) == false) return -1;
-        _cid = _wifi->readCID();
-        return 0;
-    }
+    _server = false;
+    _cid = _wifi->open(GSwifi::PROTO_TCP, get_address(), get_port());
+    if (_cid < 0) return -1;
 
-    return -1;
+    return 0;
 }
 
 bool TCPSocketConnection::is_connected(void)
 {
-    return _wifi->is_connected(_cid);
+    bool _is_connected = _wifi->isConnected(_cid);
+    if (!_is_connected) _cid = -1;
+    return _is_connected;
 }
 
 int TCPSocketConnection::send(char* data, int length)
 {
-    char cmd[CFG_CMD_SIZE];
-    Timer tmr;
-
-    if (!_blocking) {
-        tmr.start();
-        while (tmr.read_ms() < _timeout) {
-            if (_wifi->writeable())
-                break;
-        }
-        if (tmr.read_ms() >= _timeout) {
-            return -1;
-        }
-    }
+    if (_cid < 0 || !is_connected()) return -1;
 
     // TCP Client/Server
-    sprintf(cmd, "\x1bZ%X%04d", _cid, length);
-    _wifi->send(cmd, strlen(cmd));
-    return _wifi->send(data, length, GSwifi::RES_NORMAL);
+    return _wifi->send(_cid, data, length);
 }
 
 // -1 if unsuccessful, else number of bytes written
 int TCPSocketConnection::send_all(char* data, int length)
 {
-    char cmd[CFG_CMD_SIZE];
     Timer tmr;
     int idx = 0;
+
+    if (_cid < 0 || !is_connected()) return -1;
+
     tmr.start();
-
     // TCP Client/Server
-    sprintf(cmd, "\x1bZ%X%04d", _cid, length);
-    _wifi->send(cmd, strlen(cmd));
-
     while ((tmr.read_ms() < _timeout) || _blocking) {
 
-        idx += _wifi->send(data, length, GSwifi::RES_NORMAL);
+        idx += _wifi->send(_cid, &data[idx], length - idx);
+        if (idx < 0) return -1;
 
-        if (idx == -1) return -1;
         if (idx == length)
             return idx;
     }
@@ -97,9 +76,10 @@
 {
     Timer tmr;
     int time = -1;
-    
-    
-    if (!_blocking) {
+
+    if (_cid < 0 || !is_connected()) return -1;
+
+    if (_blocking) {
         tmr.start();
         while (time < _timeout + 20) {
             if (_wifi->readable(_cid)) {
@@ -112,14 +92,9 @@
         }
     }
 
+    int nb_available = _wifi->recv(_cid, data, length);
 
-    while(!_wifi->readable(_cid));
-    int nb_available = _wifi->readable(_cid);
-    for (int i = 0; i < min(nb_available, length); i++) {
-        data[i] = _wifi->getc(_cid);
-    }
-
-    return min(nb_available, length);
+    return nb_available;
 }
 
 
@@ -130,14 +105,14 @@
     int idx = 0;
     int time = -1;
 
+    if (_cid < 0 || !is_connected()) return -1;
+
     tmr.start();
     
     while (time < _timeout || _blocking) {
 
-        int nb_available = _wifi->readable(_cid);
-        for (int i = 0; i < min(nb_available, length); i++) {
-            data[idx++] = _wifi->getc(_cid);
-        }
+        idx += _wifi->recv(_cid, &data[idx], length - idx);
+        if (idx < 0) return -1;
 
         if (idx == length)
             break;
@@ -148,12 +123,12 @@
     return (idx == 0) ? -1 : idx;
 }
 
-void TCPSocketConnection::confCID (int cid) {
+void TCPSocketConnection::acceptCID (int cid) {
     char *ip;
     int port;
     _server = true;
     _cid = cid;
-    if (_wifi->readRemote(_cid, &ip, &port)) {
+    if (!_wifi->getRemote(_cid, &ip, &port)) {
         set_address(ip, port);
     }
 }