Cellular: Fixed backward compatibility with OnBoardCellularInterface and set default values in NetworkInterfaceDefaults.cpp.

pull/8579/head
Teppo Järvelin 2018-11-09 09:14:37 +02:00
parent 1a047efade
commit 3f6e088782
11 changed files with 91 additions and 30 deletions

View File

@ -119,7 +119,7 @@ public: // from NetworkInterface
virtual const char *get_netmask() = 0; virtual const char *get_netmask() = 0;
virtual const char *get_gateway() = 0; virtual const char *get_gateway() = 0;
virtual bool is_connected() = 0; virtual bool is_connected() = 0;
static CellularBase *get_default_instance(); static CellularContext *get_default_instance();
// Operations, can be sync/async. Also Connect() is this kind of operations, inherited from NetworkInterface above. // Operations, can be sync/async. Also Connect() is this kind of operations, inherited from NetworkInterface above.

View File

@ -34,10 +34,6 @@ class FileHandle;
const int MAX_PIN_SIZE = 8; const int MAX_PIN_SIZE = 8;
const int MAX_PLMN_SIZE = 16; const int MAX_PLMN_SIZE = 16;
#ifndef MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN
#define MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN NULL
#endif
/** /**
* Class CellularDevice * Class CellularDevice
* *
@ -73,7 +69,7 @@ public:
* @return new instance of class CellularContext or NULL in case of failure * @return new instance of class CellularContext or NULL in case of failure
* *
*/ */
virtual CellularContext *create_context(FileHandle *fh = NULL, const char *apn = MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN) = 0; virtual CellularContext *create_context(FileHandle *fh = NULL, const char *apn = NULL) = 0;
/** Deletes the given CellularContext instance /** Deletes the given CellularContext instance
* *

View File

@ -52,8 +52,8 @@ AT_CellularContext::AT_CellularContext(ATHandler &at, CellularDevice *device, co
_is_context_active = false; _is_context_active = false;
_is_context_activated = false; _is_context_activated = false;
_apn = apn; _apn = apn;
_uname = MBED_CONF_NSAPI_DEFAULT_CELLULAR_USERNAME; _uname = NULL;
_pwd = MBED_CONF_NSAPI_DEFAULT_CELLULAR_PASSWORD; _pwd = NULL;
_status_cb = NULL; _status_cb = NULL;
_cid = -1; _cid = -1;
_new_context_set = false; _new_context_set = false;
@ -465,6 +465,7 @@ nsapi_error_t AT_CellularContext::do_activate_context()
// try to find or create context with suitable stack // try to find or create context with suitable stack
if (get_context()) { if (get_context()) {
#if NSAPI_PPP_AVAILABLE #if NSAPI_PPP_AVAILABLE
_at.unlock();
// in PPP we don't activate any context but leave it to PPP stack // in PPP we don't activate any context but leave it to PPP stack
return err; return err;
#endif // NSAPI_PPP_AVAILABLE #endif // NSAPI_PPP_AVAILABLE
@ -483,6 +484,7 @@ nsapi_error_t AT_CellularContext::do_activate_context()
// do check for stack to validate that we have support for stack // do check for stack to validate that we have support for stack
if (!get_stack()) { if (!get_stack()) {
_at.unlock();
tr_error("No cellular stack!"); tr_error("No cellular stack!");
return NSAPI_ERROR_UNSUPPORTED; return NSAPI_ERROR_UNSUPPORTED;
} }

View File

@ -27,7 +27,7 @@ namespace mbed {
class AT_CellularContext : public CellularContext, public AT_CellularBase { class AT_CellularContext : public CellularContext, public AT_CellularBase {
public: public:
AT_CellularContext(ATHandler &at, CellularDevice *device, const char *apn = MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN); AT_CellularContext(ATHandler &at, CellularDevice *device, const char *apn = 0);
virtual ~AT_CellularContext(); virtual ~AT_CellularContext();
// from CellularBase/NetworkInterface // from CellularBase/NetworkInterface
@ -47,7 +47,7 @@ public:
virtual const char *get_netmask(); virtual const char *get_netmask();
virtual const char *get_gateway(); virtual const char *get_gateway();
private: // from CellularContext // from CellularContext
virtual nsapi_error_t get_pdpcontext_params(pdpContextList_t &params_list); virtual nsapi_error_t get_pdpcontext_params(pdpContextList_t &params_list);
virtual nsapi_error_t get_rate_control(CellularContext::RateControlExceptionReports &reports, virtual nsapi_error_t get_rate_control(CellularContext::RateControlExceptionReports &reports,
CellularContext::RateControlUplinkTimeUnit &time_unit, int &uplink_rate); CellularContext::RateControlUplinkTimeUnit &time_unit, int &uplink_rate);

View File

@ -41,7 +41,7 @@ public:
AT_CellularDevice(FileHandle *fh); AT_CellularDevice(FileHandle *fh);
virtual ~AT_CellularDevice(); virtual ~AT_CellularDevice();
virtual CellularContext *create_context(FileHandle *fh = NULL, const char *apn = MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN); virtual CellularContext *create_context(FileHandle *fh = NULL, const char *apn = NULL);
virtual void delete_context(CellularContext *context); virtual void delete_context(CellularContext *context);
virtual CellularNetwork *open_network(FileHandle *fh = NULL); virtual CellularNetwork *open_network(FileHandle *fh = NULL);

View File

@ -18,14 +18,18 @@
namespace mbed { namespace mbed {
#ifdef CELLULAR_DEVICE #ifdef CELLULAR_DEVICE
MBED_WEAK CellularBase *CellularContext::get_default_instance() MBED_WEAK CellularContext *CellularContext::get_default_instance()
{ {
// Uses default APN, uname, password from mbed_app.json // Uses default APN, uname, password from mbed_app.json
static CellularDevice *dev = CellularDevice::get_default_instance(); static CellularDevice *dev = CellularDevice::get_default_instance();
return dev->create_context(); if (!dev) {
return NULL;
}
static CellularContext *context = dev->create_context();
return context;
} }
#else #else
MBED_WEAK CellularBase *CellularContext::get_default_instance() MBED_WEAK CellularContext *CellularContext::get_default_instance()
{ {
return NULL; return NULL;
} }

View File

@ -53,8 +53,8 @@ MBED_WEAK CellularDevice *CellularDevice::get_default_instance()
CellularDevice::CellularDevice(FileHandle *fh) : _network_ref_count(0), _sms_ref_count(0),_power_ref_count(0), _sim_ref_count(0), CellularDevice::CellularDevice(FileHandle *fh) : _network_ref_count(0), _sms_ref_count(0),_power_ref_count(0), _sim_ref_count(0),
_info_ref_count(0), _fh(fh), _queue(5 * EVENTS_EVENT_SIZE), _state_machine(0), _nw(0) _info_ref_count(0), _fh(fh), _queue(5 * EVENTS_EVENT_SIZE), _state_machine(0), _nw(0)
{ {
set_sim_pin(MBED_CONF_NSAPI_DEFAULT_CELLULAR_SIM_PIN); set_sim_pin(NULL);
set_plmn(MBED_CONF_NSAPI_DEFAULT_CELLULAR_PLMN); set_plmn(NULL);
} }
CellularDevice::~CellularDevice() CellularDevice::~CellularDevice()
@ -171,14 +171,14 @@ void CellularDevice::cellular_callback(nsapi_event_t ev, intptr_t ptr)
_nw = open_network(_fh); _nw = open_network(_fh);
// Attach to network so we can get update status from the network // Attach to network so we can get update status from the network
_nw->attach(callback(this, &CellularDevice::cellular_callback)); _nw->attach(callback(this, &CellularDevice::cellular_callback));
if (strlen(_plmn)) {
_state_machine->set_plmn(_plmn);
}
} else if (cell_ev == CellularSIMStatusChanged && ptr_data->error == NSAPI_ERROR_OK && } else if (cell_ev == CellularSIMStatusChanged && ptr_data->error == NSAPI_ERROR_OK &&
ptr_data->status_data == CellularSIM::SimStatePinNeeded) { ptr_data->status_data == CellularSIM::SimStatePinNeeded) {
if (strlen(_sim_pin)) { if (strlen(_sim_pin)) {
_state_machine->set_sim_pin(_sim_pin); _state_machine->set_sim_pin(_sim_pin);
} }
if (strlen(_plmn)) {
_state_machine->set_plmn(_plmn);
}
} }
} else { } else {
tr_debug("Device: network_callback called with event: %d, ptr: %d", ev, ptr); tr_debug("Device: network_callback called with event: %d, ptr: %d", ev, ptr);

View File

@ -110,8 +110,29 @@ MBED_WEAK NetworkInterface *NetworkInterface::get_target_default_instance()
#elif MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE == CELLULAR #elif MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE == CELLULAR
MBED_WEAK NetworkInterface *NetworkInterface::get_target_default_instance() MBED_WEAK NetworkInterface *NetworkInterface::get_target_default_instance()
{ {
return CellularBase::get_default_instance(); CellularBase *cellular = CellularBase::get_default_instance();
if (!cellular) {
return NULL;
}
/* CellularBase is expected to attempt to work without any parameters - we
* will try, at least.
*/
#ifdef MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN
#ifndef MBED_CONF_NSAPI_DEFAULT_CELLULAR_USERNAME
#define MBED_CONF_NSAPI_DEFAULT_CELLULAR_USERNAME NULL
#endif
#ifndef MBED_CONF_NSAPI_DEFAULT_CELLULAR_PASSWORD
#define MBED_CONF_NSAPI_DEFAULT_CELLULAR_PASSWORD NULL
#endif
cellular->set_credentials(MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN, MBED_CONF_NSAPI_DEFAULT_CELLULAR_USERNAME, MBED_CONF_NSAPI_DEFAULT_CELLULAR_PASSWORD);
#endif
#ifdef MBED_CONF_NSAPI_DEFAULT_CELLULAR_SIM_PIN
cellular->set_sim_pin(MBED_CONF_NSAPI_DEFAULT_CELLULAR_SIM_PIN);
#endif
#ifdef MBED_CONF_NSAPI_DEFAULT_CELLULAR_PLMN
cellular->set_plmn(MBED_CONF_NSAPI_DEFAULT_CELLULAR_PLMN);
#endif
return cellular;
} }
#elif defined(MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE) #elif defined(MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE)
/* If anyone invents a new JSON value, they must have their own default weak /* If anyone invents a new JSON value, they must have their own default weak

View File

@ -60,13 +60,19 @@ void OnboardCellularInterface::modem_power_down()
} }
#endif #endif
#endif // CELLULAR_DEVICE #endif // CELLULAR_DEVICE
#ifdef ONBOARD_CELLULAR_INTERFACE_AVAILABLE #ifdef CELLULAR_DEVICE
MBED_WEAK CellularBase *CellularBase::get_target_default_instance() MBED_WEAK CellularBase *CellularBase::get_target_default_instance()
{ {
return mbed::CellularContext::get_default_instance(); return CellularContext::get_default_instance();
}
#elif defined ONBOARD_CELLULAR_INTERFACE_AVAILABLE
MBED_WEAK CellularBase *CellularBase::get_target_default_instance()
{
static OnboardCellularInterface cellular;
return &cellular;
} }
#else #else
MBED_WEAK CellularBase *CellularBase::get_target_default_instance() MBED_WEAK CellularBase *CellularBase::get_target_default_instance()

View File

@ -18,7 +18,39 @@
#include "CellularContext.h" #include "CellularContext.h"
#ifdef CELLULAR_DEVICE #ifdef CELLULAR_DEVICE
typedef mbed::CellularContext OnboardCellularInterface; using namespace mbed;
MBED_DEPRECATED_SINCE("mbed-os-5.9", "This API will be deprecated, use CellularBase::get_default_instance() instead.")
class OnboardCellularInterface : public CellularBase
{
public:
OnboardCellularInterface() {
context = CellularContext::get_default_instance();
MBED_ASSERT(context != NULL);
}
public: // from NetworkInterface
virtual nsapi_error_t set_blocking(bool blocking) {return context->set_blocking(blocking);}
virtual NetworkStack *get_stack() {return context->get_stack();}
virtual const char *get_ip_address() {return context->get_ip_address();}
virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb) {context->attach(status_cb);}
virtual nsapi_error_t connect() {return context->connect();}
virtual nsapi_error_t disconnect() {return context->disconnect();}
// from CellularBase
virtual void set_plmn(const char *plmn) {context->set_plmn(plmn);}
virtual void set_sim_pin(const char *sim_pin) {context->set_sim_pin(sim_pin);}
virtual nsapi_error_t connect(const char *sim_pin, const char *apn = 0, const char *uname = 0,
const char *pwd = 0)
{return context->connect(sim_pin, apn, uname, pwd);}
virtual void set_credentials(const char *apn, const char *uname = 0, const char *pwd = 0)
{context->set_credentials(apn, uname, pwd);}
virtual const char *get_netmask() {return context->get_netmask();}
virtual const char *get_gateway() {return context->get_gateway();}
virtual bool is_connected() {return context->is_connected();}
private:
CellularContext *context;
};
#define ONBOARD_CELLULAR_INTERFACE_AVAILABLE #define ONBOARD_CELLULAR_INTERFACE_AVAILABLE
#elif MODEM_ON_BOARD && MODEM_ON_BOARD_UART && NSAPI_PPP_AVAILABLE #elif MODEM_ON_BOARD && MODEM_ON_BOARD_UART && NSAPI_PPP_AVAILABLE

View File

@ -6,11 +6,11 @@
"default-wifi-ssid": null, "default-wifi-ssid": null,
"default-wifi-password": null, "default-wifi-password": null,
"default-wifi-security": "NONE", "default-wifi-security": "NONE",
"default-cellular-plmn": 0, "default-cellular-plmn": null,
"default-cellular-sim-pin": 0, "default-cellular-sim-pin": null,
"default-cellular-apn": 0, "default-cellular-apn": null,
"default-cellular-username": 0, "default-cellular-username": null,
"default-cellular-password": 0, "default-cellular-password": null,
"default-mesh-type": { "default-mesh-type": {
"help": "Configuration type for MeshInterface::get_default_instance(). [LOWPAN/THREAD]", "help": "Configuration type for MeshInterface::get_default_instance(). [LOWPAN/THREAD]",
"value": "THREAD" "value": "THREAD"