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 3/5] android/handsfree-client: Implement audio connect/disconnect
Date: Thu, 27 Nov 2014 21:51:12 +0100	[thread overview]
Message-ID: <101224339.xf6gZFyOGS@athlon> (raw)
In-Reply-To: <1416912448-28177-4-git-send-email-lukasz.rymanowski@tieto.com>

Hi Łukasz,

On Tuesday 25 November 2014 11:47:26 Lukasz Rymanowski wrote:
> In this patch also set_audio_state function has been moved

One more thing: set_audio_state() was introduced in PATCH 2/5. Why not put it 
in right place from beginning?

> ---
>  android/handsfree-client.c | 100
> +++++++++++++++++++++++++++++++++------------ 1 file changed, 75
> insertions(+), 25 deletions(-)
> 
> diff --git a/android/handsfree-client.c b/android/handsfree-client.c
> index 432b9a1..4118b7e 100644
> --- a/android/handsfree-client.c
> +++ b/android/handsfree-client.c
> @@ -292,19 +292,89 @@ done:
>  			HAL_OP_HF_CLIENT_DISCONNECT, status);
>  }
> 
> +static bool connect_sco(struct device *dev)
> +{
> +	/* TODO: handle codec negotiation */
> +
> +	return bt_sco_connect(sco, &dev->bdaddr, 0);
> +}
> +
> +static void set_audio_state(struct device *dev, uint8_t state)
> +{
> +	struct hal_ev_hf_client_audio_state ev;
> +	char address[18];
> +
> +	if (dev->audio_state == state)
> +		return;
> +
> +	dev->audio_state = state;
> +
> +	ba2str(&dev->bdaddr, address);
> +	DBG("device %s audio state %u", address, state);
> +
> +	bdaddr2android(&dev->bdaddr, ev.bdaddr);
> +	ev.state = state;
> +
> +	ipc_send_notif(hal_ipc, HAL_SERVICE_ID_HANDSFREE_CLIENT,
> +				HAL_EV_HF_CLIENT_AUDIO_STATE, sizeof(ev), &ev);
> +}
> +
>  static void handle_connect_audio(const void *buf, uint16_t len)
>  {
> -	DBG("Not Implemented");
> +	const struct hal_cmd_hf_client_connect_audio *cmd = (void *) buf;
> +	struct device *dev;
> +	uint8_t status;
> +	bdaddr_t bdaddr;
> +
> +	DBG("");
> +
> +	android2bdaddr(&cmd->bdaddr, &bdaddr);
> +
> +	dev = find_device(&bdaddr);
> +	if (!dev || dev->state != HAL_HF_CLIENT_CONN_STATE_SLC_CONNECTED ||
> +		dev->audio_state != HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED) {
> +		error("hf-client: Cannot create SCO, check SLC or audio state");
> +		status = HAL_STATUS_FAILED;
> +		goto done;
> +	}
> +
> +	if (connect_sco(dev)) {
> +		status = HAL_STATUS_SUCCESS;
> +		set_audio_state(dev, HAL_HF_CLIENT_AUDIO_STATE_CONNECTING);
> +	} else {
> +		status = HAL_STATUS_FAILED;
> +	}
> +
> +done:
>  	ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HANDSFREE_CLIENT,
> -			HAL_OP_HF_CLIENT_CONNECT_AUDIO, HAL_STATUS_UNSUPPORTED);
> +					HAL_OP_HF_CLIENT_CONNECT_AUDIO, status);
>  }
> 
>  static void handle_disconnect_audio(const void *buf, uint16_t len)
>  {
> -	DBG("Not Implemented");
> +	const struct hal_cmd_hf_client_disconnect_audio *cmd = (void *) buf;
> +	struct device *dev;
> +	uint8_t status;
> +	bdaddr_t bdaddr;
> +
> +	DBG("");
> +
> +	android2bdaddr(&cmd->bdaddr, &bdaddr);
> +
> +	dev = find_device(&bdaddr);
> +	if (!dev ||
> +		dev->audio_state == HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED) {
> +		error("hf-client: Device not found or audio not connected");
> +		status = HAL_STATUS_FAILED;
> +		goto done;
> +	}
> +
> +	bt_sco_disconnect(sco);
> +	status = HAL_STATUS_SUCCESS;
> +
> +done:
>  	ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HANDSFREE_CLIENT,
> -					HAL_OP_HF_CLIENT_DISCONNECT_AUDIO,
> -					HAL_STATUS_UNSUPPORTED);
> +				HAL_OP_HF_CLIENT_DISCONNECT_AUDIO, status);
>  }
> 
>  static void cmd_complete_cb(enum hfp_result result, enum hfp_error cme_err,
> @@ -2011,26 +2081,6 @@ static void cleanup_hfp_hf(void)
>  	}
>  }
> 
> -static void set_audio_state(struct device *dev, uint8_t state)
> -{
> -	struct hal_ev_hf_client_audio_state ev;
> -	char address[18];
> -
> -	if (dev->audio_state == state)
> -		return;
> -
> -	dev->audio_state = state;
> -
> -	ba2str(&dev->bdaddr, address);
> -	DBG("device %s audio state %u", address, state);
> -
> -	bdaddr2android(&dev->bdaddr, ev.bdaddr);
> -	ev.state = state;
> -
> -	ipc_send_notif(hal_ipc, HAL_SERVICE_ID_HANDSFREE_CLIENT,
> -				HAL_EV_HF_CLIENT_AUDIO_STATE, sizeof(ev), &ev);
> -}
> -
>  static bool confirm_sco_cb(const bdaddr_t *addr, uint16_t *voice_settings)
>  {
>  	struct device *dev;

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

  reply	other threads:[~2014-11-27 20:51 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 [this message]
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
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=101224339.xf6gZFyOGS@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.