From eca8415fd6787d2be0efd5ad23c18e4a58d177b9 Mon Sep 17 00:00:00 2001 From: Olivier Martin Date: Tue, 9 Jul 2019 12:16:48 +0200 Subject: [PATCH] gattlib: Introduced gattlib_get_rssi() Fix: #75 --- bluez/gattlib_connect.c | 4 ++++ dbus/gattlib.c | 12 ++++++++++++ gattlib-py/gattlib/__init__.py | 4 ++++ gattlib-py/gattlib/device.py | 7 +++++++ include/gattlib.h | 10 ++++++++++ 5 files changed, 37 insertions(+) diff --git a/bluez/gattlib_connect.c b/bluez/gattlib_connect.c index 4b89cb1..b991906 100644 --- a/bluez/gattlib_connect.c +++ b/bluez/gattlib_connect.c @@ -548,3 +548,7 @@ int get_handle_from_uuid(gatt_connection_t* connection, const uuid_t* uuid, uint } return -1; } + +int gattlib_get_rssi(gatt_connection_t *connection, int16_t *rssi) { + return GATTLIB_NOT_SUPPORTED; +} diff --git a/dbus/gattlib.c b/dbus/gattlib.c index fc29e14..53c91d8 100644 --- a/dbus/gattlib.c +++ b/dbus/gattlib.c @@ -1544,3 +1544,15 @@ int gattlib_notification_stop(gatt_connection_t* connection, const uuid_t* uuid) return GATTLIB_SUCCESS; } } + +int gattlib_get_rssi(gatt_connection_t *connection, int16_t *rssi) { + gattlib_context_t* conn_context = connection->context; + + if (rssi == NULL) { + return GATTLIB_INVALID_PARAMETER; + } + + *rssi = org_bluez_device1_get_rssi(conn_context->device); + + return GATTLIB_SUCCESS; +} diff --git a/gattlib-py/gattlib/__init__.py b/gattlib-py/gattlib/__init__.py index 7a0112b..a8e012f 100644 --- a/gattlib-py/gattlib/__init__.py +++ b/gattlib-py/gattlib/__init__.py @@ -88,3 +88,7 @@ gattlib_register_notification.argtypes = [c_void_p, py_object, py_object] # void gattlib_register_on_disconnect_python(gatt_connection_t *connection, PyObject *handler, PyObject *user_data) gattlib_register_on_disconnect = gattlib.gattlib_register_on_disconnect_python gattlib_register_on_disconnect.argtypes = [c_void_p, py_object, py_object] + +# int gattlib_get_rssi(gatt_connection_t *connection, int16_t *rssi) +gattlib_get_rssi = gattlib.gattlib_get_rssi +gattlib_get_rssi.argtypes = [c_void_p, POINTER(c_int16)] diff --git a/gattlib-py/gattlib/device.py b/gattlib-py/gattlib/device.py index e7d55b2..a8755e3 100644 --- a/gattlib-py/gattlib/device.py +++ b/gattlib-py/gattlib/device.py @@ -53,6 +53,13 @@ class Device: if self._connection == 0: raise DeviceError() + @property + def rssi(self): + _rssi = c_int16(0) + ret = gattlib_get_rssi(self._connection, byref(_rssi)) + handle_return(ret) + return _rssi + @staticmethod def on_disconnection(user_data): this = user_data diff --git a/include/gattlib.h b/include/gattlib.h index c75e712..39f98e4 100644 --- a/include/gattlib.h +++ b/include/gattlib.h @@ -268,6 +268,16 @@ int gattlib_notification_stop(gatt_connection_t* connection, const uuid_t* uuid) void gattlib_register_notification(gatt_connection_t* connection, gattlib_event_handler_t notification_handler, void* user_data); void gattlib_register_indication(gatt_connection_t* connection, gattlib_event_handler_t indication_handler, void* user_data); +/** + * @brief Function to retrieve RSSI from a GATT connection + * + * @param connection Active GATT connection + * @param rssi is the Received Signal Strength Indicator of the remote device + * + * @return GATTLIB_SUCCESS on success or GATTLIB_* error code + */ +int gattlib_get_rssi(gatt_connection_t *connection, int16_t *rssi); + int gattlib_uuid_to_string(const uuid_t *uuid, char *str, size_t n); int gattlib_string_to_uuid(const char *str, size_t n, uuid_t *uuid); int gattlib_uuid_cmp(const uuid_t *uuid1, const uuid_t *uuid2);