diff options
-rw-r--r-- | src/adapter.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/adapter.c b/src/adapter.c index eb40f854..b4a74a36 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -597,6 +597,36 @@ done: return dbus_message_new_method_return(msg); } +static DBusMessage *set_powered(DBusConnection *conn, DBusMessage *msg, + gboolean powered, void *data) +{ + struct btd_adapter *adapter = data; + uint8_t mode; + + mode = powered ? get_mode(&adapter->bdaddr, "on") : MODE_OFF; + + if (mode == adapter->mode) + return dbus_message_new_method_return(msg); + + return set_mode(conn, msg, mode, data); +} + +static DBusMessage *set_discoverable(DBusConnection *conn, DBusMessage *msg, + gboolean discoverable, void *data) +{ + struct btd_adapter *adapter = data; + const char *strmode; + uint8_t mode; + + strmode = discoverable ? "discoverable" : "connectable"; + mode = get_mode(&adapter->bdaddr, strmode); + + if (mode == adapter->mode) + return dbus_message_new_method_return(msg); + + return set_mode(conn, msg, mode, data); +} + static struct session_req *find_session(GSList *list, DBusMessage *msg) { GSList *l; @@ -1645,6 +1675,24 @@ static DBusMessage *set_property(DBusConnection *conn, return set_mode(conn, msg, get_mode(&adapter->bdaddr, mode), data); + } else if (g_str_equal("Powered", property)) { + gboolean powered; + + if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_BOOLEAN) + return invalid_args(msg); + + dbus_message_iter_get_basic(&sub, &powered); + + return set_powered(conn, msg, powered, data); + } else if (g_str_equal("Discoverable", property)) { + gboolean discoverable; + + if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_BOOLEAN) + return invalid_args(msg); + + dbus_message_iter_get_basic(&sub, &discoverable); + + return set_discoverable(conn, msg, discoverable, data); } return invalid_args(msg); |