All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH 2/2] emulator: add call, callsetup and callheld indicators
Date: Mon, 21 Mar 2011 14:31:31 -0500	[thread overview]
Message-ID: <4D87A793.8020509@gmail.com> (raw)
In-Reply-To: <1300464648-11074-3-git-send-email-frederic.danis@linux.intel.com>

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

Hi Frédéric,

> +static void notify_emulator_call_status(struct ofono_voicecall *vc)
> +{
> +	struct ofono_modem *modem = __ofono_atom_get_modem(vc->atom);
> +	int status;
> +
> +	status = voicecalls_have_with_status(vc, CALL_STATUS_ACTIVE) ?
> +						OFONO_EMULATOR_CALL_ACTIVE :
> +						OFONO_EMULATOR_CALL_INACTIVE;
> +	__ofono_modem_foreach_atom(modem, OFONO_ATOM_TYPE_EMULATOR_HFP,
> +					emulator_call_status_cb,
> +					GINT_TO_POINTER(status));
> +

This looks wrong, the call indicator is not only about active calls.
See Sequence in figure 4.26 in HFP 1.5 for more details.

You really need to sit down and figure out the possible scenarios and
the sequences in which the indicators must be set.  I suggest you also
run PTS tester at a minimum to make sure the sequences sent by oFono is
what the spec expects.

Also, please google MCPC-TR-002 Version 1.5.  That document contains
many more scenarios than are present in the BT HFP 1.5 specification.

> +	if (voicecalls_have_with_status(vc, CALL_STATUS_HELD)) {
> +		if (status)
> +			status = OFONO_EMULATOR_CALLHELD_MULTIPLE;
> +		else
> +			status = OFONO_EMULATOR_CALLHELD_ON_HOLD;
> +	} else
> +		status = OFONO_EMULATOR_CALLHELD_NONE;
> +
> +	__ofono_modem_foreach_atom(modem, OFONO_ATOM_TYPE_EMULATOR_HFP,
> +					emulator_callheld_status_cb,
> +					GINT_TO_POINTER(status));
> +
> +	if (voicecalls_have_with_status(vc, CALL_STATUS_DIALING))
> +		status = OFONO_EMULATOR_CALLSETUP_OUTGOING;
> +	else if (voicecalls_have_with_status(vc, CALL_STATUS_ALERTING))
> +		status = OFONO_EMULATOR_CALLSETUP_ALERTING;
> +	else if (voicecalls_have_with_status(vc, CALL_STATUS_INCOMING)
> +		|| voicecalls_have_with_status(vc, CALL_STATUS_WAITING))

Please re-read doc/coding-style.txt section M4

> +		status = OFONO_EMULATOR_CALLSETUP_INCOMING;
> +	else
> +		status = OFONO_EMULATOR_CALLSETUP_INACTIVE;
> +
> +	__ofono_modem_foreach_atom(modem, OFONO_ATOM_TYPE_EMULATOR_HFP,
> +					emulator_callsetup_status_cb,
> +					GINT_TO_POINTER(status));
> +}
> +
>  static void voicecall_set_call_status(struct voicecall *call, int status)
>  {
>  	DBusConnection *conn = ofono_dbus_get_connection();
> @@ -714,6 +779,8 @@ static void voicecall_set_call_status(struct voicecall *call, int status)
>  						"State", DBUS_TYPE_STRING,
>  						&status_str);
>  
> +	notify_emulator_call_status(call->vc);
> +
>  	if (status == CALL_STATUS_ACTIVE &&
>  		(old_status == CALL_STATUS_INCOMING ||
>  			old_status == CALL_STATUS_DIALING ||
> @@ -1043,6 +1110,8 @@ static void voicecalls_emit_call_added(struct ofono_voicecall *vc,
>  	DBusMessageIter dict;
>  	const char *path;
>  
> +	notify_emulator_call_status(vc);
> +
>  	path = __ofono_atom_get_path(vc->atom);
>  
>  	signal = dbus_message_new_signal(path,
> @@ -2188,6 +2257,15 @@ static void voicecall_unregister(struct ofono_atom *atom)
>  	const char *path = __ofono_atom_get_path(atom);
>  	GSList *l;
>  
> +	__ofono_modem_foreach_atom(modem, OFONO_ATOM_TYPE_EMULATOR_HFP,
> +					emulator_call_status_cb, 0);
> +	__ofono_modem_foreach_atom(modem, OFONO_ATOM_TYPE_EMULATOR_HFP,
> +					emulator_callsetup_status_cb, 0);
> +	__ofono_modem_foreach_atom(modem, OFONO_ATOM_TYPE_EMULATOR_HFP,
> +					emulator_callheld_status_cb, 0);
> +
> +	__ofono_modem_remove_atom_watch(modem, vc->hfp_watch);
> +
>  	if (vc->sim_watch) {
>  		__ofono_modem_remove_atom_watch(modem, vc->sim_watch);
>  		vc->sim_watch = 0;
> @@ -2362,6 +2440,16 @@ static void sim_watch(struct ofono_atom *atom,
>  	sim_state_watch(ofono_sim_get_state(sim), vc);
>  }
>  
> +static void emulator_hfp_watch(struct ofono_atom *atom,
> +				enum ofono_atom_watch_condition cond,
> +				void *data)
> +{
> +	struct ofono_voicecall *vc = data;
> +
> +	if (cond == OFONO_ATOM_WATCH_CONDITION_REGISTERED)
> +		notify_emulator_call_status(vc);
> +}
> +
>  void ofono_voicecall_register(struct ofono_voicecall *vc)
>  {
>  	DBusConnection *conn = ofono_dbus_get_connection();
> @@ -2398,6 +2486,10 @@ void ofono_voicecall_register(struct ofono_voicecall *vc)
>  		sim_watch(sim_atom, OFONO_ATOM_WATCH_CONDITION_REGISTERED, vc);
>  
>  	__ofono_atom_register(vc->atom, voicecall_unregister);
> +
> +	vc->hfp_watch = __ofono_modem_add_atom_watch(modem,
> +					OFONO_ATOM_TYPE_EMULATOR_HFP,
> +					emulator_hfp_watch, vc, NULL);
>  }
>  
>  void ofono_voicecall_remove(struct ofono_voicecall *vc)

Regards,
-Denis

      reply	other threads:[~2011-03-21 19:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-18 16:10 [PATCH v2 0/2] HFP: add call related indicators =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
2011-03-18 16:10 ` [PATCH 1/2] emulator: add defines for call, callsetup and callheld indicators =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
2011-03-18 16:10 ` [PATCH 2/2] emulator: add " =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
2011-03-21 19:31   ` 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=4D87A793.8020509@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.