mirror of https://github.com/ARMmbed/mbed-os.git
Cellular: added to reset state machine is we get disconnected so application can try again.
parent
609b0f71be
commit
d1ff9ed68d
|
@ -73,12 +73,12 @@ AT_CellularNetwork::~AT_CellularNetwork()
|
||||||
|
|
||||||
for (int type = 0; type < CellularNetwork::C_MAX; type++) {
|
for (int type = 0; type < CellularNetwork::C_MAX; type++) {
|
||||||
if (has_registration((RegistrationType)type) != RegistrationModeDisable) {
|
if (has_registration((RegistrationType)type) != RegistrationModeDisable) {
|
||||||
_at.remove_urc_handler(at_reg[type].urc_prefix, _urc_funcs[type]);
|
_at.remove_urc_handler(at_reg[type].urc_prefix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_at.remove_urc_handler("NO CARRIER", callback(this, &AT_CellularNetwork::urc_no_carrier));
|
_at.remove_urc_handler("NO CARRIER");
|
||||||
_at.remove_urc_handler("+CGEV:", callback(this, &AT_CellularNetwork::urc_cgev));
|
_at.remove_urc_handler("+CGEV:");
|
||||||
}
|
}
|
||||||
|
|
||||||
void AT_CellularNetwork::urc_no_carrier()
|
void AT_CellularNetwork::urc_no_carrier()
|
||||||
|
|
|
@ -184,6 +184,12 @@ void CellularDevice::cellular_callback(nsapi_event_t ev, intptr_t ptr)
|
||||||
}
|
}
|
||||||
} 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);
|
||||||
|
if (ev == NSAPI_EVENT_CONNECTION_STATUS_CHANGE && ptr == NSAPI_STATUS_DISCONNECTED) {
|
||||||
|
// we have been disconnected, reset state machine so that application can start connect sequence again
|
||||||
|
if (_state_machine) {
|
||||||
|
_state_machine->reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// broadcast network and cellular changes to state machine and CellularContext.
|
// broadcast network and cellular changes to state machine and CellularContext.
|
||||||
|
|
|
@ -74,6 +74,17 @@ CellularStateMachine::~CellularStateMachine()
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CellularStateMachine::reset()
|
||||||
|
{
|
||||||
|
_state = STATE_INIT;
|
||||||
|
_event_timeout = -1;
|
||||||
|
_event_id = -1;
|
||||||
|
_plmn_network_found = false;
|
||||||
|
_is_retry = false;
|
||||||
|
_active_context = false;
|
||||||
|
enter_to_state(STATE_INIT);
|
||||||
|
}
|
||||||
|
|
||||||
void CellularStateMachine::stop()
|
void CellularStateMachine::stop()
|
||||||
{
|
{
|
||||||
_queue.cancel(_event_id);
|
_queue.cancel(_event_id);
|
||||||
|
@ -85,15 +96,7 @@ void CellularStateMachine::stop()
|
||||||
_queue_thread = NULL;
|
_queue_thread = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
_state = STATE_INIT;
|
reset();
|
||||||
_next_state = _state;
|
|
||||||
_target_state = _state;
|
|
||||||
_cb_data.error = NSAPI_ERROR_OK;
|
|
||||||
_cb_data.status_data = -1;
|
|
||||||
_cb_data.final_try = false;
|
|
||||||
_event_id = -1;
|
|
||||||
_is_retry = false;
|
|
||||||
|
|
||||||
if (_power) {
|
if (_power) {
|
||||||
_cellularDevice.close_power();
|
_cellularDevice.close_power();
|
||||||
_power = NULL;
|
_power = NULL;
|
||||||
|
|
|
@ -135,6 +135,9 @@ private:
|
||||||
*/
|
*/
|
||||||
void cellular_event_changed(nsapi_event_t ev, intptr_t ptr);
|
void cellular_event_changed(nsapi_event_t ev, intptr_t ptr);
|
||||||
|
|
||||||
|
/** Reset the state machine to init state. After reset state machine can be used again to run to wanted state.
|
||||||
|
*/
|
||||||
|
void reset();
|
||||||
private:
|
private:
|
||||||
bool power_on();
|
bool power_on();
|
||||||
bool open_sim();
|
bool open_sim();
|
||||||
|
|
Loading…
Reference in New Issue