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:
Mon Feb 11 06:01:46 2013 +0000
Revision:
25:f6e5622d2930
Parent:
24:5c350ae2e703
Child:
26:b347ee3a1087
split the file

Who changed what in which revision?

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