Cellular library for MTS Socket Modem Arduino Shield devices from Multi-Tech Systems

Dependents:   mtsas mtsas mtsas mtsas

Cellular/EasyIP.h

Committer:
Vanger
Date:
2014-06-30
Revision:
27:ec44d5a9544f
Parent:
26:2b769ed8de4f
Child:
30:1326b623919a

File content as of revision 27:ec44d5a9544f:

#ifndef SMC_H
#define SMC_H

#include <string>
#include <vector>

#include "MTSBufferedIO.h"
#include "Cellular.h"

namespace mts
{
/** This is a class for communicating without a Multi-Tech Systems SocketModem iCell. Instead, 
* it uses the hayes command set to implement the same commands and functions as the UIP class.
* (See the UIP class and documentation, "UIP.h")
* This class supports three main types of cellular radio interactions including:
* configuration and status AT command processing, SMS processing, and TCP Socket
* data connections. It should be noted that the radio can not process commands or
* SMS messages while having an open data connection at the same time. The concurrent
* capability may be added in a future release. This class also inherits from IPStack
* providing a common set of commands for communication devices that have an onboard
* IP Stack. It is also integrated with the standard mbed Sockets package and can therefore
* be used seamlessly with clients and services built on top of this interface already within
* the mbed library.
* The default baud rate for the cellular radio is 115200 bps.
*/
class EasyIP : public Cellular     //Inherits from Cellular.
{
public:
/** This static function is used to create or get a reference to a
    * Cellular object. Cellular uses the singleton pattern, which means
    * that you can only have one existing at a time. The first time you
    * call getInstance this method creates a new uninitialized Cellular
    * object and returns it. All future calls to this method will return
    * a reference to the instance created during the first call. Note that
    * you must call init on the returned instance before mnaking any other
    * calls. If using this class's bindings to any of the Socket package
    * classes like TCPSocketConnection, you must call this method and the
    * init method on the returned object first, before even creating the
    * other objects.
    *
    * @returns a reference to the single Cellular obect that has been created.
    */
    EasyIP(Radio type);

    /** Destructs a Cellular object and frees all related resources.
    */
    ~EasyIP();

    virtual bool init(MTSBufferedIO* io);

    // Wifi connection based commands derived from CommInterface.h
    virtual bool connect();
    virtual void disconnect();
    virtual bool isConnected();
    virtual void reset();

    // TCP and UDP Socket related commands
    // For behavior of the following methods refer to IPStack.h documentation
    virtual bool bind(unsigned int port);
    virtual bool open(const std::string& address, unsigned int port, Mode mode);
    virtual bool isOpen();
    virtual bool close();
    virtual int read(char* data, int max, int timeout = -1);    //-1 times for no timeout?
    virtual int write(const char* data, int length, int timeout = -1);
    virtual unsigned int readable();
    virtual unsigned int writeable();
    virtual bool ping(const std::string& address = "8.8.8.8"); //Can this default address be different?
    virtual std::string getDeviceIP();
    virtual bool setDeviceIP(std::string address = "DHCP");//What does this do? Run DHCP to configure the IP?
    
    //Sets the APN, also sets mode to IP, might need to change
    virtual Code setApn(const std::string& apn);
    /** A method for configuring command ehco capability on the radio. This command
    * sets whether sent characters are echoed back from the radio, in which case you
    * will receive back every command you send.
    *
    * @param state if true echo will be turned off, otherwise it will be turned on.
    * @returns the standard AT Code enumeration.
    */
    virtual Code echo(bool state);

    /** This method can be used to trade socket functionality for performance.
    * In order to enable a socket connection to be closed by the client side programtically,
    * this class must process all read and write data on the socket to guard the special
    * escape character used to close an open socket connection. It is recommened that you
    * use the default of true unless the overhead of these operations is too significant.
    *
    * @param enabled set to true if you want the socket closeable, otherwise false. The default
    * is true.
    * @returns the standard AT Code enumeration.
    */
    Code setSocketCloseable(bool enabled = true);  //ETX closes socket (ETX and DLE in payload are escaped with DLE)
};

}

#endif