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:
Wed Dec 18 01:29:43 2013 +0000
Revision:
43:0b5e2727e020
Parent:
42:9b3c38d66fa8
fix reconnect

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