diff --git a/client/gatt.c b/client/gatt.c
index e6f37ae..2756efd 100644
--- a/client/gatt.c
+++ b/client/gatt.c
write_proxy = proxy;
}
+void gatt_release_write(GDBusProxy *proxy, const char *arg)
+{
+ if (proxy != write_proxy || write_fd < 0) {
+ rl_printf("Write not acquired\n");
+ return;
+ }
+
+ write_proxy = NULL;
+ close(write_fd);
+ write_fd = -1;
+ write_mtu = 0;
+}
+
static void notify_reply(DBusMessage *message, void *user_data)
{
bool enable = GPOINTER_TO_UINT(user_data);
diff --git a/client/gatt.h b/client/gatt.h
index 713d34f..6827057 100644
--- a/client/gatt.h
+++ b/client/gatt.h
void gatt_notify_attribute(GDBusProxy *proxy, bool enable);
void gatt_acquire_write(GDBusProxy *proxy, const char *arg);
+void gatt_release_write(GDBusProxy *proxy, const char *arg);
void gatt_add_manager(GDBusProxy *proxy);
void gatt_remove_manager(GDBusProxy *proxy);
diff --git a/client/main.c b/client/main.c
index 79f61a1..7688a23 100644
--- a/client/main.c
+++ b/client/main.c
gatt_acquire_write(default_attr, arg);
}
+static void cmd_release_write(const char *arg)
+{
+ if (!default_attr) {
+ rl_printf("No attribute selected\n");
+ return;
+ }
+
+ gatt_release_write(default_attr, arg);
+}
+
static void cmd_notify(const char *arg)
{
dbus_bool_t enable;
"Write attribute value" },
{ "acquire-write", NULL, cmd_acquire_write,
"Acquire Write file descriptor" },
+ { "release-write", NULL, cmd_release_write,
+ "Release Write file descriptor" },
{ "notify", "<on/off>", cmd_notify, "Notify attribute value" },
{ "register-application", "[UUID ...]", cmd_register_app,
"Register profile to connect" },