diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-07-15 10:06:40 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-07-15 10:06:40 +0200 |
commit | 8d64e62390220969373a404f344f012075770cb1 (patch) | |
tree | 6a1c37725d7cc68581e8cee3f72d78c7f7609cb8 /src/device.c | |
parent | 16200f1b1c0fc2eadd5c16703924a1345b3dfdb5 (diff) | |
download | connman-8d64e62390220969373a404f344f012075770cb1.tar.gz connman-8d64e62390220969373a404f344f012075770cb1.tar.bz2 connman-8d64e62390220969373a404f344f012075770cb1.zip |
Fix missing Powered property changed signals
Diffstat (limited to 'src/device.c')
-rw-r--r-- | src/device.c | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/src/device.c b/src/device.c index a7cf31ec..e74d9b04 100644 --- a/src/device.c +++ b/src/device.c @@ -199,6 +199,32 @@ static int set_carrier(struct connman_device *device, connman_bool_t carrier) return set_connected(device, carrier); } +static int powered_changed(struct connman_device *device) +{ + DBusMessage *signal; + DBusMessageIter entry, value; + const char *key = "Powered"; + + signal = dbus_message_new_signal(device->element.path, + CONNMAN_DEVICE_INTERFACE, "PropertyChanged"); + if (signal == NULL) + return -ENOMEM; + + dbus_message_iter_init_append(signal, &entry); + + dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + + dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, + DBUS_TYPE_BOOLEAN_AS_STRING, &value); + dbus_message_iter_append_basic(&value, DBUS_TYPE_BOOLEAN, + &device->powered); + dbus_message_iter_close_container(&entry, &value); + + g_dbus_send_message(connection, signal); + + return 0; +} + static int set_powered(struct connman_device *device, connman_bool_t powered) { struct connman_device_driver *driver = device->driver; @@ -206,6 +232,9 @@ static int set_powered(struct connman_device *device, connman_bool_t powered) DBG("device %p powered %d", device, powered); + if (device->powered == powered) + return -EALREADY; + if (!driver) return -EINVAL; @@ -227,8 +256,10 @@ static int set_powered(struct connman_device *device, connman_bool_t powered) err = -EINVAL; } - if (err == 0) + if (err == 0) { device->powered = powered; + powered_changed(device); + } return err; } @@ -1295,10 +1326,6 @@ connman_bool_t connman_device_get_secondary(struct connman_device *device) int connman_device_set_powered(struct connman_device *device, connman_bool_t powered) { - DBusMessage *signal; - DBusMessageIter entry, value; - const char *key = "Powered"; - DBG("driver %p powered %d", device, powered); if (device->timeout > 0) { @@ -1322,21 +1349,7 @@ int connman_device_set_powered(struct connman_device *device, if (device->registered == FALSE) return 0; - signal = dbus_message_new_signal(device->element.path, - CONNMAN_DEVICE_INTERFACE, "PropertyChanged"); - if (signal == NULL) - return 0; - - dbus_message_iter_init_append(signal, &entry); - - dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); - - dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, - DBUS_TYPE_BOOLEAN_AS_STRING, &value); - dbus_message_iter_append_basic(&value, DBUS_TYPE_BOOLEAN, &powered); - dbus_message_iter_close_container(&entry, &value); - - g_dbus_send_message(connection, signal); + powered_changed(device); if (powered == FALSE) return 0; |