This patch adds new method that allow to update RSSI value without taking delta into account. It will be used by StartFilteredDiscovery method, in order to achieve more accurate proximity detection. --- src/device.c | 14 +++++++++++--- src/device.h | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/device.c b/src/device.c index 97c0523..295143a 100644 --- a/src/device.c +++ b/src/device.c @@ -83,6 +83,8 @@ #define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif +#define RSSI_THRESHOLD 8 + static DBusConnection *dbus_conn = NULL; static unsigned service_state_cb_id; @@ -4534,7 +4536,8 @@ void device_set_legacy(struct btd_device *device, bool legacy) DEVICE_INTERFACE, "LegacyPairing"); } -void device_set_rssi(struct btd_device *device, int8_t rssi) +void device_set_rssi_with_delta(struct btd_device *device, int8_t rssi, + int8_t delta_threshold) { if (!device) return; @@ -4554,8 +4557,8 @@ void device_set_rssi(struct btd_device *device, int8_t rssi) else delta = rssi - device->rssi; - /* only report changes of 8 dBm or more */ - if (delta < 8) + /* only report changes of delta_threshold dBm or more */ + if (delta < delta_threshold) return; DBG("rssi %d delta %d", rssi, delta); @@ -4567,6 +4570,11 @@ void device_set_rssi(struct btd_device *device, int8_t rssi) DEVICE_INTERFACE, "RSSI"); } +void device_set_rssi(struct btd_device *device, int8_t rssi) +{ + device_set_rssi_with_delta(device, rssi, RSSI_THRESHOLD); +} + static gboolean start_discovery(gpointer user_data) { struct btd_device *device = user_data; diff --git a/src/device.h b/src/device.h index 8edd0df..4945c1a 100644 --- a/src/device.h +++ b/src/device.h @@ -90,6 +90,8 @@ void btd_device_set_temporary(struct btd_device *device, gboolean temporary); void btd_device_set_trusted(struct btd_device *device, gboolean trusted); void device_set_bonded(struct btd_device *device, uint8_t bdaddr_type); void device_set_legacy(struct btd_device *device, bool legacy); +void device_set_rssi_with_delta(struct btd_device *device, int8_t rssi, + int8_t delta_threshold); void device_set_rssi(struct btd_device *device, int8_t rssi); bool btd_device_is_connected(struct btd_device *dev); uint8_t btd_device_get_bdaddr_type(struct btd_device *dev); -- 2.2.0.rc0.207.ga3a616c -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html