summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2014-02-21 08:49:44 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2014-02-21 15:06:38 +0200
commitc65c8bf645af1517016fad1bd14458db3f75ac1b (patch)
treed8943608295631e03a066571a5b8013006e64360
parentcb7a38247eb0e154643b67e236f65948522391d2 (diff)
downloadbluez-c65c8bf645af1517016fad1bd14458db3f75ac1b.tar.gz
core: Track LE & BR/EDR last seen times
Since we combine LE and BR/EDR into a single device we need a way to decide which bearer to use when Device1.Pair() or Device1.Connect() are called. Simplest way is to use the last discovery moment as a factor in the decision making.
-rw-r--r--src/adapter.c2
-rw-r--r--src/device.c11
-rw-r--r--src/device.h1
3 files changed, 14 insertions, 0 deletions
diff --git a/src/adapter.c b/src/adapter.c
index ffcb9682d..f5b03c3c3 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -4298,6 +4298,8 @@ static void update_found_devices(struct btd_adapter *adapter,
return;
}
+ device_update_last_seen(dev, bdaddr_type);
+
if (bdaddr_type != BDADDR_BREDR && !(eir_data.flags & EIR_BREDR_UNSUP))
device_set_bredr_support(dev, true);
diff --git a/src/device.c b/src/device.c
index def4e02ba..501b5fd9b 100644
--- a/src/device.c
+++ b/src/device.c
@@ -198,6 +198,9 @@ struct btd_device {
sdp_list_t *tmp_records;
+ time_t bredr_seen;
+ time_t le_seen;
+
gboolean trusted;
gboolean paired;
gboolean blocked;
@@ -2348,6 +2351,14 @@ void device_set_bredr_support(struct btd_device *device, bool bredr)
device->bredr = bredr;
}
+void device_update_last_seen(struct btd_device *device, uint8_t bdaddr_type)
+{
+ if (bdaddr_type == BDADDR_BREDR)
+ device->bredr_seen = time(NULL);
+ else
+ device->le_seen = time(NULL);
+}
+
uint32_t btd_device_get_class(struct btd_device *device)
{
return device->class;
diff --git a/src/device.h b/src/device.h
index 4a413868e..7ef0199d5 100644
--- a/src/device.h
+++ b/src/device.h
@@ -41,6 +41,7 @@ void device_set_class(struct btd_device *device, uint32_t class);
void device_update_addr(struct btd_device *device, const bdaddr_t *bdaddr,
uint8_t bdaddr_type);
void device_set_bredr_support(struct btd_device *device, bool bredr);
+void device_update_last_seen(struct btd_device *device, uint8_t bdaddr_type);
uint32_t btd_device_get_class(struct btd_device *device);
uint16_t btd_device_get_vendor(struct btd_device *device);
uint16_t btd_device_get_vendor_src(struct btd_device *device);