diff --git a/src/attio.h b/src/attio.h
index fad8516..7935dcd 100644
--- a/src/attio.h
+++ b/src/attio.h
guint btd_device_add_attio_callback(struct btd_device *device,
attio_connect_cb func,
gpointer user_data);
+
+gboolean btd_device_remove_attio_callback(struct btd_device *device, guint id);
diff --git a/src/device.c b/src/device.c
index ea9c0cd..ab21b3a 100644
--- a/src/device.c
+++ b/src/device.c
return attio->id;
}
+
+static int attio_id_cmp(gconstpointer a, gconstpointer b)
+{
+ const struct attio_data *attio = a;
+ guint id = GPOINTER_TO_UINT(b);
+
+ return attio->id - id;
+}
+
+gboolean btd_device_remove_attio_callback(struct btd_device *device, guint id)
+{
+ struct attio_data *attio;
+ GSList *l;
+
+ l = g_slist_find_custom(device->attios, GUINT_TO_POINTER(id),
+ attio_id_cmp);
+ if (!l)
+ return FALSE;
+
+ attio = l->data;
+
+ device->attios = g_slist_remove(device->attios, attio);
+
+ g_free(attio);
+
+ return TRUE;
+}