Library to use a wifly module: RN 131 C/G

Dependents:   RN-XV_simple_server

Revision:
17:56f3c4da1ea8
Parent:
15:044d10aaf9d0
Child:
19:cf1a7a5cc8d6
--- a/Wifly.h	Sun Nov 06 12:15:50 2011 +0000
+++ b/Wifly.h	Mon Jan 30 10:53:56 2012 +0000
@@ -30,12 +30,13 @@
 * Datasheet:
 *
 * http://www.sparkfun.com/datasheets/Wireless/WiFi/WiFlyGSX-um2.pdf
-*/ 
+*/
 
 #ifndef WIFLY_H
 #define WIFLY_H
 
 #include "mbed.h"
+#include "CBuffer.h"
 
 /** Wifly Class
  *
@@ -46,154 +47,189 @@
  *
  * Wifly wifly(p9, p10, p20, "network", "password", true);
  * Serial pc(USBTX, USBRX);
- * 
+ *
  * int main()
  * {
- *   
+ *
  *   if(wifly.join())
  *       pc.printf("network joined!\r\n");
  *   else
  *       pc.printf("join failed!\r\n");
- *       
+ *
  * }
  * @endcode
  */
 class Wifly {
 
-    public:
-        /**
-        * Constructor for joining open, wep or wpa secured networks
-        *
-        * @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 reset reset pin of the wifi module
-        * @param ssid ssid of the network
-        * @param phrase WEP or WPA key
-        * @param wpa true if wpa security false otherwise
-        * @param ip ip of the wifi module if dhcp = false (default: NULL)
-        * @param netmask netmask if dhcp = false (default: NULL)
-        * @param dhcp enable or disable dhcp (default: true)
-        * @param baudrate speed of the communication (default: 9600)
-        */
-        Wifly(  PinName tx, PinName rx, PinName reset, char * ssid, char * phrase, bool wpa, 
-                char * ip = NULL, char * netmask = NULL, bool dhcp = true, int baudrate = 9600);
-        
-        
-        
-        /**
-        * Constructor to create an adhoc network
-        *
-        * @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 ssid ssid of the adhoc network which will be created
-        * @param ip ip of the wifi module (default: "169.254.1.1")
-        * @param netmask netmask (default: "255.255.0.0")
-        * @param channel channel (default: "1")
-        * @param baudrate speed of the communication (default: 9600)
-        */
-        Wifly(  PinName tx, PinName rx, PinName reset, char * ssid, char * ip = "169.254.1.1", 
-                char * netmask = "255.255.0.0", int channel = 1, int baudrate = 9600);
-        
-        /**
-        * Send a string to the wifi module by serial port
-        *
-        * @param str string to be sent
-        * @param ACK string which must be acknowledge by the wifi module
-        * @param res pointeur where will be stored the response from the wifi module. If res == NULL or ACK != "NO", no response is returned. (by default, res = NULL)
-        *
-        * @return true if ACK has been found in the response from the wifi module. False otherwise or if there is no response in 3s.
-        */
-        bool send(char * str, char * ACK, char * res = NULL); 
-        
-        /**
-        * Connect the wifi module to the network.
-        *
-        * @return true if connected, false otherwise
-        */
-        bool join();
-        
-        /**
-        * Create an adhoc network with the ssid contained in the constructor
-        *
-        * @return true if the network is well created, false otherwise
-        */
-        bool createAdhocNetwork();
-        
-        /**
-        * Read a string
-        *
-        *@param str pointer where will be stored the string read
-        */
-        bool read(char * str);
-        
-        /**
-        * To enter in command mode (we can configure the module)
-        *
-        * @return true if successful, false otherwise
-        */
-        bool cmdMode();
-        
-        /**
-        * To exit the command mode
-        *
-        * @return true if successful, false otherwise
-        */
-        bool exit();
-        
-        /**
-        * Reset the wifi module
-        */
-        void reset();
-        
-        /**
-        * Check if a character is available
-        *
-        * @return true if a character is available, false otherwise
-        */
-        bool readable();
-        
-        /**
-        * Read a character
-        *
-        * @return the character read
-        */
-        char getc();
-        
-        /**
-        * Write a character
-        *
-        * @param the character which will be written
-        */
-        void putc(char c);
-        
-        /**
-        * Change the baudrate of the wifi module. The modification will be effective after a reboot.
-        * After a baudrate modification, you have to use the correct parameters in the Wifly constructor.
-        *
-        * @param baudrate new baudrate
-        * @return true if the baudrate has been changed, false otherwise
-        */
-        bool changeBaudrate(int baudrate);
-        
-    private:
-        Serial wifi;
-        DigitalOut reset_pin;
-        bool wpa;
-        bool adhoc;
-        bool dhcp;
-        char phrase[30];
-        char ssid[30];
-        char ip[20];
-        char netmask[20];
-        int channel;
-        
-        char tmp_buf_rx[128];
-        char buf_rx[128];
-        volatile int length;
-        volatile bool new_msg;
-        
-        void attach_rx(bool null);
-        void handler_rx(void);
+public:
+    /**
+    * Constructor for joining open, wep or wpa secured networks
+    *
+    * @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 reset reset pin of the wifi module
+    * @param ssid ssid of the network
+    * @param phrase WEP or WPA key
+    * @param wpa true if wpa security false otherwise
+    * @param ip ip of the wifi module if dhcp = false (default: NULL)
+    * @param netmask netmask if dhcp = false (default: NULL)
+    * @param dhcp enable or disable dhcp (default: true)
+    * @param baudrate speed of the communication (default: 9600)
+    */
+    Wifly(  PinName tx, PinName rx, PinName reset, char * ssid, char * phrase, bool wpa,
+            char * ip = NULL, char * netmask = NULL, bool dhcp = true, int baudrate = 9600);
+
+
+
+    /**
+    * Constructor to create an adhoc network
+    *
+    * @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 ssid ssid of the adhoc network which will be created
+    * @param ip ip of the wifi module (default: "169.254.1.1")
+    * @param netmask netmask (default: "255.255.0.0")
+    * @param channel channel (default: "1")
+    * @param baudrate speed of the communication (default: 9600)
+    */
+    Wifly(  PinName tx, PinName rx, PinName reset, char * ssid, char * ip = "169.254.1.1",
+            char * netmask = "255.255.0.0", int channel = 1, int baudrate = 9600);
+
+    /**
+    * 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 ACK string which must be acknowledge by the wifi module. If "ACK" == "NO", 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.
+    */
+    bool send(char * str, char * ACK = "NO", char * res = NULL);
+
+    /**
+    * Connect the wifi module to the ssid contained in the constructor.
+    *
+    * @return true if connected, false otherwise
+    */
+    bool join();
+
+    /**
+    * Create an adhoc network with the ssid contained in the constructor
+    *
+    * @return true if the network is well created, false otherwise
+    */
+    bool createAdhocNetwork();
+
+    /**
+    * Read a string if available
+    *
+    *@param str pointer where will be stored the string read
+    */
+    bool read(char * str);
+
+
+    /**
+    * Reset the wifi module
+    */
+    void reset();
+
+    /**
+    * Check if characters are available
+    *
+    * @return number of available characters
+    */
+    int readable();
+
+    /**
+    * Read a character
+    *
+    * @return the character read
+    */
+    char getc();
+
+    /**
+    * Flush the buffer
+    */
+    void flush();
+
+    /**
+    * Write a character
+    *
+    * @param the character which will be written
+    */
+    void putc(char c);
+
+
+    /**
+    * To enter in command mode (we can configure the module)
+    *
+    * @return true if successful, false otherwise
+    */
+    bool cmdMode();
+
+
+    /**
+    * To exit the command mode
+    *
+    * @return true if successful, false otherwise
+    */
+    bool exit();
+
+    /**
+    * Change the baudrate of the wifi module. The modification will be effective after a reboot.
+    * After a baudrate modification, you have to use the correct parameters in the Wifly constructor.
+    *
+    * @param baudrate new baudrate
+    * @return true if the baudrate has been changed, false otherwise
+    */
+    bool changeBaudrate(int baudrate);
+
+    /**
+     *  Attach a member function to call when a character is received.
+     *
+     *  @param tptr pointer to the object to call the member function on
+     *  @param mptr pointer to the member function to be called
+     */
+    template<typename T>
+    void attach(T* tptr, void (T::*mptr)(void)) {
+        if ((mptr != NULL) && (tptr != NULL)) {
+            rx.attach(tptr, mptr);
+        }
+    }
+
+
+    /**
+     * Attach a callback for when a character is received
+     *
+     * @param fptr function pointer
+     */
+    void attach(void (*fn)(void)) {
+        if (fn != NULL) {
+            rx.attach(fn);
+        }
+    }
+
+private:
+    Serial wifi;
+    DigitalOut reset_pin;
+    bool wpa;
+    bool adhoc;
+    bool dhcp;
+    char phrase[30];
+    char ssid[30];
+    char ip[20];
+    char netmask[20];
+    int channel;
+    CBuffer buf_wifly;
+
+    void attach_rx(bool null);
+    void handler_rx(void);
+
+    FunctionPointer rx;
+
+
 };
 
 #endif
\ No newline at end of file