Skip to content

Commit 2a9bedd

Browse files
author
Teemu Kultala
committed
cellular: eps ciot optimization network support check
-added an API for checking network eps ciot optimization support -renamed the API for getting the UE parameters -the API for setting the UE parameters includes now a callback, which will be called once network support for eps ciot optimization is known
1 parent bc8515b commit 2a9bedd

File tree

6 files changed

+102
-45
lines changed

6 files changed

+102
-45
lines changed

UNITTESTS/features/cellular/framework/AT/at_cellularnetwork/at_cellularnetworktest.cpp

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -498,37 +498,51 @@ TEST_F(TestAT_CellularNetwork, test_AT_CellularNetwork_set_ciot_optimization_con
498498

499499
AT_CellularNetwork cn(at);
500500
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
501-
EXPECT_TRUE(NSAPI_ERROR_OK == cn.set_ciot_optimization_config(CellularNetwork::SUPPORTED_UE_OPT_NO_SUPPORT, CellularNetwork::PREFERRED_UE_OPT_NO_PREFERENCE));
501+
EXPECT_TRUE(NSAPI_ERROR_OK == cn.set_ciot_optimization_config(CellularNetwork::CIOT_OPT_NO_SUPPORT, CellularNetwork::PREFERRED_UE_OPT_NO_PREFERENCE, NULL));
502502

503503
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
504-
EXPECT_TRUE(NSAPI_ERROR_DEVICE_ERROR == cn.set_ciot_optimization_config(CellularNetwork::SUPPORTED_UE_OPT_NO_SUPPORT, CellularNetwork::PREFERRED_UE_OPT_NO_PREFERENCE));
504+
EXPECT_TRUE(NSAPI_ERROR_DEVICE_ERROR == cn.set_ciot_optimization_config(CellularNetwork::CIOT_OPT_NO_SUPPORT, CellularNetwork::PREFERRED_UE_OPT_NO_PREFERENCE, NULL));
505505
}
506506

507-
TEST_F(TestAT_CellularNetwork, test_AT_CellularNetwork_get_ciot_optimization_config)
507+
TEST_F(TestAT_CellularNetwork, test_AT_CellularNetwork_get_ciot_ue_optimization_config)
508508
{
509509
EventQueue que;
510510
FileHandle_stub fh1;
511511
ATHandler at(&fh1, que, 0, ",");
512512

513513
AT_CellularNetwork cn(at);
514-
CellularNetwork::Supported_UE_Opt sup = CellularNetwork::SUPPORTED_UE_OPT_NO_SUPPORT;
515-
CellularNetwork::Preferred_UE_Opt pref = CellularNetwork::PREFERRED_UE_OPT_NO_PREFERENCE;
514+
CellularNetwork::CIoT_Supported_Opt sup = CellularNetwork::CIOT_OPT_NO_SUPPORT;
515+
CellularNetwork::CIoT_Preferred_UE_Opt pref = CellularNetwork::PREFERRED_UE_OPT_NO_PREFERENCE;
516516
ATHandler_stub::int_value = 1;
517517
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
518-
EXPECT_TRUE(NSAPI_ERROR_OK == cn.get_ciot_optimization_config(sup, pref));
519-
EXPECT_TRUE(sup == CellularNetwork::SUPPORTED_UE_OPT_CONTROL_PLANE);
518+
EXPECT_TRUE(NSAPI_ERROR_OK == cn.get_ciot_ue_optimization_config(sup, pref));
519+
EXPECT_TRUE(sup == CellularNetwork::CIOT_OPT_CONTROL_PLANE);
520520
EXPECT_TRUE(pref == CellularNetwork::PREFERRED_UE_OPT_CONTROL_PLANE);
521521

522-
sup = CellularNetwork::SUPPORTED_UE_OPT_NO_SUPPORT;
522+
sup = CellularNetwork::CIOT_OPT_NO_SUPPORT;
523523
pref = CellularNetwork::PREFERRED_UE_OPT_NO_PREFERENCE;
524524
ATHandler_stub::int_value = 1;
525525
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
526526
ATHandler_stub::nsapi_error_ok_counter = 0;
527-
EXPECT_TRUE(NSAPI_ERROR_DEVICE_ERROR == cn.get_ciot_optimization_config(sup, pref));
528-
EXPECT_TRUE(sup == CellularNetwork::SUPPORTED_UE_OPT_NO_SUPPORT);
527+
EXPECT_TRUE(NSAPI_ERROR_DEVICE_ERROR == cn.get_ciot_ue_optimization_config(sup, pref));
528+
EXPECT_TRUE(sup == CellularNetwork::CIOT_OPT_NO_SUPPORT);
529529
EXPECT_TRUE(pref == CellularNetwork::PREFERRED_UE_OPT_NO_PREFERENCE);
530530
}
531531

532+
TEST_F(TestAT_CellularNetwork, test_AT_CellularNetwork_get_ciot_network_optimization_config)
533+
{
534+
EventQueue que;
535+
FileHandle_stub fh1;
536+
ATHandler at(&fh1, que, 0, ",");
537+
538+
AT_CellularNetwork cn(at);
539+
CellularNetwork::CIoT_Supported_Opt sup = CellularNetwork::CIOT_OPT_NO_SUPPORT;
540+
ATHandler_stub::int_value = 1;
541+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
542+
EXPECT_TRUE(NSAPI_ERROR_OK == cn.get_ciot_network_optimization_config(sup));
543+
EXPECT_TRUE(sup == CellularNetwork::CIOT_OPT_MAX);
544+
}
545+
532546
TEST_F(TestAT_CellularNetwork, test_AT_CellularNetwork_get_signal_quality)
533547
{
534548
EventQueue que;

UNITTESTS/stubs/AT_CellularNetwork_stub.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,20 @@ nsapi_error_t AT_CellularNetwork::scan_plmn(operList_t &operators, int &opsCount
108108
return NSAPI_ERROR_OK;
109109
}
110110

111-
nsapi_error_t AT_CellularNetwork::set_ciot_optimization_config(Supported_UE_Opt supported_opt,
112-
Preferred_UE_Opt preferred_opt)
111+
nsapi_error_t AT_CellularNetwork::set_ciot_optimization_config(CIoT_Supported_Opt supported_opt,
112+
CIoT_Preferred_UE_Opt preferred_opt,
113+
Callback<void(CIoT_Supported_Opt)> network_support_cb)
113114
{
114115
return NSAPI_ERROR_OK;
115116
}
116117

117-
nsapi_error_t AT_CellularNetwork::get_ciot_optimization_config(Supported_UE_Opt &supported_opt,
118-
Preferred_UE_Opt &preferred_opt)
118+
nsapi_error_t AT_CellularNetwork::get_ciot_ue_optimization_config(CIoT_Supported_Opt &supported_opt,
119+
CIoT_Preferred_UE_Opt &preferred_opt)
120+
{
121+
return NSAPI_ERROR_OK;
122+
}
123+
124+
nsapi_error_t AT_CellularNetwork::get_ciot_network_optimization_config(CIoT_Supported_Opt &supported_opt)
119125
{
120126
return NSAPI_ERROR_OK;
121127
}

features/cellular/TESTS/api/cellular_network/main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,9 @@ static void test_other()
224224
#endif
225225

226226
// TELIT_HE910 and QUECTEL_BG96 just gives an error and no specific error number so we can't know is this real error or that modem/network does not support the command
227-
CellularNetwork::Supported_UE_Opt supported_opt = CellularNetwork::SUPPORTED_UE_OPT_MAX;
228-
CellularNetwork::Preferred_UE_Opt preferred_opt = CellularNetwork::PREFERRED_UE_OPT_MAX;
229-
err = nw->get_ciot_optimization_config(supported_opt, preferred_opt);
227+
CellularNetwork::CIoT_Supported_Opt supported_opt = CellularNetwork::CIOT_OPT_MAX;
228+
CellularNetwork::CIoT_Preferred_UE_Opt preferred_opt = CellularNetwork::PREFERRED_UE_OPT_MAX;
229+
err = nw->get_ciot_ue_optimization_config(supported_opt, preferred_opt);
230230
TEST_ASSERT(err == NSAPI_ERROR_OK || err == NSAPI_ERROR_DEVICE_ERROR);
231231
if (err == NSAPI_ERROR_DEVICE_ERROR) {
232232
// if device error then we must check was that really device error or that modem/network does not support the commands
@@ -236,11 +236,11 @@ static void test_other()
236236
(((AT_CellularNetwork *)nw)->get_device_error().errCode == 50))); // 50 == incorrect parameters // seen in wise_1570 for not supported commands
237237
}
238238
} else {
239-
TEST_ASSERT(supported_opt != CellularNetwork::SUPPORTED_UE_OPT_MAX);
239+
TEST_ASSERT(supported_opt != CellularNetwork::CIOT_OPT_MAX);
240240
TEST_ASSERT(preferred_opt != CellularNetwork::PREFERRED_UE_OPT_MAX);
241241
}
242242

243-
err = nw->set_ciot_optimization_config(supported_opt, preferred_opt);
243+
err = nw->set_ciot_optimization_config(supported_opt, preferred_opt, NULL);
244244
TEST_ASSERT(err == NSAPI_ERROR_OK || err == NSAPI_ERROR_DEVICE_ERROR);
245245
if (err == NSAPI_ERROR_DEVICE_ERROR) {
246246
// if device error then we must check was that really device error or that modem/network does not support the commands

features/cellular/framework/API/CellularNetwork.h

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,17 @@ class CellularNetwork {
4848

4949
public:
5050
/* Definition for Supported CIoT EPS optimizations type. */
51-
enum Supported_UE_Opt {
52-
SUPPORTED_UE_OPT_NO_SUPPORT = 0, /* No support. */
53-
SUPPORTED_UE_OPT_CONTROL_PLANE, /* Support for control plane CIoT EPS optimization. */
54-
SUPPORTED_UE_OPT_USER_PLANE, /* Support for user plane CIoT EPS optimization. */
55-
SUPPORTED_UE_OPT_BOTH, /* Support for both control plane CIoT EPS optimization and user plane CIoT EPS
51+
enum CIoT_Supported_Opt {
52+
CIOT_OPT_NO_SUPPORT = 0, /* No support. */
53+
CIOT_OPT_CONTROL_PLANE, /* Support for control plane CIoT EPS optimization. */
54+
CIOT_OPT_USER_PLANE, /* Support for user plane CIoT EPS optimization. */
55+
CIOT_OPT_BOTH, /* Support for both control plane CIoT EPS optimization and user plane CIoT EPS
5656
optimization. */
57-
SUPPORTED_UE_OPT_MAX
57+
CIOT_OPT_MAX
5858
};
5959

6060
/* Definition for Preferred CIoT EPS optimizations type. */
61-
enum Preferred_UE_Opt {
61+
enum CIoT_Preferred_UE_Opt {
6262
PREFERRED_UE_OPT_NO_PREFERENCE = 0, /* No preference. */
6363
PREFERRED_UE_OPT_CONTROL_PLANE, /* Preference for control plane CIoT EPS optimization. */
6464
PREFERRED_UE_OPT_USER_PLANE, /* Preference for user plane CIoT EPS optimization. */
@@ -259,23 +259,35 @@ class CellularNetwork {
259259

260260
/** Set CIoT optimizations.
261261
*
262-
* @param supported_opt Supported CIoT EPS optimizations.
262+
* @param supported_opt Supported CIoT EPS optimizations
263+
* (the HW support can be checked with get_ciot_ue_optimization_config).
263264
* @param preferred_opt Preferred CIoT EPS optimizations.
265+
* @param network_support_cb This callback will be called when CIoT network optimisation support is known
264266
* @return NSAPI_ERROR_OK on success
265267
* NSAPI_ERROR_DEVICE_ERROR on failure
266268
*/
267-
virtual nsapi_error_t set_ciot_optimization_config(Supported_UE_Opt supported_opt,
268-
Preferred_UE_Opt preferred_opt) = 0;
269+
virtual nsapi_error_t set_ciot_optimization_config(CIoT_Supported_Opt supported_opt,
270+
CIoT_Preferred_UE_Opt preferred_opt,
271+
Callback<void(CIoT_Supported_Opt)> network_support_cb) = 0;
269272

270-
/** Get CIoT optimizations.
273+
/** Get UE CIoT optimizations.
271274
*
272275
* @param supported_opt Supported CIoT EPS optimizations.
273276
* @param preferred_opt Preferred CIoT EPS optimizations.
274277
* @return NSAPI_ERROR_OK on success
275278
* NSAPI_ERROR_DEVICE_ERROR on failure
276279
*/
277-
virtual nsapi_error_t get_ciot_optimization_config(Supported_UE_Opt &supported_opt,
278-
Preferred_UE_Opt &preferred_opt) = 0;
280+
virtual nsapi_error_t get_ciot_ue_optimization_config(CIoT_Supported_Opt &supported_opt,
281+
CIoT_Preferred_UE_Opt &preferred_opt) = 0;
282+
283+
/** Get Network CIoT optimizations.
284+
*
285+
* @param supported_network_opt Supported CIoT EPS optimizations. CIOT_OPT_MAX will be returned,
286+
* if the support is not known
287+
* @return NSAPI_ERROR_OK on success
288+
* NSAPI_ERROR_DEVICE_ERROR on failure
289+
*/
290+
virtual nsapi_error_t get_ciot_network_optimization_config(CIoT_Supported_Opt &supported_network_opt) = 0;
279291

280292
/** Get signal quality parameters.
281293
*

features/cellular/framework/AT/AT_CellularNetwork.cpp

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ static const char *const rat_str[AT_CellularNetwork::RAT_MAX] = {
7171

7272

7373
AT_CellularNetwork::AT_CellularNetwork(ATHandler &atHandler) : AT_CellularBase(atHandler),
74-
_connection_status_cb(NULL), _op_act(RAT_UNKNOWN), _connect_status(NSAPI_STATUS_DISCONNECTED)
74+
_connection_status_cb(NULL), _op_act(RAT_UNKNOWN), _connect_status(NSAPI_STATUS_DISCONNECTED),
75+
_ciotopt_network_support_cb(NULL), _supported_network_opt(CIOT_OPT_MAX)
7576
{
7677

7778
_urc_funcs[C_EREG] = callback(this, &AT_CellularNetwork::urc_cereg);
@@ -87,6 +88,7 @@ AT_CellularNetwork::AT_CellularNetwork(ATHandler &atHandler) : AT_CellularBase(a
8788
_at.set_urc_handler("NO CARRIER", callback(this, &AT_CellularNetwork::urc_no_carrier));
8889
// additional urc to get better disconnect info for application. Not critical.
8990
_at.set_urc_handler("+CGEV:", callback(this, &AT_CellularNetwork::urc_cgev));
91+
_at.set_urc_handler("+CCIOTOPTI:", callback(this, &AT_CellularNetwork::urc_cciotopti));
9092
_at.lock();
9193
_at.cmd_start("AT+CGEREP=1");// discard unsolicited result codes when MT TE link is reserved (e.g. in on line data mode); otherwise forward them directly to the TE
9294
_at.cmd_stop_read_resp();
@@ -433,23 +435,33 @@ nsapi_error_t AT_CellularNetwork::scan_plmn(operList_t &operators, int &opsCount
433435
return _at.unlock_return_error();
434436
}
435437

436-
nsapi_error_t AT_CellularNetwork::set_ciot_optimization_config(Supported_UE_Opt supported_opt,
437-
Preferred_UE_Opt preferred_opt)
438+
nsapi_error_t AT_CellularNetwork::set_ciot_optimization_config(CIoT_Supported_Opt supported_opt,
439+
CIoT_Preferred_UE_Opt preferred_opt,
440+
Callback<void(CIoT_Supported_Opt)> network_support_cb)
438441
{
439-
442+
_ciotopt_network_support_cb = network_support_cb;
440443
_at.lock();
441444

442445
_at.cmd_start("AT+CCIOTOPT=");
443-
_at.write_int(0); // disable urc
446+
_at.write_int(1); //enable CCIOTOPTI URC
444447
_at.write_int(supported_opt);
445448
_at.write_int(preferred_opt);
446449
_at.cmd_stop_read_resp();
447450

448451
return _at.unlock_return_error();
449452
}
450453

451-
nsapi_error_t AT_CellularNetwork::get_ciot_optimization_config(Supported_UE_Opt &supported_opt,
452-
Preferred_UE_Opt &preferred_opt)
454+
void AT_CellularNetwork::urc_cciotopti()
455+
{
456+
_supported_network_opt = (CIoT_Supported_Opt)_at.read_int();
457+
458+
if (_ciotopt_network_support_cb) {
459+
_ciotopt_network_support_cb(_supported_network_opt);
460+
}
461+
}
462+
463+
nsapi_error_t AT_CellularNetwork::get_ciot_ue_optimization_config(CIoT_Supported_Opt &supported_opt,
464+
CIoT_Preferred_UE_Opt &preferred_opt)
453465
{
454466
_at.lock();
455467

@@ -459,15 +471,21 @@ nsapi_error_t AT_CellularNetwork::get_ciot_optimization_config(Supported_UE_Opt
459471
_at.resp_start("+CCIOTOPT:");
460472
_at.read_int();
461473
if (_at.get_last_error() == NSAPI_ERROR_OK) {
462-
supported_opt = (Supported_UE_Opt)_at.read_int();
463-
preferred_opt = (Preferred_UE_Opt)_at.read_int();
474+
supported_opt = (CIoT_Supported_Opt)_at.read_int();
475+
preferred_opt = (CIoT_Preferred_UE_Opt)_at.read_int();
464476
}
465477

466478
_at.resp_stop();
467479

468480
return _at.unlock_return_error();
469481
}
470482

483+
nsapi_error_t AT_CellularNetwork::get_ciot_network_optimization_config(CIoT_Supported_Opt &supported_network_opt)
484+
{
485+
supported_network_opt = _supported_network_opt;
486+
return NSAPI_ERROR_OK;
487+
}
488+
471489
nsapi_error_t AT_CellularNetwork::get_signal_quality(int &rssi, int *ber)
472490
{
473491
_at.lock();

features/cellular/framework/AT/AT_CellularNetwork.h

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,14 @@ class AT_CellularNetwork : public CellularNetwork, public AT_CellularBase {
6363

6464
virtual nsapi_error_t scan_plmn(operList_t &operators, int &ops_count);
6565

66-
virtual nsapi_error_t set_ciot_optimization_config(Supported_UE_Opt supported_opt,
67-
Preferred_UE_Opt preferred_opt);
66+
virtual nsapi_error_t set_ciot_optimization_config(CIoT_Supported_Opt supported_opt,
67+
CIoT_Preferred_UE_Opt preferred_opt,
68+
Callback<void(CIoT_Supported_Opt)> network_support_cb);
6869

69-
virtual nsapi_error_t get_ciot_optimization_config(Supported_UE_Opt &supported_opt,
70-
Preferred_UE_Opt &preferred_opt);
70+
virtual nsapi_error_t get_ciot_ue_optimization_config(CIoT_Supported_Opt &supported_opt,
71+
CIoT_Preferred_UE_Opt &preferred_opt);
72+
73+
virtual nsapi_error_t get_ciot_network_optimization_config(CIoT_Supported_Opt &supported_network_opt);
7174

7275
virtual nsapi_error_t get_signal_quality(int &rssi, int *ber = NULL);
7376

@@ -113,6 +116,7 @@ class AT_CellularNetwork : public CellularNetwork, public AT_CellularBase {
113116
void urc_cereg();
114117
void urc_cgreg();
115118
void urc_cgev();
119+
void urc_cciotopti();
116120

117121
void read_reg_params_and_compare(RegistrationType type);
118122
void read_reg_params(RegistrationType type, registration_params_t &reg_params);
@@ -128,8 +132,11 @@ class AT_CellularNetwork : public CellularNetwork, public AT_CellularBase {
128132
protected:
129133

130134
Callback<void(nsapi_event_t, intptr_t)> _connection_status_cb;
135+
Callback<void(CIoT_Supported_Opt)> _ciotopt_network_support_cb;
131136
RadioAccessTechnology _op_act;
132137
nsapi_connection_status_t _connect_status;
138+
CIoT_Supported_Opt _supported_network_opt;
139+
133140
registration_params_t _reg_params;
134141
mbed::Callback<void()> _urc_funcs[C_MAX];
135142
};

0 commit comments

Comments
 (0)