All of lore.kernel.org
 help / color / mirror / Atom feed
From: Szymon Janc <szymon.janc@gmail.com>
To: Lukasz Rymanowski <lukasz.rymanowski@tieto.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH 4/5] android/handsfree-client: Send AT+BCC to start codec negotiation
Date: Thu, 27 Nov 2014 21:50:20 +0100	[thread overview]
Message-ID: <2142043.GSBL5JKzgO@athlon> (raw)
In-Reply-To: <1416912448-28177-5-git-send-email-lukasz.rymanowski@tieto.com>

Hi Łukasz,

On Tuesday 25 November 2014 11:47:27 Lukasz Rymanowski wrote:
> With this patch we start codec negotation on audio connect if both sides
> does support it.
> 
> This patch also moves cmd_complete_cb and codec_negotiation_supported
> functions up in the file
> ---
>  android/handsfree-client.c | 107
> +++++++++++++++++++++++---------------------- 1 file changed, 54
> insertions(+), 53 deletions(-)
> 
> diff --git a/android/handsfree-client.c b/android/handsfree-client.c
> index 4118b7e..d942a21 100644
> --- a/android/handsfree-client.c
> +++ b/android/handsfree-client.c
> @@ -292,11 +292,63 @@ done:
>  			HAL_OP_HF_CLIENT_DISCONNECT, status);
>  }
> 
> +static void cmd_complete_cb(enum hfp_result result, enum hfp_error cme_err,
> +							void *user_data)
> +{
> +	struct hal_ev_hf_client_command_complete ev;
> +
> +	DBG("");
> +	memset(&ev, 0, sizeof(ev));
> +
> +	switch (result) {
> +	case HFP_RESULT_OK:
> +		ev.type = HAL_HF_CLIENT_CMD_COMP_OK;
> +		break;
> +	case HFP_RESULT_NO_CARRIER:
> +		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_NO_CARRIER;
> +		break;
> +	case HFP_RESULT_ERROR:
> +		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR;
> +		break;
> +	case HFP_RESULT_BUSY:
> +		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_BUSY;
> +		break;
> +	case HFP_RESULT_NO_ANSWER:
> +		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_NO_ANSWER;
> +		break;
> +	case HFP_RESULT_DELAYED:
> +		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_DELAYED;
> +		break;
> +	case HFP_RESULT_BLACKLISTED:
> +		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_BACKLISTED;
> +		break;
> +	case HFP_RESULT_CME_ERROR:
> +		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_CME;
> +		ev.cme = cme_err;
> +		break;
> +	default:
> +		error("hf-client: Unknown error code %d", result);
> +		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR;
> +		break;
> +	}
> +
> +	ipc_send_notif(hal_ipc, HAL_SERVICE_ID_HANDSFREE_CLIENT,
> +			HAL_EV_CLIENT_COMMAND_COMPLETE, sizeof(ev), &ev);
> +}
> +
> +static bool codec_negotiation_supported(struct device *dev)
> +{
> +	return (dev->features & HFP_AG_FEAT_CODEC) &&
> +			(hfp_hf_features & HFP_HF_FEAT_CODEC);
> +}
> +
>  static bool connect_sco(struct device *dev)
>  {
> -	/* TODO: handle codec negotiation */
> +	if (codec_negotiation_supported(dev))
> +		return hfp_hf_send_command(dev->hf, cmd_complete_cb, NULL,
> +								"AT+BCC");

This looks strange. It would result in calling command complete callback 
without pending AT command from framework. Shouldn't this be dedicated cb that 
would handle (unlikely, but still..) error and set audio state back to 
disconnected? Also we should handle case when AG replied OK but didn't open 
SCO eg with timeout. This is to avoid getting stuck in connecting audio state.

> 
> -	return bt_sco_connect(sco, &dev->bdaddr, 0);
> +	return bt_sco_connect(sco, &dev->bdaddr, BT_VOICE_CVSD_16BIT);
>  }
> 
>  static void set_audio_state(struct device *dev, uint8_t state)
> @@ -377,51 +429,6 @@ done:
>  				HAL_OP_HF_CLIENT_DISCONNECT_AUDIO, status);
>  }
> 
> -static void cmd_complete_cb(enum hfp_result result, enum hfp_error cme_err,
> -							void *user_data)
> -{
> -	struct hal_ev_hf_client_command_complete ev;
> -
> -	DBG("");
> -
> -	memset(&ev, 0, sizeof(ev));
> -
> -	switch (result) {
> -	case HFP_RESULT_OK:
> -		ev.type = HAL_HF_CLIENT_CMD_COMP_OK;
> -		break;
> -	case HFP_RESULT_NO_CARRIER:
> -		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_NO_CARRIER;
> -		break;
> -	case HFP_RESULT_ERROR:
> -		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR;
> -		break;
> -	case HFP_RESULT_BUSY:
> -		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_BUSY;
> -		break;
> -	case HFP_RESULT_NO_ANSWER:
> -		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_NO_ANSWER;
> -		break;
> -	case HFP_RESULT_DELAYED:
> -		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_DELAYED;
> -		break;
> -	case HFP_RESULT_BLACKLISTED:
> -		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_BACKLISTED;
> -		break;
> -	case HFP_RESULT_CME_ERROR:
> -		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR_CME;
> -		ev.cme = cme_err;
> -		break;
> -	default:
> -		error("hf-client: Unknown error code %d", result);
> -		ev.type = HAL_HF_CLIENT_CMD_COMP_ERR;
> -		break;
> -	}
> -
> -	ipc_send_notif(hal_ipc, HAL_SERVICE_ID_HANDSFREE_CLIENT,
> -			HAL_EV_CLIENT_COMMAND_COMPLETE, sizeof(ev), &ev);
> -}
> -
>  static void handle_start_vr(const void *buf, uint16_t len)
>  {
>  	struct device *dev;
> @@ -1653,12 +1660,6 @@ static void slc_brsf_cb(struct hfp_context *context,
> void *user_data) dev->features = feat;
>  }
> 
> -static bool codec_negotiation_supported(struct device *dev)
> -{
> -	return (dev->features & HFP_AG_FEAT_CODEC) &&
> -			(hfp_hf_features & HFP_HF_FEAT_CODEC);
> -}
> -
>  static void slc_brsf_resp(enum hfp_result result, enum hfp_error cme_err,
>  							void *user_data)
>  {

-- 
Szymon K. Janc
szymon.janc@gmail.com

  reply	other threads:[~2014-11-27 20:50 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-25 10:47 [PATCH 0/5] android/handsfree-client: Add SCO to HFP HF Lukasz Rymanowski
2014-11-25 10:47 ` [PATCH 1/5] android/handsfree-client: Add SCO to handsfree client Lukasz Rymanowski
2014-11-25 10:47 ` [PATCH 2/5] android/handsfree-client: Add handle incoming SCO connection Lukasz Rymanowski
2014-11-25 11:30   ` Lukasz Rymanowski
2014-11-27 20:50   ` Szymon Janc
2014-11-25 10:47 ` [PATCH 3/5] android/handsfree-client: Implement audio connect/disconnect Lukasz Rymanowski
2014-11-27 20:51   ` Szymon Janc
2014-11-25 10:47 ` [PATCH 4/5] android/handsfree-client: Send AT+BCC to start codec negotiation Lukasz Rymanowski
2014-11-27 20:50   ` Szymon Janc [this message]
2014-11-28  8:56     ` Lukasz Rymanowski
2014-11-25 10:47 ` [PATCH 5/5] android/README: Update status of HAL HFP HF implementation Lukasz Rymanowski
2014-11-27 20:49   ` Szymon Janc
2014-11-27 20:04 ` [PATCH 0/5] android/handsfree-client: Add SCO to HFP HF Lukasz Rymanowski

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=2142043.GSBL5JKzgO@athlon \
    --to=szymon.janc@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=lukasz.rymanowski@tieto.com \
    /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.