Skip to content

Commit 9e012c3

Browse files
authored
Merge pull request #7860 from AriParkkila/cell-reg-mode
Cellular: Allow cellular modules to override network registration mode
2 parents 9135418 + 1eb1fab commit 9e012c3

14 files changed

+40
-32
lines changed

features/cellular/UNITTESTS/at/at_cellularnetwork/test_at_cellularnetwork.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ class my_AT_CN : public AT_CellularNetwork {
7676
return _stack;
7777
}
7878
}
79-
virtual bool has_registration(RegistrationType reg_type)
79+
virtual AT_CellularNetwork::RegistrationMode has_registration(RegistrationType reg_type)
8080
{
8181
if (reg_type == C_GREG) {
82-
return false;
82+
return RegistrationModeDisable;
8383
}
84-
return true;
84+
return RegistrationModeLAC;
8585
}
8686
virtual nsapi_error_t set_access_technology_impl(RadioAccessTechnology op_rat)
8787
{
@@ -108,12 +108,12 @@ class my_AT_CNipv6 : public AT_CellularNetwork {
108108
return _stack;
109109
}
110110
}
111-
virtual bool has_registration(RegistrationType reg_type)
111+
virtual AT_CellularNetwork::RegistrationMode has_registration(RegistrationType reg_type)
112112
{
113113
if (reg_type == C_GREG) {
114-
return false;
114+
return RegistrationModeDisable;
115115
}
116-
return true;
116+
return RegistrationModeLAC;
117117
}
118118
virtual nsapi_error_t set_access_technology_impl(RadioAccessTechnology op_rat)
119119
{

features/cellular/UNITTESTS/stubs/AT_CellularNetwork_stub.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,9 @@ nsapi_error_t AT_CellularNetwork::get_cell_id(int &cell_id)
121121
return NSAPI_ERROR_OK;
122122
}
123123

124-
bool AT_CellularNetwork::has_registration(RegistrationType reg_type)
124+
AT_CellularNetwork::RegistrationMode AT_CellularNetwork::has_registration(RegistrationType reg_type)
125125
{
126-
return false;
126+
return RegistrationModeDisable;
127127
}
128128

129129
nsapi_error_t AT_CellularNetwork::set_attach(int timeout)

features/cellular/framework/AT/AT_CellularNetwork.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ AT_CellularNetwork::~AT_CellularNetwork()
5555
#endif // NSAPI_PPP_AVAILABLE
5656

5757
for (int type = 0; type < CellularNetwork::C_MAX; type++) {
58-
if (has_registration((RegistrationType)type)) {
58+
if (has_registration((RegistrationType)type) != RegistrationModeDisable) {
5959
_at.remove_urc_handler(at_reg[type].urc_prefix, _urc_funcs[type]);
6060
}
6161
}
@@ -72,7 +72,7 @@ nsapi_error_t AT_CellularNetwork::init()
7272
_urc_funcs[C_REG] = callback(this, &AT_CellularNetwork::urc_creg);
7373

7474
for (int type = 0; type < CellularNetwork::C_MAX; type++) {
75-
if (has_registration((RegistrationType)type)) {
75+
if (has_registration((RegistrationType)type) != RegistrationModeDisable) {
7676
if (_at.set_urc_handler(at_reg[type].urc_prefix, _urc_funcs[type]) != NSAPI_ERROR_OK) {
7777
return NSAPI_ERROR_NO_MEMORY;
7878
}
@@ -710,13 +710,16 @@ nsapi_error_t AT_CellularNetwork::set_registration_urc(RegistrationType type, bo
710710
int index = (int)type;
711711
MBED_ASSERT(index >= 0 && index < C_MAX);
712712

713-
if (!has_registration(type)) {
713+
RegistrationMode mode = has_registration(type);
714+
if (mode == RegistrationModeDisable) {
714715
return NSAPI_ERROR_UNSUPPORTED;
715716
} else {
716717
_at.lock();
717718
if (urc_on) {
718719
_at.cmd_start(at_reg[index].cmd);
719-
_at.write_string("=2", false);
720+
const uint8_t ch_eq = '=';
721+
_at.write_bytes(&ch_eq, 1);
722+
_at.write_int((int)mode);
720723
_at.cmd_stop();
721724
} else {
722725
_at.cmd_start(at_reg[index].cmd);
@@ -808,7 +811,7 @@ nsapi_error_t AT_CellularNetwork::get_registration_status(RegistrationType type,
808811
int i = (int)type;
809812
MBED_ASSERT(i >= 0 && i < C_MAX);
810813

811-
if (!has_registration(at_reg[i].type)) {
814+
if (has_registration(at_reg[i].type) == RegistrationModeDisable) {
812815
return NSAPI_ERROR_UNSUPPORTED;
813816
}
814817

@@ -842,10 +845,10 @@ nsapi_error_t AT_CellularNetwork::get_cell_id(int &cell_id)
842845
return NSAPI_ERROR_OK;
843846
}
844847

845-
bool AT_CellularNetwork::has_registration(RegistrationType reg_type)
848+
AT_CellularNetwork::RegistrationMode AT_CellularNetwork::has_registration(RegistrationType reg_type)
846849
{
847850
(void)reg_type;
848-
return true;
851+
return RegistrationModeLAC;
849852
}
850853

851854
nsapi_error_t AT_CellularNetwork::set_attach(int /*timeout*/)

features/cellular/framework/AT/AT_CellularNetwork.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,14 @@ class AT_CellularNetwork : public CellularNetwork, public AT_CellularBase {
129129
/** Check if modem supports given registration type.
130130
*
131131
* @param reg_type enum RegistrationType
132-
* @return true if given registration type is supported by modem
132+
* @return mode supported on given reg_type as per 3GPP TS 27.007, 0 when unsupported
133133
*/
134-
virtual bool has_registration(RegistrationType reg_type);
134+
enum RegistrationMode {
135+
RegistrationModeDisable = 0,
136+
RegistrationModeEnable, // <stat>
137+
RegistrationModeLAC, // <stat>[,<[lac>,]<[ci>],[<AcT>],[<rac>]]
138+
};
139+
virtual RegistrationMode has_registration(RegistrationType reg_type);
135140

136141
/** Sets access technology to be scanned. Modem specific implementation.
137142
*

features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularNetwork.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ bool QUECTEL_BC95_CellularNetwork::get_modem_stack_type(nsapi_ip_stack_t request
4242
return requested_stack == IPV4_STACK ? true : false;
4343
}
4444

45-
bool QUECTEL_BC95_CellularNetwork::has_registration(RegistrationType reg_tech)
45+
AT_CellularNetwork::RegistrationMode QUECTEL_BC95_CellularNetwork::has_registration(RegistrationType reg_tech)
4646
{
47-
return (reg_tech == C_EREG);
47+
return (reg_tech == C_EREG) ? RegistrationModeLAC : RegistrationModeDisable;
4848
}
4949

5050
nsapi_error_t QUECTEL_BC95_CellularNetwork::set_access_technology_impl(RadioAccessTechnology opRat)

features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularNetwork.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class QUECTEL_BC95_CellularNetwork : public AT_CellularNetwork {
3434

3535
virtual bool get_modem_stack_type(nsapi_ip_stack_t requested_stack);
3636

37-
virtual bool has_registration(RegistrationType reg_type);
37+
virtual RegistrationMode has_registration(RegistrationType reg_type);
3838
};
3939
} // namespace mbed
4040
#endif // QUECTEL_BC95_CELLULAR_NETWORK_H_

features/cellular/framework/targets/QUECTEL/UG96/QUECTEL_UG96_CellularNetwork.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ bool QUECTEL_UG96_CellularNetwork::get_modem_stack_type(nsapi_ip_stack_t request
3232
return requested_stack == IPV4_STACK ? true : false;
3333
}
3434

35-
bool QUECTEL_UG96_CellularNetwork::has_registration(RegistrationType reg_type)
35+
AT_CellularNetwork::RegistrationMode QUECTEL_UG96_CellularNetwork::has_registration(RegistrationType reg_type)
3636
{
37-
return (reg_type == C_REG || reg_type == C_GREG);
37+
return (reg_type == C_REG || reg_type == C_GREG) ? RegistrationModeLAC : RegistrationModeDisable;
3838
}
3939

4040
nsapi_error_t QUECTEL_UG96_CellularNetwork::set_access_technology_impl(RadioAccessTechnology opRat)

features/cellular/framework/targets/QUECTEL/UG96/QUECTEL_UG96_CellularNetwork.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class QUECTEL_UG96_CellularNetwork : public AT_CellularNetwork {
3030
protected:
3131
virtual bool get_modem_stack_type(nsapi_ip_stack_t requested_stack);
3232

33-
virtual bool has_registration(RegistrationType rat);
33+
virtual RegistrationMode has_registration(RegistrationType rat);
3434

3535
virtual nsapi_error_t set_access_technology_impl(RadioAccessTechnology opRat);
3636

features/cellular/framework/targets/TELIT/HE910/TELIT_HE910_CellularNetwork.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ bool TELIT_HE910_CellularNetwork::get_modem_stack_type(nsapi_ip_stack_t requeste
3232
return requested_stack == IPV4_STACK ? true : false;
3333
}
3434

35-
bool TELIT_HE910_CellularNetwork::has_registration(RegistrationType reg_type)
35+
AT_CellularNetwork::RegistrationMode TELIT_HE910_CellularNetwork::has_registration(RegistrationType reg_type)
3636
{
37-
return (reg_type == C_REG || reg_type == C_GREG);
37+
return (reg_type == C_REG || reg_type == C_GREG) ? RegistrationModeLAC : RegistrationModeDisable;
3838
}
3939

4040
nsapi_error_t TELIT_HE910_CellularNetwork::set_access_technology_impl(RadioAccessTechnology opRat)

features/cellular/framework/targets/TELIT/HE910/TELIT_HE910_CellularNetwork.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class TELIT_HE910_CellularNetwork : public AT_CellularNetwork {
3131

3232
virtual bool get_modem_stack_type(nsapi_ip_stack_t requested_stack);
3333

34-
virtual bool has_registration(RegistrationType rat);
34+
virtual RegistrationMode has_registration(RegistrationType rat);
3535

3636
virtual nsapi_error_t set_access_technology_impl(RadioAccessTechnology opRat);
3737
};

features/cellular/framework/targets/UBLOX/AT/UBLOX_AT_CellularNetwork.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ bool UBLOX_AT_CellularNetwork::get_modem_stack_type(nsapi_ip_stack_t requested_s
4747
return requested_stack == IPV4_STACK ? true : false;
4848
}
4949

50-
bool UBLOX_AT_CellularNetwork::has_registration(RegistrationType reg_type)
50+
AT_CellularNetwork::RegistrationMode UBLOX_AT_CellularNetwork::has_registration(RegistrationType reg_type)
5151
{
52-
return (reg_type == C_REG || reg_type == C_GREG);
52+
return (reg_type == C_REG || reg_type == C_GREG) ? RegistrationModeLAC : RegistrationModeDisable;
5353
}
5454

5555
nsapi_error_t UBLOX_AT_CellularNetwork::set_access_technology_impl(RadioAccessTechnology opRat)

features/cellular/framework/targets/UBLOX/AT/UBLOX_AT_CellularNetwork.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class UBLOX_AT_CellularNetwork : public AT_CellularNetwork
4141

4242
virtual bool get_modem_stack_type(nsapi_ip_stack_t requested_stack);
4343

44-
virtual bool has_registration(RegistrationType rat);
44+
virtual RegistrationMode has_registration(RegistrationType rat);
4545

4646
private:
4747

features/cellular/framework/targets/UBLOX/PPP/UBLOX_PPP_CellularNetwork.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ bool UBLOX_PPP_CellularNetwork::get_modem_stack_type(nsapi_ip_stack_t requested_
3232
return requested_stack == IPV4_STACK ? true : false;
3333
}
3434

35-
bool UBLOX_PPP_CellularNetwork::has_registration(RegistrationType reg_type)
35+
AT_CellularNetwork::RegistrationMode UBLOX_PPP_CellularNetwork::has_registration(RegistrationType reg_type)
3636
{
37-
return (reg_type == C_REG || reg_type == C_GREG);
37+
return (reg_type == C_REG || reg_type == C_GREG) ? RegistrationModeLAC : RegistrationModeDisable;
3838
}
3939

4040
nsapi_error_t UBLOX_PPP_CellularNetwork::set_access_technology_impl(RadioAccessTechnology opRat)

features/cellular/framework/targets/UBLOX/PPP/UBLOX_PPP_CellularNetwork.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class UBLOX_PPP_CellularNetwork : public AT_CellularNetwork {
3030
protected:
3131
virtual bool get_modem_stack_type(nsapi_ip_stack_t requested_stack);
3232

33-
virtual bool has_registration(RegistrationType rat);
33+
virtual RegistrationMode has_registration(RegistrationType rat);
3434

3535
virtual nsapi_error_t set_access_technology_impl(RadioAccessTechnology opRat);
3636
};

0 commit comments

Comments
 (0)