mirror of https://github.com/labapart/gattlib
Added support for multiple connections to devices
with same GATT. This fixes issue #29.pull/85/head
parent
7a2fdbd062
commit
f0b1f7c5ef
|
@ -711,7 +711,8 @@ int gattlib_discover_char(gatt_connection_t* connection, gattlib_characteristic_
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static OrgBluezGattCharacteristic1 *get_characteristic_from_uuid(const uuid_t* uuid) {
|
static OrgBluezGattCharacteristic1 *get_characteristic_from_uuid(gatt_connection_t* connection, const uuid_t* uuid) {
|
||||||
|
gattlib_context_t* conn_context = connection->context;
|
||||||
OrgBluezGattCharacteristic1 *characteristic = NULL;
|
OrgBluezGattCharacteristic1 *characteristic = NULL;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
|
@ -752,7 +753,26 @@ static OrgBluezGattCharacteristic1 *get_characteristic_from_uuid(const uuid_t* u
|
||||||
|
|
||||||
gattlib_string_to_uuid(characteristic_uuid_str, strlen(characteristic_uuid_str) + 1, &characteristic_uuid);
|
gattlib_string_to_uuid(characteristic_uuid_str, strlen(characteristic_uuid_str) + 1, &characteristic_uuid);
|
||||||
if (gattlib_uuid_cmp(uuid, &characteristic_uuid) == 0) {
|
if (gattlib_uuid_cmp(uuid, &characteristic_uuid) == 0) {
|
||||||
break;
|
// We found the right characteristic, now we check if it's the right device.
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
OrgBluezGattService1* service = org_bluez_gatt_service1_proxy_new_for_bus_sync (
|
||||||
|
G_BUS_TYPE_SYSTEM,
|
||||||
|
G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
|
||||||
|
"org.bluez",
|
||||||
|
org_bluez_gatt_characteristic1_get_service(characteristic),
|
||||||
|
NULL,
|
||||||
|
&error);
|
||||||
|
|
||||||
|
if (service) {
|
||||||
|
const bool found = !strcmp(conn_context->device_object_path, org_bluez_gatt_service1_get_device(service));
|
||||||
|
|
||||||
|
g_object_unref(service);
|
||||||
|
|
||||||
|
if (found) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_unref(characteristic);
|
g_object_unref(characteristic);
|
||||||
|
@ -776,7 +796,7 @@ int gattlib_discover_desc(gatt_connection_t* connection, gattlib_descriptor_t**
|
||||||
}
|
}
|
||||||
|
|
||||||
int gattlib_read_char_by_uuid(gatt_connection_t* connection, uuid_t* uuid, void* buffer, size_t* buffer_len) {
|
int gattlib_read_char_by_uuid(gatt_connection_t* connection, uuid_t* uuid, void* buffer, size_t* buffer_len) {
|
||||||
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(uuid);
|
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(connection, uuid);
|
||||||
if (characteristic == NULL) {
|
if (characteristic == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -815,7 +835,7 @@ int gattlib_read_char_by_uuid(gatt_connection_t* connection, uuid_t* uuid, void*
|
||||||
}
|
}
|
||||||
|
|
||||||
int gattlib_read_char_by_uuid_async(gatt_connection_t* connection, uuid_t* uuid, gatt_read_cb_t gatt_read_cb) {
|
int gattlib_read_char_by_uuid_async(gatt_connection_t* connection, uuid_t* uuid, gatt_read_cb_t gatt_read_cb) {
|
||||||
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(uuid);
|
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(connection, uuid);
|
||||||
if (characteristic == NULL) {
|
if (characteristic == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -851,7 +871,7 @@ int gattlib_read_char_by_uuid_async(gatt_connection_t* connection, uuid_t* uuid,
|
||||||
}
|
}
|
||||||
|
|
||||||
int gattlib_write_char_by_uuid(gatt_connection_t* connection, uuid_t* uuid, const void* buffer, size_t buffer_len) {
|
int gattlib_write_char_by_uuid(gatt_connection_t* connection, uuid_t* uuid, const void* buffer, size_t buffer_len) {
|
||||||
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(uuid);
|
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(connection, uuid);
|
||||||
if (characteristic == NULL) {
|
if (characteristic == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -918,7 +938,7 @@ gboolean on_handle_characteristic_property_change(
|
||||||
}
|
}
|
||||||
|
|
||||||
int gattlib_notification_start(gatt_connection_t* connection, const uuid_t* uuid) {
|
int gattlib_notification_start(gatt_connection_t* connection, const uuid_t* uuid) {
|
||||||
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(uuid);
|
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(connection, uuid);
|
||||||
if (characteristic == NULL) {
|
if (characteristic == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -940,7 +960,7 @@ int gattlib_notification_start(gatt_connection_t* connection, const uuid_t* uuid
|
||||||
}
|
}
|
||||||
|
|
||||||
int gattlib_notification_stop(gatt_connection_t* connection, const uuid_t* uuid) {
|
int gattlib_notification_stop(gatt_connection_t* connection, const uuid_t* uuid) {
|
||||||
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(uuid);
|
OrgBluezGattCharacteristic1 *characteristic = get_characteristic_from_uuid(connection, uuid);
|
||||||
if (characteristic == NULL) {
|
if (characteristic == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue