GainSpan Wi-Fi library see: http://mbed.org/users/gsfan/notebook/gainspan_wifi/

Fork of GSwifi_old 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/

Information

Please change the baud rate in advance.

  • ATB=115200
  • AT&W0

It may be better and sometimes faster.
GSwifi gs(p13, p14, baud);

Heavily modified new library: http://mbed.org/users/gsfan/code/GSwifi

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

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

解説: http://mbed.org/users/gsfan/notebook/gainspan_wifi/

Information

モジュールはあらかじめ次のコマンドでボーレートを変更しておく。

  • ATB=115200
  • AT&W0

場合によってはもっと高速の方がいいかもしれない。クラス宣言時にレート設定をする。
GSwifi gs(p13, p14, baud);

大幅に更新された新しいライブラリ: http://mbed.org/users/gsfan/code/GSwifi

Committer:
gsfan
Date:
Wed Jan 23 07:41:23 2013 +0000
Revision:
24:5c350ae2e703
Parent:
23:a783c62c36d0
auto re-connect

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 7:b75b7fc144ff 13 #ifndef _GSWIFI_H_
gsfan 7:b75b7fc144ff 14 #define _GSWIFI_H_
gsfan 7:b75b7fc144ff 15
gsfan 0:2f6062c6d018 16 #include "mbed.h"
gsfan 18:4b97804c37d1 17 #include "GSwifi_net.h"
gsfan 0:2f6062c6d018 18 #include "RingBuffer.h"
gsfan 0:2f6062c6d018 19 #include "host.h"
gsfan 0:2f6062c6d018 20 #include "ipaddr.h"
gsfan 0:2f6062c6d018 21
gsfan 0:2f6062c6d018 22 #define GS_BAUD 115200
gsfan 0:2f6062c6d018 23
gsfan 22:9b077e2823ce 24 #define GS_UART_DIRECT
gsfan 0:2f6062c6d018 25 #define GS_BULK
gsfan 0:2f6062c6d018 26
gsfan 22:9b077e2823ce 27 #define GS_DNSNAME "setup.local"
gsfan 22:9b077e2823ce 28 #define GS_WREGDOMAIN "2" // 0:FCC, 1:ETSI, 2:TELEC
gsfan 22:9b077e2823ce 29
gsfan 0:2f6062c6d018 30 #define GS_TIMEOUT 10000 // ms
gsfan 0:2f6062c6d018 31 #define GS_TIMEOUT2 30000 // ms
gsfan 0:2f6062c6d018 32 #define GS_CMD_SIZE 100
gsfan 0:2f6062c6d018 33 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
gsfan 18:4b97804c37d1 34 //#define GS_DATA_SIZE 1500
gsfan 18:4b97804c37d1 35 #define GS_DATA_SIZE 1000
gsfan 0:2f6062c6d018 36 #elif defined(TARGET_LPC11U24)
gsfan 16:aea56cce3bf5 37 #define GS_DATA_SIZE 500
gsfan 0:2f6062c6d018 38 #endif
gsfan 0:2f6062c6d018 39
gsfan 23:a783c62c36d0 40 #ifdef GS_UART_DIRECT
gsfan 23:a783c62c36d0 41 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
gsfan 23:a783c62c36d0 42 #define _gs_getc() LPC_UART1->RBR
gsfan 23:a783c62c36d0 43 #define _gs_putc(c) while(!(LPC_UART1->LSR & (1<<5))); LPC_UART1->THR = c
gsfan 23:a783c62c36d0 44 #elif defined(TARGET_LPC11U24)
gsfan 23:a783c62c36d0 45 #define _gs_getc() LPC_USART->RBR
gsfan 23:a783c62c36d0 46 #define _gs_putc(c) while(!(LPC_USART->LSR & (1<<5))); LPC_USART->THR = c
gsfan 23:a783c62c36d0 47 #endif
gsfan 23:a783c62c36d0 48 #else
gsfan 23:a783c62c36d0 49 #define _gs_getc() _gs.getc()
gsfan 23:a783c62c36d0 50 #define _gs_putc(c) _gs.putc(c)
gsfan 23:a783c62c36d0 51 #endif
gsfan 23:a783c62c36d0 52
gsfan 0:2f6062c6d018 53 /**
gsfan 0:2f6062c6d018 54 * Wi-Fi security
gsfan 0:2f6062c6d018 55 */
gsfan 0:2f6062c6d018 56 enum GSSECURITY {
gsfan 0:2f6062c6d018 57 GSSEC_AUTO = 0,
gsfan 0:2f6062c6d018 58 GSSEC_NONE = 0,
gsfan 0:2f6062c6d018 59 GSSEC_OPEN = 1,
gsfan 0:2f6062c6d018 60 GSSEC_WEP = 2,
gsfan 0:2f6062c6d018 61 GSSEC_WPA_PSK = 4,
gsfan 0:2f6062c6d018 62 GSSEC_WPA2_PSK = 8,
gsfan 0:2f6062c6d018 63 GSSEC_WPA_ENT = 16,
gsfan 0:2f6062c6d018 64 GSSEC_WPA2_ENT = 32,
gsfan 0:2f6062c6d018 65 GSSEC_WPS_BUTTON = 64,
gsfan 0:2f6062c6d018 66 };
gsfan 0:2f6062c6d018 67
gsfan 0:2f6062c6d018 68 /**
gsfan 0:2f6062c6d018 69 * TCP/IP protocol
gsfan 0:2f6062c6d018 70 */
gsfan 0:2f6062c6d018 71 enum GSPROTOCOL {
gsfan 0:2f6062c6d018 72 GSPROT_UDP = 0,
gsfan 0:2f6062c6d018 73 GSPROT_TCP = 1,
gsfan 0:2f6062c6d018 74 GSPROT_HTTPGET,
gsfan 0:2f6062c6d018 75 GSPROT_HTTPPOST,
gsfan 18:4b97804c37d1 76 GSPROT_HTTPD,
gsfan 0:2f6062c6d018 77 };
gsfan 0:2f6062c6d018 78
gsfan 0:2f6062c6d018 79 /**
gsfan 0:2f6062c6d018 80 * Client/Server
gsfan 0:2f6062c6d018 81 */
gsfan 0:2f6062c6d018 82 enum GSTYPE {
gsfan 0:2f6062c6d018 83 GSTYPE_CLIENT = 0,
gsfan 0:2f6062c6d018 84 GSTYPE_SERVER = 1,
gsfan 0:2f6062c6d018 85 };
gsfan 0:2f6062c6d018 86
gsfan 0:2f6062c6d018 87 enum GSRESPONCE {
gsfan 23:a783c62c36d0 88 GSRES_NONE,
gsfan 0:2f6062c6d018 89 GSRES_NORMAL,
gsfan 0:2f6062c6d018 90 GSRES_CONNECT,
gsfan 0:2f6062c6d018 91 GSRES_WPS,
gsfan 0:2f6062c6d018 92 GSRES_MACADDRESS,
gsfan 0:2f6062c6d018 93 GSRES_DHCP,
gsfan 0:2f6062c6d018 94 GSRES_DNSLOOKUP,
gsfan 0:2f6062c6d018 95 GSRES_HTTP,
gsfan 1:b127c6c5241d 96 GSRES_RSSI,
gsfan 5:6def1d0df519 97 GSRES_TIME,
gsfan 0:2f6062c6d018 98 };
gsfan 0:2f6062c6d018 99
gsfan 0:2f6062c6d018 100 enum GSMODE {
gsfan 0:2f6062c6d018 101 GSMODE_COMMAND,
gsfan 0:2f6062c6d018 102 GSMODE_DATA_RX,
gsfan 0:2f6062c6d018 103 GSMODE_DATA_RXUDP,
gsfan 0:2f6062c6d018 104 GSMODE_DATA_RX_BULK,
gsfan 0:2f6062c6d018 105 GSMODE_DATA_RXUDP_BULK,
gsfan 0:2f6062c6d018 106 GSMODE_DATA_RXHTTP,
gsfan 0:2f6062c6d018 107 };
gsfan 0:2f6062c6d018 108
gsfan 0:2f6062c6d018 109 enum GSSTATUS {
gsfan 0:2f6062c6d018 110 GSSTAT_READY,
gsfan 0:2f6062c6d018 111 GSSTAT_STANDBY,
gsfan 0:2f6062c6d018 112 GSSTAT_WAKEUP,
gsfan 0:2f6062c6d018 113 GSSTAT_DEEPSLEEP,
gsfan 0:2f6062c6d018 114 };
gsfan 0:2f6062c6d018 115
gsfan 0:2f6062c6d018 116 /**
gsfan 0:2f6062c6d018 117 * data receive callback function
gsfan 0:2f6062c6d018 118 */
gsfan 1:b127c6c5241d 119 typedef void (*onGsReceiveFunc)(int cid, int len);
gsfan 0:2f6062c6d018 120
gsfan 0:2f6062c6d018 121 struct GS_Socket {
gsfan 0:2f6062c6d018 122 GSTYPE type;
gsfan 0:2f6062c6d018 123 GSPROTOCOL protocol;
gsfan 0:2f6062c6d018 124 bool connect;
gsfan 0:2f6062c6d018 125 Host host;
gsfan 0:2f6062c6d018 126 RingBuffer *data;
gsfan 1:b127c6c5241d 127 int lcid;
gsfan 0:2f6062c6d018 128 int received;
gsfan 0:2f6062c6d018 129 onGsReceiveFunc onGsReceive;
gsfan 0:2f6062c6d018 130 };
gsfan 0:2f6062c6d018 131
gsfan 0:2f6062c6d018 132 /**
gsfan 0:2f6062c6d018 133 * GSwifi class
gsfan 0:2f6062c6d018 134 */
gsfan 0:2f6062c6d018 135 class GSwifi {
gsfan 0:2f6062c6d018 136 public:
gsfan 0:2f6062c6d018 137 /**
gsfan 0:2f6062c6d018 138 * default constructor
gsfan 0:2f6062c6d018 139 */
gsfan 10:698c5e96b5b1 140 GSwifi (PinName p_tx, PinName p_rx, int baud = GS_BAUD);
gsfan 0:2f6062c6d018 141 /**
gsfan 0:2f6062c6d018 142 * Default constructor (with hardware fllow controll)
gsfan 0:2f6062c6d018 143 */
gsfan 10:698c5e96b5b1 144 GSwifi (PinName p_tx, PinName p_rx, PinName p_cts, PinName p_rts, int baud = GS_BAUD);
gsfan 0:2f6062c6d018 145 /**
gsfan 0:2f6062c6d018 146 * send command
gsfan 0:2f6062c6d018 147 */
gsfan 12:63e714550791 148 int command (const char *cmd, GSRESPONCE res, int timeout = GS_TIMEOUT);
gsfan 0:2f6062c6d018 149 /**
gsfan 0:2f6062c6d018 150 * recv responce
gsfan 0:2f6062c6d018 151 */
gsfan 0:2f6062c6d018 152 int cmdResponse (GSRESPONCE res, int ms);
gsfan 0:2f6062c6d018 153 /**
gsfan 0:2f6062c6d018 154 * associate infrastructure
gsfan 0:2f6062c6d018 155 * @param sec GSSEC_OPEN, GSSEC_WEP, GSSEC_WPA_PSK, GSSEC_WPA2_PSK, GSSEC_WPS_BUTTON
gsfan 2:c6e0e97901b3 156 * @param ssid SSID
gsfan 2:c6e0e97901b3 157 * @param pass pass phrase
gsfan 2:c6e0e97901b3 158 * @param dhcp 0:static ip, 1:dhcp
gsfan 24:5c350ae2e703 159 * @param reconnect auto re-connect
gsfan 2:c6e0e97901b3 160 * @retval 0 success
gsfan 2:c6e0e97901b3 161 * @retval -1 failure
gsfan 0:2f6062c6d018 162 */
gsfan 24:5c350ae2e703 163 int connect (GSSECURITY sec, const char *ssid, const char *pass, int dhcp = 1, int reconnect = 0);
gsfan 0:2f6062c6d018 164 /**
gsfan 0:2f6062c6d018 165 * adhock
gsfan 0:2f6062c6d018 166 * @param sec GSSEC_OPEN or GSSEC_WEP
gsfan 2:c6e0e97901b3 167 * @param ssid SSID
gsfan 2:c6e0e97901b3 168 * @param pass 10 or 26 hexadecimal digits
gsfan 2:c6e0e97901b3 169 * @param ipaddr my ip address
gsfan 2:c6e0e97901b3 170 * @param netmask subnet mask
gsfan 2:c6e0e97901b3 171 * @retval 0 success
gsfan 2:c6e0e97901b3 172 * @retval -1 failure
gsfan 0:2f6062c6d018 173 */
gsfan 19:cad912f5a6ba 174 int adhock (GSSECURITY sec, const char *ssid, const char *pass, IpAddr ipaddr, IpAddr netmask);
gsfan 0:2f6062c6d018 175 /**
gsfan 0:2f6062c6d018 176 * limited AP
gsfan 0:2f6062c6d018 177 * @param sec GSSEC_OPEN or GSSEC_WEP
gsfan 2:c6e0e97901b3 178 * @param ssid SSID
gsfan 0:2f6062c6d018 179 * @param pass 10 or 26 hexadecimal digits
gsfan 2:c6e0e97901b3 180 * @param ipaddr my ip address (dhcp start address)
gsfan 2:c6e0e97901b3 181 * @param netmask subnet mask
gsfan 2:c6e0e97901b3 182 * @retval 0 success
gsfan 2:c6e0e97901b3 183 * @retval -1 failure
gsfan 0:2f6062c6d018 184 * firmware: s2w-secureweb, s2w-web, s2w-wpsweb
gsfan 0:2f6062c6d018 185 */
gsfan 22:9b077e2823ce 186 int limitedap (GSSECURITY sec, const char *ssid, const char *pass, IpAddr ipaddr, IpAddr netmask, char *dns = NULL);
gsfan 0:2f6062c6d018 187 /**
gsfan 0:2f6062c6d018 188 * unassociate
gsfan 0:2f6062c6d018 189 */
gsfan 0:2f6062c6d018 190 int disconnect ();
gsfan 0:2f6062c6d018 191
gsfan 0:2f6062c6d018 192 /**
gsfan 0:2f6062c6d018 193 * use DHCP
gsfan 0:2f6062c6d018 194 */
gsfan 0:2f6062c6d018 195 int setAddress ();
gsfan 0:2f6062c6d018 196 /**
gsfan 0:2f6062c6d018 197 * use static ip address
gsfan 0:2f6062c6d018 198 */
gsfan 0:2f6062c6d018 199 int setAddress (IpAddr ipaddr, IpAddr netmask, IpAddr gateway, IpAddr nameserver);
gsfan 0:2f6062c6d018 200 /**
gsfan 1:b127c6c5241d 201 * get ip address
gsfan 1:b127c6c5241d 202 */
gsfan 1:b127c6c5241d 203 int getAddress (IpAddr &ipaddr, IpAddr &netmask, IpAddr &gateway, IpAddr &nameserver);
gsfan 1:b127c6c5241d 204 /**
gsfan 0:2f6062c6d018 205 * resolv hostname
gsfan 2:c6e0e97901b3 206 * @param name hostname
gsfan 2:c6e0e97901b3 207 * @param addr resolved ip address
gsfan 0:2f6062c6d018 208 */
gsfan 0:2f6062c6d018 209 int getHostByName (const char* name, IpAddr &addr);
gsfan 0:2f6062c6d018 210 /**
gsfan 0:2f6062c6d018 211 * resolv hostname
gsfan 2:c6e0e97901b3 212 * @param host.name hostname
gsfan 2:c6e0e97901b3 213 * @param host.ipaddr resolved ip address
gsfan 0:2f6062c6d018 214 */
gsfan 0:2f6062c6d018 215 int getHostByName (Host &host);
gsfan 0:2f6062c6d018 216 /**
gsfan 0:2f6062c6d018 217 * RF power
gsfan 0:2f6062c6d018 218 * @param power 0(high)-7(low)
gsfan 0:2f6062c6d018 219 */
gsfan 0:2f6062c6d018 220 int setRFPower (int power);
gsfan 0:2f6062c6d018 221 /**
gsfan 0:2f6062c6d018 222 * power save mode
gsfan 6:a423f0d197de 223 * @param active rx radio 0:switched off, 1:always on
gsfan 6:a423f0d197de 224 * @param save power save 0:disable, 1:enable
gsfan 0:2f6062c6d018 225 */
gsfan 2:c6e0e97901b3 226 int powerSave (int active, int save);
gsfan 0:2f6062c6d018 227 /**
gsfan 0:2f6062c6d018 228 * standby mode
gsfan 0:2f6062c6d018 229 * @param msec wakeup after
gsfan 0:2f6062c6d018 230 * wakeup after msec or alarm1/2
gsfan 0:2f6062c6d018 231 * core off, save to RTC ram
gsfan 0:2f6062c6d018 232 */
gsfan 0:2f6062c6d018 233 int standby (int msec);
gsfan 0:2f6062c6d018 234 /**
gsfan 0:2f6062c6d018 235 * restore standby
gsfan 0:2f6062c6d018 236 */
gsfan 0:2f6062c6d018 237 int wakeup ();
gsfan 0:2f6062c6d018 238 /**
gsfan 0:2f6062c6d018 239 * deep sleep mode
gsfan 0:2f6062c6d018 240 */
gsfan 0:2f6062c6d018 241 int deepSleep ();
gsfan 0:2f6062c6d018 242 /**
gsfan 0:2f6062c6d018 243 * wifi connected
gsfan 0:2f6062c6d018 244 */
gsfan 0:2f6062c6d018 245 bool isConnected ();
gsfan 0:2f6062c6d018 246 /**
gsfan 0:2f6062c6d018 247 * status
gsfan 2:c6e0e97901b3 248 * @return GSSTATUS
gsfan 0:2f6062c6d018 249 */
gsfan 0:2f6062c6d018 250 GSSTATUS getStatus ();
gsfan 1:b127c6c5241d 251 /**
gsfan 2:c6e0e97901b3 252 * RSSI
gsfan 6:a423f0d197de 253 * @return RSSI (dBm)
gsfan 1:b127c6c5241d 254 */
gsfan 1:b127c6c5241d 255 int getRssi ();
gsfan 5:6def1d0df519 256 /**
gsfan 5:6def1d0df519 257 * set NTP server
gsfan 6:a423f0d197de 258 * @param host SNTP server
gsfan 6:a423f0d197de 259 * @param sec time sync interval, 0:one time
gsfan 5:6def1d0df519 260 */
gsfan 5:6def1d0df519 261 int ntpdate (Host host, int sec = 0);
gsfan 5:6def1d0df519 262 /**
gsfan 6:a423f0d197de 263 * set system time
gsfan 6:a423f0d197de 264 * @param time date time (UTC)
gsfan 5:6def1d0df519 265 */
gsfan 5:6def1d0df519 266 int setTime (time_t time);
gsfan 6:a423f0d197de 267 /**
gsfan 5:6def1d0df519 268 * get RTC time
gsfan 6:a423f0d197de 269 * @return date time (UTC)
gsfan 5:6def1d0df519 270 */
gsfan 5:6def1d0df519 271 time_t getTime ();
gsfan 6:a423f0d197de 272 /**
gsfan 6:a423f0d197de 273 * GPIO output
gsfan 6:a423f0d197de 274 * @param port 10,11,30,31
gsfan 6:a423f0d197de 275 * @param out 0:set(high), 1:reset(low)
gsfan 6:a423f0d197de 276 */
gsfan 6:a423f0d197de 277 int gpioOut (int port, int out);
gsfan 0:2f6062c6d018 278
gsfan 0:2f6062c6d018 279 /**
gsfan 2:c6e0e97901b3 280 * main polling
gsfan 0:2f6062c6d018 281 */
gsfan 0:2f6062c6d018 282 void poll();
gsfan 0:2f6062c6d018 283
gsfan 0:2f6062c6d018 284 /**
gsfan 0:2f6062c6d018 285 * tcp/udp client
gsfan 6:a423f0d197de 286 * @return CID, -1:failure
gsfan 0:2f6062c6d018 287 */
gsfan 0:2f6062c6d018 288 int open (Host &host, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL);
gsfan 0:2f6062c6d018 289 /**
gsfan 0:2f6062c6d018 290 * tcp/udp server
gsfan 6:a423f0d197de 291 * @return CID, -1:failure
gsfan 0:2f6062c6d018 292 */
gsfan 0:2f6062c6d018 293 int listen (int port, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL);
gsfan 18:4b97804c37d1 294 /*
gsfan 18:4b97804c37d1 295 template<typename T>
gsfan 18:4b97804c37d1 296 int listen2 (T* tptr, int port, GSPROTOCOL pro, void (T::*mptr)(int,int)) {
gsfan 18:4b97804c37d1 297 if((mptr != NULL) && (tptr != NULL)) {
gsfan 18:4b97804c37d1 298 return listen(port, pro, reinterpret_cast<onGsReceiveFunc>(mptr));
gsfan 18:4b97804c37d1 299 }
gsfan 18:4b97804c37d1 300 }
gsfan 18:4b97804c37d1 301 */
gsfan 0:2f6062c6d018 302 /**
gsfan 0:2f6062c6d018 303 * close client/server
gsfan 0:2f6062c6d018 304 */
gsfan 0:2f6062c6d018 305 int close (int cid);
gsfan 0:2f6062c6d018 306 /**
gsfan 0:2f6062c6d018 307 * send data tcp(s/c), udp(c)
gsfan 0:2f6062c6d018 308 */
gsfan 19:cad912f5a6ba 309 int send (int cid, const char *buf, int len);
gsfan 0:2f6062c6d018 310 /**
gsfan 0:2f6062c6d018 311 * send data udp(s)
gsfan 0:2f6062c6d018 312 */
gsfan 19:cad912f5a6ba 313 int send (int cid, const char *buf, int len, Host &host);
gsfan 0:2f6062c6d018 314 /**
gsfan 0:2f6062c6d018 315 * recv data tcp(s/c), udp(c)
gsfan 6:a423f0d197de 316 * @return length
gsfan 0:2f6062c6d018 317 */
gsfan 0:2f6062c6d018 318 int recv (int cid, char *buf, int len);
gsfan 0:2f6062c6d018 319 /**
gsfan 0:2f6062c6d018 320 * recv data udp(s)
gsfan 6:a423f0d197de 321 * @return length
gsfan 0:2f6062c6d018 322 */
gsfan 0:2f6062c6d018 323 int recv (int cid, char *buf, int len, Host &host);
gsfan 0:2f6062c6d018 324 /**
gsfan 0:2f6062c6d018 325 * tcp/udp connected
gsfan 0:2f6062c6d018 326 */
gsfan 0:2f6062c6d018 327 bool isConnected (int cid);
gsfan 0:2f6062c6d018 328
gsfan 0:2f6062c6d018 329 /**
gsfan 18:4b97804c37d1 330 * http request (GET method)
gsfan 0:2f6062c6d018 331 */
gsfan 19:cad912f5a6ba 332 int httpGet (Host &host, const char *uri, const char *user, const char *pwd, int ssl = 0, onGsReceiveFunc ponGsReceive = NULL);
gsfan 19:cad912f5a6ba 333 int httpGet (Host &host, const char *uri, int ssl = 0, onGsReceiveFunc ponGsReceive = NULL);
gsfan 0:2f6062c6d018 334 /**
gsfan 18:4b97804c37d1 335 * http request (POST method)
gsfan 15:5febfc399099 336 */
gsfan 19:cad912f5a6ba 337 int httpPost (Host &host, const char *uri, const char *body, const char *user, const char *pwd, int ssl = 0, onGsReceiveFunc ponGsReceive = NULL);
gsfan 19:cad912f5a6ba 338 int httpPost (Host &host, const char *uri, const char *body, int ssl = 0, onGsReceiveFunc ponGsReceive = NULL);
gsfan 18:4b97804c37d1 339
gsfan 15:5febfc399099 340 /**
gsfan 0:2f6062c6d018 341 * certificate
gsfan 0:2f6062c6d018 342 */
gsfan 19:cad912f5a6ba 343 int certAdd (const char *name, const char *cert, int len);
gsfan 0:2f6062c6d018 344
gsfan 20:151b5a4fdd29 345 #ifdef GS_USE_SMTP
gsfan 18:4b97804c37d1 346 /**
gsfan 18:4b97804c37d1 347 * send mail (smtp)
gsfan 18:4b97804c37d1 348 * @param host SMTP server
gsfan 18:4b97804c37d1 349 * @param to To address
gsfan 18:4b97804c37d1 350 * @param from From address
gsfan 18:4b97804c37d1 351 * @param subject Subject
gsfan 18:4b97804c37d1 352 * @param mesg Message
gsfan 18:4b97804c37d1 353 * @param user username (SMTP Auth)
gsfan 18:4b97804c37d1 354 * @param pwd password (SMTP Auth)
gsfan 18:4b97804c37d1 355 * @retval 0 success
gsfan 18:4b97804c37d1 356 * @retval -1 failure
gsfan 18:4b97804c37d1 357 */
gsfan 19:cad912f5a6ba 358 int mail (Host &host, const char *to, const char *from, const char *subject, const char *mesg, const char *user = NULL, const char *pwd = NULL);
gsfan 20:151b5a4fdd29 359 #endif
gsfan 18:4b97804c37d1 360
gsfan 20:151b5a4fdd29 361 #ifdef GS_USE_HTTPD
gsfan 18:4b97804c37d1 362 /**
gsfan 18:4b97804c37d1 363 * start http server
gsfan 18:4b97804c37d1 364 * @param port
gsfan 18:4b97804c37d1 365 */
gsfan 18:4b97804c37d1 366 int httpd (int port = 80);
gsfan 18:4b97804c37d1 367 /**
gsfan 18:4b97804c37d1 368 * attach uri to dirctory handler
gsfan 18:4b97804c37d1 369 */
gsfan 18:4b97804c37d1 370 void send_httpd_error (int cid, int err);
gsfan 18:4b97804c37d1 371 /**
gsfan 18:4b97804c37d1 372 * attach uri to dirctory handler
gsfan 18:4b97804c37d1 373 */
gsfan 19:cad912f5a6ba 374 int attach_httpd (const char *uri, const char *dir);
gsfan 18:4b97804c37d1 375 /**
gsfan 18:4b97804c37d1 376 * attach uri to cgi handler
gsfan 18:4b97804c37d1 377 */
gsfan 19:cad912f5a6ba 378 int attach_httpd (const char *uri, onHttpdCgiFunc ponHttpCgi);
gsfan 23:a783c62c36d0 379 #ifdef GS_USE_WEBSOCKET
gsfan 23:a783c62c36d0 380 int send_websocket (int cid, const char *buf, int len);
gsfan 23:a783c62c36d0 381 #endif
gsfan 20:151b5a4fdd29 382 #endif
gsfan 18:4b97804c37d1 383
gsfan 18:4b97804c37d1 384 /**
gsfan 22:9b077e2823ce 385 * Web server
gsfan 22:9b077e2823ce 386 */
gsfan 22:9b077e2823ce 387 int provisioning (char *user, char *pass);
gsfan 22:9b077e2823ce 388 /**
gsfan 22:9b077e2823ce 389 * change baud rate
gsfan 22:9b077e2823ce 390 */
gsfan 22:9b077e2823ce 391 int setBaud (int baud);
gsfan 22:9b077e2823ce 392 /**
gsfan 18:4b97804c37d1 393 * base64 encode
gsfan 18:4b97804c37d1 394 */
gsfan 19:cad912f5a6ba 395 int base64encode (char *input, int length, char *output, int len);
gsfan 18:4b97804c37d1 396 /**
gsfan 18:4b97804c37d1 397 * url encode
gsfan 18:4b97804c37d1 398 */
gsfan 15:5febfc399099 399 int urlencode (char *str, char *buf, int len);
gsfan 20:151b5a4fdd29 400 /**
gsfan 20:151b5a4fdd29 401 * url decode
gsfan 20:151b5a4fdd29 402 */
gsfan 20:151b5a4fdd29 403 int urldecode (char *str, char *buf, int len);
gsfan 15:5febfc399099 404
gsfan 22:9b077e2823ce 405 #ifdef DEBUG
gsfan 23:a783c62c36d0 406 void dump ();
gsfan 0:2f6062c6d018 407 void test ();
gsfan 0:2f6062c6d018 408 int getc();
gsfan 0:2f6062c6d018 409 void putc(char c);
gsfan 0:2f6062c6d018 410 int readable();
gsfan 18:4b97804c37d1 411 #endif
gsfan 0:2f6062c6d018 412
gsfan 0:2f6062c6d018 413 protected:
gsfan 18:4b97804c37d1 414 void poll_cmd ();
gsfan 0:2f6062c6d018 415 int x2i (char c);
gsfan 0:2f6062c6d018 416 char i2x (int i);
gsfan 0:2f6062c6d018 417 void isr_recv ();
gsfan 2:c6e0e97901b3 418 void newSock (int cid, GSTYPE type, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive);
gsfan 20:151b5a4fdd29 419 int from_hex (int ch);
gsfan 20:151b5a4fdd29 420 int to_hex (int code);
gsfan 0:2f6062c6d018 421
gsfan 20:151b5a4fdd29 422 #ifdef GS_USE_SMTP
gsfan 18:4b97804c37d1 423 int wait_smtp (int cid, int code);
gsfan 20:151b5a4fdd29 424 #endif
gsfan 18:4b97804c37d1 425
gsfan 20:151b5a4fdd29 426 #ifdef GS_USE_HTTPD
gsfan 23:a783c62c36d0 427 int get_handler (char *uri);
gsfan 19:cad912f5a6ba 428 int httpd_request (int cid, GS_httpd *gshttpd, char *dir);
gsfan 19:cad912f5a6ba 429 char *mimetype (char *file);
gsfan 23:a783c62c36d0 430 int strnicmp (char *p1, char *p2, int n);
gsfan 20:151b5a4fdd29 431 #endif
gsfan 18:4b97804c37d1 432
gsfan 0:2f6062c6d018 433 private:
gsfan 0:2f6062c6d018 434 Serial _gs;
gsfan 0:2f6062c6d018 435 bool _rts;
gsfan 0:2f6062c6d018 436 volatile bool _connect;
gsfan 0:2f6062c6d018 437 volatile GSSTATUS _status;
gsfan 0:2f6062c6d018 438 volatile int _gs_ok, _gs_failure, _gs_enter;
gsfan 23:a783c62c36d0 439 volatile GSRESPONCE _response;
gsfan 0:2f6062c6d018 440 GSMODE _gs_mode;
gsfan 0:2f6062c6d018 441 int _escape;
gsfan 1:b127c6c5241d 442 int _cid, _rssi;
gsfan 0:2f6062c6d018 443 IpAddr _ipaddr, _netmask, _gateway, _nameserver, _resolv;
gsfan 0:2f6062c6d018 444 Host _from, _to;
gsfan 4:a8d38857f3fd 445 char _mac[6];
gsfan 0:2f6062c6d018 446 RingBuffer _buf_cmd;
gsfan 0:2f6062c6d018 447 struct GS_Socket _gs_sock[16];
gsfan 5:6def1d0df519 448 time_t _time;
gsfan 24:5c350ae2e703 449 char *_ssid;
gsfan 24:5c350ae2e703 450 int _reconnect, _reconnect_count;
gsfan 18:4b97804c37d1 451
gsfan 20:151b5a4fdd29 452 #ifdef GS_USE_HTTPD
gsfan 18:4b97804c37d1 453 struct GS_httpd _httpd[16];
gsfan 18:4b97804c37d1 454 struct GS_httpd_handler _handler[10];
gsfan 18:4b97804c37d1 455 int _handler_count;
gsfan 20:151b5a4fdd29 456
gsfan 20:151b5a4fdd29 457 void poll_httpd (int cid, int len);
gsfan 23:a783c62c36d0 458 #ifdef GS_USE_WEBSOCKET
gsfan 23:a783c62c36d0 459 void poll_websocket (int cid, int len);
gsfan 23:a783c62c36d0 460 void send_websocket_accept (int cid);
gsfan 23:a783c62c36d0 461 #endif
gsfan 20:151b5a4fdd29 462 #endif
gsfan 0:2f6062c6d018 463 };
gsfan 7:b75b7fc144ff 464
gsfan 7:b75b7fc144ff 465 #endif