Re: [PATCH 2/3] drivers: simcommodem: query modem for available rat modes

Denis Kenzior <[email protected]>
Newsgroups dev.linux.lists.ofono
Message-ID <[email protected]>
Hi Sean,

On 10/8/24 4:10 AM, Sean Nyekjaer wrote:
> ---
> Should we default to gsm, umts + lte if the call fails?
> 
>   drivers/simcommodem/radio-settings.c | 53 +++++++++++++++++++++++++---
>   1 file changed, 49 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/simcommodem/radio-settings.c b/drivers/simcommodem/radio-settings.c
> index 2a9dbaa2..2bb0d148 100644
> --- a/drivers/simcommodem/radio-settings.c
> +++ b/drivers/simcommodem/radio-settings.c
> @@ -97,6 +97,46 @@ error:
>   	CALLBACK_WITH_FAILURE(cb, -1, cbd->data);
>   }
>   
> +static void cnmp_rat_support_cb(gboolean ok, GAtResult *result, gpointer user_data)
> +{
> +	struct cb_data *cbd = user_data;
> +	ofono_radio_settings_rat_mode_query_cb_t cb = cbd->cb;
> +	struct ofono_error error;
> +	int index;
> +	GAtResultIter iter;
> +	unsigned int available_rats = 0;
> +
> +	DBG("ok %d", ok);
> +
> +	decode_at_error(&error, g_at_result_final_response(result));
> +
> +	if (!ok) {
> +		goto error;
> +	}

No {} if not needed please

> +
> +	g_at_result_iter_init(&iter, result);
> +
> +	while (g_at_result_iter_next(&iter, "+CNMP:")) {
> +		if (!g_at_result_iter_open_list(&iter))
> +			break;

doc/coding-style.txt item M1

> +		while (1) {
> +			if (!g_at_result_iter_next_number(&iter, &index))
> +				break;
> +			available_rats |= r_mode_to_radio_access_mode(index);

as above

> +
> +		}
> +	}
> +
> +	DBG("available_rats %d", available_rats);
> +
> +	cb(&error, available_rats, cbd->data);
> +
> +	return;
> +
> +error:
> +	CALLBACK_WITH_FAILURE(cb, -1, cbd->data);
> +}
> +
>   static void simcom_query_rat_mode(struct ofono_radio_settings *rs,
>   				ofono_radio_settings_rat_mode_query_cb_t cb,
>   				void *data)
> @@ -169,11 +209,16 @@ static void simcom_query_available_rats(struct ofono_radio_settings *rs,
>   			ofono_radio_settings_available_rats_query_cb_t cb,
>   			void *data)
>   {
> -	unsigned int available_rats = OFONO_RADIO_ACCESS_MODE_GSM
> -				| OFONO_RADIO_ACCESS_MODE_UMTS
> -				| OFONO_RADIO_ACCESS_MODE_LTE;
> +	struct radio_settings_data *rsd = ofono_radio_settings_get_data(rs);
> +	struct cb_data *cbd = cb_data_new(cb, data);
> +
> +	DBG("");
>   
> -	CALLBACK_WITH_SUCCESS(cb, available_rats, data);
> +	if (g_at_chat_send(rsd->chat, "AT+CNMP=?", cnmp_prefix,
> +				cnmp_rat_support_cb, cbd, g_free) == 0) {
> +		CALLBACK_WITH_FAILURE(cb, -1, data);
> +		g_free(cbd);
> +	}
>   }
>   
>   static void cnmp_support_cb(gboolean ok, GAtResult *result, gpointer user_data)


Regards,
-Denis
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.