All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH v2] quectel: EC21 needs aux channel to be the first mux channel
Date: Thu, 28 May 2020 16:25:26 +0000	[thread overview]
Message-ID: <998d385e-341d-e8ff-178f-eaa8cea086d0@gmail.com> (raw)
In-Reply-To: <20200528093239.14347-1-poeschel@lemonage.de>

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

Hi Lars,

On 5/28/20 4:32 AM, poeschel(a)lemonage.de wrote:
> From: Lars Poeschel <poeschel@lemonage.de>
> 
> The Quectel EC21 does only work correctly, if the mux channel used for
> aux is the first mux channel. It does only put it's URC messages in the
> first mux channel, so this has to be the aux channel in our case.
> To be flexible on the mux order we introduce an array here, that
> contains the initialization data in it's needed order and is then simply
> applied by a for-loop. Initialization of this array is done after we
> queried the modem model.
> ---
>   plugins/quectel.c | 72 ++++++++++++++++++++++++++++++++++++++---------
>   1 file changed, 58 insertions(+), 14 deletions(-)
> 

So this looks mostly reasonable, but see below:

> diff --git a/plugins/quectel.c b/plugins/quectel.c
> index 043d39f9..1cad35d6 100644
> --- a/plugins/quectel.c
> +++ b/plugins/quectel.c
> @@ -78,6 +78,21 @@ static const uint8_t gsm0710_terminate[] = {
>   	0xf9, /* close flag */
>   };
>   
> +enum mux_type {
> +	QUECTEL_MUX_TYPE_AUX = 0,
> +	QUECTEL_MUX_TYPE_MODEM,
> +	QUECTEL_MUX_TYPE_MAX,
> +};
> +
> +struct mux_initialization_data {
> +	enum mux_type mux_type;
> +	char *chat_debug;
> +	const char *n_gsm_key;
> +	const char *n_gsm_value;
> +};
> +
> +static struct mux_initialization_data mux_order[QUECTEL_MUX_TYPE_MAX];
> +

So the issue with this is that this driver now no-longer supports 
multiple modems of the same type active simultaneously (since all 
instances would be trying to write / read from this location).

A better approach would be to use two such variables, i.e. 
mux_order_ec21 and mux_order_default and then either store a pointer to 
the one to use inside quectel_data, or programmatically by looking up 
based on the quectel_data::model.

Alternatively, storing mux_order in quectel_data itself is also an option.

>   enum quectel_model {
>   	QUECTEL_UNKNOWN,
>   	QUECTEL_UC15,
> @@ -1014,6 +1037,17 @@ static void cgmm_cb(int ok, GAtResult *result, void *user_data)
>   		return;
>   	}
>   
> +	mux_order[0] = (struct mux_initialization_data)
> +			{ QUECTEL_MUX_TYPE_MODEM,
> +			"Modem: ",
> +			"Modem",
> +			"/dev/gsmtty1"};
> +	mux_order[1] = (struct mux_initialization_data)
> +			{ QUECTEL_MUX_TYPE_AUX,
> +			"Aux: ",
> +			"Aux",
> +			"/dev/gsmtty2"};
> +

This would then move into the static initializer above...

>   	if (strcmp(model, "UC15") == 0) {
>   		DBG("%p model UC15", modem);
>   		data->vendor = OFONO_VENDOR_QUECTEL;
> @@ -1030,6 +1064,16 @@ static void cgmm_cb(int ok, GAtResult *result, void *user_data)
>   		DBG("%p model EC21", modem);
>   		data->vendor = OFONO_VENDOR_QUECTEL;
>   		data->model = QUECTEL_EC21;
> +		mux_order[0] = (struct mux_initialization_data)
> +				{ QUECTEL_MUX_TYPE_AUX,
> +				"Aux: ",
> +				"Aux",
> +				"/dev/gsmtty1"};
> +		mux_order[1] = (struct mux_initialization_data)
> +				{ QUECTEL_MUX_TYPE_MODEM,
> +				"Modem: ",
> +				"Modem",
> +				"/dev/gsmtty2"};
>   	} else {
>   		ofono_warn("%p unknown model: '%s'", modem, model);
>   		data->vendor = OFONO_VENDOR_QUECTEL;
> 

Regards,
-Denis

  reply	other threads:[~2020-05-28 16:25 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-26 10:16 [PATCH 0/7] Add quectel EC21 in serial mode poeschel
2020-05-26 10:16 ` [PATCH 1/7] quectel: Add Quectel EC21 to known serial modems poeschel
2020-05-26 10:16 ` [PATCH 2/7] quectel: use lte atom on EC21 poeschel
2020-05-26 10:16 ` [PATCH 3/7] quectel: Query the model before setting up the mux poeschel
2020-05-26 10:16 ` [PATCH 4/7] quectel: EC21 needs aux channel to be the first mux channel poeschel
2020-05-26 16:14   ` Denis Kenzior
2020-05-27 15:08     ` Lars Poeschel
2020-05-28  9:32       ` [PATCH v2] " poeschel
2020-05-28 16:25         ` Denis Kenzior [this message]
2020-05-29 12:43           ` [PATCH v3] " poeschel
2020-05-29 14:58             ` Denis Kenzior
2020-07-24 11:02               ` Lars Poeschel
2020-07-28 16:40                 ` Denis Kenzior
2020-08-04 11:56                   ` [PATCH] Revert "quectel: EC21 needs aux channel to be the first mux channel" poeschel
2020-08-07 16:07                     ` Denis Kenzior
2020-05-26 10:16 ` [PATCH 5/7] quectel: EC21 does not understand AT+QIURC poeschel
2020-05-26 10:16 ` [PATCH 6/7] voicecall: Quectel modem do not understand AT+CNAP poeschel
2020-05-26 10:16 ` [PATCH 7/7] quectel: EC21 add ussd with atmodem driver poeschel
2020-05-26 16:09 ` [PATCH 0/7] Add quectel EC21 in serial mode Denis Kenzior

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=998d385e-341d-e8ff-178f-eaa8cea086d0@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.