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

GSwifi.h

Committer:
gsfan
Date:
2012-07-12
Revision:
4:a8d38857f3fd
Parent:
2:c6e0e97901b3
Child:
5:6def1d0df519

File content as of revision 4:a8d38857f3fd:

/**
 * Gainspan wi-fi module library for mbed
 * Copyright (c) 2012 gsfan
 * Released under the MIT License: http://mbed.org/license/mit
 */

/** @file
 * @brief Gainspan wi-fi module library for mbed
 * GS1011MIC, GS1011MIP, GainSpan WiFi Breakout, etc.
 * module configuration: ATB=115200
 */

#include "mbed.h"
#include "RingBuffer.h"
#include "host.h"
#include "ipaddr.h"

#define GS_BAUD 115200
#define GS_UART_DIRECT

#define GS_BULK

#define GS_TIMEOUT 10000 // ms
#define GS_TIMEOUT2 30000 // ms
#define GS_CMD_SIZE 100
#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
#define GS_DATA_SIZE 1500
#elif defined(TARGET_LPC11U24)
#define GS_DATA_SIZE 800
#endif

/**
 * Wi-Fi security
 */
enum GSSECURITY {
    GSSEC_AUTO = 0,
    GSSEC_NONE = 0,
    GSSEC_OPEN = 1,
    GSSEC_WEP = 2,
    GSSEC_WPA_PSK = 4,
    GSSEC_WPA2_PSK = 8,
    GSSEC_WPA_ENT = 16,
    GSSEC_WPA2_ENT = 32,
    GSSEC_WPS_BUTTON = 64,
};

/**
 * TCP/IP protocol
 */
enum GSPROTOCOL {
    GSPROT_UDP = 0,
    GSPROT_TCP = 1,
    GSPROT_HTTPGET,
    GSPROT_HTTPPOST,
};

/**
 * Client/Server
 */
enum GSTYPE {
    GSTYPE_CLIENT = 0,
    GSTYPE_SERVER = 1,
};

enum GSRESPONCE {
    GSRES_NORMAL,
    GSRES_CONNECT,
    GSRES_WPS,
    GSRES_MACADDRESS,
    GSRES_DHCP,
    GSRES_DNSLOOKUP,
    GSRES_HTTP,
    GSRES_RSSI,
};

enum GSMODE {
    GSMODE_COMMAND,
    GSMODE_DATA_RX,
    GSMODE_DATA_RXUDP,
    GSMODE_DATA_RX_BULK,
    GSMODE_DATA_RXUDP_BULK,
    GSMODE_DATA_RXHTTP,
};

enum GSSTATUS {
    GSSTAT_READY,
    GSSTAT_STANDBY,
    GSSTAT_WAKEUP,
    GSSTAT_DEEPSLEEP,
};

/**
 * data receive callback function
 */
typedef void (*onGsReceiveFunc)(int cid, int len);

struct GS_Socket {
    GSTYPE type;
    GSPROTOCOL protocol;
    bool connect;
    Host host;
    RingBuffer *data;
    int lcid;
    int received;
    onGsReceiveFunc onGsReceive;
};

/**
 * GSwifi class
 */
class GSwifi {
public:
    /**
     * default constructor
     */
    GSwifi (PinName p_tx, PinName p_rx);
    /**
     * Default constructor (with hardware fllow controll)
     */
    GSwifi (PinName p_tx, PinName p_rx, PinName p_cts, PinName p_rts);
    /**
     * send command
     */
    int command (char *cmd, GSRESPONCE res, int timeout = GS_TIMEOUT);
    /**
     * recv responce
     */
    int cmdResponse (GSRESPONCE res, int ms);
    /**
     * associate infrastructure
     * @param sec GSSEC_OPEN, GSSEC_WEP, GSSEC_WPA_PSK, GSSEC_WPA2_PSK, GSSEC_WPS_BUTTON
     * @param ssid SSID
     * @param pass pass phrase
     * @param dhcp 0:static ip, 1:dhcp
     * @retval 0 success
     * @retval -1 failure
     */
    int connect (GSSECURITY sec, char *ssid, char *pass, int dhcp = 1);
    /**
     * adhock
     * @param sec GSSEC_OPEN or GSSEC_WEP
     * @param ssid SSID
     * @param pass 10 or 26 hexadecimal digits
     * @param ipaddr my ip address
     * @param netmask subnet mask
     * @retval 0 success
     * @retval -1 failure
     */
    int adhock (GSSECURITY sec, char *ssid, char *pass, IpAddr ipaddr, IpAddr netmask);
    /**
     * limited AP
     * @param sec GSSEC_OPEN or GSSEC_WEP
     * @param ssid SSID
     * @param pass 10 or 26 hexadecimal digits
     * @param ipaddr my ip address (dhcp start address)
     * @param netmask subnet mask
     * @retval 0 success
     * @retval -1 failure
     * firmware: s2w-secureweb, s2w-web, s2w-wpsweb
     */
    int limitedap (GSSECURITY sec, char *ssid, char *pass, IpAddr ipaddr, IpAddr netmask);
    /**
     * unassociate
     */
    int disconnect ();

    /**
     * use DHCP
     */
    int setAddress ();
    /**
     * use static ip address
     */
    int setAddress (IpAddr ipaddr, IpAddr netmask, IpAddr gateway, IpAddr nameserver);
    /**
     * get ip address
     */
    int getAddress (IpAddr &ipaddr, IpAddr &netmask, IpAddr &gateway, IpAddr &nameserver);
    /**
     * resolv hostname
     * @param name hostname
     * @param addr resolved ip address
     * @retval 0 success
     * @retval -1 failure
     */
    int getHostByName (const char* name, IpAddr &addr);
    /**
     * resolv hostname
     * @param host.name hostname
     * @param host.ipaddr resolved ip address
     * @retval 0 success
     * @retval -1 failure
     */
    int getHostByName (Host &host);
    /**
     * RF power
     * @param power 0(high)-7(low)
     */
    int setRFPower (int power);
    /**
     * power save mode
     * @param active 0:switched off, 1:always on
     * @param save 0:disable, 1:enable
     */
    int powerSave (int active, int save);
    /**
     * standby mode
     * @param msec wakeup after
     * wakeup after msec or alarm1/2
     * core off, save to RTC ram
     */
    int standby (int msec);
    /**
     * restore standby
     */
    int wakeup ();
    /**
     * deep sleep mode
     */
    int deepSleep ();
    /**
     * wifi connected
     */
    bool isConnected ();
    /**
     * status
     * @return GSSTATUS
     */
    GSSTATUS getStatus ();
    /**
     * RSSI
     * @return dBm
     */
    int getRssi ();

    /**
     * main polling
     */
    void poll();

    /**
     * tcp/udp client
     */
    int open (Host &host, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL);
    /**
     * tcp/udp server
     */
    int listen (int port, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive = NULL);
    /**
     * close client/server
     */
    int close (int cid);
    /**
     * send data tcp(s/c), udp(c)
     */
    int send (int cid, char *buf, int len);
    /**
     * send data udp(s)
     */
    int send (int cid, char *buf, int len, Host &host);
    /**
     * recv data tcp(s/c), udp(c)
     */
    int recv (int cid, char *buf, int len);
    /**
     * recv data udp(s)
     */
    int recv (int cid, char *buf, int len, Host &host);
    /**
     * tcp/udp connected
     */
    bool isConnected (int cid);

    /**
     * http request
     */
    int httpGet (Host &host, char *uri, int ssl = 0, onGsReceiveFunc ponGsReceive = NULL);
    /**
     * certificate 
     */
    int certAdd (char *name, char *cert, int len);

    void test ();
    int getc();
    void putc(char c);
    int readable();

protected:
    int x2i (char c);
    char i2x (int i);
    void isr_recv ();
    void newSock (int cid, GSTYPE type, GSPROTOCOL pro, onGsReceiveFunc ponGsReceive);

private:
    Serial _gs;
    bool _rts;
    volatile bool _connect;
    volatile GSSTATUS _status;
    volatile int _gs_ok, _gs_failure, _gs_enter;
    GSMODE _gs_mode;
    int _escape;
    int _cid, _rssi;
    IpAddr _ipaddr, _netmask, _gateway, _nameserver, _resolv;
    Host _from, _to;
    char _mac[6];
    RingBuffer _buf_cmd;
    struct GS_Socket _gs_sock[16];
};