diff options
author | Johan Hedberg <johan.hedberg@intel.com> | 2014-02-21 08:49:44 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2014-02-21 15:06:38 +0200 |
commit | c65c8bf645af1517016fad1bd14458db3f75ac1b (patch) | |
tree | d8943608295631e03a066571a5b8013006e64360 | |
parent | cb7a38247eb0e154643b67e236f65948522391d2 (diff) | |
download | bluez-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.c | 2 | ||||
-rw-r--r-- | src/device.c | 11 | ||||
-rw-r--r-- | src/device.h | 1 |
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); |