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)

Committer:
gsfan
Date:
Fri Nov 22 14:03:07 2013 +0000
Revision:
12:057089026a20
Parent:
11:71d67fea5ace
add more function (smtp, http, httpd, websocket); fix some function;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gsfan 8:64184a968e3b 1 /* Copyright (C) 2013 gsfan, MIT License
gsfan 8:64184a968e3b 2 *
gsfan 8:64184a968e3b 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
gsfan 8:64184a968e3b 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
gsfan 8:64184a968e3b 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
gsfan 8:64184a968e3b 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
gsfan 8:64184a968e3b 7 * furnished to do so, subject to the following conditions:
gsfan 8:64184a968e3b 8 *
gsfan 8:64184a968e3b 9 * The above copyright notice and this permission notice shall be included in all copies or
gsfan 8:64184a968e3b 10 * substantial portions of the Software.
gsfan 8:64184a968e3b 11 *
gsfan 8:64184a968e3b 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
gsfan 8:64184a968e3b 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
gsfan 8:64184a968e3b 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
gsfan 8:64184a968e3b 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
gsfan 8:64184a968e3b 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
gsfan 8:64184a968e3b 17 */
gsfan 8:64184a968e3b 18
gsfan 8:64184a968e3b 19 #include "GSwifi.h"
gsfan 8:64184a968e3b 20
gsfan 8:64184a968e3b 21 int GSwifi::x2i (char c) {
gsfan 8:64184a968e3b 22 if (c >= '0' && c <= '9') {
gsfan 8:64184a968e3b 23 return c - '0';
gsfan 8:64184a968e3b 24 } else
gsfan 8:64184a968e3b 25 if (c >= 'A' && c <= 'F') {
gsfan 8:64184a968e3b 26 return c - 'A' + 10;
gsfan 8:64184a968e3b 27 } else
gsfan 8:64184a968e3b 28 if (c >= 'a' && c <= 'f') {
gsfan 8:64184a968e3b 29 return c - 'a' + 10;
gsfan 8:64184a968e3b 30 }
gsfan 8:64184a968e3b 31 return 0;
gsfan 8:64184a968e3b 32 }
gsfan 8:64184a968e3b 33
gsfan 8:64184a968e3b 34 char GSwifi::i2x (int i) {
gsfan 8:64184a968e3b 35 if (i >= 0 && i <= 9) {
gsfan 8:64184a968e3b 36 return i + '0';
gsfan 8:64184a968e3b 37 } else
gsfan 8:64184a968e3b 38 if (i >= 10 && i <= 15) {
gsfan 8:64184a968e3b 39 return i - 10 + 'A';
gsfan 8:64184a968e3b 40 }
gsfan 8:64184a968e3b 41 return 0;
gsfan 8:64184a968e3b 42 }
gsfan 8:64184a968e3b 43
gsfan 8:64184a968e3b 44 int GSwifi::from_hex (int ch) {
gsfan 8:64184a968e3b 45 return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10;
gsfan 8:64184a968e3b 46 }
gsfan 8:64184a968e3b 47
gsfan 8:64184a968e3b 48 int GSwifi::to_hex (int code) {
gsfan 8:64184a968e3b 49 static char hex[] = "0123456789abcdef";
gsfan 8:64184a968e3b 50 return hex[code & 15];
gsfan 8:64184a968e3b 51 }
gsfan 8:64184a968e3b 52
gsfan 8:64184a968e3b 53
gsfan 8:64184a968e3b 54 int GSwifi::setRegion (int reg) {
gsfan 8:64184a968e3b 55 return cmdWREGDOMAIN(reg);
gsfan 8:64184a968e3b 56 }
gsfan 8:64184a968e3b 57
gsfan 8:64184a968e3b 58 int GSwifi::getRssi () {
gsfan 8:64184a968e3b 59 cmdWRSSI();
gsfan 8:64184a968e3b 60 return _state.rssi;
gsfan 8:64184a968e3b 61 }
gsfan 8:64184a968e3b 62
gsfan 8:64184a968e3b 63 int GSwifi::powerSave (int active, int save) {
gsfan 8:64184a968e3b 64 cmdWRXACTIVE(active);
gsfan 8:64184a968e3b 65 return cmdWRXPS(save);
gsfan 8:64184a968e3b 66 }
gsfan 8:64184a968e3b 67
gsfan 8:64184a968e3b 68 int GSwifi::setRfPower (int power) {
gsfan 8:64184a968e3b 69 if (power < 0 || power > 7) return false;
gsfan 8:64184a968e3b 70 return cmdWP(power);
gsfan 8:64184a968e3b 71 }
gsfan 8:64184a968e3b 72
gsfan 8:64184a968e3b 73 int GSwifi::setTime (time_t time) {
gsfan 8:64184a968e3b 74 char dmy[16], hms[16];
gsfan 8:64184a968e3b 75 struct tm *t = localtime(&time);
gsfan 8:64184a968e3b 76
gsfan 8:64184a968e3b 77 sprintf(dmy, "%d/%d/%d", t->tm_mday, t->tm_mon + 1, t->tm_year + 1900);
gsfan 8:64184a968e3b 78 sprintf(hms, "%d:%d:%d", t->tm_hour, t->tm_min, t->tm_sec);
gsfan 8:64184a968e3b 79 return cmdSETTIME(dmy, hms);
gsfan 8:64184a968e3b 80 }
gsfan 8:64184a968e3b 81
gsfan 8:64184a968e3b 82 time_t GSwifi::getTime () {
gsfan 8:64184a968e3b 83 cmdGETTIME();
gsfan 8:64184a968e3b 84 return _state.time;
gsfan 8:64184a968e3b 85 }
gsfan 8:64184a968e3b 86
gsfan 8:64184a968e3b 87 int GSwifi::ntpdate (char *host, int sec) {
gsfan 8:64184a968e3b 88 char ip[17];
gsfan 8:64184a968e3b 89
gsfan 12:057089026a20 90 if (!isAssociated() || _state.status != STAT_READY) return -1;
gsfan 11:71d67fea5ace 91
gsfan 8:64184a968e3b 92 if (getHostByName(host, ip)) return -1;
gsfan 8:64184a968e3b 93 return cmdNTIMESYNC(true, ip, sec);
gsfan 8:64184a968e3b 94 }
gsfan 8:64184a968e3b 95
gsfan 8:64184a968e3b 96 int GSwifi::setGpio (int port, int out) {
gsfan 8:64184a968e3b 97 return cmdDGPIO(port, out);
gsfan 8:64184a968e3b 98 }
gsfan 8:64184a968e3b 99
gsfan 8:64184a968e3b 100 int GSwifi::provisioning (char *user, char *pass) {
gsfan 11:71d67fea5ace 101
gsfan 12:057089026a20 102 if (!isAssociated() || _state.status != STAT_READY) return -1;
gsfan 11:71d67fea5ace 103
gsfan 8:64184a968e3b 104 return cmdWEBPROV(user, pass);
gsfan 8:64184a968e3b 105 }
gsfan 11:71d67fea5ace 106
gsfan 11:71d67fea5ace 107 int GSwifi::standby (int msec) {
gsfan 11:71d67fea5ace 108 switch (_state.status) {
gsfan 11:71d67fea5ace 109 case STAT_READY:
gsfan 11:71d67fea5ace 110 cmdNCLOSEALL();
gsfan 11:71d67fea5ace 111 for (int i = 0; i < 16; i ++) {
gsfan 11:71d67fea5ace 112 _con[i].connected = false;
gsfan 11:71d67fea5ace 113 }
gsfan 11:71d67fea5ace 114 cmdSTORENWCONN();
gsfan 11:71d67fea5ace 115 // cmdWRXACTIVE(false);
gsfan 11:71d67fea5ace 116 break;
gsfan 11:71d67fea5ace 117 case STAT_WAKEUP:
gsfan 11:71d67fea5ace 118 if (cmdE(false)) return -1;
gsfan 11:71d67fea5ace 119 if (_flow) {
gsfan 11:71d67fea5ace 120 cmdR(true);
gsfan 11:71d67fea5ace 121 }
gsfan 11:71d67fea5ace 122 break;
gsfan 11:71d67fea5ace 123 default:
gsfan 11:71d67fea5ace 124 return -1;
gsfan 11:71d67fea5ace 125 }
gsfan 11:71d67fea5ace 126
gsfan 11:71d67fea5ace 127 _state.status = STAT_STANDBY;
gsfan 11:71d67fea5ace 128 return cmdPSSTBY(msec, 0);
gsfan 11:71d67fea5ace 129 }
gsfan 11:71d67fea5ace 130
gsfan 11:71d67fea5ace 131
gsfan 11:71d67fea5ace 132 int GSwifi::deepSleep () {
gsfan 11:71d67fea5ace 133 if (_state.status != STAT_READY) return -1;
gsfan 11:71d67fea5ace 134
gsfan 11:71d67fea5ace 135 _state.status = STAT_DEEPSLEEP;
gsfan 11:71d67fea5ace 136 return cmdPSDPSLEEP(); // go deep sleep
gsfan 11:71d67fea5ace 137 }
gsfan 11:71d67fea5ace 138
gsfan 11:71d67fea5ace 139 int GSwifi::wakeup () {
gsfan 11:71d67fea5ace 140 int r;
gsfan 11:71d67fea5ace 141
gsfan 11:71d67fea5ace 142 if (_state.status == STAT_STANDBY) {
gsfan 11:71d67fea5ace 143 Timer timeout;
gsfan 11:71d67fea5ace 144 setAlarm(true);
gsfan 11:71d67fea5ace 145 timeout.start();
gsfan 11:71d67fea5ace 146 while (timeout.read() < CFG_TIMEOUT) {
gsfan 11:71d67fea5ace 147 if (_state.status == STAT_WAKEUP) break;
gsfan 11:71d67fea5ace 148 }
gsfan 11:71d67fea5ace 149 timeout.stop();
gsfan 11:71d67fea5ace 150 setAlarm(false);
gsfan 11:71d67fea5ace 151 }
gsfan 11:71d67fea5ace 152
gsfan 11:71d67fea5ace 153 switch (_state.status) {
gsfan 11:71d67fea5ace 154 case STAT_WAKEUP:
gsfan 11:71d67fea5ace 155 if (cmdE(false)) return -1;
gsfan 11:71d67fea5ace 156 if (_flow) {
gsfan 11:71d67fea5ace 157 cmdR(true);
gsfan 11:71d67fea5ace 158 }
gsfan 11:71d67fea5ace 159 cmdBDATA(true);
gsfan 11:71d67fea5ace 160 r = cmdRESTORENWCONN();
gsfan 11:71d67fea5ace 161 if (!r) {
gsfan 11:71d67fea5ace 162 wait_ms(100);
gsfan 11:71d67fea5ace 163 // cmdWRXACTIVE(true);
gsfan 11:71d67fea5ace 164 _state.status = STAT_READY;
gsfan 11:71d67fea5ace 165 }
gsfan 11:71d67fea5ace 166 return r;
gsfan 11:71d67fea5ace 167 case STAT_DEEPSLEEP:
gsfan 11:71d67fea5ace 168 r = cmdAT();
gsfan 11:71d67fea5ace 169 if (!r) {
gsfan 11:71d67fea5ace 170 _state.status = STAT_READY;
gsfan 11:71d67fea5ace 171 }
gsfan 11:71d67fea5ace 172 return r;
gsfan 11:71d67fea5ace 173 default:
gsfan 11:71d67fea5ace 174 break;
gsfan 11:71d67fea5ace 175 }
gsfan 11:71d67fea5ace 176 return -1;
gsfan 11:71d67fea5ace 177 }