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:
Thu Aug 16 05:01:19 2012 +0000
Revision:
6:a423f0d197de
Parent:
5:6def1d0df519
Child:
7:b75b7fc144ff
bugfix send

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 0:2f6062c6d018 184 */
gsfan 0:2f6062c6d018 185 int getHostByName (const char* name, IpAddr &addr);
gsfan 0:2f6062c6d018 186 /**
gsfan 0:2f6062c6d018 187 * resolv hostname
gsfan 2:c6e0e97901b3 188 * @param host.name hostname
gsfan 2:c6e0e97901b3 189 * @param host.ipaddr resolved ip address
gsfan 0:2f6062c6d018 190 */
gsfan 0:2f6062c6d018 191 int getHostByName (Host &host);
gsfan 0:2f6062c6d018 192 /**
gsfan 0:2f6062c6d018 193 * RF power
gsfan 0:2f6062c6d018 194 * @param power 0(high)-7(low)
gsfan 0:2f6062c6d018 195 */
gsfan 0:2f6062c6d018 196 int setRFPower (int power);
gsfan 0:2f6062c6d018 197 /**
gsfan 0:2f6062c6d018 198 * power save mode
gsfan 6:a423f0d197de 199 * @param active rx radio 0:switched off, 1:always on
gsfan 6:a423f0d197de 200 * @param save power save 0:disable, 1:enable
gsfan 0:2f6062c6d018 201 */
gsfan 2:c6e0e97901b3 202 int powerSave (int active, int save);
gsfan 0:2f6062c6d018 203 /**
gsfan 0:2f6062c6d018 204 * standby mode
gsfan 0:2f6062c6d018 205 * @param msec wakeup after
gsfan 0:2f6062c6d018 206 * wakeup after msec or alarm1/2
gsfan 0:2f6062c6d018 207 * core off, save to RTC ram
gsfan 0:2f6062c6d018 208 */
gsfan 0:2f6062c6d018 209 int standby (int msec);
gsfan 0:2f6062c6d018 210 /**
gsfan 0:2f6062c6d018 211 * restore standby
gsfan 0:2f6062c6d018 212 */
gsfan 0:2f6062c6d018 213 int wakeup ();
gsfan 0:2f6062c6d018 214 /**
gsfan 0:2f6062c6d018 215 * deep sleep mode
gsfan 0:2f6062c6d018 216 */
gsfan 0:2f6062c6d018 217 int deepSleep ();
gsfan 0:2f6062c6d018 218 /**
gsfan 0:2f6062c6d018 219 * wifi connected
gsfan 0:2f6062c6d018 220 */
gsfan 0:2f6062c6d018 221 bool isConnected ();
gsfan 0:2f6062c6d018 222 /**
gsfan 0:2f6062c6d018 223 * status
gsfan 2:c6e0e97901b3 224 * @return GSSTATUS
gsfan 0:2f6062c6d018 225 */
gsfan 0:2f6062c6d018 226 GSSTATUS getStatus ();
gsfan 1:b127c6c5241d 227 /**
gsfan 2:c6e0e97901b3 228 * RSSI
gsfan 6:a423f0d197de 229 * @return RSSI (dBm)
gsfan 1:b127c6c5241d 230 */
gsfan 1:b127c6c5241d 231 int getRssi ();
gsfan 5:6def1d0df519 232 /**
gsfan 5:6def1d0df519 233 * set NTP server
gsfan 6:a423f0d197de 234 * @param host SNTP server
gsfan 6:a423f0d197de 235 * @param sec time sync interval, 0:one time
gsfan 5:6def1d0df519 236 */
gsfan 5:6def1d0df519 237 int ntpdate (Host host, int sec = 0);
gsfan 5:6def1d0df519 238 /**
gsfan 6:a423f0d197de 239 * set system time
gsfan 6:a423f0d197de 240 * @param time date time (UTC)
gsfan 5:6def1d0df519 241 */
gsfan 5:6def1d0df519 242 int setTime (time_t time);
gsfan 6:a423f0d197de 243 /**
gsfan 5:6def1d0df519 244 * get RTC time
gsfan 6:a423f0d197de 245 * @return date time (UTC)
gsfan 5:6def1d0df519 246 */
gsfan 5:6def1d0df519 247 time_t getTime ();
gsfan 6:a423f0d197de 248 /**
gsfan 6:a423f0d197de 249 * GPIO output
gsfan 6:a423f0d197de 250 * @param port 10,11,30,31
gsfan 6:a423f0d197de 251 * @param out 0:set(high), 1:reset(low)
gsfan 6:a423f0d197de 252 */
gsfan 6:a423f0d197de 253 int gpioOut (int port, int out);
gsfan 0:2f6062c6d018 254
gsfan 0:2f6062c6d018 255 /**
gsfan 2:c6e0e97901b3 256 * main polling
gsfan 0:2f6062c6d018 257 */
gsfan 0:2f6062c6d018 258 void poll();
gsfan 0:2f6062c6d018 259
gsfan 0:2f6062c6d018 260 /**
gsfan 0:2f6062c6d018 261 * tcp/udp client
gsfan 6:a423f0d197de 262 * @return CID, -1:failure
gsfan 0:2f6062c6d018 263 */
gsfan 0:2f6062c6d018 264 int open (Host &host, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL);
gsfan 0:2f6062c6d018 265 /**
gsfan 0:2f6062c6d018 266 * tcp/udp server
gsfan 6:a423f0d197de 267 * @return CID, -1:failure
gsfan 0:2f6062c6d018 268 */
gsfan 0:2f6062c6d018 269 int listen (int port, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL);
gsfan 0:2f6062c6d018 270 /**
gsfan 0:2f6062c6d018 271 * close client/server
gsfan 0:2f6062c6d018 272 */
gsfan 0:2f6062c6d018 273 int close (int cid);
gsfan 0:2f6062c6d018 274 /**
gsfan 0:2f6062c6d018 275 * send data tcp(s/c), udp(c)
gsfan 0:2f6062c6d018 276 */
gsfan 0:2f6062c6d018 277 int send (int cid, char *buf, int len);
gsfan 0:2f6062c6d018 278 /**
gsfan 0:2f6062c6d018 279 * send data udp(s)
gsfan 0:2f6062c6d018 280 */
gsfan 0:2f6062c6d018 281 int send (int cid, char *buf, int len, Host &host);
gsfan 0:2f6062c6d018 282 /**
gsfan 0:2f6062c6d018 283 * recv data tcp(s/c), udp(c)
gsfan 6:a423f0d197de 284 * @return length
gsfan 0:2f6062c6d018 285 */
gsfan 0:2f6062c6d018 286 int recv (int cid, char *buf, int len);
gsfan 0:2f6062c6d018 287 /**
gsfan 0:2f6062c6d018 288 * recv data udp(s)
gsfan 6:a423f0d197de 289 * @return length
gsfan 0:2f6062c6d018 290 */
gsfan 0:2f6062c6d018 291 int recv (int cid, char *buf, int len, Host &host);
gsfan 0:2f6062c6d018 292 /**
gsfan 0:2f6062c6d018 293 * tcp/udp connected
gsfan 0:2f6062c6d018 294 */
gsfan 0:2f6062c6d018 295 bool isConnected (int cid);
gsfan 0:2f6062c6d018 296
gsfan 0:2f6062c6d018 297 /**
gsfan 0:2f6062c6d018 298 * http request
gsfan 6:a423f0d197de 299 * @return CID, -1:failure
gsfan 6:a423f0d197de 300 * If you use ssl, please set system time.
gsfan 0:2f6062c6d018 301 */
gsfan 0:2f6062c6d018 302 int httpGet (Host &host, char *uri, int ssl = 0, onGsReceiveFunc ponGsReceive = NULL);
gsfan 0:2f6062c6d018 303 /**
gsfan 0:2f6062c6d018 304 * certificate
gsfan 0:2f6062c6d018 305 */
gsfan 0:2f6062c6d018 306 int certAdd (char *name, char *cert, int len);
gsfan 0:2f6062c6d018 307
gsfan 0:2f6062c6d018 308 void test ();
gsfan 0:2f6062c6d018 309 int getc();
gsfan 0:2f6062c6d018 310 void putc(char c);
gsfan 0:2f6062c6d018 311 int readable();
gsfan 0:2f6062c6d018 312
gsfan 0:2f6062c6d018 313 protected:
gsfan 0:2f6062c6d018 314 int x2i (char c);
gsfan 0:2f6062c6d018 315 char i2x (int i);
gsfan 0:2f6062c6d018 316 void isr_recv ();
gsfan 2:c6e0e97901b3 317 void newSock (int cid, GSTYPE type, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive);
gsfan 0:2f6062c6d018 318
gsfan 0:2f6062c6d018 319 private:
gsfan 0:2f6062c6d018 320 Serial _gs;
gsfan 0:2f6062c6d018 321 bool _rts;
gsfan 0:2f6062c6d018 322 volatile bool _connect;
gsfan 0:2f6062c6d018 323 volatile GSSTATUS _status;
gsfan 0:2f6062c6d018 324 volatile int _gs_ok, _gs_failure, _gs_enter;
gsfan 0:2f6062c6d018 325 GSMODE _gs_mode;
gsfan 0:2f6062c6d018 326 int _escape;
gsfan 1:b127c6c5241d 327 int _cid, _rssi;
gsfan 0:2f6062c6d018 328 IpAddr _ipaddr, _netmask, _gateway, _nameserver, _resolv;
gsfan 0:2f6062c6d018 329 Host _from, _to;
gsfan 4:a8d38857f3fd 330 char _mac[6];
gsfan 0:2f6062c6d018 331 RingBuffer _buf_cmd;
gsfan 0:2f6062c6d018 332 struct GS_Socket _gs_sock[16];
gsfan 5:6def1d0df519 333 time_t _time;
gsfan 0:2f6062c6d018 334 };