2013-10-31 12:42:35

by Andrei Emeltchenko

[permalink] [raw]
Subject: [RFC] android/daemon: Fix not reporting scan mode to Java

From: Andrei Emeltchenko <[email protected]>

After set_adapter_property() higher layer expects callback to be returned
even if property is not changes. Otherwise Java timeouts and reset Bluetooth
enetring to the loop.
...
BluetoothAdapterState( 2850): Timeout will setting scan mode..
Continuing with disable...
...
---
android/adapter.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/android/adapter.c b/android/adapter.c
index 892e6bb..3622a72 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -631,21 +631,21 @@ static uint8_t set_scan_mode(void *buf, uint16_t len)
switch (*mode) {
case HAL_ADAPTER_SCAN_MODE_NONE:
if (!cur_conn && !cur_disc)
- return HAL_STATUS_DONE;
+ goto done;

conn = false;
disc = false;
break;
case HAL_ADAPTER_SCAN_MODE_CONN:
if (cur_conn && !cur_disc)
- return HAL_STATUS_DONE;
+ goto done;

conn = true;
disc = false;
break;
case HAL_ADAPTER_SCAN_MODE_CONN_DISC:
if (cur_conn && cur_disc)
- return HAL_STATUS_DONE;
+ goto done;

conn = true;
disc = true;
@@ -665,6 +665,12 @@ static uint8_t set_scan_mode(void *buf, uint16_t len)
}

return HAL_STATUS_SUCCESS;
+
+done:
+ /* Android expects property changed callback */
+ scan_mode_changed();
+
+ return HAL_STATUS_DONE;
}

static uint8_t set_property(void *buf, uint16_t len)
--
1.7.10.4



2013-10-31 13:46:17

by Johan Hedberg

[permalink] [raw]
Subject: Re: [RFC] android/daemon: Fix not reporting scan mode to Java

Hi Andrei,

On Thu, Oct 31, 2013, Andrei Emeltchenko wrote:
> After set_adapter_property() higher layer expects callback to be returned
> even if property is not changes. Otherwise Java timeouts and reset Bluetooth
> enetring to the loop.
> ...
> BluetoothAdapterState( 2850): Timeout will setting scan mode..
> Continuing with disable...
> ...
> ---
> android/adapter.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)

Applied. Thanks.

Johan