All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH] network-registration.c: enhance CIND=? support
Date: Mon, 06 Jun 2011 00:24:25 -0500	[thread overview]
Message-ID: <4DEC6489.9090705@gmail.com> (raw)
In-Reply-To: <1307448289-4413-1-git-send-email-Bernhard.Guillon@hale.at>

[-- Attachment #1: Type: text/plain, Size: 5244 bytes --]

Hi Bernhard,

On 06/07/2011 07:04 AM, Bernhard.Guillon(a)hale.at wrote:
> From: Bernhard Guillon <Bernhard.Guillon@hale.at>
> 
> *add support for CIND=? tokens like ("signal",(0-7,99))
> *add support for token encapsulation e.g.
>     (("one",(0-7,99)),("two",(0-7,99)))

Err, ok, so we can forget about what I said of Telit being a nicely
compliant modem ;)  There are like 5 examples of this in 27.007 and they
still manage to get this wrong.

> ---
>  drivers/atmodem/network-registration.c |   51 ++++++++++++++++++++++++++++---
>  1 files changed, 46 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c
> index b3aa511..18f2299 100644
> --- a/drivers/atmodem/network-registration.c
> +++ b/drivers/atmodem/network-registration.c
> @@ -56,6 +56,7 @@ struct netreg_data {
>  	int signal_index; /* If strength is reported via CIND */
>  	int signal_min; /* min strength reported via CIND */
>  	int signal_max; /* max strength reported via CIND */
> +	int signal_invalid; /* invalid strength reported via CIND */
>  	int tech;
>  	struct ofono_network_time time;
>  	guint nitz_timeout;
> @@ -666,7 +667,10 @@ static void ciev_notify(GAtResult *result, gpointer user_data)
>  	if (!g_at_result_iter_next_number(&iter, &strength))
>  		return;
>  
> -	strength = (strength * 100) / (nd->signal_max - nd->signal_min);
> +	if (strength == nd->signal_invalid)
> +		strength = -1;
> +	else
> +		strength = (strength * 100) / (nd->signal_max - nd->signal_min);
>  	ofono_netreg_strength_notify(netreg, strength);

I'm fine with this change, but please respect our coding style, in
particular item M1 of doc/coding-style.txt

>  }
>  
> @@ -798,7 +802,10 @@ static void cind_cb(gboolean ok, GAtResult *result, gpointer user_data)
>  
>  	g_at_result_iter_next_number(&iter, &strength);
>  
> -	strength = (strength * 100) / (nd->signal_max - nd->signal_min);
> +	if (strength == nd->signal_invalid)
> +		strength = -1;
> +	else
> +		strength = (strength * 100) / (nd->signal_max - nd->signal_min);
>  
>  	cb(&error, strength, cbd->data);
>  }
> @@ -1133,7 +1140,9 @@ static void cind_support_cb(gboolean ok, GAtResult *result, gpointer user_data)
>  	GAtResultIter iter;
>  	const char *str;
>  	int index;
> -	int min, max;
> +	int min = 0;
> +	int max = 0;
> +	int tmp_min, tmp_max, invalid;
>  
>  	if (!ok)
>  		goto error;
> @@ -1145,14 +1154,45 @@ static void cind_support_cb(gboolean ok, GAtResult *result, gpointer user_data)
>  	index = 1;
>  
>  	while (g_at_result_iter_open_list(&iter)) {
> +		/*
> +		 * Some modems encapsulate the result list in braces
> +		 * So we just skip the opening brace in this case.
> +		 * We do not need to care about the closing one.
> +		 */
> +		g_at_result_iter_open_list(&iter);
> +

This looks wrong.  This behavior is peculiar to the Telit modem, so you
should open the list outside the while loop and quirk it.

e.g.

if (vendor == OFONO_VENDOR_TELIT)
	g_at_result_iter_open_list(&iter);

while (g_at_result_iter_open_list(&iter)
	...

if (vendor == OFONO_VENDOR_TELIT)
	g_at_result_iter_close_list(&iter);

> +		/* Reset invalid default value for every token*/
> +		invalid = 99;
> +
>  		if (!g_at_result_iter_next_string(&iter, &str))
>  			goto error;
>  
>  		if (!g_at_result_iter_open_list(&iter))
>  			goto error;
>  
> -		while (g_at_result_iter_next_range(&iter, &min, &max))
> -			;
> +		while (g_at_result_iter_next_range(&iter, &tmp_min, &tmp_max)) {
> +			/*
> +			 * This part of code makes havy use of the implementation
> +			 * details of g_at_result_iter_next_range()
> +			 * We currently support this token type ("signal",(0-5))
> +			 * While tokens like this ("call",(0,1))
> +			 * will be parsed to the end to get to the next token.
> +			 * With the same idea we can support tokens like
> +			 * ("signal",(0-7,99)) it is unlikely that a valid
> +			 * token is "signal",(0-0) so if both values are the
> +			 * same we know we are at the 99 case of (0-7,99)
> +			 * This implementation only works because of how the 
> +			 * g_at_result_iter_next_range() function is implemented
> +			 * if it changes this code will break.
> +			 */

This comment is not really needed, there are no peculiarities of
implementation.  The current implementation simply does not consider the
possibility of signal being anything but (0-n)

> +			if(tmp_min!=tmp_max) {
> +				min=tmp_min;
> +				max=tmp_max;
> +			}
> +			else {
> +				invalid=tmp_min;
> +			}
> +		}

The coding style here is completely wrong, please review
doc/coding-style.txt and fix this accordingly. e.g. spaces after if,
spaces before & after arithmetic operations and assignments, else on the
same line as the closing brace, etc, etc, etc.

>  
>  		if (!g_at_result_iter_close_list(&iter))
>  			goto error;
> @@ -1164,6 +1204,7 @@ static void cind_support_cb(gboolean ok, GAtResult *result, gpointer user_data)
>  			nd->signal_index = index;
>  			nd->signal_min = min;
>  			nd->signal_max = max;
> +			nd->signal_invalid = invalid;
>  		}
>  
>  		index += 1;

Regards,
-Denis

  reply	other threads:[~2011-06-06  5:24 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-25 13:14 [PATCH v2 1/3] Add basic Telit UC864-G support: Bernhard.Guillon
2011-05-25 13:14 ` [PATCH v2 2/3] network-registration.c: implement CIND forTelit UC864-G Bernhard.Guillon
2011-05-25 19:08   ` Marcel Holtmann
2011-05-24  7:18     ` Denis Kenzior
2011-06-07 12:01       ` [PATCH v2 2/3] network-registration.c: implement CIND forTelitUC864-G Bernhard Guillon
2011-06-07 12:04       ` [PATCH] network-registration.c: enhance CIND=? support Bernhard.Guillon
2011-06-06  5:24         ` Denis Kenzior [this message]
2011-06-07 12:12         ` Bernhard Guillon
2011-05-25 13:14 ` [PATCH v2 3/3] udev: add Telit UC864-G and update udev rules Bernhard.Guillon
2011-05-25 19:10   ` Marcel Holtmann
2011-05-25 19:04 ` [PATCH v2 1/3] Add basic Telit UC864-G support: Marcel Holtmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4DEC6489.9090705@gmail.com \
    --to=denkenz@gmail.com \
    --cc=ofono@ofono.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.