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 Feb 22 01:05:10 2013 +0000
Revision:
26:b347ee3a1087
Parent:
25:f6e5622d2930
Child:
28:fbba4c58d14c
Heavily modified

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