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/

Committer:
gsfan
Date:
Fri Jul 13 04:14:14 2012 +0000
Revision:
5:6def1d0df519
Parent:
4:a8d38857f3fd
Child:
6:a423f0d197de
added setTime, getTime

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gsfan 0:2f6062c6d018 1 /**
gsfan 0:2f6062c6d018 2 * Gainspan wi-fi module library for mbed
gsfan 0:2f6062c6d018 3 * Copyright (c) 2012 gsfan
gsfan 0:2f6062c6d018 4 * Released under the MIT License: http://mbed.org/license/mit
gsfan 0:2f6062c6d018 5 */
gsfan 0:2f6062c6d018 6
gsfan 0:2f6062c6d018 7 /** @file
gsfan 0:2f6062c6d018 8 * @brief Gainspan wi-fi module library for mbed
gsfan 0:2f6062c6d018 9 * GS1011MIC, GS1011MIP, GainSpan WiFi Breakout, etc.
gsfan 0:2f6062c6d018 10 * module configuration: ATB=115200
gsfan 0:2f6062c6d018 11 */
gsfan 0:2f6062c6d018 12
gsfan 0:2f6062c6d018 13 #include "mbed.h"
gsfan 0:2f6062c6d018 14 #include "RingBuffer.h"
gsfan 0:2f6062c6d018 15 #include "host.h"
gsfan 0:2f6062c6d018 16 #include "ipaddr.h"
gsfan 0:2f6062c6d018 17
gsfan 0:2f6062c6d018 18 #define GS_BAUD 115200
gsfan 1:b127c6c5241d 19 #define GS_UART_DIRECT
gsfan 0:2f6062c6d018 20
gsfan 0:2f6062c6d018 21 #define GS_BULK
gsfan 0:2f6062c6d018 22
gsfan 0:2f6062c6d018 23 #define GS_TIMEOUT 10000 // ms
gsfan 0:2f6062c6d018 24 #define GS_TIMEOUT2 30000 // ms
gsfan 0:2f6062c6d018 25 #define GS_CMD_SIZE 100
gsfan 0:2f6062c6d018 26 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
gsfan 0:2f6062c6d018 27 #define GS_DATA_SIZE 1500
gsfan 0:2f6062c6d018 28 #elif defined(TARGET_LPC11U24)
gsfan 0:2f6062c6d018 29 #define GS_DATA_SIZE 800
gsfan 0:2f6062c6d018 30 #endif
gsfan 0:2f6062c6d018 31
gsfan 0:2f6062c6d018 32 /**
gsfan 0:2f6062c6d018 33 * Wi-Fi security
gsfan 0:2f6062c6d018 34 */
gsfan 0:2f6062c6d018 35 enum GSSECURITY {
gsfan 0:2f6062c6d018 36 GSSEC_AUTO = 0,
gsfan 0:2f6062c6d018 37 GSSEC_NONE = 0,
gsfan 0:2f6062c6d018 38 GSSEC_OPEN = 1,
gsfan 0:2f6062c6d018 39 GSSEC_WEP = 2,
gsfan 0:2f6062c6d018 40 GSSEC_WPA_PSK = 4,
gsfan 0:2f6062c6d018 41 GSSEC_WPA2_PSK = 8,
gsfan 0:2f6062c6d018 42 GSSEC_WPA_ENT = 16,
gsfan 0:2f6062c6d018 43 GSSEC_WPA2_ENT = 32,
gsfan 0:2f6062c6d018 44 GSSEC_WPS_BUTTON = 64,
gsfan 0:2f6062c6d018 45 };
gsfan 0:2f6062c6d018 46
gsfan 0:2f6062c6d018 47 /**
gsfan 0:2f6062c6d018 48 * TCP/IP protocol
gsfan 0:2f6062c6d018 49 */
gsfan 0:2f6062c6d018 50 enum GSPROTOCOL {
gsfan 0:2f6062c6d018 51 GSPROT_UDP = 0,
gsfan 0:2f6062c6d018 52 GSPROT_TCP = 1,
gsfan 0:2f6062c6d018 53 GSPROT_HTTPGET,
gsfan 0:2f6062c6d018 54 GSPROT_HTTPPOST,
gsfan 0:2f6062c6d018 55 };
gsfan 0:2f6062c6d018 56
gsfan 0:2f6062c6d018 57 /**
gsfan 0:2f6062c6d018 58 * Client/Server
gsfan 0:2f6062c6d018 59 */
gsfan 0:2f6062c6d018 60 enum GSTYPE {
gsfan 0:2f6062c6d018 61 GSTYPE_CLIENT = 0,
gsfan 0:2f6062c6d018 62 GSTYPE_SERVER = 1,
gsfan 0:2f6062c6d018 63 };
gsfan 0:2f6062c6d018 64
gsfan 0:2f6062c6d018 65 enum GSRESPONCE {
gsfan 0:2f6062c6d018 66 GSRES_NORMAL,
gsfan 0:2f6062c6d018 67 GSRES_CONNECT,
gsfan 0:2f6062c6d018 68 GSRES_WPS,
gsfan 0:2f6062c6d018 69 GSRES_MACADDRESS,
gsfan 0:2f6062c6d018 70 GSRES_DHCP,
gsfan 0:2f6062c6d018 71 GSRES_DNSLOOKUP,
gsfan 0:2f6062c6d018 72 GSRES_HTTP,
gsfan 1:b127c6c5241d 73 GSRES_RSSI,
gsfan 5:6def1d0df519 74 GSRES_TIME,
gsfan 0:2f6062c6d018 75 };
gsfan 0:2f6062c6d018 76
gsfan 0:2f6062c6d018 77 enum GSMODE {
gsfan 0:2f6062c6d018 78 GSMODE_COMMAND,
gsfan 0:2f6062c6d018 79 GSMODE_DATA_RX,
gsfan 0:2f6062c6d018 80 GSMODE_DATA_RXUDP,
gsfan 0:2f6062c6d018 81 GSMODE_DATA_RX_BULK,
gsfan 0:2f6062c6d018 82 GSMODE_DATA_RXUDP_BULK,
gsfan 0:2f6062c6d018 83 GSMODE_DATA_RXHTTP,
gsfan 0:2f6062c6d018 84 };
gsfan 0:2f6062c6d018 85
gsfan 0:2f6062c6d018 86 enum GSSTATUS {
gsfan 0:2f6062c6d018 87 GSSTAT_READY,
gsfan 0:2f6062c6d018 88 GSSTAT_STANDBY,
gsfan 0:2f6062c6d018 89 GSSTAT_WAKEUP,
gsfan 0:2f6062c6d018 90 GSSTAT_DEEPSLEEP,
gsfan 0:2f6062c6d018 91 };
gsfan 0:2f6062c6d018 92
gsfan 0:2f6062c6d018 93 /**
gsfan 0:2f6062c6d018 94 * data receive callback function
gsfan 0:2f6062c6d018 95 */
gsfan 1:b127c6c5241d 96 typedef void (*onGsReceiveFunc)(int cid, int len);
gsfan 0:2f6062c6d018 97
gsfan 0:2f6062c6d018 98 struct GS_Socket {
gsfan 0:2f6062c6d018 99 GSTYPE type;
gsfan 0:2f6062c6d018 100 GSPROTOCOL protocol;
gsfan 0:2f6062c6d018 101 bool connect;
gsfan 0:2f6062c6d018 102 Host host;
gsfan 0:2f6062c6d018 103 RingBuffer *data;
gsfan 1:b127c6c5241d 104 int lcid;
gsfan 0:2f6062c6d018 105 int received;
gsfan 0:2f6062c6d018 106 onGsReceiveFunc onGsReceive;
gsfan 0:2f6062c6d018 107 };
gsfan 0:2f6062c6d018 108
gsfan 0:2f6062c6d018 109 /**
gsfan 0:2f6062c6d018 110 * GSwifi class
gsfan 0:2f6062c6d018 111 */
gsfan 0:2f6062c6d018 112 class GSwifi {
gsfan 0:2f6062c6d018 113 public:
gsfan 0:2f6062c6d018 114 /**
gsfan 0:2f6062c6d018 115 * default constructor
gsfan 0:2f6062c6d018 116 */
gsfan 0:2f6062c6d018 117 GSwifi (PinName p_tx, PinName p_rx);
gsfan 0:2f6062c6d018 118 /**
gsfan 0:2f6062c6d018 119 * Default constructor (with hardware fllow controll)
gsfan 0:2f6062c6d018 120 */
gsfan 0:2f6062c6d018 121 GSwifi (PinName p_tx, PinName p_rx, PinName p_cts, PinName p_rts);
gsfan 0:2f6062c6d018 122 /**
gsfan 0:2f6062c6d018 123 * send command
gsfan 0:2f6062c6d018 124 */
gsfan 0:2f6062c6d018 125 int command (char *cmd, GSRESPONCE res, int timeout = GS_TIMEOUT);
gsfan 0:2f6062c6d018 126 /**
gsfan 0:2f6062c6d018 127 * recv responce
gsfan 0:2f6062c6d018 128 */
gsfan 0:2f6062c6d018 129 int cmdResponse (GSRESPONCE res, int ms);
gsfan 0:2f6062c6d018 130 /**
gsfan 0:2f6062c6d018 131 * associate infrastructure
gsfan 0:2f6062c6d018 132 * @param sec GSSEC_OPEN, GSSEC_WEP, GSSEC_WPA_PSK, GSSEC_WPA2_PSK, GSSEC_WPS_BUTTON
gsfan 2:c6e0e97901b3 133 * @param ssid SSID
gsfan 2:c6e0e97901b3 134 * @param pass pass phrase
gsfan 2:c6e0e97901b3 135 * @param dhcp 0:static ip, 1:dhcp
gsfan 2:c6e0e97901b3 136 * @retval 0 success
gsfan 2:c6e0e97901b3 137 * @retval -1 failure
gsfan 0:2f6062c6d018 138 */
gsfan 0:2f6062c6d018 139 int connect (GSSECURITY sec, char *ssid, char *pass, int dhcp = 1);
gsfan 0:2f6062c6d018 140 /**
gsfan 0:2f6062c6d018 141 * adhock
gsfan 0:2f6062c6d018 142 * @param sec GSSEC_OPEN or GSSEC_WEP
gsfan 2:c6e0e97901b3 143 * @param ssid SSID
gsfan 2:c6e0e97901b3 144 * @param pass 10 or 26 hexadecimal digits
gsfan 2:c6e0e97901b3 145 * @param ipaddr my ip address
gsfan 2:c6e0e97901b3 146 * @param netmask subnet mask
gsfan 2:c6e0e97901b3 147 * @retval 0 success
gsfan 2:c6e0e97901b3 148 * @retval -1 failure
gsfan 0:2f6062c6d018 149 */
gsfan 0:2f6062c6d018 150 int adhock (GSSECURITY sec, char *ssid, char *pass, IpAddr ipaddr, IpAddr netmask);
gsfan 0:2f6062c6d018 151 /**
gsfan 0:2f6062c6d018 152 * limited AP
gsfan 0:2f6062c6d018 153 * @param sec GSSEC_OPEN or GSSEC_WEP
gsfan 2:c6e0e97901b3 154 * @param ssid SSID
gsfan 0:2f6062c6d018 155 * @param pass 10 or 26 hexadecimal digits
gsfan 2:c6e0e97901b3 156 * @param ipaddr my ip address (dhcp start address)
gsfan 2:c6e0e97901b3 157 * @param netmask subnet mask
gsfan 2:c6e0e97901b3 158 * @retval 0 success
gsfan 2:c6e0e97901b3 159 * @retval -1 failure
gsfan 0:2f6062c6d018 160 * firmware: s2w-secureweb, s2w-web, s2w-wpsweb
gsfan 0:2f6062c6d018 161 */
gsfan 0:2f6062c6d018 162 int limitedap (GSSECURITY sec, char *ssid, char *pass, IpAddr ipaddr, IpAddr netmask);
gsfan 0:2f6062c6d018 163 /**
gsfan 0:2f6062c6d018 164 * unassociate
gsfan 0:2f6062c6d018 165 */
gsfan 0:2f6062c6d018 166 int disconnect ();
gsfan 0:2f6062c6d018 167
gsfan 0:2f6062c6d018 168 /**
gsfan 0:2f6062c6d018 169 * use DHCP
gsfan 0:2f6062c6d018 170 */
gsfan 0:2f6062c6d018 171 int setAddress ();
gsfan 0:2f6062c6d018 172 /**
gsfan 0:2f6062c6d018 173 * use static ip address
gsfan 0:2f6062c6d018 174 */
gsfan 0:2f6062c6d018 175 int setAddress (IpAddr ipaddr, IpAddr netmask, IpAddr gateway, IpAddr nameserver);
gsfan 0:2f6062c6d018 176 /**
gsfan 1:b127c6c5241d 177 * get ip address
gsfan 1:b127c6c5241d 178 */
gsfan 1:b127c6c5241d 179 int getAddress (IpAddr &ipaddr, IpAddr &netmask, IpAddr &gateway, IpAddr &nameserver);
gsfan 1:b127c6c5241d 180 /**
gsfan 0:2f6062c6d018 181 * resolv hostname
gsfan 2:c6e0e97901b3 182 * @param name hostname
gsfan 2:c6e0e97901b3 183 * @param addr resolved ip address
gsfan 2:c6e0e97901b3 184 * @retval 0 success
gsfan 2:c6e0e97901b3 185 * @retval -1 failure
gsfan 0:2f6062c6d018 186 */
gsfan 0:2f6062c6d018 187 int getHostByName (const char* name, IpAddr &addr);
gsfan 0:2f6062c6d018 188 /**
gsfan 0:2f6062c6d018 189 * resolv hostname
gsfan 2:c6e0e97901b3 190 * @param host.name hostname
gsfan 2:c6e0e97901b3 191 * @param host.ipaddr resolved ip address
gsfan 2:c6e0e97901b3 192 * @retval 0 success
gsfan 2:c6e0e97901b3 193 * @retval -1 failure
gsfan 0:2f6062c6d018 194 */
gsfan 0:2f6062c6d018 195 int getHostByName (Host &host);
gsfan 0:2f6062c6d018 196 /**
gsfan 0:2f6062c6d018 197 * RF power
gsfan 0:2f6062c6d018 198 * @param power 0(high)-7(low)
gsfan 0:2f6062c6d018 199 */
gsfan 0:2f6062c6d018 200 int setRFPower (int power);
gsfan 0:2f6062c6d018 201 /**
gsfan 0:2f6062c6d018 202 * power save mode
gsfan 2:c6e0e97901b3 203 * @param active 0:switched off, 1:always on
gsfan 2:c6e0e97901b3 204 * @param save 0:disable, 1:enable
gsfan 0:2f6062c6d018 205 */
gsfan 2:c6e0e97901b3 206 int powerSave (int active, int save);
gsfan 0:2f6062c6d018 207 /**
gsfan 0:2f6062c6d018 208 * standby mode
gsfan 0:2f6062c6d018 209 * @param msec wakeup after
gsfan 0:2f6062c6d018 210 * wakeup after msec or alarm1/2
gsfan 0:2f6062c6d018 211 * core off, save to RTC ram
gsfan 0:2f6062c6d018 212 */
gsfan 0:2f6062c6d018 213 int standby (int msec);
gsfan 0:2f6062c6d018 214 /**
gsfan 0:2f6062c6d018 215 * restore standby
gsfan 0:2f6062c6d018 216 */
gsfan 0:2f6062c6d018 217 int wakeup ();
gsfan 0:2f6062c6d018 218 /**
gsfan 0:2f6062c6d018 219 * deep sleep mode
gsfan 0:2f6062c6d018 220 */
gsfan 0:2f6062c6d018 221 int deepSleep ();
gsfan 0:2f6062c6d018 222 /**
gsfan 0:2f6062c6d018 223 * wifi connected
gsfan 0:2f6062c6d018 224 */
gsfan 0:2f6062c6d018 225 bool isConnected ();
gsfan 0:2f6062c6d018 226 /**
gsfan 0:2f6062c6d018 227 * status
gsfan 2:c6e0e97901b3 228 * @return GSSTATUS
gsfan 0:2f6062c6d018 229 */
gsfan 0:2f6062c6d018 230 GSSTATUS getStatus ();
gsfan 1:b127c6c5241d 231 /**
gsfan 2:c6e0e97901b3 232 * RSSI
gsfan 2:c6e0e97901b3 233 * @return dBm
gsfan 1:b127c6c5241d 234 */
gsfan 1:b127c6c5241d 235 int getRssi ();
gsfan 5:6def1d0df519 236 /**
gsfan 5:6def1d0df519 237 * set NTP server
gsfan 5:6def1d0df519 238 */
gsfan 5:6def1d0df519 239 int ntpdate (Host host, int sec = 0);
gsfan 5:6def1d0df519 240 /**
gsfan 5:6def1d0df519 241 * set RTC time
gsfan 5:6def1d0df519 242 */
gsfan 5:6def1d0df519 243 int setTime (time_t time);
gsfan 5:6def1d0df519 244 /*
gsfan 5:6def1d0df519 245 * get RTC time
gsfan 5:6def1d0df519 246 */
gsfan 5:6def1d0df519 247 time_t getTime ();
gsfan 0:2f6062c6d018 248
gsfan 0:2f6062c6d018 249 /**
gsfan 2:c6e0e97901b3 250 * main polling
gsfan 0:2f6062c6d018 251 */
gsfan 0:2f6062c6d018 252 void poll();
gsfan 0:2f6062c6d018 253
gsfan 0:2f6062c6d018 254 /**
gsfan 0:2f6062c6d018 255 * tcp/udp client
gsfan 0:2f6062c6d018 256 */
gsfan 0:2f6062c6d018 257 int open (Host &host, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL);
gsfan 0:2f6062c6d018 258 /**
gsfan 0:2f6062c6d018 259 * tcp/udp server
gsfan 0:2f6062c6d018 260 */
gsfan 0:2f6062c6d018 261 int listen (int port, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL);
gsfan 0:2f6062c6d018 262 /**
gsfan 0:2f6062c6d018 263 * close client/server
gsfan 0:2f6062c6d018 264 */
gsfan 0:2f6062c6d018 265 int close (int cid);
gsfan 0:2f6062c6d018 266 /**
gsfan 0:2f6062c6d018 267 * send data tcp(s/c), udp(c)
gsfan 0:2f6062c6d018 268 */
gsfan 0:2f6062c6d018 269 int send (int cid, char *buf, int len);
gsfan 0:2f6062c6d018 270 /**
gsfan 0:2f6062c6d018 271 * send data udp(s)
gsfan 0:2f6062c6d018 272 */
gsfan 0:2f6062c6d018 273 int send (int cid, char *buf, int len, Host &host);
gsfan 0:2f6062c6d018 274 /**
gsfan 0:2f6062c6d018 275 * recv data tcp(s/c), udp(c)
gsfan 0:2f6062c6d018 276 */
gsfan 0:2f6062c6d018 277 int recv (int cid, char *buf, int len);
gsfan 0:2f6062c6d018 278 /**
gsfan 0:2f6062c6d018 279 * recv data udp(s)
gsfan 0:2f6062c6d018 280 */
gsfan 0:2f6062c6d018 281 int recv (int cid, char *buf, int len, Host &host);
gsfan 0:2f6062c6d018 282 /**
gsfan 0:2f6062c6d018 283 * tcp/udp connected
gsfan 0:2f6062c6d018 284 */
gsfan 0:2f6062c6d018 285 bool isConnected (int cid);
gsfan 0:2f6062c6d018 286
gsfan 0:2f6062c6d018 287 /**
gsfan 0:2f6062c6d018 288 * http request
gsfan 0:2f6062c6d018 289 */
gsfan 0:2f6062c6d018 290 int httpGet (Host &host, char *uri, int ssl = 0, onGsReceiveFunc ponGsReceive = NULL);
gsfan 0:2f6062c6d018 291 /**
gsfan 0:2f6062c6d018 292 * certificate
gsfan 0:2f6062c6d018 293 */
gsfan 0:2f6062c6d018 294 int certAdd (char *name, char *cert, int len);
gsfan 0:2f6062c6d018 295
gsfan 0:2f6062c6d018 296 void test ();
gsfan 0:2f6062c6d018 297 int getc();
gsfan 0:2f6062c6d018 298 void putc(char c);
gsfan 0:2f6062c6d018 299 int readable();
gsfan 0:2f6062c6d018 300
gsfan 0:2f6062c6d018 301 protected:
gsfan 0:2f6062c6d018 302 int x2i (char c);
gsfan 0:2f6062c6d018 303 char i2x (int i);
gsfan 0:2f6062c6d018 304 void isr_recv ();
gsfan 2:c6e0e97901b3 305 void newSock (int cid, GSTYPE type, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive);
gsfan 0:2f6062c6d018 306
gsfan 0:2f6062c6d018 307 private:
gsfan 0:2f6062c6d018 308 Serial _gs;
gsfan 0:2f6062c6d018 309 bool _rts;
gsfan 0:2f6062c6d018 310 volatile bool _connect;
gsfan 0:2f6062c6d018 311 volatile GSSTATUS _status;
gsfan 0:2f6062c6d018 312 volatile int _gs_ok, _gs_failure, _gs_enter;
gsfan 0:2f6062c6d018 313 GSMODE _gs_mode;
gsfan 0:2f6062c6d018 314 int _escape;
gsfan 1:b127c6c5241d 315 int _cid, _rssi;
gsfan 0:2f6062c6d018 316 IpAddr _ipaddr, _netmask, _gateway, _nameserver, _resolv;
gsfan 0:2f6062c6d018 317 Host _from, _to;
gsfan 4:a8d38857f3fd 318 char _mac[6];
gsfan 0:2f6062c6d018 319 RingBuffer _buf_cmd;
gsfan 0:2f6062c6d018 320 struct GS_Socket _gs_sock[16];
gsfan 5:6def1d0df519 321 time_t _time;
gsfan 0:2f6062c6d018 322 };