diff --git a/client/advertising.c b/client/advertising.c
index 696621b..72c4ccb 100644
--- a/client/advertising.c
+++ b/client/advertising.c
}
}
-void ad_advertise_uuids(const char *arg)
+void ad_advertise_uuids(DBusConnection *conn, const char *arg)
{
g_strfreev(ad.uuids);
ad.uuids = NULL;
}
ad.uuids_len = g_strv_length(ad.uuids);
+
+ g_dbus_emit_property_changed(conn, AD_PATH, AD_IFACE, "ServiceUUIDs");
}
static void ad_clear_service(void)
memset(&ad.service, 0, sizeof(ad.service));
}
-void ad_advertise_service(const char *arg)
+void ad_advertise_service(DBusConnection *conn, const char *arg)
{
wordexp_t w;
unsigned int i;
data->len++;
}
+ g_dbus_emit_property_changed(conn, AD_PATH, AD_IFACE, "ServiceData");
+
done:
wordfree(&w);
}
memset(&ad.manufacturer, 0, sizeof(ad.manufacturer));
}
-void ad_advertise_manufacturer(const char *arg)
+void ad_advertise_manufacturer(DBusConnection *conn, const char *arg)
{
wordexp_t w;
unsigned int i;
data->len++;
}
+ g_dbus_emit_property_changed(conn, AD_PATH, AD_IFACE,
+ "ManufacturerData");
+
done:
wordfree(&w);
}
-
-void ad_advertise_tx_power(bool value)
+void ad_advertise_tx_power(DBusConnection *conn, bool value)
{
+ if (ad.tx_power == value)
+ return;
+
ad.tx_power = value;
+
+ g_dbus_emit_property_changed(conn, AD_PATH, AD_IFACE, "Includes");
}
-void ad_advertise_name(bool value)
+void ad_advertise_name(DBusConnection *conn, bool value)
{
+ if (ad.name == value)
+ return;
+
ad.name = value;
if (!value)
free(ad.local_name);
+
+ g_dbus_emit_property_changed(conn, AD_PATH, AD_IFACE, "Includes");
}
-void ad_advertise_local_name(const char *name)
+void ad_advertise_local_name(DBusConnection *conn, const char *name)
{
+ if (ad.local_name && !strcmp(name, ad.local_name))
+ return;
+
free(ad.local_name);
ad.local_name = strdup(name);
+
+ g_dbus_emit_property_changed(conn, AD_PATH, AD_IFACE, "LocalName");
}
-void ad_advertise_appearance(bool value)
+void ad_advertise_appearance(DBusConnection *conn, bool value)
{
+ if (ad.appearance == value)
+ return;
+
ad.appearance = value;
if (!value)
ad.local_appearance = UINT16_MAX;
+
+ g_dbus_emit_property_changed(conn, AD_PATH, AD_IFACE, "Includes");
}
-void ad_advertise_local_appearance(uint16_t value)
+void ad_advertise_local_appearance(DBusConnection *conn, uint16_t value)
{
+ if (ad.local_appearance == value)
+ return;
+
ad.local_appearance = value;
+
+ g_dbus_emit_property_changed(conn, AD_PATH, AD_IFACE, "Appearance");
}
diff --git a/client/advertising.h b/client/advertising.h
index 5ea57ad..6868518 100644
--- a/client/advertising.h
+++ b/client/advertising.h
void ad_register(DBusConnection *conn, GDBusProxy *manager, const char *type);
void ad_unregister(DBusConnection *conn, GDBusProxy *manager);
-void ad_advertise_uuids(const char *arg);
-void ad_advertise_service(const char *arg);
-void ad_advertise_manufacturer(const char *arg);
-void ad_advertise_tx_power(bool value);
-void ad_advertise_name(bool value);
-void ad_advertise_appearance(bool value);
-void ad_advertise_local_name(const char *name);
-void ad_advertise_local_appearance(uint16_t value);
+void ad_advertise_uuids(DBusConnection *conn, const char *arg);
+void ad_advertise_service(DBusConnection *conn, const char *arg);
+void ad_advertise_manufacturer(DBusConnection *conn, const char *arg);
+void ad_advertise_tx_power(DBusConnection *conn, bool value);
+void ad_advertise_name(DBusConnection *conn, bool value);
+void ad_advertise_appearance(DBusConnection *conn, bool value);
+void ad_advertise_local_name(DBusConnection *conn, const char *name);
+void ad_advertise_local_appearance(DBusConnection *conn, uint16_t value);
diff --git a/client/main.c b/client/main.c
index 6b1c73f..276e7f1 100644
--- a/client/main.c
+++ b/client/main.c
static void cmd_set_advertise_uuids(const char *arg)
{
- ad_advertise_uuids(arg);
+ ad_advertise_uuids(dbus_conn, arg);
}
static void cmd_set_advertise_service(const char *arg)
{
- ad_advertise_service(arg);
+ ad_advertise_service(dbus_conn, arg);
}
static void cmd_set_advertise_manufacturer(const char *arg)
{
- ad_advertise_manufacturer(arg);
+ ad_advertise_manufacturer(dbus_conn, arg);
}
static void cmd_set_advertise_tx_power(const char *arg)
}
if (strcmp(arg, "on") == 0 || strcmp(arg, "yes") == 0) {
- ad_advertise_tx_power(true);
+ ad_advertise_tx_power(dbus_conn, true);
return;
}
if (strcmp(arg, "off") == 0 || strcmp(arg, "no") == 0) {
- ad_advertise_tx_power(false);
+ ad_advertise_tx_power(dbus_conn, false);
return;
}
}
if (strcmp(arg, "on") == 0 || strcmp(arg, "yes") == 0) {
- ad_advertise_name(true);
+ ad_advertise_name(dbus_conn, true);
return;
}
if (strcmp(arg, "off") == 0 || strcmp(arg, "no") == 0) {
- ad_advertise_name(false);
+ ad_advertise_name(dbus_conn, false);
return;
}
- ad_advertise_local_name(arg);
+ ad_advertise_local_name(dbus_conn, arg);
}
static void cmd_set_advertise_appearance(const char *arg)
}
if (strcmp(arg, "on") == 0 || strcmp(arg, "yes") == 0) {
- ad_advertise_appearance(true);
+ ad_advertise_appearance(dbus_conn, true);
return;
}
if (strcmp(arg, "off") == 0 || strcmp(arg, "no") == 0) {
- ad_advertise_appearance(false);
+ ad_advertise_appearance(dbus_conn, false);
return;
}
return;
}
- ad_advertise_local_appearance(value);
+ ad_advertise_local_appearance(dbus_conn, value);
}
static const struct {