From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH 3/8][RFC] Release calls when SIM is removed.
Date: Wed, 17 Mar 2010 16:20:37 -0600 [thread overview]
Message-ID: <201003171720.37269.denkenz@gmail.com> (raw)
In-Reply-To: <1268688085-3872-1-git-send-email-andrew.zaborowski@intel.com>
[-- Attachment #1: Type: text/plain, Size: 3980 bytes --]
Hi Andrew,
> ---
> src/voicecall.c | 63
> ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed,
56
> insertions(+), 7 deletions(-)
>
> diff --git a/src/voicecall.c b/src/voicecall.c
> index 18b923f..eef924c 100644
> --- a/src/voicecall.c
> +++ b/src/voicecall.c
> @@ -57,6 +57,8 @@ struct ofono_voicecall {
> gint emit_calls_source;
> gint emit_multi_source;
> unsigned int sim_watch;
> + unsigned int sim_ready_watch;
> + unsigned int sim_removed_watch;
> const struct ofono_voicecall_driver *driver;
> void *driver_data;
> struct ofono_atom *atom;
> @@ -1788,6 +1790,10 @@ static void voicecall_unregister(struct ofono_atom
> *atom) static void voicecall_remove(struct ofono_atom *atom)
> {
> struct ofono_voicecall *vc = __ofono_atom_get_data(atom);
> + struct ofono_modem *modem = __ofono_atom_get_modem(vc->atom);
> + struct ofono_atom *sim_atom =
> + __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_SIM);
> + struct ofono_sim *sim = NULL;
>
> DBG("atom: %p", atom);
>
> @@ -1809,6 +1815,19 @@ static void voicecall_remove(struct ofono_atom
> *atom) vc->new_en_list = NULL;
> }
>
> + if (sim_atom && __ofono_atom_get_registered(sim_atom))
> + sim = __ofono_atom_get_data(sim_atom);
> +
> + if (sim && vc->sim_ready_watch) {
> + ofono_sim_remove_ready_watch(sim, vc->sim_ready_watch);
> + vc->sim_ready_watch = 0;
> + }
> +
> + if (sim && vc->sim_removed_watch) {
> + ofono_sim_remove_removed_watch(sim, vc->sim_removed_watch);
> + vc->sim_removed_watch = 0;
> + }
> +
> g_free(vc);
> }
>
> @@ -1847,6 +1866,34 @@ struct ofono_voicecall
> *ofono_voicecall_create(struct ofono_modem *modem, return vc;
> }
>
> +static void sim_ready_watch(void *user)
> +{
> + struct ofono_voicecall *vc = user;
> + struct ofono_modem *modem = __ofono_atom_get_modem(vc->atom);
> + struct ofono_atom *sim_atom =
> + __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_SIM);
> + struct ofono_sim *sim = __ofono_atom_get_data(sim_atom);
> +
> + /* Try both formats, only one or none will work */
> + ofono_sim_read(sim, SIM_EFECC_FILEID,
> + OFONO_SIM_FILE_STRUCTURE_TRANSPARENT,
> + ecc_g2_read_cb, vc);
> + ofono_sim_read(sim, SIM_EFECC_FILEID,
> + OFONO_SIM_FILE_STRUCTURE_FIXED,
> + ecc_g3_read_cb, vc);
> +}
So does sim_ready now have a different semantic than it used to? (e.g. PIN
entered successfully) EFecc has to be read when sim is inserted, not when the
SIM is truly ready.
> +
> +static void sim_removed_watch(void *user)
> +{
> + struct ofono_voicecall *vc = user;
> +
> + vc->flags |= VOICECALLS_FLAG_MULTI_RELEASE;
> +
> + /* TODO: Don't hang up emergency calls */
> + voicecalls_release_queue(vc, vc->call_list);
> + voicecalls_release_next(vc);
For now I suggest relying on the modem to tells us which calls have been
removed. You must also reset and signal the emergency number list.
> +}
> +
> static void sim_watch(struct ofono_atom *atom,
> enum ofono_atom_watch_condition cond, void *data)
> {
> @@ -1854,16 +1901,18 @@ static void sim_watch(struct ofono_atom *atom,
> struct ofono_sim *sim = __ofono_atom_get_data(atom);
>
> if (cond == OFONO_ATOM_WATCH_CONDITION_UNREGISTERED) {
> + vc->sim_ready_watch = 0;
> + vc->sim_removed_watch = 0;
> return;
> }
>
> - /* Try both formats, only one or none will work */
> - ofono_sim_read(sim, SIM_EFECC_FILEID,
> - OFONO_SIM_FILE_STRUCTURE_TRANSPARENT,
> - ecc_g2_read_cb, vc);
> - ofono_sim_read(sim, SIM_EFECC_FILEID,
> - OFONO_SIM_FILE_STRUCTURE_FIXED,
> - ecc_g3_read_cb, vc);
> + vc->sim_ready_watch = ofono_sim_add_ready_watch(sim,
> + sim_ready_watch, vc, NULL);
> + vc->sim_removed_watch = ofono_sim_add_removed_watch(sim,
> + sim_removed_watch, vc, NULL);
> +
> + if (ofono_sim_get_ready(sim))
> + sim_ready_watch(vc);
> }
>
> void ofono_voicecall_register(struct ofono_voicecall *vc)
>
prev parent reply other threads:[~2010-03-17 22:20 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-15 21:21 [PATCH 3/8][RFC] Release calls when SIM is removed Andrzej Zaborowski
2010-03-17 22:20 ` 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=201003171720.37269.denkenz@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.