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

Dependents:   mtsas mtsas mtsas mtsas

Committer:
Leon Lindenfelser
Date:
Mon Feb 19 14:25:58 2018 -0600
Revision:
82:5b33b670adb7
Parent:
78:fc9d2b983744
Add support for MTQ-LAT3(LE910-NA1) adn MTQ-LVW3(LE910-sv1)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Leon Lindenfelser 82:5b33b670adb7 1 #ifndef EASYIP_H
Leon Lindenfelser 82:5b33b670adb7 2 #define EASYIP_H
Leon Lindenfelser 82:5b33b670adb7 3
Leon Lindenfelser 82:5b33b670adb7 4 #include <string>
Leon Lindenfelser 82:5b33b670adb7 5 #include <vector>
Leon Lindenfelser 82:5b33b670adb7 6
Leon Lindenfelser 82:5b33b670adb7 7 #include "MTSBufferedIO.h"
Leon Lindenfelser 82:5b33b670adb7 8 #include "Cellular.h"
Leon Lindenfelser 82:5b33b670adb7 9
Leon Lindenfelser 82:5b33b670adb7 10 namespace mts
Leon Lindenfelser 82:5b33b670adb7 11 {
Leon Lindenfelser 82:5b33b670adb7 12 /** This class implements the same interface used for UIP version radios on an Easy IP radio
Leon Lindenfelser 82:5b33b670adb7 13 * using the Hayes AT command set.
Leon Lindenfelser 82:5b33b670adb7 14 * (See the UIP class and documentation, "UIP.h")
Leon Lindenfelser 82:5b33b670adb7 15 * This class supports four main types of cellular radio interactions including:
Leon Lindenfelser 82:5b33b670adb7 16 * configuration and status AT-command processing, SMS processing, TCP Socket data connections,
Leon Lindenfelser 82:5b33b670adb7 17 * and UDP data connections. It should be noted that the radio can not process commands or
Leon Lindenfelser 82:5b33b670adb7 18 * SMS messages while having an open data connection at the same time. The concurrent
Leon Lindenfelser 82:5b33b670adb7 19 * capability may be added in a future release. This class also inherits from IPStack
Leon Lindenfelser 82:5b33b670adb7 20 * providing a common set of commands for communication devices that have an onboard
Leon Lindenfelser 82:5b33b670adb7 21 * IP Stack. It is also integrated with the standard mbed Sockets package and can therefore
Leon Lindenfelser 82:5b33b670adb7 22 * be used seamlessly with clients and services built on top of this interface already within
Leon Lindenfelser 82:5b33b670adb7 23 * the mbed library.
Leon Lindenfelser 82:5b33b670adb7 24 * The default baud rate for the cellular radio is 115200 bps.
Leon Lindenfelser 82:5b33b670adb7 25 *
Leon Lindenfelser 82:5b33b670adb7 26 * Example code is found under Cellular.h
Leon Lindenfelser 82:5b33b670adb7 27 */
Leon Lindenfelser 82:5b33b670adb7 28 class EasyIP : public Cellular
Leon Lindenfelser 82:5b33b670adb7 29 {
Leon Lindenfelser 82:5b33b670adb7 30 public:
Leon Lindenfelser 82:5b33b670adb7 31 /** This static function is used to create or get a reference to a
Leon Lindenfelser 82:5b33b670adb7 32 * Cellular object. Cellular uses the singleton pattern, which means
Leon Lindenfelser 82:5b33b670adb7 33 * that you can only have one existing at a time. The first time you
Leon Lindenfelser 82:5b33b670adb7 34 * call getInstance this method creates a new uninitialized Cellular
Leon Lindenfelser 82:5b33b670adb7 35 * object and returns it. All future calls to this method will return
Leon Lindenfelser 82:5b33b670adb7 36 * a reference to the instance created during the first call. Note that
Leon Lindenfelser 82:5b33b670adb7 37 * you must call init on the returned instance before mnaking any other
Leon Lindenfelser 82:5b33b670adb7 38 * calls. If using this class's bindings to any of the Socket package
Leon Lindenfelser 82:5b33b670adb7 39 * classes like TCPSocketConnection, you must call this method and the
Leon Lindenfelser 82:5b33b670adb7 40 * init method on the returned object first, before even creating the
Leon Lindenfelser 82:5b33b670adb7 41 * other objects.
Leon Lindenfelser 82:5b33b670adb7 42 *
Leon Lindenfelser 82:5b33b670adb7 43 * @returns a reference to the single Cellular obect that has been created.
Leon Lindenfelser 82:5b33b670adb7 44 */
Leon Lindenfelser 82:5b33b670adb7 45 EasyIP(Radio type);
Leon Lindenfelser 82:5b33b670adb7 46
Leon Lindenfelser 82:5b33b670adb7 47 /** Destructs a Cellular object and frees all related resources.
Leon Lindenfelser 82:5b33b670adb7 48 */
Leon Lindenfelser 82:5b33b670adb7 49 ~EasyIP();
Leon Lindenfelser 82:5b33b670adb7 50
Leon Lindenfelser 82:5b33b670adb7 51 /** Initializes the MTS IO buffer
Leon Lindenfelser 82:5b33b670adb7 52 */
Leon Lindenfelser 82:5b33b670adb7 53 virtual bool init(MTSBufferedIO* io);
Leon Lindenfelser 82:5b33b670adb7 54
Leon Lindenfelser 82:5b33b670adb7 55 /** PPP connect command.
Leon Lindenfelser 82:5b33b670adb7 56 * Connects the radio to the cellular network.
Leon Lindenfelser 82:5b33b670adb7 57 *
Leon Lindenfelser 82:5b33b670adb7 58 * @returns true if PPP connection to the network succeeded,
Leon Lindenfelser 82:5b33b670adb7 59 * false if the PPP connection failed.
Leon Lindenfelser 82:5b33b670adb7 60 */
Leon Lindenfelser 82:5b33b670adb7 61 virtual bool connect();
Leon Lindenfelser 82:5b33b670adb7 62
Leon Lindenfelser 82:5b33b670adb7 63 /** PPP disconnect command.
Leon Lindenfelser 82:5b33b670adb7 64 * Disconnects from the PPP network, and will also close active socket
Leon Lindenfelser 82:5b33b670adb7 65 * connection if open.
Leon Lindenfelser 82:5b33b670adb7 66 */
Leon Lindenfelser 82:5b33b670adb7 67 virtual void disconnect();
Leon Lindenfelser 82:5b33b670adb7 68
Leon Lindenfelser 82:5b33b670adb7 69 /** Checks if the radio is connected to the cell network.
Leon Lindenfelser 82:5b33b670adb7 70 * Checks antenna signal, cell tower registration, and context activation
Leon Lindenfelser 82:5b33b670adb7 71 * before finally pinging (4 pings, 32 bytes each) to confirm PPP connection
Leon Lindenfelser 82:5b33b670adb7 72 * to network. Will return true if there is an open socket connection as well.
Leon Lindenfelser 82:5b33b670adb7 73 *
Leon Lindenfelser 82:5b33b670adb7 74 * @returns true if there is a PPP connection to the cell network, false
Leon Lindenfelser 82:5b33b670adb7 75 * if there is no PPP connection to the cell network.
Leon Lindenfelser 82:5b33b670adb7 76 */
Leon Lindenfelser 82:5b33b670adb7 77 virtual bool isConnected();
Leon Lindenfelser 82:5b33b670adb7 78
Leon Lindenfelser 82:5b33b670adb7 79 /** Resets the radio/modem.
Leon Lindenfelser 82:5b33b670adb7 80 * Disconnects all active PPP and socket connections to do so.
Leon Lindenfelser 82:5b33b670adb7 81 */
Leon Lindenfelser 82:5b33b670adb7 82 virtual void reset();
Leon Lindenfelser 82:5b33b670adb7 83
Leon Lindenfelser 82:5b33b670adb7 84 // TCP and UDP Socket related commands
Leon Lindenfelser 82:5b33b670adb7 85 // For behavior of the following methods refer to IPStack.h documentation
Leon Lindenfelser 82:5b33b670adb7 86
Leon Lindenfelser 82:5b33b670adb7 87 virtual bool open(const std::string& address, unsigned int port, Mode mode);
Leon Lindenfelser 82:5b33b670adb7 88 virtual bool close(bool shutdown);
Leon Lindenfelser 82:5b33b670adb7 89 virtual int read(char* data, int max, int timeout = -1);
Leon Lindenfelser 82:5b33b670adb7 90 virtual int write(const char* data, int length, int timeout = -1);
Leon Lindenfelser 82:5b33b670adb7 91
Leon Lindenfelser 82:5b33b670adb7 92 /** Pings specified DNS or IP address
Leon Lindenfelser 82:5b33b670adb7 93 * Google DNS server used as default ping address
Leon Lindenfelser 82:5b33b670adb7 94 * @returns true if ping received alive response else false
Leon Lindenfelser 82:5b33b670adb7 95 */
Leon Lindenfelser 82:5b33b670adb7 96 virtual bool ping(const std::string& address = "8.8.8.8");
Leon Lindenfelser 82:5b33b670adb7 97
Leon Lindenfelser 82:5b33b670adb7 98 /** Sets the APN
Leon Lindenfelser 82:5b33b670adb7 99 *
Leon Lindenfelser 82:5b33b670adb7 100 * @param apn c-string of the APN to use
Leon Lindenfelser 82:5b33b670adb7 101 *
Leon Lindenfelser 82:5b33b670adb7 102 * @returns MTS_SUCCESS if the APN was set, or is not needed, else it
Leon Lindenfelser 82:5b33b670adb7 103 * returns the result of the AT command sent to the radio to set the APN
Leon Lindenfelser 82:5b33b670adb7 104 */
Leon Lindenfelser 82:5b33b670adb7 105 virtual Code setApn(const std::string& apn);
Leon Lindenfelser 82:5b33b670adb7 106
Leon Lindenfelser 82:5b33b670adb7 107 /** Enables GPS.
Leon Lindenfelser 82:5b33b670adb7 108 * @returns true if GPS gets or is enabled, false if GPS is not supported.
Leon Lindenfelser 82:5b33b670adb7 109 */
Leon Lindenfelser 82:5b33b670adb7 110 virtual bool GPSenable();
Leon Lindenfelser 82:5b33b670adb7 111
Leon Lindenfelser 82:5b33b670adb7 112 /** Disables GPS.
Leon Lindenfelser 82:5b33b670adb7 113 * @returns true if GPS gets or is disabled, false if GPS failed to disable.
Leon Lindenfelser 82:5b33b670adb7 114 */
Leon Lindenfelser 82:5b33b670adb7 115 virtual bool GPSdisable();
Leon Lindenfelser 82:5b33b670adb7 116
Leon Lindenfelser 82:5b33b670adb7 117 /** Checks if GPS is enabled.
Leon Lindenfelser 82:5b33b670adb7 118 * @returns true if GPS is enabled, false if GPS is disabled.
Leon Lindenfelser 82:5b33b670adb7 119 */
Leon Lindenfelser 82:5b33b670adb7 120 virtual bool GPSenabled();
Leon Lindenfelser 82:5b33b670adb7 121
Leon Lindenfelser 82:5b33b670adb7 122 /** Get GPS position.
Leon Lindenfelser 82:5b33b670adb7 123 * @returns a string containing the GPS position.
Leon Lindenfelser 82:5b33b670adb7 124 */
Leon Lindenfelser 82:5b33b670adb7 125 virtual Cellular::gpsData GPSgetPosition();
Leon Lindenfelser 82:5b33b670adb7 126
Leon Lindenfelser 82:5b33b670adb7 127 /** Check for GPS fix.
Leon Lindenfelser 82:5b33b670adb7 128 * @returns true if there is a fix and false otherwise.
Leon Lindenfelser 82:5b33b670adb7 129 */
Leon Lindenfelser 82:5b33b670adb7 130 virtual bool GPSgotFix();
Leon Lindenfelser 82:5b33b670adb7 131
Leon Lindenfelser 82:5b33b670adb7 132 private:
Leon Lindenfelser 82:5b33b670adb7 133 /** Function that sends +++ to the radio to exit data mode
Leon Lindenfelser 82:5b33b670adb7 134 * returns true if it successfully exits from online mode, else
Leon Lindenfelser 82:5b33b670adb7 135 * it returns false. Used due to the fact that AT commands
Leon Lindenfelser 82:5b33b670adb7 136 * cannot be sent while in data mode.
Leon Lindenfelser 82:5b33b670adb7 137 *
Leon Lindenfelser 82:5b33b670adb7 138 * @returns true if the radio dropped from data mode to commande mode
Leon Lindenfelser 82:5b33b670adb7 139 * or is already in command mode (socket is still open in the background),
Leon Lindenfelser 82:5b33b670adb7 140 * and false if the radio failed to switch to command mode.
Leon Lindenfelser 82:5b33b670adb7 141 */
Leon Lindenfelser 82:5b33b670adb7 142 virtual bool sendEscapeCommand();
Leon Lindenfelser 82:5b33b670adb7 143
Leon Lindenfelser 82:5b33b670adb7 144 /** Switches to command mode, queries the status of the socket connection,
Leon Lindenfelser 82:5b33b670adb7 145 * and then returns back to the active socket connection (if still open)
Leon Lindenfelser 82:5b33b670adb7 146 *
Leon Lindenfelser 82:5b33b670adb7 147 * @returns true if a socket is currently open, otherwise it returns false
Leon Lindenfelser 82:5b33b670adb7 148 */
Leon Lindenfelser 82:5b33b670adb7 149 virtual bool socketCheck();
Leon Lindenfelser 82:5b33b670adb7 150 };
Leon Lindenfelser 82:5b33b670adb7 151
Leon Lindenfelser 82:5b33b670adb7 152 }
Leon Lindenfelser 82:5b33b670adb7 153
mfiore 78:fc9d2b983744 154 #endif /* EASYIP_H */