summaryrefslogtreecommitdiff
path: root/android/bluetooth.c
diff options
context:
space:
mode:
authorLukasz Rymanowski <lukasz.rymanowski@tieto.com>2014-08-19 15:45:29 +0200
committerSzymon Janc <szymon.janc@tieto.com>2014-08-19 18:47:54 +0200
commitf884c34dbb7a292791f1ad2922463e3c366865dd (patch)
treeca0de0077c2f4187a16fc0208985aff09eb5edcf /android/bluetooth.c
parent62526c7106562860c6a4d79ca67e0dfc47f2e936 (diff)
downloadbluez-f884c34dbb7a292791f1ad2922463e3c366865dd.tar.gz
android/bluetooth: Fix device found notification
If device is dual mode and can be seen on both LE and BREDR, then bdaddr_type in device struct keeps LE address type of that device. During discovery, we should take current bdaddr_type to decide about passing that device up to application or not. Using dev->braddr_type might be misleading This patch fix scenario when remote device is known as LE device and recently has been found on inquiry seesion as DUAL mode device. In such case, based on braddr_type and eir flags we could incorectly skip new device notification for Android framework.
Diffstat (limited to 'android/bluetooth.c')
-rw-r--r--android/bluetooth.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/android/bluetooth.c b/android/bluetooth.c
index 5f163f18b..64a76966a 100644
--- a/android/bluetooth.c
+++ b/android/bluetooth.c
@@ -1830,7 +1830,8 @@ static void update_device(struct device *dev, int8_t rssi,
HAL_EV_REMOTE_DEVICE_PROPS, size, buf);
}
-static bool is_new_device(const struct device *dev, unsigned int flags)
+static bool is_new_device(const struct device *dev, unsigned int flags,
+ uint8_t bdaddr_type)
{
if (dev->found)
return false;
@@ -1838,7 +1839,7 @@ static bool is_new_device(const struct device *dev, unsigned int flags)
if (dev->bredr_paired || dev->le_paired)
return false;
- if (dev->bdaddr_type != BDADDR_BREDR &&
+ if (bdaddr_type != BDADDR_BREDR &&
!(flags & (EIR_LIM_DISC | EIR_GEN_DISC)))
return false;
@@ -1867,7 +1868,7 @@ static void update_found_device(const bdaddr_t *bdaddr, uint8_t bdaddr_type,
* Device found event needs to be send also for known device if this is
* new discovery session. Otherwise framework will ignore it.
*/
- if (is_new_device(dev, eir.flags))
+ if (is_new_device(dev, eir.flags, bdaddr_type))
update_new_device(dev, rssi, &eir);
else
update_device(dev, rssi, &eir, bdaddr_type);