DPM support
[platform/core/system/storaged.git] / src / block / block.c
index 1791473..1e4a626 100644 (file)
@@ -191,6 +191,9 @@ static int dev_internal = -1;
 static char dev_internal_scsi = '\0';
 static char dev_internal_emul = '\0';
 
+static int block_start(void *data);
+static int block_stop(void *data);
+
 static int add_operation(struct block_device *bdev,
                enum block_dev_operation operation,
                dbus_method_reply_handle_h reply_handle, void *data);
@@ -3464,6 +3467,61 @@ out:
        return reply;
 }
 
+
+static DBusMessage *request_control_block(dbus_method_reply_handle_h reply_handle,
+               DBusMessage *msg)
+{
+       int ret;
+       int enable;
+       DBusMessage *reply;
+       DBusMessageIter iter;
+
+       ret = dbus_message_get_args(msg, NULL,
+                       DBUS_TYPE_INT32, &enable,
+                       DBUS_TYPE_INVALID);
+       if (!ret) {
+               ret = -1;
+               goto out;
+       }
+
+       if (enable == 1) {
+               _I("control block Enable");
+               block_start(NULL);
+       } else if (enable == 0) {
+               _I("control block Disable");
+               block_stop(NULL);
+       } else {
+               _E("control block : Wrong request by client");
+               ret = -1;
+               goto out;
+       }
+
+out:
+       reply = dbus_message_new_method_return(msg);
+       dbus_message_iter_init_append(reply, &iter);
+       dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
+
+       return reply;
+}
+
+static DBusMessage *request_getcontrol_block(dbus_method_reply_handle_h reply_handle,
+               DBusMessage *msg)
+{
+       int is_enabled;
+       DBusMessage *reply;
+       DBusMessageIter iter;
+
+       _I("getcontrol block");
+
+       is_enabled = block_control;
+
+       reply = dbus_message_new_method_return(msg);
+       dbus_message_iter_init_append(reply, &iter);
+       dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &is_enabled);
+
+       return reply;
+}
+
 /*
   Method name      Method call format string  Reply format string
 { "ShowDeviceList",                      NULL,               NULL, request_show_device_list },
@@ -3491,6 +3549,8 @@ static const dbus_method_s manager_methods[] = {
        { "PrivateMount",           "is", request_private_mount_block },
        { "PrivateUnmount",         "ii", request_private_unmount_block },
        { "CheckSpeed",              "i", request_check_speed },
+       { "Control",                 "i", request_control_block },
+       { "GetControl",              "i", request_getcontrol_block },
 };
 
 static dbus_interface_s block_interface = {