diff --git a/dbus/gattlib_char.c b/dbus/gattlib_char.c index 33dadb0..670ecd2 100644 --- a/dbus/gattlib_char.c +++ b/dbus/gattlib_char.c @@ -439,3 +439,7 @@ int gattlib_write_without_response_char_by_handle(gatt_connection_t* connection, g_object_unref(dbus_characteristic.gatt); return ret; } + +void gattlib_characteristic_free_value(void *ptr) { + free(ptr); +} diff --git a/examples/gatttool/gatttool.c b/examples/gatttool/gatttool.c index 91b1b6e..982f4b0 100644 --- a/examples/gatttool/gatttool.c +++ b/examples/gatttool/gatttool.c @@ -266,7 +266,7 @@ static gboolean characteristics_read(gpointer user_data) } g_print("\n"); - free(buffer); + gattlib_characteristic_free_value(buffer); return TRUE; } } diff --git a/examples/read_write/read_write.c b/examples/read_write/read_write.c index 5b58295..9c8e243 100644 --- a/examples/read_write/read_write.c +++ b/examples/read_write/read_write.c @@ -107,7 +107,7 @@ int main(int argc, char *argv[]) { } printf("\n"); - free(buffer); + gattlib_characteristic_free_value(buffer); } else { ret = gattlib_write_char_by_uuid(connection, &g_uuid, &value_data, sizeof(value_data)); if (ret != GATTLIB_SUCCESS) { diff --git a/examples/read_write_memory/read_write_memory.c b/examples/read_write_memory/read_write_memory.c index b9adb3f..aa36584 100644 --- a/examples/read_write_memory/read_write_memory.c +++ b/examples/read_write_memory/read_write_memory.c @@ -83,7 +83,7 @@ void *connect_ble(void *arg) { } printf("\n"); - free(buffer); + gattlib_characteristic_free_value(buffer); } } else { ret = gattlib_write_char_by_uuid(connection, &m_uuid, ¶ms->value_data, sizeof(params->value_data)); diff --git a/gattlib-py/gattlib/__init__.py b/gattlib-py/gattlib/__init__.py index 14e8b6e..9e0d0f9 100644 --- a/gattlib-py/gattlib/__init__.py +++ b/gattlib-py/gattlib/__init__.py @@ -116,6 +116,10 @@ gattlib_discover_char.argtypes = [c_void_p, POINTER(POINTER(GattlibCharacteristi gattlib_read_char_by_uuid = gattlib.gattlib_read_char_by_uuid gattlib_read_char_by_uuid.argtypes = [c_void_p, POINTER(GattlibUuid), POINTER(c_void_p), POINTER(c_size_t)] +# void gattlib_characteristic_free_value(void* buffer); +gattlib_characteristic_free_value = gattlib.gattlib_characteristic_free_value +gattlib_characteristic_free_value.argtypes = [c_void_p] + # int gattlib_write_char_by_uuid(gatt_connection_t* connection, uuid_t* uuid, const void* buffer, size_t buffer_len) gattlib_write_char_by_uuid = gattlib.gattlib_write_char_by_uuid gattlib_write_char_by_uuid.argtypes = [c_void_p, POINTER(GattlibUuid), c_void_p, c_size_t] diff --git a/gattlib-py/gattlib/gatt.py b/gattlib-py/gattlib/gatt.py index d2cbd13..9656805 100644 --- a/gattlib-py/gattlib/gatt.py +++ b/gattlib-py/gattlib/gatt.py @@ -87,6 +87,7 @@ class GattCharacteristic(): for i in range(_buffer_len.value): value[i] = c_bytearray.contents[i] + gattlib_characteristic_free_value(_buffer) return value def write(self, data, without_response=False): diff --git a/include/gattlib.h b/include/gattlib.h index c1ec8eb..557d712 100644 --- a/include/gattlib.h +++ b/include/gattlib.h @@ -464,6 +464,13 @@ 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); +/** + * @brief Free buffer allocated by the characteristic reading to store the value + * + * @param buffer Buffer to free + */ +void gattlib_characteristic_free_value(void *ptr); + /** * @brief Function to write to the GATT characteristic UUID *