mirror of https://github.com/ARMmbed/mbed-os.git
Cellular: Separated context activation in CellularConnectionSFM.
parent
a463b075db
commit
94ecc4567b
|
@ -79,6 +79,10 @@ void CellularConnectionFSM::stop()
|
||||||
if (_cellularDevice) {
|
if (_cellularDevice) {
|
||||||
_cellularDevice->close_power();
|
_cellularDevice->close_power();
|
||||||
_cellularDevice->close_network();
|
_cellularDevice->close_network();
|
||||||
|
_cellularDevice->close_sim();
|
||||||
|
_power = NULL;
|
||||||
|
_network = NULL;
|
||||||
|
_sim = NULL;
|
||||||
}
|
}
|
||||||
if (_queue_thread) {
|
if (_queue_thread) {
|
||||||
_queue_thread->terminate();
|
_queue_thread->terminate();
|
||||||
|
@ -289,7 +293,7 @@ void CellularConnectionFSM::report_failure(const char* msg)
|
||||||
|
|
||||||
const char* CellularConnectionFSM::get_state_string(CellularState state)
|
const char* CellularConnectionFSM::get_state_string(CellularState state)
|
||||||
{
|
{
|
||||||
static const char *strings[] = { "Init", "Power", "Device ready", "SIM pin", "Registering network", "Attaching network", "Connecting network", "Connected"};
|
static const char *strings[] = { "Init", "Power", "Device ready", "SIM pin", "Registering network", "Attaching network", "Activating PDP Context", "Connecting network", "Connected"};
|
||||||
return strings[state];
|
return strings[state];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -446,7 +450,7 @@ void CellularConnectionFSM::state_attaching()
|
||||||
CellularNetwork::AttachStatus attach_status;
|
CellularNetwork::AttachStatus attach_status;
|
||||||
if (get_attach_network(attach_status)) {
|
if (get_attach_network(attach_status)) {
|
||||||
if (attach_status == CellularNetwork::Attached) {
|
if (attach_status == CellularNetwork::Attached) {
|
||||||
enter_to_state(STATE_CONNECTING_NETWORK);
|
enter_to_state(STATE_ACTIVATING_PDP_CONTEXT);
|
||||||
} else {
|
} else {
|
||||||
set_attach_network();
|
set_attach_network();
|
||||||
retry_state_or_fail();
|
retry_state_or_fail();
|
||||||
|
@ -456,6 +460,18 @@ void CellularConnectionFSM::state_attaching()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CellularConnectionFSM::state_activating_pdp_context()
|
||||||
|
{
|
||||||
|
_cellularDevice->set_timeout(TIMEOUT_CONNECT);
|
||||||
|
tr_info("Activate PDP Context (timeout %d ms)", TIMEOUT_CONNECT);
|
||||||
|
if (_network->activate_context() == NSAPI_ERROR_OK) {
|
||||||
|
// when using modems stack connect is synchronous
|
||||||
|
_next_state = STATE_CONNECTING_NETWORK;
|
||||||
|
} else {
|
||||||
|
retry_state_or_fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CellularConnectionFSM::state_connect_to_network()
|
void CellularConnectionFSM::state_connect_to_network()
|
||||||
{
|
{
|
||||||
_cellularDevice->set_timeout(TIMEOUT_CONNECT);
|
_cellularDevice->set_timeout(TIMEOUT_CONNECT);
|
||||||
|
@ -501,6 +517,9 @@ void CellularConnectionFSM::event()
|
||||||
case STATE_ATTACHING_NETWORK:
|
case STATE_ATTACHING_NETWORK:
|
||||||
state_attaching();
|
state_attaching();
|
||||||
break;
|
break;
|
||||||
|
case STATE_ACTIVATING_PDP_CONTEXT:
|
||||||
|
state_activating_pdp_context();
|
||||||
|
break;
|
||||||
case STATE_CONNECTING_NETWORK:
|
case STATE_CONNECTING_NETWORK:
|
||||||
state_connect_to_network();
|
state_connect_to_network();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -59,6 +59,7 @@ public:
|
||||||
STATE_SIM_PIN,
|
STATE_SIM_PIN,
|
||||||
STATE_REGISTERING_NETWORK,
|
STATE_REGISTERING_NETWORK,
|
||||||
STATE_ATTACHING_NETWORK,
|
STATE_ATTACHING_NETWORK,
|
||||||
|
STATE_ACTIVATING_PDP_CONTEXT,
|
||||||
STATE_CONNECTING_NETWORK,
|
STATE_CONNECTING_NETWORK,
|
||||||
STATE_CONNECTED
|
STATE_CONNECTED
|
||||||
};
|
};
|
||||||
|
@ -120,10 +121,10 @@ public:
|
||||||
CellularSIM* get_sim();
|
CellularSIM* get_sim();
|
||||||
|
|
||||||
/** Change cellular connection to the target state
|
/** Change cellular connection to the target state
|
||||||
* @param state to continue
|
* @param state to continue. Default is to connect.
|
||||||
* @return see nsapi_error_t, 0 on success
|
* @return see nsapi_error_t, 0 on success
|
||||||
*/
|
*/
|
||||||
nsapi_error_t continue_to_state(CellularState state);
|
nsapi_error_t continue_to_state(CellularState state = STATE_CONNECTED);
|
||||||
|
|
||||||
/** Set cellular device SIM PIN code
|
/** Set cellular device SIM PIN code
|
||||||
* @param sim_pin PIN code
|
* @param sim_pin PIN code
|
||||||
|
@ -157,6 +158,7 @@ private:
|
||||||
void state_sim_pin();
|
void state_sim_pin();
|
||||||
void state_registering();
|
void state_registering();
|
||||||
void state_attaching();
|
void state_attaching();
|
||||||
|
void state_activating_pdp_context();
|
||||||
void state_connect_to_network();
|
void state_connect_to_network();
|
||||||
void state_connected();
|
void state_connected();
|
||||||
void enter_to_state(CellularState state);
|
void enter_to_state(CellularState state);
|
||||||
|
|
|
@ -259,6 +259,8 @@ nsapi_error_t AT_CellularNetwork::activate_context()
|
||||||
// If new PDP context was created and failed to activate, delete it
|
// If new PDP context was created and failed to activate, delete it
|
||||||
if (err != NSAPI_ERROR_OK && _new_context_set) {
|
if (err != NSAPI_ERROR_OK && _new_context_set) {
|
||||||
delete_current_context();
|
delete_current_context();
|
||||||
|
} else if (err == NSAPI_ERROR_OK) {
|
||||||
|
_is_context_active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_at.unlock();
|
_at.unlock();
|
||||||
|
|
Loading…
Reference in New Issue