Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: GSwifiInterface_HelloWorld GSwifiInterface_HelloServo GSwifiInterface_UDPEchoServer GSwifiInterface_UDPEchoClient ... more
Fork of WiflyInterface by
GSwifi/GSwifi.h
- Committer:
- gsfan
- Date:
- 2013-03-11
- Revision:
- 7:f94c59d0c735
- Parent:
- 6:6a6396b56405
File content as of revision 7:f94c59d0c735:
/* Copyright (C) 2012 mbed.org, MIT License
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge, publish, distribute,
* sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* @section DESCRIPTION
*
* GainSpan GS1011, Wi-Fi module
*
* http://www.gainspan.com/modules
*/
/* Copyright (C) 2013 gsfan, MIT License
* port to the GainSpan Wi-FI module GS1011
*/
#ifndef GSwifi_H
#define GSwifi_H
#include "mbed.h"
#include "CBuffer.h"
#define DEFAULT_WAIT_RESP_TIMEOUT 500
#define CFG_TIMEOUT 10000 // ms
#define CFG_TIMEOUT2 30000 // ms
#define CFG_CMD_SIZE 100
#define CFG_DATA_SIZE 1000
#define CFG_UART_BAUD 9600
#define CFG_WREGDOMAIN "2" // 0:FCC, 1:ETSI, 2:TELEC
#define MAX_TRY_JOIN 3
//Debug is disabled by default
#if (0 && !defined(TARGET_LPC11U24))
#define DBG(x, ...) std::printf("[GSwifi : DBG]" x "\r\n", ##__VA_ARGS__);
#define WARN(x, ...) std::printf("[GSwifi : WARN]" x "\r\n", ##__VA_ARGS__);
#define ERR(x, ...) std::printf("[GSwifi : ERR]" x "\r\n", ##__VA_ARGS__);
#else
#define DBG(x, ...)
#define WARN(x, ...)
#define ERR(x, ...)
#endif
#if (0 && !defined(TARGET_LPC11U24))
#define INFO(x, ...) printf("[GSwifi : INFO]\r\n"x"\r\n", ##__VA_ARGS__);
#else
#define INFO(x, ...)
#endif
class GSwifi
{
public:
enum Security {
SEC_AUTO = 0,
SEC_NONE = 0,
SEC_OPEN = 1,
SEC_WEP = 2,
SEC_WPA_PSK = 4,
SEC_WPA2_PSK = 8,
SEC_WPA_ENT = 16,
SEC_WPA2_ENT = 32,
SEC_WPS_BUTTON = 64,
};
enum Protocol {
PROTO_UDP = 0,
PROTO_TCP = 1,
PROTO_HTTPGET,
PROTO_HTTPPOST,
PROTO_HTTPD,
};
enum Response {
RES_NULL,
RES_NORMAL,
RES_CONNECT,
RES_WPS,
RES_MACADDRESS,
RES_DHCP,
RES_DNSLOOKUP,
RES_HTTP,
RES_RSSI,
RES_TIME,
RES_OK,
RES_FAILURE,
};
enum Mode {
MODE_COMMAND,
MODE_DATA_RX,
MODE_DATA_RXUDP,
MODE_DATA_RXHTTP,
};
enum Status {
STAT_READY,
STAT_STANDBY,
STAT_WAKEUP,
STAT_DEEPSLEEP,
};
/*
* Constructor
*
* @param tx mbed pin to use for tx line of Serial interface
* @param rx mbed pin to use for rx line of Serial interface
* \param cts mbed pin to use for cts line of Serial interface
* \param rts mbed pin to use for rts line of Serial interface
* @param reset reset pin of the wifi module ()
* @param ssid ssid of the network
* @param phrase WEP or WPA key
* @param sec Security type (NONE, WEP_128 or WPA)
*/
GSwifi( PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, const char * ssid, const char * phrase, Security sec);
/*
* Connect the wifi module to the ssid contained in the constructor.
*
* @return true if connected, false otherwise
*/
bool join();
/*
* Disconnect the wifly module from the access point
*
* @ returns true if successful
*/
bool disconnect();
/*
* Reset the wifi module
*/
void reset();
/*
* Check if characters are available
*
* @return number of available characters
*/
int readable(int cid);
/*
* Check if characters are available
*
* @return number of available characters
*/
int writeable();
/*
* Check if a tcp link is active
*
* @returns true if successful
*/
bool is_connected(int cid);
/*
* Read a character
*
* @return the character read
*/
char getc(int cid);
/*
* Flush the buffer
*/
void flush(int cid);
/*
* Write a character
*
* @param the character which will be written
*/
int putc(char c);
/*
* Send a string to the wifi module by serial port. This function desactivates the user interrupt handler when a character is received to analyze the response from the wifi module.
* Useful to send a command to the module and wait a response.
*
*
* @param str string to be sent
* @param len string length
* @param ACK string which must be acknowledge by the wifi module. If ACK == NULL, no string has to be acknoledged. (default: "NO")
* @param res this field will contain the response from the wifi module, result of a command sent. This field is available only if ACK = "NO" AND res != NULL (default: NULL)
*
* @return true if ACK has been found in the response from the wifi module. False otherwise or if there is no response in 5s.
*/
int send(const char * str, int len, Response res = RES_NULL, int timeout = DEFAULT_WAIT_RESP_TIMEOUT);
/*
* Send a command to the wify module. Check if the module is in command mode. If not enter in command mode
*
* @param str string to be sent
* @param ACK string which must be acknowledge by the wifi module. If ACK == NULL, no string has to be acknoledged. (default: "NO")
* @param res this field will contain the response from the wifi module, result of a command sent. This field is available only if ACK = "NO" AND res != NULL (default: NULL)
*
* @returns true if successful
*/
bool sendCommand(const char * cmd, Response res = RES_NORMAL, int timeout = DEFAULT_WAIT_RESP_TIMEOUT);
/*
* Return true if the module is using dhcp
*
* @returns true if the module is using dhcp
*/
bool isDHCP() {
return _state.dhcp;
}
bool gethostbyname(const char * host, char * ip);
static GSwifi * getInstance() {
return _inst;
};
bool readRemote(int cid, char **ip, int *port);
int readCID ();
int readACID ();
protected:
Serial _uart;
bool _rts;
DigitalOut _reset;
char _phrase[30];
char _ssid[30];
char _mac[18];
char _ip[16];
char _netmask[16];
char _gateway[16];
char _nameserver[16];
char _resolv[16];
int _rssi;
time_t _time;
CircBuffer<char> _buf_gswifi;
static GSwifi * _inst;
void attach_rx(bool null);
void handler_rx(void);
int x2i (char c);
char i2x (int i);
void parseResponse ();
void parseCmdResponse (char *buf);
typedef struct STATE {
bool associated;
bool dhcp;
Security sec;
Mode mode;
Status status;
bool escape;
int cid, acid;
volatile Response cmdres, retres;
int n;
} State;
State _state;
typedef struct CONNECTION {
bool connected;
char ip[16];
int port;
CircBuffer<char> *buf;
int parent;
} Connection;
Connection _con[16];
};
#endif

GainSpan Wi-Fi GS1011