From c65c8bf645af1517016fad1bd14458db3f75ac1b Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Fri, 21 Feb 2014 08:49:44 +0200 Subject: [PATCH] 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. --- src/adapter.c | 2 ++ src/device.c | 11 +++++++++++ src/device.h | 1 + 3 files changed, 14 insertions(+) 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); -- 2.47.3