diff --git a/proximity/monitor.c b/proximity/monitor.c
index 824a87c..2d405be 100644
--- a/proximity/monitor.c
+++ b/proximity/monitor.c
struct monitor {
struct btd_device *device;
GAttrib *attrib;
+ DBusConnection *conn;
struct att_range *linkloss;
struct att_range *txpower;
struct att_range *immediate;
&uuid, tx_power_handle_cb, monitor);
}
+static void immediate_written(gpointer user_data)
+{
+ struct monitor *monitor = user_data;
+ const char *path = device_get_path(monitor->device);
+
+ g_free(monitor->fallbacklevel);
+ monitor->fallbacklevel = NULL;
+
+ emit_property_changed(monitor->conn, path, PROXIMITY_INTERFACE,
+ "ImmediateAlertLevel",
+ DBUS_TYPE_STRING, &monitor->immediatelevel);
+}
+
static void write_immediate_alert(struct monitor *monitor)
{
uint8_t value = str2level(monitor->immediatelevel);
gatt_write_cmd(monitor->attrib, monitor->immediatehandle, &value, 1,
- NULL, NULL);
- g_free(monitor->fallbacklevel);
- monitor->fallbacklevel = NULL;
+ immediate_written, monitor);
}
static void immediate_handle_cb(GSList *characteristics, guint8 status,
const char *level, void *data)
{
struct monitor *monitor = data;
- const gchar *path = device_get_path(monitor->device);
if (!level_is_valid(level))
return btd_error_invalid_args(msg);
monitor->immediatelevel = g_strdup(level);
- emit_property_changed(conn, path, PROXIMITY_INTERFACE,
- "ImmediateAlertLevel",
- DBUS_TYPE_STRING, &level);
-
return dbus_message_new_method_return(msg);
}
if (monitor->attrib)
g_attrib_unref(monitor->attrib);
+ dbus_connection_unref(monitor->conn);
btd_device_unref(monitor->device);
g_free(monitor->linkloss);
g_free(monitor->immediate);
monitor = g_new0(struct monitor, 1);
monitor->device = btd_device_ref(device);
+ monitor->conn = dbus_connection_ref(conn);
monitor->linklosslevel = (level ? : g_strdup("none"));
monitor->signallevel = g_strdup("unknown");