From 2e845b5ee2f7dbdbccc17a77e61bef50483dcd86 Mon Sep 17 00:00:00 2001 From: Andrew Zaborowski Date: Wed, 13 Jul 2016 04:29:50 +0200 Subject: [PATCH] wiphy: Powered property setter --- src/wiphy.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/wiphy.c b/src/wiphy.c index d72f119b..c6c60708 100644 --- a/src/wiphy.c +++ b/src/wiphy.c @@ -564,10 +564,40 @@ static bool wiphy_property_get_powered(struct l_dbus *dbus, return true; } +static struct l_dbus_message *wiphy_property_set_powered(struct l_dbus *dbus, + struct l_dbus_message *message, + struct l_dbus_message_iter *new_value, + l_dbus_property_complete_cb_t complete, + void *user_data) +{ + struct wiphy *wiphy = user_data; + bool old_powered, new_powered; + + if (!l_dbus_message_iter_get_variant(new_value, "b", &new_powered)) + return dbus_error_invalid_args(message); + + old_powered = !wiphy->soft_rfkill && !wiphy->hard_rfkill; + + if (old_powered == new_powered) + goto done; + + if (wiphy->hard_rfkill) + return dbus_error_not_available(message); + + if (!rfkill_set_soft_state(wiphy->id, !new_powered)) + return dbus_error_failed(message); + +done: + complete(dbus, message, NULL); + + return NULL; +} + static void setup_wiphy_interface(struct l_dbus_interface *interface) { l_dbus_interface_property(interface, "Powered", 0, "b", - wiphy_property_get_powered, NULL); + wiphy_property_get_powered, + wiphy_property_set_powered); } bool wiphy_init(struct l_genl_family *in)