From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH] phonesim: add support of +CBC
Date: Thu, 07 Jul 2011 01:14:27 -0500 [thread overview]
Message-ID: <4E154EC3.4060300@gmail.com> (raw)
In-Reply-To: <1310048886-6029-1-git-send-email-frederic.danis@linux.intel.com>
[-- Attachment #1: Type: text/plain, Size: 4082 bytes --]
Hi Frédéric,
On 07/07/2011 09:28 AM, Frédéric Danis wrote:
> PTS test TP/PSI/BV-03-I [Transfer Battery Level Indication] needs to
> change battery level and check that the battery level indication is
> received at the HF.
> So add support for +CBC in phonesim plugin, and force update of the
> battery indicator on HFP AG Emulator registration.
> ---
> plugins/phonesim.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 59 insertions(+), 0 deletions(-)
>
> diff --git a/plugins/phonesim.c b/plugins/phonesim.c
> index f49c13a..eb04dd1 100644
> --- a/plugins/phonesim.c
> +++ b/plugins/phonesim.c
> @@ -64,6 +64,8 @@
> #include <drivers/atmodem/sim-poll.h>
> #include <drivers/atmodem/atutil.h>
>
> +#include "../src/ofono.h"
> +
using #include "ofono.h" should be sufficient.
> static const char *none_prefix[] = { NULL };
> static const char *ptty_prefix[] = { "+PTTY:", NULL };
> static int next_iface = 0;
> @@ -73,6 +75,7 @@ struct phonesim_data {
> GAtChat *chat;
> gboolean calypso;
> gboolean use_mux;
> + unsigned int hfp_watch;
> };
>
> struct gprs_context_data {
> @@ -419,6 +422,40 @@ static void crst_notify(GAtResult *result, gpointer user_data)
> g_idle_add(phonesim_reset, user_data);
> }
>
> +static void emulator_battery_cb(struct ofono_atom *atom, void *data)
> +{
> + struct ofono_emulator *em = __ofono_atom_get_data(atom);
> + int val = 0;
> +
> + if (GPOINTER_TO_INT(data) > 0)
> + val = (GPOINTER_TO_INT(data) - 1) / 20 + 1;
> +
> + ofono_emulator_set_indicator(em, OFONO_EMULATOR_IND_BATTERY, val);
> +}
> +
> +static void cbc_notify(GAtResult *result, gpointer user_data)
> +{
> + struct ofono_modem *modem = user_data;
> + GAtResultIter iter;
> + int status;
> + int level;
> +
> + g_at_result_iter_init(&iter, result);
> + if (!g_at_result_iter_next(&iter, "+CBC:"))
> + return;
> +
> + if (!g_at_result_iter_next_number(&iter, &status))
> + return;
> +
> + if (!g_at_result_iter_next_number(&iter, &level))
> + return;
> +
> + __ofono_modem_foreach_registered_atom(modem,
> + OFONO_ATOM_TYPE_EMULATOR_HFP,
> + emulator_battery_cb,
> + GUINT_TO_POINTER(level));
> +}
> +
> static void phonesim_disconnected(gpointer user_data)
> {
> struct ofono_modem *modem = user_data;
> @@ -481,6 +518,19 @@ static void mux_setup(GAtMux *mux, gpointer user_data)
> cfun_set_on_cb, modem, NULL);
> }
>
> +static void emulator_hfp_watch(struct ofono_atom *atom,
> + enum ofono_atom_watch_condition cond,
> + void *user_data)
> +{
> + struct phonesim_data *data = user_data;
> +
> + if (cond != OFONO_ATOM_WATCH_CONDITION_REGISTERED)
> + return;
> +
> + /* Force battery charge update on emulator registration */
> + g_at_chat_send(data->chat, "AT+CBC", none_prefix, NULL, NULL, NULL);
> +}
> +
While your implementation is fine for phonesim, I'd rather err on the
safe side and make this a little bit better. I'm mostly concerned about
this code being copied for 'production' use in the future.
Instead, can we query CBC status when phonesim finishes powering up,
store the value and notify the stored value when the new atom is registered?
> static int phonesim_enable(struct ofono_modem *modem)
> {
> struct phonesim_data *data = ofono_modem_get_data(modem);
> @@ -574,6 +624,13 @@ static int phonesim_enable(struct ofono_modem *modem)
> g_at_chat_register(data->chat, "+CRST:",
> crst_notify, FALSE, modem, NULL);
>
> + g_at_chat_register(data->chat, "+CBC:",
> + cbc_notify, FALSE, modem, NULL);
> +
> + data->hfp_watch = __ofono_modem_add_atom_watch(modem,
> + OFONO_ATOM_TYPE_EMULATOR_HFP,
> + emulator_hfp_watch, data, NULL);
> +
> return 0;
> }
>
> @@ -612,6 +669,8 @@ static int phonesim_disable(struct ofono_modem *modem)
>
> DBG("%p", modem);
>
> + __ofono_modem_remove_atom_watch(modem, data->hfp_watch);
> +
> g_at_chat_unref(data->chat);
> data->chat = NULL;
>
Regards,
-Denis
prev parent reply other threads:[~2011-07-07 6:14 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-07 14:28 [PATCH] phonesim: add support of +CBC =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
2011-07-07 6:14 ` Denis Kenzior [this message]
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=4E154EC3.4060300@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.