@@ -43,9 +43,9 @@ const int DEVICE_READY = 0x04;
43
43
44
44
namespace mbed {
45
45
46
- CellularStateMachine::CellularStateMachine (CellularDevice &device, events::EventQueue &queue) :
46
+ CellularStateMachine::CellularStateMachine (CellularDevice &device, events::EventQueue &queue, CellularNetwork &nw ) :
47
47
_cellularDevice (device), _state(STATE_INIT), _next_state(_state), _target_state(_state),
48
- _event_status_cb (0 ), _network(0 ), _queue(queue), _queue_thread(0 ), _sim_pin(0 ),
48
+ _event_status_cb (0 ), _network(nw ), _queue(queue), _queue_thread(0 ), _sim_pin(0 ),
49
49
_retry_count (0 ), _event_timeout(-1 ), _event_id(-1 ), _plmn(0 ), _command_success(false ),
50
50
_is_retry (false ), _cb_data(), _current_event(NSAPI_EVENT_CONNECTION_STATUS_CHANGE), _status(0 )
51
51
{
@@ -99,11 +99,6 @@ void CellularStateMachine::stop()
99
99
100
100
reset ();
101
101
_event_id = STM_STOPPED;
102
-
103
- if (_network) {
104
- _cellularDevice.close_network ();
105
- _network = NULL ;
106
- }
107
102
}
108
103
109
104
bool CellularStateMachine::power_on ()
@@ -163,7 +158,7 @@ bool CellularStateMachine::open_sim()
163
158
if (sim_ready) {
164
159
// If plmn is set, we should it right after sim is opened so that registration is forced to correct network.
165
160
if (_plmn && strlen (_plmn)) {
166
- _cb_data.error = _network-> set_registration (_plmn);
161
+ _cb_data.error = _network. set_registration (_plmn);
167
162
tr_debug (" STM: manual set_registration: %d, plmn: %s" , _cb_data.error , _plmn);
168
163
if (_cb_data.error ) {
169
164
return false ;
@@ -204,7 +199,7 @@ bool CellularStateMachine::get_network_registration(CellularNetwork::Registratio
204
199
is_registered = false ;
205
200
bool is_roaming = false ;
206
201
CellularNetwork::registration_params_t reg_params;
207
- _cb_data.error = _network-> get_registration_params (type, reg_params);
202
+ _cb_data.error = _network. get_registration_params (type, reg_params);
208
203
209
204
if (_cb_data.error != NSAPI_ERROR_OK) {
210
205
if (_cb_data.error != NSAPI_ERROR_UNSUPPORTED) {
@@ -329,14 +324,10 @@ bool CellularStateMachine::device_ready()
329
324
{
330
325
tr_info (" Modem ready" );
331
326
332
- if (!_network) {
333
- _network = _cellularDevice.open_network ();
334
- }
335
-
336
327
#ifdef MBED_CONF_CELLULAR_RADIO_ACCESS_TECHNOLOGY
337
328
MBED_ASSERT (MBED_CONF_CELLULAR_RADIO_ACCESS_TECHNOLOGY >= CellularNetwork::RAT_GSM &&
338
329
MBED_CONF_CELLULAR_RADIO_ACCESS_TECHNOLOGY < CellularNetwork::RAT_UNKNOWN);
339
- nsapi_error_t err = _network-> set_access_technology ((CellularNetwork::RadioAccessTechnology)MBED_CONF_CELLULAR_RADIO_ACCESS_TECHNOLOGY);
330
+ nsapi_error_t err = _network. set_access_technology ((CellularNetwork::RadioAccessTechnology)MBED_CONF_CELLULAR_RADIO_ACCESS_TECHNOLOGY);
340
331
if (err != NSAPI_ERROR_OK && err != NSAPI_ERROR_UNSUPPORTED) {
341
332
tr_warning (" Failed to set access technology to %d" , MBED_CONF_CELLULAR_RADIO_ACCESS_TECHNOLOGY);
342
333
return false ;
@@ -382,7 +373,7 @@ void CellularStateMachine::state_sim_pin()
382
373
if (open_sim ()) {
383
374
bool success = false ;
384
375
for (int type = 0 ; type < CellularNetwork::C_MAX; type++) {
385
- _cb_data.error = _network-> set_registration_urc ((CellularNetwork::RegistrationType)type, true );
376
+ _cb_data.error = _network. set_registration_urc ((CellularNetwork::RegistrationType)type, true );
386
377
if (!_cb_data.error && (type == CellularNetwork::C_EREG || type == CellularNetwork::C_GREG)) {
387
378
success = true ;
388
379
}
@@ -393,19 +384,19 @@ void CellularStateMachine::state_sim_pin()
393
384
return ;
394
385
}
395
386
396
- if (_network-> is_active_context ()) { // check if context was already activated
387
+ if (_network. is_active_context ()) { // check if context was already activated
397
388
tr_debug (" Active context found." );
398
389
_status |= ACTIVE_PDP_CONTEXT;
399
390
}
400
391
CellularNetwork::AttachStatus status = CellularNetwork::Detached; // check if modem is already attached to a network
401
- if (_network-> get_attach (status) == NSAPI_ERROR_OK && status == CellularNetwork::Attached) {
392
+ if (_network. get_attach (status) == NSAPI_ERROR_OK && status == CellularNetwork::Attached) {
402
393
_status |= ATTACHED_TO_NETWORK;
403
394
tr_debug (" Cellular already attached." );
404
395
}
405
396
406
397
// if packet domain event reporting is not set it's not a stopper. We might lack some events when we are
407
398
// dropped from the network.
408
- _cb_data.error = _network-> set_packet_domain_event_reporting (true );
399
+ _cb_data.error = _network. set_packet_domain_event_reporting (true );
409
400
if (_cb_data.error == NSAPI_STATUS_ERROR_UNSUPPORTED) {
410
401
tr_warning (" Packet domain event reporting not supported!" );
411
402
} else if (_cb_data.error ) {
@@ -434,7 +425,7 @@ void CellularStateMachine::state_registering()
434
425
} else {
435
426
_cellularDevice.set_timeout (TIMEOUT_REGISTRATION);
436
427
if (!_command_success && !_plmn) { // don't call set_registration twice for manual registration
437
- _cb_data.error = _network-> set_registration (_plmn);
428
+ _cb_data.error = _network. set_registration (_plmn);
438
429
_command_success = (_cb_data.error == NSAPI_ERROR_OK);
439
430
}
440
431
retry_state_or_fail ();
@@ -446,7 +437,7 @@ void CellularStateMachine::state_attaching()
446
437
_cellularDevice.set_timeout (TIMEOUT_CONNECT);
447
438
tr_info (" Attaching network (timeout %d s)" , TIMEOUT_CONNECT / 1000 );
448
439
if (_status != ATTACHED_TO_NETWORK) {
449
- _cb_data.error = _network-> set_attach ();
440
+ _cb_data.error = _network. set_attach ();
450
441
}
451
442
if (_cb_data.error == NSAPI_ERROR_OK) {
452
443
if (_event_status_cb) {
@@ -534,14 +525,12 @@ bool CellularStateMachine::get_current_status(CellularStateMachine::CellularStat
534
525
void CellularStateMachine::event ()
535
526
{
536
527
#if MBED_CONF_MBED_TRACE_ENABLE
537
- if (_network) {
538
- int rssi;
539
- if (_network->get_signal_quality (rssi) == NSAPI_ERROR_OK) {
540
- if (rssi == CellularNetwork::SignalQualityUnknown) {
541
- tr_info (" RSSI unknown" );
542
- } else {
543
- tr_info (" RSSI %d dBm" , rssi);
544
- }
528
+ int rssi;
529
+ if (_network.get_signal_quality (rssi) == NSAPI_ERROR_OK) {
530
+ if (rssi == CellularNetwork::SignalQualityUnknown) {
531
+ tr_info (" RSSI unknown" );
532
+ } else {
533
+ tr_info (" RSSI %d dBm" , rssi);
545
534
}
546
535
}
547
536
#endif
@@ -643,7 +632,7 @@ void CellularStateMachine::cellular_event_changed(nsapi_event_t ev, intptr_t ptr
643
632
if ((cellular_connection_status_t )ev == CellularRegistrationStatusChanged && _state == STATE_REGISTERING_NETWORK) {
644
633
// expect packet data so only these states are valid
645
634
CellularNetwork::registration_params_t reg_params;
646
- nsapi_error_t err = _network-> get_registration_params (reg_params);
635
+ nsapi_error_t err = _network. get_registration_params (reg_params);
647
636
648
637
if (err == NSAPI_ERROR_OK && (reg_params._type == CellularNetwork::C_EREG || reg_params._type == CellularNetwork::C_GREG)) {
649
638
if ((data->status_data == CellularNetwork::RegisteredHomeNetwork ||
0 commit comments