All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcel Holtmann <marcel@holtmann.org>
To: ofono@ofono.org
Subject: Re: [PATCH 11/15] emulator: Register mandatory AT command handlers
Date: Wed, 07 Jul 2010 08:12:47 -0300	[thread overview]
Message-ID: <1278501167.2789.76.camel@localhost.localdomain> (raw)
In-Reply-To: <174dc33a040610bec69295a72eb488ea@chewa.net>

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

Hi Remi,

> > +static void cfun_cb(GAtServerRequestType type, GAtResult *cmd,
> > +					gpointer user_data)
> > +{
> > +	struct ofono_emulator *e = user_data;
> > +	char buf[50];
> > +
> > +	switch (type) {
> > +	case G_AT_SERVER_REQUEST_TYPE_SUPPORT:
> > +		ofono_emulator_send_info(e, "+CFUN: (0-1)", TRUE);
> > +		ofono_emulator_send_final(e, G_AT_SERVER_RESULT_OK);
> > +		break;
> > +	case G_AT_SERVER_REQUEST_TYPE_QUERY:
> > +		snprintf(buf, sizeof(buf), "+CFUN: %d", e->modem_mode);
> > +		ofono_emulator_send_info(e, buf, TRUE);
> > +		ofono_emulator_send_final(e, G_AT_SERVER_RESULT_OK);
> > +		break;
> 
> Does not make much sense. If mode is 0, the device has functionality
> minimum, meaning usually power off or close to that. oFono does not run in
> such stage, so it won't be there to answer CFUN: 0.

this is actually more fake than real. We are not mapping all commands
1:1 to the real modem. It is mainly to just make some dialers and things
like Windows happy ;)

> > +	case G_AT_SERVER_REQUEST_TYPE_SET:
> > +	{
> > +		GAtResultIter iter;
> > +		int mode;
> > +
> > +		g_at_result_iter_init(&iter, cmd);
> > +		g_at_result_iter_next(&iter, "+CFUN=");
> > +
> > +		if (g_at_result_iter_next_number(&iter, &mode) == FALSE)
> > +			goto error;
> > +
> > +		if (mode != 0 && mode != 1)
> > +			goto error;
> > +
> > +		DBG("set CFUN to %d", mode);
> > +
> > +		e->modem_mode = mode;
> > +		g_timeout_add_seconds(1, send_ok, e);
> > +		break;
> > +	}
> 
> I might be missing something, but it does not look like AT+CFUN=0 will
> power off the system, which is more or less what it is expected to do.

Look again, it won't. It is an arbitrary delay for testing. If we would
follow the Bluetooth DUN specification literally, then only the magic
AT*99# syntax would be needed, but there are other commands that are
expected to work. So in most cases we just fake them.

> +static void cops_cb(GAtServerRequestType type, GAtResult *result,
> > +					gpointer user_data)
> > +{
> > +	struct ofono_emulator *e = user_data;
> > +	char buf[50];
> > +
> > +	switch (type) {
> > +	case G_AT_SERVER_REQUEST_TYPE_SUPPORT:
> > +		ofono_emulator_send_final(e, G_AT_SERVER_RESULT_OK);
> > +		break;
> > +	case G_AT_SERVER_REQUEST_TYPE_QUERY:
> > +		snprintf(buf, sizeof(buf), "+COPS: %d", e->modem_cops);
> > +		ofono_emulator_send_info(e, buf, TRUE);
> > +		ofono_emulator_send_final(e, G_AT_SERVER_RESULT_OK);
> > +		break;
> > +	case G_AT_SERVER_REQUEST_TYPE_SET:
> > +	{
> > +		GAtResultIter iter;
> > +		int mode;
> > +
> > +		g_at_result_iter_init(&iter, result);
> > +		g_at_result_iter_next(&iter, "+COPS=");
> > +
> > +		if (g_at_result_iter_next_number(&iter, &mode) == FALSE)
> > +			goto error;
> > +
> > +		if (mode < 0 || mode > 2)
> > +			goto error;
> > +
> > +		DBG("set GPRS cops status %d", mode);
> > +
> > +		e->modem_cops = mode;
> > +		ofono_emulator_send_final(e, G_AT_SERVER_RESULT_OK);
> 
> You won't get away with this. You're supposed to register/unregister/etc
> from the network here.
> Similarly, AT+CGATT is wrong, GPRS should be attached/detached. Yes, that
> means you may have to tear down someone else's GPRS context, which may seem
> evil.

Same here actually. We will fake COPS and CGATT for the client. Compared
to the CFUN code this needs a bit more work since we should return an
error when the real modem is not ready yet or GPRS is not attached.

That said, there has to be done some work for CFUN as well if our modem
is offline. However my take here is to just disable DUN service when the
modems goes offline.

> Last, AT+CPIN should at the very least return PIN READY when appropriate,
> if I read the spec right.

We will fake this again and always return READY here. If the physical
modem is not ready (sim_post state), then we will not provide DUN server
support.

Regards

Marcel



  reply	other threads:[~2010-07-07 11:12 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-07 10:01 [0/15] Implement DUN server in oFono Zhenhua Zhang
2010-07-07 10:01 ` [PATCH 01/15] dun_gw: Fix license header Zhenhua Zhang
2010-07-07 10:01   ` [PATCH 02/15] watch: Simplify ofono_watchlist remove item Zhenhua Zhang
2010-07-07 10:01     ` [PATCH 03/15] emulator: Add status watches for ofono emulator Zhenhua Zhang
2010-07-07 10:01       ` [PATCH 04/15] emulator: Add get properities for emulator Zhenhua Zhang
2010-07-07 10:01         ` [PATCH 05/15] gprs: Rename status_watch to netreg_status_watch Zhenhua Zhang
2010-07-07 10:01           ` [PATCH 06/15] emulator: Add emulator status watches in gprs atom Zhenhua Zhang
2010-07-07 10:01             ` [PATCH 07/15] emulator: Add emulator status watches in netreg Zhenhua Zhang
2010-07-07 10:01               ` [PATCH 08/15] emulator: Add APIs to send GAtServer result Zhenhua Zhang
2010-07-07 10:01                 ` [PATCH 09/15] emulator: Implement dialing up for DUN Zhenhua Zhang
2010-07-07 10:01                   ` [PATCH 10/15] emulator: Add emulator dial up support in GPRS Zhenhua Zhang
2010-07-07 10:01                     ` [PATCH 11/15] emulator: Register mandatory AT command handlers Zhenhua Zhang
2010-07-07 10:01                       ` [PATCH 12/15] emulator: Watch GPRS status changes Zhenhua Zhang
2010-07-07 10:01                         ` [PATCH 13/15] emulator: Watch netreg " Zhenhua Zhang
2010-07-07 10:01                           ` [PATCH 14/15] gprs: Add DUN +CGATT support in gprs atom Zhenhua Zhang
2010-07-07 10:01                             ` [PATCH 15/15] gprs: Add DUN +CGDCONT " Zhenhua Zhang
2010-07-07 10:48                       ` [PATCH 11/15] emulator: Register mandatory AT command handlers =?unknown-8bit?q?R=C3=A9mi?= Denis-Courmont
2010-07-07 11:12                         ` Marcel Holtmann [this message]
2010-07-08  2:31                           ` Zhang, Zhenhua
2010-07-08  6:46                             ` =?unknown-8bit?q?R=C3=A9mi?= Denis-Courmont
2010-07-08 13:26                               ` Marcel Holtmann
2010-07-08 14:23                                 ` =?unknown-8bit?q?R=C3=A9mi?= Denis-Courmont
2010-07-08 14:30                                   ` Denis Kenzior
2010-07-07 10:08 ` [PATCH 0/15] Implement DUN server in oFono Zhang, Zhenhua

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=1278501167.2789.76.camel@localhost.localdomain \
    --to=marcel@holtmann.org \
    --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.