* [PATCH 1/2] android/handsfree: Don't disconnect on unknown command in SLC
@ 2015-02-09 10:31 Szymon Janc
2015-02-09 10:31 ` [PATCH 2/2] android/handsfree: Relax AT+CMER handling Szymon Janc
2015-02-09 14:18 ` [PATCH 1/2] android/handsfree: Don't disconnect on unknown command in SLC Szymon Janc
0 siblings, 2 replies; 3+ messages in thread
From: Szymon Janc @ 2015-02-09 10:31 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
When connecting HFP simply reply with ERROR to any command not related
to SLC creation but don't disconnect in such case.
This fix connection issue with Jaguar XF 2009 carkit that sends
AT+CPIN? command before AT+BRSF.
---
android/handsfree.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/android/handsfree.c b/android/handsfree.c
index 76f5653..4020ed5 100644
--- a/android/handsfree.c
+++ b/android/handsfree.c
@@ -315,12 +315,6 @@ static void at_cmd_unknown(const char *command, void *user_data)
uint8_t buf[IPC_MTU];
struct hal_ev_handsfree_unknown_at *ev = (void *) buf;
- if (dev->state != HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED) {
- hfp_gw_send_result(dev->gw, HFP_RESULT_ERROR);
- hfp_gw_disconnect(dev->gw);
- return;
- }
-
bdaddr2android(&dev->bdaddr, ev->bdaddr);
/* copy while string including terminating NULL */
@@ -1147,6 +1141,8 @@ static void at_cmd_ckpd(struct hfp_context *result, enum hfp_gw_cmd_type type,
static void register_post_slc_at(struct hf_device *dev)
{
+ hfp_gw_set_command_handler(dev->gw, at_cmd_unknown, dev, NULL);
+
if (dev->hsp) {
hfp_gw_register(dev->gw, at_cmd_ckpd, "+CKPD", dev, NULL);
hfp_gw_register(dev->gw, at_cmd_vgs, "+VGS", dev, NULL);
@@ -1468,7 +1464,6 @@ static void connect_cb(GIOChannel *chan, GError *err, gpointer user_data)
g_io_channel_set_close_on_unref(chan, FALSE);
hfp_gw_set_close_on_unref(dev->gw, true);
- hfp_gw_set_command_handler(dev->gw, at_cmd_unknown, dev, NULL);
hfp_gw_set_disconnect_handler(dev->gw, disconnect_watch, dev, NULL);
if (dev->hsp) {
--
1.9.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] android/handsfree: Relax AT+CMER handling
2015-02-09 10:31 [PATCH 1/2] android/handsfree: Don't disconnect on unknown command in SLC Szymon Janc
@ 2015-02-09 10:31 ` Szymon Janc
2015-02-09 14:18 ` [PATCH 1/2] android/handsfree: Don't disconnect on unknown command in SLC Szymon Janc
1 sibling, 0 replies; 3+ messages in thread
From: Szymon Janc @ 2015-02-09 10:31 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
Spec says that HF may (not should) use AT+CMER=3,0,0,1 command to
activate indicators. Since AT+CMER has additional bfr parameter that
may be send by HF we should just skip it instead of failing.
This fix connection with Jaguar XF 2009 carkit.
---
android/handsfree.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/android/handsfree.c b/android/handsfree.c
index 4020ed5..4af2a89 100644
--- a/android/handsfree.c
+++ b/android/handsfree.c
@@ -1197,11 +1197,14 @@ static void at_cmd_cmer(struct hfp_context *result, enum hfp_gw_cmd_type type,
if (!hfp_context_get_number(result, &val) || val > 1)
break;
+ dev->indicators_enabled = val;
+
+ /* skip bfr if present */
+ hfp_context_get_number(result, &val);
+
if (hfp_context_has_next(result))
break;
- dev->indicators_enabled = val;
-
hfp_gw_send_result(dev->gw, HFP_RESULT_OK);
if (dev->features & HFP_HF_FEAT_3WAY)
--
1.9.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] android/handsfree: Don't disconnect on unknown command in SLC
2015-02-09 10:31 [PATCH 1/2] android/handsfree: Don't disconnect on unknown command in SLC Szymon Janc
2015-02-09 10:31 ` [PATCH 2/2] android/handsfree: Relax AT+CMER handling Szymon Janc
@ 2015-02-09 14:18 ` Szymon Janc
1 sibling, 0 replies; 3+ messages in thread
From: Szymon Janc @ 2015-02-09 14:18 UTC (permalink / raw)
To: linux-bluetooth
On Monday 09 of February 2015 11:31:35 Szymon Janc wrote:
> When connecting HFP simply reply with ERROR to any command not related
> to SLC creation but don't disconnect in such case.
>
> This fix connection issue with Jaguar XF 2009 carkit that sends
> AT+CPIN? command before AT+BRSF.
> ---
> android/handsfree.c | 9 ++-------
> 1 file changed, 2 insertions(+), 7 deletions(-)
>
> diff --git a/android/handsfree.c b/android/handsfree.c
> index 76f5653..4020ed5 100644
> --- a/android/handsfree.c
> +++ b/android/handsfree.c
> @@ -315,12 +315,6 @@ static void at_cmd_unknown(const char *command, void
> *user_data) uint8_t buf[IPC_MTU];
> struct hal_ev_handsfree_unknown_at *ev = (void *) buf;
>
> - if (dev->state != HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED) {
> - hfp_gw_send_result(dev->gw, HFP_RESULT_ERROR);
> - hfp_gw_disconnect(dev->gw);
> - return;
> - }
> -
> bdaddr2android(&dev->bdaddr, ev->bdaddr);
>
> /* copy while string including terminating NULL */
> @@ -1147,6 +1141,8 @@ static void at_cmd_ckpd(struct hfp_context *result,
> enum hfp_gw_cmd_type type,
>
> static void register_post_slc_at(struct hf_device *dev)
> {
> + hfp_gw_set_command_handler(dev->gw, at_cmd_unknown, dev, NULL);
> +
> if (dev->hsp) {
> hfp_gw_register(dev->gw, at_cmd_ckpd, "+CKPD", dev, NULL);
> hfp_gw_register(dev->gw, at_cmd_vgs, "+VGS", dev, NULL);
> @@ -1468,7 +1464,6 @@ static void connect_cb(GIOChannel *chan, GError *err,
> gpointer user_data) g_io_channel_set_close_on_unref(chan, FALSE);
>
> hfp_gw_set_close_on_unref(dev->gw, true);
> - hfp_gw_set_command_handler(dev->gw, at_cmd_unknown, dev, NULL);
> hfp_gw_set_disconnect_handler(dev->gw, disconnect_watch, dev, NULL);
>
> if (dev->hsp) {
Applied.
--
BR
Szymon Janc
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-02-09 14:18 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-09 10:31 [PATCH 1/2] android/handsfree: Don't disconnect on unknown command in SLC Szymon Janc
2015-02-09 10:31 ` [PATCH 2/2] android/handsfree: Relax AT+CMER handling Szymon Janc
2015-02-09 14:18 ` [PATCH 1/2] android/handsfree: Don't disconnect on unknown command in SLC Szymon Janc
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).