Cellular library for MTS Socket Modem Arduino Shield devices from Multi-Tech Systems
Dependents: mtsas mtsas mtsas mtsas
Cellular/UIP.h@82:5b33b670adb7, 2018-02-19 (annotated)
- 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?
User | Revision | Line number | New 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 |