Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: example-ublox-cellular-interface HelloMQTT example-ublox-cellular-interface_r410M example-ublox-mbed-client
UbloxPPPCellularInterface.h
- Committer:
- rob.meades@u-blox.com
- Date:
- 2017-06-15
- Revision:
- 1:80ec3fccad9e
- Parent:
- 0:44dd95724bc2
- Child:
- 2:4c533665168c
File content as of revision 1:80ec3fccad9e:
/* Copyright (c) 2017 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _UBLOX_PPP_CELLULAR_INTERFACE_
#define _UBLOX_PPP_CELLULAR_INTERFACE_
#include "nsapi.h"
#include "CellularBase.h"
#include "NetworkStack.h"
#include "InterruptIn.h"
#include "UbloxCellularBase.h"
#if NSAPI_PPP_AVAILABLE
/**********************************************************************
* CLASSES
**********************************************************************/
/* Forward declaration */
class NetworkStack;
/*
* NOTE: order is important in the inheritance below! PAL takes this class
* and casts it to CellularInterface and so CellularInterface has to be first
* in the last for that to work.
*/
/** UbloxPPPCellularInterface class.
*
* This class implements the network stack interface into the cellular
* modems on the C030 and C027 boards for 2G/3G/4G modules using
* LWIP running on the mbed MCU, connected to the modem via PPP.
*/
class UbloxPPPCellularInterface : public CellularBase,
virtual public UbloxCellularBase {
public:
/** Constructor.
*
* @param tx the UART TX data pin to which the modem is attached.
* @param rx the UART RX data pin to which the modem is attached.
* @param baud the UART baud rate.
* @param debug_on true to switch AT interface debug on, otherwise false.
*/
UbloxPPPCellularInterface(PinName tx = MDMTXD,
PinName rx = MDMRXD,
int baud = MBED_CONF_UBLOX_CELL_BAUD_RATE,
bool debug_on = false);
/* Destructor.
*/
virtual ~UbloxPPPCellularInterface();
/** Set the cellular network credentials.
*
* Please check documentation of connect() for default behaviour of APN settings.
*
* @param apn Access point name.
* @param uname optionally, username.
* @param pwd optionally, password.
*/
virtual void set_credentials(const char *apn, const char *uname = 0,
const char *pwd = 0);
/** Set the PIN code for the SIM card.
*
* @param sim_pin PIN for the SIM card.
*/
virtual void set_sim_pin(const char *sim_pin);
/** Connect to the cellular network and start the interface.
*
* Attempts to connect to a cellular network. Note: if init() has
* not been called beforehand, connect() will call it first.
*
* @param sim_pin PIN for the SIM card.
* @param apn optionally, access point name.
* @param uname optionally, username.
* @param pwd optionally, password.
* @return NSAPI_ERROR_OK on success, or negative error code on failure.
*/
virtual nsapi_error_t connect(const char *sim_pin, const char *apn = 0,
const char *uname = 0, const char *pwd = 0);
/** Attempt to connect to the cellular network.
*
* Brings up the network interface. Connects to the cellular radio
* network and then brings up the underlying network stack to be used
* by the cellular modem over PPP interface. Note: if init() has
* not been called beforehand, connect() will call it first.
* NOTE: even a failed attempt to connect will cause the modem to remain
* powered up. To power it down, call deinit().
*
* For APN setup, default behaviour is to use 'internet' as APN string and
* assuming no authentication is required, i.e., user name and password are
* not set. Optionally, a database lookup can be requested by turning on
* the APN database lookup feature. The APN database is by no means exhaustive.
* It contains a short list of some public APNs with publicly available
* user names and passwords (if required) in some particular countries only.
* Lookup is done using IMSI (International mobile subscriber identifier).
*
* The preferred method is to setup APN using 'set_credentials()' API.
*
* If you find that the AT interface returns "CONNECT" but shortly afterwards drops the connection
* then 99% of the time this will be because the APN is incorrect.
*
* @return 0 on success, negative error code on failure.
*/
virtual nsapi_error_t connect();
/** Attempt to disconnect from the network.
*
* Brings down the network interface. Shuts down the PPP interface
* of the underlying network stack. Does not bring down the Radio network.
*
* @return 0 on success, negative error code on failure.
*/
virtual nsapi_error_t disconnect();
/** Adds or removes a SIM facility lock.
*
* Can be used to enable or disable SIM PIN check at device startup.
*
* @param set can be set to true if the SIM PIN check is supposed
* to be enabled and vice versa.
* @param immediate if true, change the SIM PIN now, else set a flag
* and make the change only when connect() is called.
* If this is true and init() has not been called previously,
* it will be called first.
* @param sim_pin the current SIM PIN, must be a const. If this is not
* provided, the SIM PIN must have previously been set by a
* call to set_sim_pin().
* @return 0 on success, negative error code on failure.
*/
nsapi_error_t set_sim_pin_check(bool set, bool immediate = false,
const char *sim_pin = NULL);
/** Change the PIN for the SIM card.
*
* Provide the new PIN for your SIM card with this API. It is ONLY possible to
* change the SIM PIN when SIM PIN checking is ENABLED.
*
* @param new_pin new PIN to be used in string format, must be a const.
* @param immediate if true, change the SIM PIN now, else set a flag
* and make the change only when connect() is called.
* If this is true and init() has not been called previously,
* it will be called first.
* @param old_pin old PIN, must be a const. If this is not provided, the SIM PIN
* must have previously been set by a call to set_sim_pin().
* @return 0 on success, negative error code on failure.
*/
nsapi_error_t set_new_sim_pin(const char *new_pin, bool immediate = false,
const char *old_pin = NULL);
/** Check if the connection is currently established or not.
*
* @return true/false If the cellular module have successfully acquired a carrier and is
* connected to an external packet data network using PPP, true
* is returned, otherwise false is returned.
*/
virtual bool is_connected();
/** Get the local IP address
*
* @return Null-terminated representation of the local IP address
* or null if no IP address has been received.
*/
virtual const char *get_ip_address();
/** Get the local network mask.
*
* @return Null-terminated representation of the local network mask
* or null if no network mask has been received.
*/
virtual const char *get_netmask();
/** Get the local gateways.
*
* @return Null-terminated representation of the local gateway
* or null if no network mask has been received.
*/
virtual const char *get_gateway();
/** Call back in case connection is lost.
*
* @param fptr the function to call.
*/
void connection_status_cb(Callback<void(nsapi_error_t)> cb);
protected:
/** The APN to use.
*/
const char *_apn;
/** The user name to use.
*/
const char *_uname;
/** The password to use.
*/
const char *_pwd;
/** True if the PPP connection is active, otherwise false.
*/
bool _ppp_connection_up;
/** Provide access to the underlying stack.
*
* @return The underlying network stack.
*/
virtual NetworkStack *get_stack();
/** Get the next set of credentials from the database.
*/
void get_next_credentials(const char * config);
private:
bool _sim_pin_check_change_pending;
bool _sim_pin_check_change_pending_enabled_value;
bool _sim_pin_change_pending;
const char *_sim_pin_change_pending_new_pin_value;
Callback<void(nsapi_error_t)> _connection_status_cb;
nsapi_error_t setup_context_and_credentials();
bool set_atd();
};
#endif // NSAPI_PPP_AVAILABLE
#endif // _UBLOX_PPP_CELLULAR_INTERFACE_