Re: [PATCH 1/2] network: allow status' and notifications on eutran networks

Sean Nyekjaer <[email protected]>
Newsgroups dev.linux.lists.ofono
Message-ID <yrbu7vwtsbmjfokmqjxaaa72t5jy3ojrg4zfjmzrlbetsxgznj@pnrywn5fpuaw>
Hi Denis,

On Wed, Oct 09, 2024 at 10:35:47AM +0100, Denis Kenzior wrote:
> Hi Sean,
> 
> On 10/8/24 4:11 AM, Sean Nyekjaer wrote:
> > SIMCom A7672E-FASE shows attached on LTE with +CREG <stat> either
> > 6 registered for "SMS only", home network (applicable only when E-UTRAN)
> > 7 registered for "SMS only", roaming (applicable only when <AcT> indicates E-UTRAN)
> > +COPS supplies the <AcT> = EUTRAN
> 
> Do you know the distinction between registered/roaming and "SMS only"
> variants in practical terms?  Are data calls available on "SMS only"?
> Voicecalls?

To my limited knowledge; E-UTRAN(let us call it LTE) doesn't have voicecalls,
that why we have VoLTE.
With the SIMCom modem on LTE in NETWORK_REGISTRATION_STATUS_REGISTERED_SMS_EUTRAN
mode we have data and legacy sms available.

> 
> > ---
> >   src/network.c | 58 +++++++++++++++++++++++++++++++++++++++++----------
> >   1 file changed, 47 insertions(+), 11 deletions(-)
> > 
> 
> CI complains:
> 
> Checkpatch Output
> =================
> 0001-network-allow-status-and-notifications-on-eutran-net.patch:9: WARNING:
> Prefer a maximum 75 chars per line (possible unwrapped commit description?)
> 0001-network-allow-status-and-notifications-on-eutran-net.patch:36: ERROR:
> switch and case should be at the same indent
> 0001-network-allow-status-and-notifications-on-eutran-net.patch:63: ERROR:
> switch and case should be at the same indent
> 0001-network-allow-status-and-notifications-on-eutran-net.patch:92: ERROR:
> switch and case should be at the same indent
> 0001-network-allow-status-and-notifications-on-eutran-net.patch:114: ERROR:
> switch and case should be at the same indent
> total: 4 errors, 1 warnings, 100 lines checked
> 0002-gprs-allow-attached-updates-and-status-on-eutran-net.patch:9: WARNING:
> Prefer a maximum 75 chars per line (possible unwrapped commit description?)
> total: 0 errors, 1 warnings, 47 lines checkeda

Can I run checkpatch myself?

> 
> > diff --git a/src/network.c b/src/network.c
> > index 40626179..02853e23 100644
> > --- a/src/network.c
> > +++ b/src/network.c
> > @@ -376,7 +376,8 @@ static char *get_operator_display_name(struct ofono_netreg *netreg)
> >   		return name;
> >   	}
> > -	if (netreg->status == NETWORK_REGISTRATION_STATUS_REGISTERED)
> > +	if (netreg->status == NETWORK_REGISTRATION_STATUS_REGISTERED ||
> > +		netreg->status == NETWORK_REGISTRATION_STATUS_REGISTERED_SMS_EUTRAN)
> >   		home_or_spdi = TRUE;
> >   	else
> >   		home_or_spdi = sim_spdi_lookup(netreg->spdi,
> > @@ -1205,9 +1206,15 @@ static void current_operator_callback(const struct ofono_error *error,
> >   	 * in which case the operator information frequently comes in bogus.
> >   	 * We ignore it here
> >   	 */
> > -	if (netreg->status != NETWORK_REGISTRATION_STATUS_REGISTERED &&
> > -			netreg->status != NETWORK_REGISTRATION_STATUS_ROAMING)
> > -		current = NULL;
> > +	switch (netreg->status) {
> > +		case NETWORK_REGISTRATION_STATUS_REGISTERED:
> > +		case NETWORK_REGISTRATION_STATUS_REGISTERED_SMS_EUTRAN:
> > +		case NETWORK_REGISTRATION_STATUS_ROAMING:
> > +		case NETWORK_REGISTRATION_STATUS_ROAMING_SMS_EUTRAN:
> > +			break;
> > +		default:
> > +			current = NULL;
> > +	}
> >   	if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
> >   		DBG("Error during current operator");
> > @@ -1324,6 +1331,8 @@ static void notify_emulator_status(struct ofono_atom *atom, void *data)
> >   void ofono_netreg_status_notify(struct ofono_netreg *netreg, int status,
> >   			int lac, int ci, int tech)
> >   {
> > +	ofono_bool_t netreg_status;
> > +
> >   	if (netreg == NULL)
> >   		return;
> > @@ -1351,8 +1360,18 @@ void ofono_netreg_status_notify(struct ofono_netreg *netreg, int status,
> >   	if (netreg->technology != tech)
> >   		set_registration_technology(netreg, tech);
> > -	if (netreg->status == NETWORK_REGISTRATION_STATUS_REGISTERED ||
> > -		netreg->status == NETWORK_REGISTRATION_STATUS_ROAMING) {
> > +	switch (netreg->status) {
> > +		case NETWORK_REGISTRATION_STATUS_REGISTERED:
> > +		case NETWORK_REGISTRATION_STATUS_REGISTERED_SMS_EUTRAN:
> > +		case NETWORK_REGISTRATION_STATUS_ROAMING:
> > +		case NETWORK_REGISTRATION_STATUS_ROAMING_SMS_EUTRAN:
> > +			netreg_status = true;
> > +			break;
> > +		default:
> > +			netreg_status = false;
> > +	}
> > +
> > +	if (netreg_status) {
> >   		if (netreg->driver->current_operator != NULL)
> >   			netreg->driver->current_operator(netreg,
> >   					current_operator_callback, netreg);
> > @@ -1448,6 +1467,7 @@ static void init_registration_status(const struct ofono_error *error,
> >   					void *data)
> >   {
> >   	struct ofono_netreg *netreg = data;
> > +	ofono_bool_t netreg_status;
> 
> Simple bool is fine.  The plan is to remove ofono_bool_t entirely.

OK


> 
> >   	if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
> >   		DBG("Error during registration status query");
> > @@ -1460,8 +1480,18 @@ static void init_registration_status(const struct ofono_error *error,
> >   	 * Bootstrap our signal strength value without waiting for the
> >   	 * stack to report it
> >   	 */
> > -	if (netreg->status == NETWORK_REGISTRATION_STATUS_REGISTERED ||
> > -		netreg->status == NETWORK_REGISTRATION_STATUS_ROAMING) {
> > +	switch (netreg->status) {
> > +		case NETWORK_REGISTRATION_STATUS_REGISTERED:
> > +		case NETWORK_REGISTRATION_STATUS_REGISTERED_SMS_EUTRAN:
> > +		case NETWORK_REGISTRATION_STATUS_ROAMING:
> > +		case NETWORK_REGISTRATION_STATUS_ROAMING_SMS_EUTRAN:
> > +			netreg_status = true;
> > +			break;
> > +		default:
> > +			netreg_status = false;
> > +	}
> > +
> > +	if (netreg_status) {
> >   		if (netreg->driver->strength != NULL)
> >   			netreg->driver->strength(netreg,
> >   					signal_strength_callback, netreg);
> > @@ -1516,9 +1546,15 @@ void ofono_netreg_strength_notify(struct ofono_netreg *netreg, int strength)
> >   	 * Theoretically we can get signal strength even when not registered
> >   	 * to any network.  However, what do we do with it in that case?
> >   	 */
> > -	if (netreg->status != NETWORK_REGISTRATION_STATUS_REGISTERED &&
> > -			netreg->status != NETWORK_REGISTRATION_STATUS_ROAMING)
> > -		return;
> > +	switch (netreg->status) {
> > +		case NETWORK_REGISTRATION_STATUS_REGISTERED:
> > +		case NETWORK_REGISTRATION_STATUS_REGISTERED_SMS_EUTRAN:
> > +		case NETWORK_REGISTRATION_STATUS_ROAMING:
> > +		case NETWORK_REGISTRATION_STATUS_ROAMING_SMS_EUTRAN:
> > +			break;
> > +		default:
> > +			return;
> > +	}
> 
> Might be nicer to do:
> 
> if (!L_IN_SET(netreg->status, NETWORK_REGISTRATION_STATUS_REGISTERED,
> 			NETWORK_REGISTRATION_STATUS_ROAMING,
> 			...))
> 	return;

Will do that for V2.

> 
> >   	DBG("strength %d", strength);
> 
> Regards,
> -Denis

/Sean
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.