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:
67:7c705fe2acec
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 UIP_H
Leon Lindenfelser 82:5b33b670adb7 2 #define UIP_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
Leon Lindenfelser 82:5b33b670adb7 13 /** This is a class for communicating with a Multi-Tech Systems SocketModem iCell. The
Leon Lindenfelser 82:5b33b670adb7 14 * SocketModem iCell is a family of carrier certified embedded cellular radio modules with
Leon Lindenfelser 82:5b33b670adb7 15 * a common hardware footprint and AT command set for built in IP-stack functionality.
Leon Lindenfelser 82:5b33b670adb7 16 * This class supports three main types of cellular radio interactions including:
Leon Lindenfelser 82:5b33b670adb7 17 * configuration and status AT command processing, SMS processing, and TCP Socket
Leon Lindenfelser 82:5b33b670adb7 18 * data connections. It should be noted that the radio can not process commands or
Leon Lindenfelser 82:5b33b670adb7 19 * SMS messages while having an open data connection at the same time. The concurrent
Leon Lindenfelser 82:5b33b670adb7 20 * capability may be added in a future release. This class also inherits from IPStack
Leon Lindenfelser 82:5b33b670adb7 21 * providing a common set of commands for communication devices that have an onboard
Leon Lindenfelser 82:5b33b670adb7 22 * IP Stack. It is also integrated with the standard mbed Sockets package and can therefore
Leon Lindenfelser 82:5b33b670adb7 23 * be used seamlessly with clients and services built on top of this interface already within
Leon Lindenfelser 82:5b33b670adb7 24 * the mbed library.
Leon Lindenfelser 82:5b33b670adb7 25 *
Leon Lindenfelser 82:5b33b670adb7 26 * All of the following examples use the Pin Names for the STMicro Nucleo F401RE board coupled with
Leon Lindenfelser 82:5b33b670adb7 27 * the SocketModem Shield Arduino compatible board. Please chage Pin Names accordingly to
Leon Lindenfelser 82:5b33b670adb7 28 * match your hardware configuration. It also assumes the use of RTS/CTS hardware handshaking
Leon Lindenfelser 82:5b33b670adb7 29 * using GPIOs. To disable this you will need to change settings on the radio module and
Leon Lindenfelser 82:5b33b670adb7 30 * and use the MTSSerial class instead of MTSSerialFlowControl. The default baud rate for the
Leon Lindenfelser 82:5b33b670adb7 31 * cellular radio is 115200 bps.
Leon Lindenfelser 82:5b33b670adb7 32 *
Leon Lindenfelser 82:5b33b670adb7 33 * Example code is found under Cellular.h
Leon Lindenfelser 82:5b33b670adb7 34 */
Leon Lindenfelser 82:5b33b670adb7 35
Leon Lindenfelser 82:5b33b670adb7 36 class UIP : public Cellular
Leon Lindenfelser 82:5b33b670adb7 37 {
Leon Lindenfelser 82:5b33b670adb7 38 public:
Leon Lindenfelser 82:5b33b670adb7 39 /** This static function is used to create or get a reference to a
Leon Lindenfelser 82:5b33b670adb7 40 * Cellular object. Cellular uses the singleton pattern, which means
Leon Lindenfelser 82:5b33b670adb7 41 * that you can only have one existing at a time. The first time you
Leon Lindenfelser 82:5b33b670adb7 42 * call getInstance this method creates a new uninitialized Cellular
Leon Lindenfelser 82:5b33b670adb7 43 * object and returns it. All future calls to this method will return
Leon Lindenfelser 82:5b33b670adb7 44 * a reference to the instance created during the first call. Note that
Leon Lindenfelser 82:5b33b670adb7 45 * you must call init on the returned instance before mnaking any other
Leon Lindenfelser 82:5b33b670adb7 46 * calls. If using this class's bindings to any of the Socket package
Leon Lindenfelser 82:5b33b670adb7 47 * classes like TCPSocketConnection, you must call this method and the
Leon Lindenfelser 82:5b33b670adb7 48 * init method on the returned object first, before even creating the
Leon Lindenfelser 82:5b33b670adb7 49 * other objects.
Leon Lindenfelser 82:5b33b670adb7 50 *
Leon Lindenfelser 82:5b33b670adb7 51 * @returns a reference to the single Cellular object that has been created.
Leon Lindenfelser 82:5b33b670adb7 52 */
Leon Lindenfelser 82:5b33b670adb7 53 UIP(Radio type);
Leon Lindenfelser 82:5b33b670adb7 54
Leon Lindenfelser 82:5b33b670adb7 55 /** Destructs a Cellular object and frees all related resources.
Leon Lindenfelser 82:5b33b670adb7 56 */
Leon Lindenfelser 82:5b33b670adb7 57 ~UIP();
Leon Lindenfelser 82:5b33b670adb7 58
Leon Lindenfelser 82:5b33b670adb7 59 virtual bool init(MTSBufferedIO* io);
Leon Lindenfelser 82:5b33b670adb7 60
Leon Lindenfelser 82:5b33b670adb7 61 // Cell connection based commands derived from CommInterface.h
Leon Lindenfelser 82:5b33b670adb7 62 /** Initiates a PPP connection between the radio and the cell network */
Leon Lindenfelser 82:5b33b670adb7 63 virtual bool connect();
Leon Lindenfelser 82:5b33b670adb7 64
Leon Lindenfelser 82:5b33b670adb7 65 /** Disconnects the PPP connection between the radio and the cell network */
Leon Lindenfelser 82:5b33b670adb7 66 virtual void disconnect();
Leon Lindenfelser 82:5b33b670adb7 67
Leon Lindenfelser 82:5b33b670adb7 68 /** Checks if the radio has a PPP connection established with the cell network
Leon Lindenfelser 82:5b33b670adb7 69 * (Can reach the internet essentially)
Leon Lindenfelser 82:5b33b670adb7 70 */
Leon Lindenfelser 82:5b33b670adb7 71 virtual bool isConnected();
Leon Lindenfelser 82:5b33b670adb7 72
Leon Lindenfelser 82:5b33b670adb7 73 /** Resets the radio, must first close active socket and PPP connections
Leon Lindenfelser 82:5b33b670adb7 74 * to do so
Leon Lindenfelser 82:5b33b670adb7 75 */
Leon Lindenfelser 82:5b33b670adb7 76 virtual void reset();
Leon Lindenfelser 82:5b33b670adb7 77
Leon Lindenfelser 82:5b33b670adb7 78 // TCP and UDP Socket related commands
Leon Lindenfelser 82:5b33b670adb7 79 // For behavior of the following methods refer to IPStack.h documentation
Leon Lindenfelser 82:5b33b670adb7 80 virtual bool open(const std::string& address, unsigned int port, Mode mode);
Leon Lindenfelser 82:5b33b670adb7 81 virtual bool close(bool shutdown);
Leon Lindenfelser 82:5b33b670adb7 82 virtual int read(char* data, int max, int timeout = -1);
Leon Lindenfelser 82:5b33b670adb7 83 virtual int write(const char* data, int length, int timeout = -1);
Leon Lindenfelser 82:5b33b670adb7 84 virtual bool ping(const std::string& address = "8.8.8.8");
Leon Lindenfelser 82:5b33b670adb7 85
Leon Lindenfelser 82:5b33b670adb7 86 /** A method for setting the APN
Leon Lindenfelser 82:5b33b670adb7 87 *
Leon Lindenfelser 82:5b33b670adb7 88 * @param apn APN to be passed as a c-string
Leon Lindenfelser 82:5b33b670adb7 89 * @returns the standard AT Code enumeration
Leon Lindenfelser 82:5b33b670adb7 90 */
Leon Lindenfelser 82:5b33b670adb7 91 virtual Code setApn(const std::string& apn);
Leon Lindenfelser 82:5b33b670adb7 92
Leon Lindenfelser 82:5b33b670adb7 93 };
Leon Lindenfelser 82:5b33b670adb7 94
Leon Lindenfelser 82:5b33b670adb7 95 }
Leon Lindenfelser 82:5b33b670adb7 96
Leon Lindenfelser 82:5b33b670adb7 97 #endif